Case study 02 / 06
Formtified
AI onboarding forms for freelancers and creators.
A creator describes a client's project in a sentence. The AI asks a few clarifying questions, then builds a complete onboarding form with a share link. The client fills it in on their phone, and every response lands in the creator's dashboard.


- Type
- AI SaaS web app
- Status
- Live at formtified.com
- Code
- Public on GitHub
- Built with
- Next.js 16 and Neon Postgres
01
The problem
Before a freelancer can quote a job or start work, they need the client's requirements in writing, and most of that comes from an intake questionnaire.
Writing a fresh questionnaire for every kind of project is slow, and a generic one misses the details that matter for that particular job. Formtified's promise is its headline: know exactly what your client wants to build.
02
What I built
Formtified turns one sentence about a client's project into a complete onboarding form with a share link. The client fills it in on their phone, and every response lands in the creator's dashboard.
01
AI form generator
The creator describes the project. The AI asks up to four quick clarifying questions, which can be skipped, then builds a tailored form.
02
Share it anywhere
Every form gets its own link, with sharing built for WhatsApp.
03
A full form editor
Reorder questions, change their type, mark them as required and add options.
04
A form clients finish
The client form works on a phone, with a progress bar that tracks the required answers.
05
Responses and alerts
Responses arrive in the creator's account with an in-app notification, an optional email alert and CSV export.
06
Admin dashboard
Users, subscribers, forms, site visits, announcements and an activity log of every admin change.
03
How it works
Architecture
Hover a component to trace its connections.
- 1
Describe
The creator writes a sentence about the client's project.
- 2
Clarify
A first AI call returns up to four clarifying questions, capped at 900 tokens.
- 3
Generate
A second call returns the form as compact JSON, capped at 4,000 tokens. The server expands and validates every field before saving it.
- 4
Share
The form gets a public link, ready to send to the client on WhatsApp or anywhere else.
- 5
Collect
The client submits, the answers are saved to Postgres, and the creator is notified in the app and, optionally, by email.
04
Tech stack and why
Next.js 16 and TypeScript
One project for the interface and the API routes, deployed to Vercel with no extra configuration.
Neon Postgres
Plain SQL that can be read and run in Neon's SQL editor. The HTTP driver needs no connection pool, which suits serverless functions.
OpenAI-compatible AI API
The AI code works with any OpenAI-compatible provider. Switching provider means changing three environment variables, not the code.
Email and password auth
bcrypt for passwords and a signed session cookie (jose), so nobody needs a third-party account to sign in.
Resend
Emails the creator when a client submits. It's optional: without it, in-app notifications still work.
Tailwind CSS v4
Colours and fonts live in one file, so the whole look can change in one place.
05
Challenges and what I learned
Keeping AI costs down
Each form uses two small AI calls with hard token caps. The model replies in JSON with one-letter keys, which cuts the output by about a third, and a low reasoning effort stops it spending tokens on thinking. Every call is logged with its tokens and time.
Not trusting the model's output
Nothing the model returns is saved as it comes back. The server expands the compact keys and validates every field first.
Fair use before payments
Each AI-generated form costs one credit, refunded automatically if generation fails, and a per-user hourly cap stops runaway use. Payments for credit packs are next.
Counting visitors without cookies
Site visits are counted with no cookies and no third-party tracker. A visitor is a daily hash of the date, IP address and browser, which can't be turned back into an IP.
What I learned
- Two small, structured AI calls are cheaper, faster and easier to check than one large open-ended prompt.
- Model output should be treated like user input: validated before it gets anywhere near the database.
What this is and isn't
Not in version one yet: payments for credit packs, password reset by email, file uploads in forms, and custom branding on public forms.
06
Screens
All names, emails and figures in these screens are fictional demo data.
The pitch, the primary call to action and a live product preview.
The finished form with a share link, WhatsApp sharing and edit buttons.
Every form a creator owns, with quick actions and credits left.
Edit every question: reorder, change type, mark as required, add options.
Platform health at a glance: users, subscribers, forms, responses, visits and system status.
A client filling the form; the progress bar tracks required answers.
The finished form with a share link, WhatsApp sharing and edit buttons.
The pitch, the primary call to action and a live product preview.
07
Links
See Formtified for yourself.
Have something like this in mind?
Have a project, role or research opportunity in mind? Let's talk.