Originally published at nlqdb.com/blog
Every landing page hits the same wall around hour three: the signup form works, but where do the emails actually go? The reflex is to stand up a server and a database for what is, honestly, an INSERT and an occasional COUNT. So most people reach for a form service instead — and that solves storage, but quietly splits your data from your questions. The submissions live in someone else's dashboard; the moment you want "signups per day since launch" or "which referrer actually converted," you're exporting a CSV and pivoting it by hand.
Two problems hiding in one, with different shapes
Capture is a write — a small one, and it genuinely doesn't need a server: an insert call from the page's own fetch, or a ten-line serverless function, is enough, as long as the write key isn't sitting in your client HTML. Reporting is a read, and it's the part that actually wants a database — because "how many per day," "top source this week," and "conversion by campaign" are aggregations, and aggregations want a query planner, not a spreadsheet and a human.
-- capture: one small insert per submission (no server required)






