How to Build a Form Builder as a Solo Developer
Complete guide to building a form builder as a solo developer - tech stack, architecture, timeline, and tips.
What You're Building
A form builder lets people create forms without writing code. Contact forms, surveys, quizzes, lead capture forms, event registrations, order forms. The market is dominated by Typeform and Google Forms, but there are profitable niches everywhere. HIPAA-compliant medical forms. Multi-step application forms. Conversational forms. Calculation forms for pricing quotes.
What surprised me when I looked into this space is how many businesses still pay $50-100/month for form tools. Forms seem simple, but the moment you need conditional logic, file uploads, payment collection, or integrations, things get complex fast. That complexity is where the value lives.
Difficulty & Timeline
| Aspect | Detail |
|---|---|
| Difficulty | Medium to Hard |
| Time to MVP | 6-8 weeks |
| Ongoing Maintenance | Medium |
| Monetization | Freemium with paid plans ($19-79/month) |
Recommended Tech Stack
React (or Vue) for the drag-and-drop form builder interface, with a Node.js or Django backend. The frontend is where most of the complexity lives. You're building a visual editor, which means drag and drop, real-time preview, and a JSON schema that represents the form structure.
For the form renderer (the public-facing part where people fill out forms), keep it lightweight. Vanilla JS or a minimal framework. Forms should load instantly and work on every device.
PostgreSQL for storing form definitions (as JSON), submissions, and user data. The current stable release is PostgreSQL 18.4, published on May 11, 2026, so a fresh project should start there. Redis for caching published forms so they load fast. Redis 8.8 is the current stable line as of late May 2026. Both versions are confirmed below in Sources.
Step-by-Step Plan
Phase 1: The Builder (Week 1-4)
This is the hard part. Build a drag-and-drop interface where users add form fields (text, email, dropdown, checkbox, file upload, etc.), reorder them, configure validation rules, and preview the result in real-time.
Store the form definition as a JSON schema. Each field is an object with a type, label, validation rules, and options. The builder writes JSON, the renderer reads JSON. This separation is important because it lets you change the builder UI without affecting published forms.
Start with basic field types. Text input, email, textarea, dropdown, checkboxes, radio buttons. Don't build conditional logic or multi-step forms yet. Get the core builder-to-renderer loop working first.
Phase 2: Submissions & Responses (Week 4-6)
Build the submission handling. When someone fills out a form, the data gets validated server-side and stored. Send email notifications to the form owner. Show submissions in a table view in the dashboard with search, filtering, and CSV export.
Add basic form analytics. How many people viewed the form, how many started filling it out, how many completed it. This completion funnel data is incredibly valuable to form owners and it's not hard to track.
Phase 3: Advanced Features & Launch (Week 6-8)
Add conditional logic (show/hide fields based on previous answers). Build multi-step forms with a progress bar. Add custom styling options so forms can match the user's brand. These are the features that separate a toy from a tool people pay for.
Set up embeddable forms (iframe or JavaScript snippet that users paste into their website). This is the primary distribution mechanism. Every embedded form is your product running on someone else's website.
Key Features to Build First
Drag-and-drop builder. The visual editor is your product. It needs to feel smooth and intuitive. Use a library like dnd-kit (React) or SortableJS. As of late May 2026, the React option is @dnd-kit/core 6.3.1, pulling roughly 15.7 million npm downloads a week and around 17.2K GitHub stars, which makes it the default modern choice. The framework-agnostic option is SortableJS 1.15.7 at about 3.5 million weekly downloads and roughly 31.1K stars, useful if your builder is not React. All figures are cited in Sources.
Form renderer. A lightweight, responsive component that reads your JSON schema and renders the form. Must work on mobile and load fast.
Submission storage and notifications. Store responses, email the form owner, show a submission table in the dashboard.
Embeddable snippet. A JavaScript embed code or iframe that users can paste into any website. This is how forms get distributed.
Basic analytics. Views, starts, completions. Simple funnel data that form owners love.
Architecture Overview
Builder App (React)
└── Outputs form JSON schema
|
API (Node.js / Django)
├── Form CRUD (store JSON schemas)
├── Submission handler (validate + store)
├── Notification service (email on submission)
├── Analytics tracking
└── Embed code generator
Form Renderer (Lightweight JS)
<- Reads JSON schema from CDN/API
-> Submits data to API
Storage
├── PostgreSQL (forms, submissions, users)
├── Redis (cached form schemas)
└── S3/R2 (file upload storage)
Common Pitfalls
Overcomplicating the builder. The visual editor can become a black hole of complexity. Set strict limits on what v1 supports. No conditional logic, no calculations, no multi-page forms in the first release. Get the basic builder working perfectly, then add complexity incrementally.
Building your own drag-and-drop from scratch. Don't. Use dnd-kit or SortableJS. Drag and drop is one of those things that seems simple and then takes three months to get right with keyboard accessibility, touch support, and edge cases. One thing to know if you read older tutorials. The popular react-beautiful-dnd package is now deprecated by Atlassian and its repository is archived on GitHub, so do not start a new build on it. The community-maintained fork @hello-pangea/dnd (currently 18.0.1, about 2.2 million weekly downloads) is the drop-in successor if you specifically want that API. For a greenfield builder, dnd-kit is the cleaner long-term bet.
Ignoring mobile. Forms get filled out on phones. A lot. Your form renderer must be mobile-first. But your builder doesn't have to be. Most people create forms on desktop. Optimize accordingly.
Storing submissions in a rigid schema. Forms are dynamic. Field types and names change. Store submissions as JSON blobs alongside the form version they were submitted against. Don't try to create database columns for each form field.
Not handling spam. Public forms attract bots. Add honeypot fields, rate limiting, and optional reCAPTCHA from the start. Your users will blame you when their inbox fills up with spam submissions, not the bots.
Timeline Estimate
| Phase | Time | What You're Doing |
|---|---|---|
| Visual builder | 4 weeks | Drag-and-drop, field types, JSON schema |
| Submissions & analytics | 2 weeks | Response storage, notifications, basic stats |
| Advanced features & launch | 2 weeks | Conditional logic, embeds, billing |
| Total | 6-8 weeks | Ready for users to create forms |
Is This Worth Building?
The form builder market is big and profitable. Typeform is tracked at roughly $152.7M in annual revenue with about 130K customers. Jotform announced more than 35 million users at its 20-year anniversary in February 2026, up from the 25 million it reported back in 2024. But these tools are generalists. The opportunity for a solo developer is building a form tool for a specific use case that the big players serve poorly.
Medical intake forms with HIPAA compliance. Calculation forms that give instant quotes (roofing, moving, insurance). Multi-step application forms for universities or grants. Quiz funnels for marketing agencies. Each of these is a $19-79/month product with thousands of potential customers who are currently hacking together solutions with generic tools.
Pick a niche, understand exactly what forms they need, and build the best form tool for that specific audience. The generalist form builder war is over. The niche form builder opportunity is wide open.
Common Errors and Fixes
These are the snags that eat the most time when wiring up a dnd-kit builder. Each is grounded in the official docs, not guesswork.
Items render but nothing moves when you drag. DndContext only emits events. It does not move anything for you. You have to read the transform value from useDraggable and apply it as a CSS transform on the element. If you forget that step, drag fires correctly and the field just sits still. See the pointer sensor docs in Sources.
The list snaps back after you drop a field. Sort order is your responsibility, not the library's. useSortable and SortableContext only track which items exist and in what order. You must update your own array inside onDragEnd. If you never call your setItems reorder there, every drop reverts. This is the single most common dnd-kit support thread.
Drag fires on a simple click and blocks your buttons. Add an activation constraint to the sensor. The distance constraint requires the pointer to move a set number of pixels before a drag starts, and the delay constraint requires the pointer to be held for a set number of milliseconds first. Both let a plain click on a field's edit or delete button through without triggering a drag.
Touch drag does nothing or hijacks page scroll on mobile. The default PointerSensor covers mouse and touch in most browsers, but touch devices often need the TouchSensor added explicitly, and iOS Safari blocks touch drag while the page can scroll. Configure the touch activation constraint so a deliberate press starts the drag and a normal swipe still scrolls the page.
Keyboard users cannot reorder fields. You usually do not need to build this yourself. dnd-kit ships a KeyboardSensor that is enabled by default, so a focused field can be picked up with space or enter, moved with the arrow keys, dropped with space or enter, and cancelled with escape. It also renders an off-screen live region for screen-reader announcements. If keyboard drag is dead, check that you did not strip the default sensors when you customized them.
Sources
All sources checked on 2026-05-30.
@dnd-kit/coreversion 6.3.1: registry.npmjs.org/@dnd-kit/core/latest- dnd-kit weekly downloads (about 15.7M) and SortableJS weekly downloads (about 3.5M): api.npmjs.org/downloads/point/last-week/@dnd-kit/core, api.npmjs.org/downloads/point/last-week/sortablejs
- dnd-kit GitHub stars (about 17.2K): github.com/clauderic/dnd-kit
- SortableJS version 1.15.7 and stars (about 31.1K): registry.npmjs.org/sortablejs/latest, github.com/SortableJS/Sortable
react-beautiful-dnddeprecation and archived repository: github.com/atlassian/react-beautiful-dnd/issues/2672@hello-pangea/dndversion 18.0.1 and weekly downloads (about 2.2M): registry.npmjs.org/@hello-pangea/dnd/latest, api.npmjs.org/downloads/point/last-week/@hello-pangea/dnd- dnd-kit sensors, activation constraints, touch and keyboard behavior: docs.dndkit.com/api-documentation/sensors/pointer, docs.dndkit.com/guides/accessibility
- PostgreSQL 18.4 latest stable (May 11, 2026): endoflife.date/postgresql
- Redis 8.8 latest stable line (late May 2026): endoflife.date/redis
- Typeform revenue (about $152.7M) and customer count (about 130K): getlatka.com/companies/typeform
- Jotform 35M-plus users at its 2026 20-year anniversary: jotform.com/blog/20-years-of-jotform-by-the-numbers
- Jotform's earlier 25M-user milestone (2024): prnewswire.com/news-releases/online-forms-and-automation-platform-jotform-announces-25-million-users
Like this? You'll like what I'm building too.
Two ways to support and get more of this work.
HEARTH
A privacy-first Life OS for your desktop. Journal, tasks, and notes that stay on your machine. Coming soon, direct download from this site.
Read moreMY TOOLKITS
Receipts-first toolkits for shipping after hours, building Claude agents, publishing on Amazon, and more. The exact methods I used, not theory.
Browse on WhopRelated Articles
Treating Video As Code With Remotion And fal
How I turned a script into a finished video with code instead of a timeline app, and why determinism is the real win for a solo dev.
Build Versus Buy For A Custom AI Feature
How to decide between an off-the-shelf AI tool and a custom AI feature, weighing control, cost, differentiation, and data with a clear framework.
Can One Developer Build Your Whole MVP
An honest look at whether a single full-stack developer can ship your whole MVP, when it works beautifully, and when you should bring in more people.