I built a form builder (mini-Tally) as a side project.
The code was the easy part. These three bugs cost me the most time.
Bug 1 — Typing didn't work
In my form editor, typing in a question field did nothing. The letters just didn't appear.
Cause: I used setBlocks(blocks.map(...)) — which captures stale state.
Fix — use the functional form:
typescript
setBlocks((prev) => prev.map((b) =>
b.id === id ? { ...b, label } : b
));
Bug 2 — GitHub ate my src folder
I dragged my project folder into GitHub's web uploader. It said "uploaded 20 files." The build failed with "module not found: src/main.tsx".
The browser uploader had silently skipped the src folder entirely.
Lesson: don't use the web uploader for folders with nested files. Use git.
Bug 3 — Auth worked locally, broke in production
Sign-up worked on localhost. On the deployed site, it did nothing. No error, just silence.
Cause: Supabase redirect URLs were only configured for localhost. Supabase rejected requests from the production domain.
Fix: After deploying, add your production URL to Supabase → Authentication → URL Configuration. Both the Site URL and the Redirect URLs list.
The stack
Next.js 16 (App Router, Server Actions)
Supabase (Auth + Postgres + RLS)
Tailwind CSS
TypeScript
What I built
A form builder with 6 question types, public form pages, and CSV export.
Live demo: https://getjustforms.vercel.app
If you hit any of these bugs, ping me in the comments.
Top comments (0)