Subscribe

“It’s just a contact form.”

I was so wrong. So, fucking wrong. I don’t know if I’m just dumb, stubborn, or a combination of both. But this one goddamn feature took over everything. It got to the point where I was ready to throw everything away and start over. Maybe this time I could stop with the fancy features like a blog, pages, and contact form. I could easily return to perfection. A simple .md page.

I thought I was missing something obvious. There had to be a normal way to make a contact page. Every site has one. So I went digging to figure out how everyone else got this working without losing their mind.

The findings: no one is certain. I realized there are entire businesses built around contact forms. A huge reason boring and sterile website builders are so widely used is that they do all the bullshit for you. It all made sense. Email infrastructure is genuinely tedious. The fact that spammers navigate this at scale is almost impressive, and all I wanted was for people to be able to send me pet photos and stuff.


The Tunnel

I looked it up. Forms aren’t just UI. They’re distributed state machines spanning client, server, and email. Every field is another place something can fail. This was not comforting.

After all that research, I still had almost nothing working. So I went back into the tunnel and started cutting features. The first one to go was ReCAPTCHA. I wanted protection, but it was not working and might have been part of the breakage. Also, there was a video about them being spyware anyway. Good enough. Begone, annoying boxes and AI-generated image tests.

The next feature to die was image upload. Fuck that. It confuses me, and every horror story on ServerlessHorror seems to start with image upload. So that went too. With those two gone, it was finally time to deal with Resend itself.

Resend, honestly, seems surprisingly good. Compared with SendGrid and the usual options, it had the cleanest onboarding. The problem lived somewhere between GitHub, Cloudflare, and Resend. The form worked locally. The keys looked right. The Cloudflare variables looked right. Then production bounced between 405, 500, 404, and the most insulting one: 200 with nothing delivered. The env var was RESEND_API_KEY locally, but Cloudflare wanted RESEND_KEY, and I lost 3 hours to a typo. The void consumes whatever was sent.


The light

49 commits later: 21 of them rebuilding the entire site, 28 trying to fix the contact form.

Here is the commit history in order.

  • First commit of personal Site …
  • Blog post>
  • Markdown fix>
  • Add mobile menu>
  • resend email fix>
  • node added for fix>
  • Holyshit I broke everything, I hope this fixes i…>
  • react@17>
  • resend fix>
  • everything fixed>
  • ?>
  • .?>
  • cleaned thing … © origin/main>
  • resend fix>
  • resend is fighting me>
  • I think I’m dumb>
  • debug>
  • testing>
  • I dumb for sure>
  • hmmmm
  • huhhhhh>
  • Email will be the death of me …>
  • isuebrfv>
  • Delete dist/functions directory Jonathan Reed>
  • maybe>
  • I have evertyig>
  • Holyshit, I think i was just being dumb …>
  • erivon Codedebug>
  • captcha replaced with honey pot>
  • fuck my life>
  • I pray>
  • egodeath>
  • hope>
  • im dumb>
  • resureaction>
  • Final for night>
  • Finfal FInal>
  • A nights sleep>
  • simplflify test>
  • please>
  • FUck Forms>
  • testing testing 123 123>
  • Remove email API endpoint and update Astr…>
  • hmmm>
  • life sucks>
  • hated>
  • testing>
  • Holyfuck I think it works

If you want to say hello or see the thing that almost broke me

Contact Page