Dezelfde regels, twee keer gecontroleerd.
Je bouwt de velden op de pagina als onderdeel van het ontwerp. Elke regel die je instelt wordt in de browser gecontroleerd terwijl iemand typt, en nog eens op de server bij binnenkomst, tegen één gedeelde specificatie.

Eén specificatie, drie implementaties, één antwoord.
De browser, de editor en de server worden aan hetzelfde fixture-bestand gehouden, dus een veld kan niet op de ene plek slagen en op de andere zakken. Elk geval daarin verwijst naar een bug die ooit is uitgeleverd.
Zet een veld op verplicht, geef het een reguliere expressie, of hang er regels aan zoals een minimum. Een patroon dat niet te lezen valt laat alles door in plaats van iedereen te weigeren.
Uploads worden geaccepteerd, bij de inzending opgeslagen en periodiek opgeruimd, zodat een postvak geen schijfruimteprobleem wordt.
Een verborgen honeypot vangt de simpele bots. Cloudflare Turnstile doet de rest. Geen van beide vraagt een mens om een bus aan te wijzen.
Een formulier dat jij ontwerpt, geen widget die je erft.
De velden zijn elementen op het canvas, opgemaakt met dezelfde tokens als al het andere. Inzendingen worden altijd opgeslagen. E-mail daarbovenop is een schakelaar, en de bezoeker krijgt of jouw bericht of een doorverwijzing naar keuze.
Aanvragen, reserveringen en bestellingen in één lijst.
Drie modules, drie soorten records, één plek om ze te lezen: samengevoegd per site, nieuwste eerst, te filteren en te doorzoeken, en elke regel blijft gekoppeld aan waar hij vandaan komt.
Een gepubliceerde pagina draait een klein script, geen front-endframework. Het formulierelement geeft een echte verzendknop af en de runtime verstuurt hem, en dat is precies waarom het blijft werken met de pagina in de cache en zonder framework.
POST /api/v1/form/submit · { uid, …fields }Zet een formulier op een pagina en stuur jezelf een test.
Het kost ongeveer vijf minuten, en het is de snelste manier om de hele keten te zien werken.