honestly this started as pure frustration.
i kept building landing pages and small sites for clients, and every single time the form question came back: where do submissions actually go? options were always the same boring set:
formspree → $20/mo for 1k submissions, pricing wall hits you fast
typeform → great UX but $25/mo+ and overkill for a contact form
mailchimp embed → ugly, slow, weirdly broken on mobile
DIY backend → 2 hours every time, spam protection always missing
WordPress → only if you're already on WP, and even then the plugins are messy
what got me was that this is a SOLVED problem. it's a form. it has 5 fields. why am i paying $240/year for that.
so i built formto.dev. it's exactly one thing: a free form backend. you point any HTML form's action URL to it, you get submissions in a dashboard, email notifications, spam protection, webhooks. that's it.
three things i decided early that i think matter:
1. open-source (AGPL-3.0). every form backend is closed-source. if formspree goes down or 10x the price tomorrow, you have no exit. AGPL means anyone can self-host it on a $5 VPS and own their data. for client work where form submissions = leads = revenue, that matters.
2. self-hostable AND cloud, same code. docker compose + sqlite for self-host, supabase + postgres for cloud tier. drizzle ORM handles both. same product either way, you pick where it runs.
3. free tier has to be actually usable. formspree gives you 50 submissions/mo free which means you can't actually use it for anything real. mine is more generous because the whole point is being the boring infrastructure that just works.
tech stack for the curious: fastify, supabase (postgres + auth), clerk for SaaS user auth, drizzle ORM, resend for emails, redis for rate limiting, react 19 dashboard, docker for self-host. all the boring choices, none of them sexy, all of them work.
the part i'm self-deprecating about: i thought building it would take a weekend. it took 2 months. spam protection alone was a week. email deliverability another week (resend made this 10x easier than what i had before). the dashboard UI got rebuilt 3 times because i kept changing my mind on whether it should be minimal or feature-rich (ended up minimal, simple wins).
still figuring out:
pricing for the cloud tier ($9 personal / $24 pro / $59 business but honestly no idea if those numbers are right)
whether to push hard on self-hosted or cloud as the primary path
how to compete on SEO against formspree/getform which have been around 8+ years
curious for the OS founders here — how do you balance pushing self-hosted (good for community, bad for revenue) vs cloud (good for revenue, less differentiation)?
(formto.dev + GitHub repo linked there if anyone wants to poke around or self-host. also accepting brutal feedback on the dashboard, that's the part i'm least sure about)