Skip to content

About

A SaaS platform for building custom forms, publishing them at a public URL, and collecting/exporting responses — a lightweight, self-branded alternative to Google Forms/Typeform.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Design Custom Forms

A SaaS platform for building custom forms, publishing them at a public URL, and collecting/exporting responses — a lightweight, self-branded alternative to Google Forms/Typeform. See PRD.md for product context and docs/ARCHITECTURE.md for the technical deep dive.

Tech stack

Layer Technology
Monorepo npm workspaces + Turborepo
API Hono on Node.js, TypeScript
Web Next.js 15 (App Router), React 19
Database MariaDB/MySQL via Drizzle ORM
Auth Lucia v3 (cookie sessions) + bcrypt
Validation Zod
Email Resend
Rate limiting Redis
Export ExcelJS (XLSX)
Drag & drop dnd-kit
Testing Vitest (unit/integration), Playwright (e2e)

Repository layout

apps/
  api/      Hono API server
  web/      Next.js frontend
packages/
  db/       Drizzle schema, migrations, repositories
  types/    Shared Zod schemas and types (source of truth for DTOs)
  ui/       Shared component library (placeholder, not yet populated)

Prerequisites

  • Node.js 20+ (no version is pinned via engines/.nvmrc — Node 20.19 is known to work)
  • MariaDB/MySQL reachable locally (e.g. via Laragon)
  • Redis reachable locally (used for auth rate limiting)
  • npm 10+

Setup

npm install

# Copy env templates and adjust as needed
cp apps/api/env.example apps/api/.env
cp apps/web/env.example apps/web/.env

# Create the database (name must match DB_NAME / .env), then run migrations
npm run db:migrate

Note: the env templates are currently named env.example (no leading dot) in this repo, not the conventional .env.example.

Running

npm run dev    # turbo run dev — starts api (watch) and web (Next dev server)
npm run build  # turbo run build
npm run test   # turbo run test — vitest across all packages
npm run lint   # turbo run lint

API defaults to http://localhost:3001, web to http://localhost:3000 (configurable via PORT / NEXT_PUBLIC_API_URL / WEB_ORIGIN).

Known limitations

  • packages/ui is an empty placeholder — no shared components exist yet.

See docs/ARCHITECTURE.md for the full list.

Documentation

About

A SaaS platform for building custom forms, publishing them at a public URL, and collecting/exporting responses — a lightweight, self-branded alternative to Google Forms/Typeform.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages