The engineering bottleneck with assembled stacks
A third-party form host is a small dependency with a large blast radius: it holds the submissions (your leads, your applicants, your support intake), meters your success by submission count, and exports CSVs when it feels like it. The day marketing asks “did the candidate data leave the EU?” the answer involves a vendor’s subprocessors page instead of your own architecture.
Architecture on the Software Lifecycle Cloud
The endpoint is deliberately boring: validate, store, acknowledge. Spam discipline is layered — gateway rate behaviour, a honeypot/timing check in the function, and a quarantine state for submissions the classifier distrusts. Attachments never pass through the function; the form gets presigned URLs and the submission row carries the object keys. Routing is a workflow, so “leads over this value also ping the founder” is a declared step.
Submissions are records, not emails
The moment a submission is a table row, everything downstream gets easier: deduplication is a keyed check, the weekly count is a query, the integration with the CRM is a worker reading rows instead of an inbox parser. Notification emails still happen — as a step — but they stop being the system of record for the business’s inbound demand.
- Attachments upload straight to a bucket; the row references keys, the function never carries bytes
- Suspect submissions land in a quarantine state a human can release — no silent spam folder of lost leads
- Routing rules are workflow steps with an audit trail, not a vendor’s zap diagram
Forms are small; the data duties are not
A contact form collects personal data with legal duties attached — retention, erasure, residency. Keeping submissions in your European project, under the retention patterns your other tables use, turns the compliance answer into a description of your own system. That, more than the saved subscription, is why teams bring forms home.
Frequently asked questions
In layers you control: gateway-level rate behaviour, honeypot and timing signals in the function, and a quarantine state for the uncertain middle. Quarantined rows are reviewable, so aggressive filtering never silently eats a real lead.
From a workflow step after the submission is stored — the email is a notification about a record, not the record itself. Routing (which inbox, which chat, which CRM) is declared in the workflow and changeable without touching the form.
Yes, through presigned bucket URLs attached to the submission. File type and size rules are enforced at the function; the objects land in the project’s bucket under the submission’s key, governed by your retention rules.
Related capabilities, architectures, and comparisons
Ship your stack on the Software Lifecycle Cloud.
Closed preview on dedicated European infrastructure. Bring a repository or start from a blueprint.