A form builder for yourself comes down to a schema, a public page that renders it, a table of submissions and a notification. An agent can build that, including show-or-hide logic between questions, CSV export, file uploads and a webhook, in a single sitting. Tally's own free plan already has unlimited forms, so Pro only buys your own domain, no Tally branding, partial submissions and team workspaces. A copy still needs a public address, and spam on an open form is yours to fight.
Before you buildTally Free already has unlimited forms, payments, signatures and conditional logic. A DIY build mostly saves the $29 for your own domain and no branding.
Build me a self-hosted form builder to replace Tally. Requirements: - Node.js 22 + TypeScript: a Fastify API and a React front end built with Vite. `npm start` builds the UI and serves everything on http://localhost:4500; public forms live at /f/<slug>. - Storage: better-sqlite3 in ./data/forms.db: forms (slug, title, schema JSON, theme JSON, published), submissions (form, answers JSON, created_at). Uploaded files go to ./data/files/. - Editor: a vertical list of blocks added from a "/" menu and reordered by dragging (`@dnd-kit`): short text, long text, email, number, date, single choice, multiple choice, dropdown, rating 1-5, file upload (10 MB cap), heading and plain text. Each block has a required flag and a placeholder, and a live preview sits beside the editor. - Logic: per-block "show only if" rules (an earlier answer equals / contains / is empty), evaluated in the browser and again on the server, plus hidden fields read from the URL (?source=...). - Public page: one question at a time or all at once (a toggle per form), a progress bar, and either a thank-you message or a redirect URL. Validate with `zod` on the server and drop the answers of hidden blocks. - Spam: a honeypot field, `@fastify/rate-limit` per IP, and optional Cloudflare Turnstile (TURNSTILE_SECRET in .env). - After each submission: an optional email through nodemailer (SMTP settings in .env) and an optional webhook POST of the answers as JSON, signed with an HMAC header. - Results: a table per form with search and delete, and a CSV export where files appear as links. - The admin sits behind one password in .env (signed cookie); only /f/* and the submit endpoint are reachable without it. - Single user. No accounts, no telemetry, local-first. - Out of scope: payments, signatures, team workspaces, calculations, version history. - README: exposing only the public form routes (tunnel or reverse proxy), where ./data lives, and the Turnstile setup.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Tally.
Add a Google Sheets sync to the form builder in this folder. Requirements: - Per form, an optional spreadsheet id and tab name; auth with a Google service account (JSON path in .env) that I share the sheet with. - On each submission, append a row: timestamp, then one column per block in the form's order. Write the header row when the sheet is empty. - Retry failed appends 3 times with a growing delay and show failures on the form's results page. - Update the README with the service account steps (budget 20 minutes in the Google Cloud console).
Add partial submissions to the form builder in this folder. Requirements: - The public page saves answers to the server after each question under a draft id kept in the browser's local storage; reopening the form resumes where the person stopped. - Mark a draft "abandoned" after 24 hours without activity; a completed submission replaces its draft. - A Partial tab beside Results shows drafts with the last answered question, a CSV export, and a per-question drop-off count. - Update the README.
Add a payment block to the form builder in this folder. Requirements: - A block with a fixed amount and currency, or a choice block whose options carry prices. - On submit, create a Stripe Checkout session (STRIPE_SECRET_KEY in .env); store the submission as "unpaid" and mark it "paid" from a signed webhook at /stripe/webhook. - Results show a paid or unpaid badge; unpaid submissions older than 24 hours are hidden by default. - Test mode only until I switch the key. Update the README with the `stripe listen` command.
Add calculations to the form builder in this folder. Requirements: - A "calculated" block holding a formula over earlier answers, evaluated with `mathjs` in a locked-down instance (no import, createUnit or evaluate). - Choice options can carry a numeric value; the formula refers to blocks by their key. - The result can be shown to the respondent, used in a "show only if" rule, and is stored with the submission; recompute it on the server. - Update the README with three example formulas.
Free covers almost everything, so most people never pay. The $29 buys what makes a form look like yours: your own domain, no Tally name, custom CSS, plus partial submissions and shared workspaces. People pay to take Tally's branding off forms that clients and customers see.
Estimate · Runs on a free tunnel or a $5 VPS; SMTP at this volume fits free tiers. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0/workspace | $0/workspace | Unlimited forms and submissions, conditional logic and calculations, payments, signatures, file uploads, answer piping, webhooks and the Google Sheets, Notion, Airtable, Zapier and Make connections. Uploads are capped at 10 MB per file. |
| Pro | $29/workspace | $24.17/workspace | Everything in Free plus no Tally branding, custom domains, partial submissions, team collaboration with workspaces and folders, custom CSS, custom email domains, drop-off analytics, 30-day version history and no 10 MB upload cap. |
| Business | $89/workspace | $74.17/workspace | Everything in Pro plus data-retention controls, email verification and 90-day version history. |
Unlimited forms and submissions under a fair-use policy.
Yes. An AI coding agent such as Claude Code, Codex or Cursor can build a usable personal version in one session with the prompt on this page, running on your own machine.
About $29 a month on the Pro plan, $348 a year (checked 2026-10-14).
The slash-command block editor and its polish; Ready connections to Google Sheets, Notion, Airtable, Zapier and Make; Payment blocks and signatures; Calculations, answer piping and the other advanced logic; Workspaces, version history and drop-off analytics for a team. If any of those matter to you, keep paying.
Yes: OpnForm (open source), HeyForm (open source), Formbricks (open source).