FormOS
Typeform-class forms where the answers land in your own database.
A form product for people who resent renting their own leads back. Same one-question-at-a-time feel as Typeform; the answers land in an Airtable table that belongs to you, so the results dashboard is a tool you already know rather than another subscription.
- Fill in a real form — My project intake — built in FormOS, published, in use
Why this
exists.
Every form product is a mailbox you rent. Your responses live in someone else's database, the export is behind a plan tier, and the analytics view is a login your team has to learn and pay for.
The alternative — a plain web form — loses the thing that actually lifts completion rates: one question at a time, keyboard-first, no wall of fields.
So the brief was narrow: keep the runner experience, and make the storage something the customer already owns and can open in a spreadsheet-shaped UI on day one.
Everything that’s actually built.
The respondent side
- One question per screen, with enter-only animations and reduced-motion respected
- Keyboard-first: Enter to advance, A/B/C to pick an option, digits for ratings, Y/N for yes-no
- Auto-advance on single-select, and resume where you left off if the tab dies
- Eleven question types — text, long text, email, phone, number, single and multi choice, dropdown, yes-no, rating, date
The builder side
- Autosave that is gated on validity — while the form is broken, nothing saves and the indicator says exactly what is wrong
- Conditional logic, answer recall piped into later questions, and hidden fields that capture UTM parameters from the link
- Eight India-market templates, and a draft-from-a-sentence AI path
- A share panel with a copy link, a WhatsApp button, a downloadable QR code and both embed snippets
After the submit
- Owner notification and respondent confirmation emails, with answers piped into the subject and body
- HMAC-signed webhooks to anywhere you like
- View, start and complete counters per form per day
- CSV export, and an Open-in-Airtable link to the raw table
The stack,
without mystique.
Standard, boring technology your next developer will recognise. That’s the point — nothing here is a proprietary runtime you’d be locked into.
- Framework
- Next.js 16.2 App Router, React 19
- Styling
- Tailwind 4, CSS-first config
- Backend
- Airtable REST — the entire data layer
- Database server
- None. No ORM either
- Resend
- Auth
- Single creator — HMAC session cookie, constant-time comparison
- Hosting
- Vercel
The decisions that took the longest.
Anyone can list features. These are the calls that decide whether the thing survives contact with real customers and real money — explained without jargon, because you should be able to judge them without being an engineer.
- 01
Each published form owns its own table, and columns are additive forever
Publishing creates an Airtable table with one column per question. Columns are added when you add questions — they are never renamed, retyped or deleted, because the question's immutable id lives in the column description and is the join key between the form and the data. Renaming a question's wording therefore costs nothing and breaks nothing. This is the rule that makes a live form safe to edit.
- 02
One logic engine, running in three places
The rules that decide which question comes next are a single pure module. It runs in the browser to drive navigation, on the server to re-walk the path when a submission arrives, and under unit tests. Because the server re-walks it, answers to questions the respondent never actually reached are dropped rather than trusted — a hand-edited payload cannot disagree with the path.
- 03
Jumps are forward-only
A form can skip ahead, never back. That makes infinite loops impossible by construction rather than something to detect at run time. It is a smaller feature than the competition offers, and it is the reason the runner cannot hang.
- 04
Serverless freezes the moment it responds
So the email send, the webhook and the counter flush are all awaited before the response goes out, each one caught and time-bounded so none of them can fail a submission that was already recorded. Fire-and-forget work on this platform mostly does not happen — that had to shape the design rather than be discovered in production.
- 05
A webhook cannot be pointed at your own network
Webhook URLs are https-only and checked twice — once against literal private ranges when saved, and again by resolving the hostname at send time, so a public name that resolves to an internal address is refused. Redirects are not followed. Every request is HMAC-signed so the receiver can verify it came from the form.
- 06
Spam handling never tells the spammer
A honeypot field, a too-fast-to-be-human timer, a short-term memory of recent respondents and a per-IP cap all return the same cheerful success screen. Nothing bounces, so there is nothing to tune against.
- 11
- question types
- 3
- places one logic engine runs
- 8
- prebuilt templates
- 0
- database servers
FormOS is feature-complete for a single creator. Multi-tenant sign-up and payments are deliberately not built — that shape gets decided by whoever pays for it first.
Want one of these for your business?
FormOStook the shape it did because of one specific business problem. Tell me yours and I’ll tell you what it would take — or watch me drive the back end of these first.
Got a project to scope? Start there. Just want to see it working first? Book the demo.