A while back I got a message late at night that I did not want to see.
A client of mine who runs a racing series told me that two racers in a row had tried to register and the form timed out on them. They filled everything in, hit send, and got a waiting screen that never went anywhere.
I'm confused. I'm testing it, it seems to be working fine on my end.
So how do I make sure this form stays reliable, without having to go and learn computer science to do it?
That is the question behind every vibecoded landing page. It is easier than ever to make a site that looks professional, and almost nobody building one has read the code underneath it, so when a lead goes missing you would not even know it happened.
After shipping tens of vibecoded sites this year for all kinds of clients, I have 4 things I put in place on every build so I can sleep at night, and that is what this article is.
Why a form is simpler than it looks
A form is like a dock. It packs the information somebody typed into a ship, which is called a payload, and sends it across the sea to you. The thing on your end that receives it is called a webhook.
That is the whole job. So the only thing that can really go wrong is that the ship gets packed wrong, and either the sending end or the receiving end refuses to take it.
This is good news, because it tells you exactly where to put your effort. Make sure the ship gets packed the same way every single time.
Step one, check what goes in, and fix what does not fit
This is exactly what went wrong with the racing client.
The registration form had an optional field for a shoutout photo. Vercel, the hosting platform I run my sites on, rejects payloads above a certain size. I did not account for that, and people kept uploading photos straight off their phones, which are huge. The payload was too big, so it got refused.
You protect against this with two things.
Input validation means you flat out do not accept information that does not fit the format you expect.
- only allow certain image formats
- make sure an email looks like an email
- make sure a phone number looks like a phone number
This is why some forms stop you when you type something strange.
Input normalisation means that when somebody does enter something in a wonky way, a script fixes it into a format the payload will accept, instead of rejecting the person.
- turn everything to lowercase before sending
- strip out odd characters that one end might not support
- compress files that are too big
That last one fixed the racing form. It made no sense to ask racers to shrink their own photos in the middle of a registration that was already long, so we added a script that compresses the image down to a size that always goes through.
Between them, validation and normalisation take care of the failures you can think of in advance. The trouble is the ones you cannot.
Step two, turn on the alerts your hosting platform already has
Those failures nobody predicted are called edge cases, and they are always going to exist. You cannot stop every one, so the next best thing is to find out the moment one happens, while there is still a chance to save the lead.
Start with your hosting platform. That is the company whose servers your site actually runs on, because your own computer is not sitting on 24/7 serving it. Vercel, Netlify, Hostinger, whoever you deployed on.
The good news is that these companies make a living keeping your site running. The bad news is that these companies make a living keeping your site running. They have all the information you need, and the useful part of it, the longer logs and the alerts when something breaks, often sits behind a paid plan.
Whether that is worth paying for depends on what a lost lead costs you. A while back I built a quiz funnel for a client who wanted to scale his ad spend as fast as possible. More traffic makes errors harder to spot and more expensive when they happen, so paying for proper monitoring on that project was a no brainer. You get told when something fails, and you get the logs to fix it and sometimes to recover the lead.
If you are not ready to pay, there is a cheaper route. If you already use something like n8n, Zapier or Make, have your site send an error webhook into it whenever a submission fails, and let that notify you. The catch is that if the failure takes everything down, the error message may not get out either. In practice the thing that breaks is usually one specific request, so it still catches a lot.
Step three, put your own watcher in the visitor's browser
Monitoring from the hosting side watches the servers. You can also watch from the other end, the browser of the person using your site.
This is done with small scripts on the page that let the visitor's browser send you events about what is happening, including errors. Google Analytics is the one you have probably heard of. The one I use on all my sites is PostHog, which has a generous free plan and can even be self hosted if you are technical enough.
You get two things out of it. The main purpose is analytics, seeing what visitors actually do so you can adjust your pages and campaigns. On top of that, you get a record of errors as they happen in real browsers.
It is not as reliable as the hosting route, because visitors can reject cookies and then you see nothing from them. As an extra layer on top of step two, it is cheap and it works.
Step four, give people a way out when it fails anyway
The first three steps are about the form working. This one is about what happens when it does not, and it is the one I would put in first.
Think about what your site does today when a submission fails. On most vibecoded sites it shows a red message saying something went wrong, and that is it. The person filled in every field, they were ready to hand you their details, and the last thing your business said to them was an error.
So decide in advance what they get instead.
- show a real email address and tell them to send the details there
- keep everything they typed, so a refresh does not wipe it and they can copy it across
- add a button that opens their email app with the message already written, ready to send
- let them send the form without the optional attachment, and ask for it afterwards
Some people will still leave. The ones who were serious will send it through, and you keep a client you would otherwise have lost without ever knowing.
There is a second benefit. Somebody emailing you to say the form would not take their photo is a bug report you were never going to get any other way, and it usually reaches you faster than anything else on this list.
What to do with this
Open your own site, fill in the form, and turn your wifi off just before you press send. Whatever you see on the screen is what a real customer sees when something breaks. If it is a dead end, that is the first thing to fix.
Making a good looking landing page is the easy part now. Trusting it with your leads still takes a bit of work.