Lattice
A workspace for your research.
Forms is open-source forms. Clone, run, and collect: anywhere.
ProductivityTypeScript · HTMLGitHub @Nde-DilanOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗dForms is a form builder for teams that sell. A respondent answers a few questions; dForms scores each answer, decides which outcome they reach (a thank-you message, a redirect, or a calendar to book a call), and delivers the lead to HubSpot or any webhook. You see where people drop off and which answers convert.
It is a Turborepo monorepo: a Next.js 16 web app (public forms, admin and builder) and a NestJS API. Postgres is the source of truth in CI and production; SQLite lets you clone and run it in a minute with no infrastructure.
https://github.com/user-attachments/assets/d78fb38b-31ca-4845-9a46-4a5457a28910
| Build | 13 question types: short and long text, name, email (with a work-email check), phone, URL, dropdown, single and multiple choice (list or cards, with emoji or logos), slider, file upload, message, reveal screen and an embedded scheduler. Slides or one-page layout, live WYSIWYG canvas, desktop and mobile preview. |
| Logic | Show/hide conditions and jumps on any answer, numeric operators (equal, greater, less, between), hidden fields filled from ?param=value, and @ recall of earlier answers in question text. A visual map of the whole flow. |
| Score and route | Points per option (negatives allowed), per-question scoring switch and score ranges mapped to outcomes. Each outcome shows its own message, redirects, or opens a booking step (HubSpot Meetings or Calendly). |
| Capture | Partial submissions from a point you choose, one submission per session (upgraded in place when the respondent finishes), and file answers with permanent signed links. |
| Integrations | HubSpot (contact upsert, note on the contact, a mirrored HubSpot form submission for attribution), signed JSON webhooks (HMAC-SHA256), owner and respondent emails with editable templates. Every delivery goes through a durable outbox with retries and a visible delivery history. |
| Tracking | Per-form Google Tag Manager, Meta Pixel, PostHog and HubSpot tracking code. UTM parameters are captured automatically and can be mapped to CRM properties. |
| Design | Theme presets, any brand color, 9 font families or your own font, background styles, corner radius, button and progress styles, logo, cover screen with badge, headline and trust line, and a workspace brand kit. |
| Analytics | Views, starts, submissions, completion rate, time to complete, partial submits, daily trends and question-by-question drop-off. |
| Share | Readable links (/{account}/f/{slug}) with editable slugs, a QR code, and an embed.js helper that auto-resizes iframes and carries redirects to the host page. |
| Operate | Responses table with header filters, search, time zone and CSV export; folders; workspaces with members and roles; Cloudflare Turnstile spam protection; English and Spanish across the app and the forms. |
The brand in these screenshots, "Pulse", is fictional, and so are the respondents.
git clone https://github.com/Dapta-Tech/dapta-forms.git dforms && cd dforms
pnpm install # Node >= 20.9, pnpm >= 10
pnpm dev # builds packages, creates and seeds a SQLite DB, starts both apps
Then open:
/acme/f/lead-qualifier. The
admin at /admin signs you in as the seeded demo user./openapi.json).No Docker, no Postgres, no accounts. The database is a file at .data/dev.db,
email is log-only (notices print to the API log), and pnpm db:reset restores
the demo data.
| Mode | Command | Database | Use it for |
|---|---|---|---|
| Fast | pnpm dev | SQLite file (.data/dev.db) | Zero-infra onboarding |
| Parity | pnpm dev:pg | Postgres in Docker | The same engine as CI and production |
pnpm dev:pg starts Postgres from docker-compose.yml, migrates, seeds and runs
both apps against it. If port 5432 is taken, run PG_PORT=5433 pnpm dev:pg.
Ports, Windows shells and running each app on its own are covered in
CONTRIBUTING.md.
apps/
web/ Next.js 16 (App Router, RSC): public forms, admin, builder
api/ NestJS: public + admin API, outbox worker, OpenAPI
packages/
engine/ pure form logic: skip-logic, validation, scoring, outcomes (no I/O)
types/ zod contracts shared by web and api (form config v1, submissions, events)
db/ Drizzle schema for Postgres and SQLite, migrations, seed, repositories
destinations/ SubmissionDestination port + webhook, HubSpot and log-only adapters
notifications/ EmailProvider port + log-only, noop, SMTP and HTTP adapters
mcp/ the dForms MCP server (tools, HTTP door, agent guide), mounted by the api at /mcp
shared/ i18n (EN/ES), handle utils, growth attribution, design tokens
config/ zod env schema + shared tsconfig and prettier presets
(form_id, session_id) on both dialects. CI asserts it on
Postgres on every PR.ARCHITECTURE.md has the request-flow diagram and the
package boundaries.
This is the beginning of the README. Read the rest at the original. Read the full README ↗