Notes from building a form backend.
Practical pieces on shipping forms, handling submissions, and the details behind a "simple" endpoint that an AI agent actually wants to talk to.
-
Form design for higher conversions (and less spam)
Form-design choices that lift completion — fewer fields, one column, inline validation — plus anti-spam that doesn't cost conversions (honeypot over CAPTCHA).
Read → -
Test email in Docker and CI with a disposable inbox
Mailhog proves an email was sent, not delivered. Test real email from a Docker container or CI job with a disposable inbox over HTTP — create, wait, assert.
Read → -
Formspree migration pitfalls to avoid
Migrating off Formspree is a one-line change, but a few things bite: CC/BCC handling, recipient verification, spam-test wording, and skipping the cutover check.
Read → -
Migrate Formspree webhooks to Ollastack (Node.js)
Move a Formspree webhook consumer to Ollastack in Node — verify the new HMAC signature, map the payload, and gain retries and replay you couldn't have before.
Read → -
Assert on email in Playwright and Cypress
Read and assert on a verification email inside Playwright or Cypress — a disposable inbox, a long-poll, and the extracted code or link, with no flaky sleeps.
Read → -
Email testing API: assert on real emails in CI
An email testing API gives your tests a real inbox over HTTP, so CI can prove the welcome, receipt, or reset email arrived. What it is and how to wire it in.
Read → -
How to read an OTP / verification code in an AI agent
An AI agent verifying an account must read the OTP from an email. The reliable way: give it an inbox, long-poll for the message, and read the extracted code.
Read → -
Build an AI agent that sends and receives email (with MCP)
Give an AI agent a real inbox — send, receive, and reply via the Ollastack MCP server (Claude Desktop, Cursor) or the raw API, with code for both.
Read → -
AgentMail alternative: agent email + forms + testing
AgentMail is a dedicated agent email API. Ollastack bundles agent mail with forms and CI test inboxes on one API, and is self-hostable. An honest comparison.
Read → -
Email for AI agents: give an agent its own inbox
What email for AI agents means, how an agent inbox differs from a send-only API, and how to give an agent an address it can send from and receive into.
Read → -
Per-tenant SMTP: send from each customer's own server
Building forms for clients? Send notifications from each customer's domain. What per-tenant SMTP is, when to use it, and the fallback that prevents lost mail.
Read → -
Self-host vs hosted form backend: how to choose
Run your own form backend or use a hosted one? A clear framework — control, compliance, cost vs operational burden — and why you may not have to pick one.
Read → -
Accept file uploads in a form (multipart), no storage
Add file uploads to a form without S3, signed URLs, or an upload server — point a multipart form at one endpoint, set size and type limits, and files arrive.
Read → -
How to secure a form endpoint (honeypot, CAPTCHA, limits)
A public form endpoint invites spam, abuse and relay attempts. A layered defense that stops bots without punishing users: honeypot, allowlist, CAPTCHA, limits.
Read → -
DKIM, SPF & DMARC for form notifications
Form notifications from your domain reach the inbox only if SPF, DKIM and DMARC align. What each does, the DNS you need, and the mistakes that cause spam.
Read → -
ML spam quarantine, and why a form backend should fail open
Most spam filters drop when unsure, so a form backend loses real leads silently. The quarantine model: ML-uncertain mail is delivered and labeled, not deleted.
Read → -
Form webhooks done right: signing, retries, replay
How to consume form submission webhooks properly — verify the signature, handle retries idempotently, and replay a delivery after fixing a bug.
Read → -
Give your AI agent an email identity (send & receive)
Give an AI agent a real email identity — a chosen, spam-filtered, full-duplex address it can send from, receive into, and reply through over an API.
Read → -
Remix form handling with a hosted backend (action + Form)
Remix's Form and route actions are made for this. Post to a hosted endpoint from your action for a complete contact form — progressive enhancement, no API.
Read → -
Vue & Nuxt form handling with a hosted backend
Build a contact form in Vue 3 or Nuxt without an API or email server: a reactive form, one POST to a single endpoint, success/error states, and spam protection.
Read → -
Getform (Forminit) alternative: migrating to Ollastack
Getform became Forminit in 2026. Old or new endpoint, moving to Ollastack is a one-line change — plus an agent API, inspectable webhooks, and reversible spam.
Read → -
How to test OTP and verification emails in CI
Testing that the OTP or reset email actually arrived is where suites flake. The reliable pattern: a disposable inbox, long-poll, assert the code, clean up.
Read → -
React Hook Form + a hosted backend (contact form)
React Hook Form does validation and state but doesn't receive submissions. Pair it with a hosted endpoint for a complete form — validation, errors, and spam.
Read → -
SvelteKit form handling with a hosted backend
Use SvelteKit form actions idiomatically but skip the email/spam backend. A +page.server.ts action posts to one endpoint; use:enhance adds enhancement.
Read → -
Add a contact form to an Astro site (no server)
Point an HTML form on your static Astro site at one endpoint — done. The plain-HTML and progressively-enhanced fetch versions, with spam handling included.
Read → -
Basin alternative: migrating to Ollastack step-by-step
Move from Basin to Ollastack: swap the endpoint, keep your fields, and gain an agent-first API, inspectable webhooks with replay, and reversible spam.
Read → -
Migrate from Netlify Forms to Ollastack
Netlify Forms went credit-based. Move off in one diff — drop the data-netlify attributes, point at one endpoint — keep notifications, webhooks and spam.
Read → -
Add a working form to a Next.js 14 app in 10 minutes
A real Next.js 14 App Router form: a client component, a Server Action to a hosted backend, success/error states, and spam protection — no API route.
Read → -
Mailosaur alternative: inbox + OTP testing in CI
Disposable test inboxes that prove your OTP or magic link arrived — create, long-poll, assert on the extracted code. vs Mailosaur, MailSlurp & Mailsac.
Read → -
Formspree alternative for developers and AI agents
Ollastack as a Formspree alternative — agent-first API, reversible spam handling, webhooks with replay, and built-in mail testing. Plus where Formspree wins.
Read → -
Migrate from Formspree to Ollastack: a step-by-step guide
Move your forms off Formspree without rewriting your site — swap one endpoint, keep your fields, notifications and webhooks. With the exact diff and gotchas.
Read → -
Best email API 2026: send-only vs full-duplex
The best email API depends on whether you only send or also receive. The criteria, the send-only vs full-duplex split, an honest shortlist, and picks.
Read → -
Email inbox API: a real inbox over HTTP
Give your app or agent a real inbox over HTTP — create it, send, receive, and read messages as JSON. How it differs from a send-only email API.
Read → -
Free email API with disposable addresses
A free email API with disposable addresses that keep a personal inbox private from the recipient — the honest take on 'anonymous', and how to use it.
Read → -
A free API to send email in one call
Send email with one HTTP POST — no SMTP, no mail server. A free API to send email, the deliverability basics, and how to receive the reply too.
Read → -
Free email API — no credit card required
A free email API you can start with no credit card — send and receive over HTTP, read OTP codes, and no surprise charge when you cross the free limit.
Read → -
Free email API service (send and receive)
A free email API service that also receives — create an inbox, send, read replies and OTP codes over HTTP, no credit card. With the honest free-tier limits.
Read → -
Free OTP email API: send and verify codes
A free OTP email API to send one-time codes and verify them by reading the email back — with the code extracted for you, so you never scrape HTML.
Read → -
Free temporary email API (disposable inboxes)
A free temporary email API for disposable inboxes you create and read over HTTP — test signups, read OTPs, and give agents throwaway addresses.
Read → -
Inbound email API: receive email over HTTP
Receive incoming email as structured JSON over HTTP — no IMAP, no mail server. Parse fields, extract codes and links, and fire a webhook on every message.
Read → -
Node.js email API: send and receive (free)
Send and receive email in Node.js with a free HTTP API — no Nodemailer, no SMTP. The send call with fetch, how to receive replies, and why it beats SMTP.
Read → -
Python email API: send and receive (no smtplib)
A Python email API that sends and receives over HTTP — no smtplib. Send and receive with httpx or requests, OTP extraction, and why it beats SMTP.
Read → -
Send email in Python via API, free
Send email from Python with a free HTTP API — no smtplib, no Gmail app password. The send call, how to receive the reply, and why it beats SMTP.
Read → -
Resend free tier alternative that receives email
Resend is a great free tier for sending. But it can't receive. Here's a full-duplex alternative — send and receive free — and when to just use Resend.
Read → -
Send email with curl, free (and read the reply)
Send email with one curl command, free — no SMTP. Plus the honest truth about 'no API key' senders and how to receive the reply from the shell.
Read → -
Send email in C# / .NET via HTTP API (no SMTP)
Send email from C# with one HTTP call — no SmtpClient, no MailKit. The send code with HttpClient, how to receive the reply, and error handling.
Read → -
Send email in Go via HTTP API (send and receive)
Send email from Go with one HTTP call — no SMTP, no net/smtp wiring. The send code with net/http, how to receive the reply, and error handling. Free to start.
Read → -
Send email in Java via HTTP API (no SMTP)
Send email from Java with one HTTP call — no JavaMail, no SMTP. The send code with HttpClient, how to receive the reply, and error handling.
Read → -
Send email in Kotlin via HTTP API (no SMTP)
Send email from Kotlin with one HTTP call — no JavaMail, no SMTP. The send code with java.net.http, how to receive the reply, and error handling. Free to start.
Read → -
Send email in PHP via HTTP API (no SMTP)
Send email from PHP with one HTTP call — no PHPMailer, no SMTP config. The send code with cURL, how to receive the reply, and error handling. Free to start.
Read → -
Send email in Ruby via HTTP API (send and receive)
Send email from Ruby with one HTTP call — no ActionMailer, no SMTP. The send code with Net::HTTP, how to receive the reply, and error handling.
Read → -
Send email in Rust via HTTP API (send and receive)
Send email from Rust with one HTTP call — no SMTP crate. The send code with reqwest, how to receive the reply, and error handling.
Read → -
SendGrid free alternative (send and receive)
A SendGrid free alternative that sends and receives — read replies and OTP codes over HTTP. How it compares, and when SendGrid is still the right call.
Read → -
Formspree alternatives in 2026: an honest comparison from someone building one
If you're shopping for a Formspree alternative, here's the landscape — Basin, Formcarry, Forminit, Web3Forms, Netlify Forms, Formspark, Ollastack — with the tradeoffs each one carries. Including cases where Formspree is still the right call.
Read → -
Netlify Forms alternatives in 2026: a migration guide
Netlify Forms moved to credit-based billing. Here's how to move your forms off Netlify without rewriting your site — with the actual code diff for each alternative.
Read → -
Formspree vs Netlify Forms (2026): a fair comparison
Both handle form submissions for static sites — but on different assumptions. When each one fits, when each one breaks, and what else to consider.
Read → -
Basin vs Web3Forms (2026): which form backend fits you
Basin invests in dashboard polish, Web3Forms invests in unlimited free submissions. They're optimizing for different users. Here's how to pick — and when neither is the right answer.
Read → -
Forminit alternatives in 2026 (formerly Getform): an honest comparison
Getform rebranded to Forminit in early 2026. A straight comparison of the form backends worth considering — Formspree, Basin, Formcarry, Web3Forms, Netlify Forms, Formspark, Ollastack — with the tradeoffs each carries.
Read → -
Form backend for AI agents: why HTML form endpoints break for LLMs (and what to do)
AI agents are increasingly submitting forms on behalf of users — and traditional form backends flag every one of them as spam. Here's why, and how to design an endpoint that treats agents as first-class clients.
Read → -
Send an HTML form to email without writing a backend
A practical walkthrough: point an HTML form at an endpoint, get an email when someone submits, skip the server. With the gotchas nobody warns you about.
Read →
More soon.