Full-Stack Intake Wired Into Supabase
A multi-step intake form with partial-save and resume, backed by Supabase through a server action and RLS — capturing context, scoring, and UTM data while denying direct anonymous writes.
Verified HMX-owned case
Outcome signals
These are the real outcome statements attached to this HMX case study.
- Resumable
- partial answers survive a dropped session
- RLS-safe
- no anonymous writes hit the database
- Context-rich
- source and UTM captured with each lead
- Server-only
- writes go through validated server actions
Case architecture
Full-Stack Intake Wired Into Architecture
- 01Design the intake table and
A multi-step intake form with partial-save and resume, backed by Supabase through a server action and RLS — capturing context, scoring, and UTM dat...
- 02RLS so direct anonymous
Set RLS so direct anonymous writes are denied and only the server action persists
- 03Next
Next.js Server Actions supports the route, form, or data boundary for Full-Stack Intake Wired Into so public UX and backend state stay connected.
- 04Supabase + Row Level
Build the multi-step form with per-step Zod validation
- 05Fallback Path
When automation confidence is low, route the record to a manual owner with the source, stage, and last action attached.
- 06Resumable partial answers
Resumable partial answers survive a dropped session; RLS-safe no anonymous writes hit the database; Context-rich source and UTM captured with each...
Problem
The operating gap
A long intake form either submits all-or-nothing (so people abandon halfway and you lose everything) or writes straight from the browser to the database, exposing keys and inviting tampering. Context like source and UTM is never captured.
Build
What gets built
Persist intake through a Next.js Server Action that writes with the service-role client while RLS denies direct anonymous writes. Save partial progress per step to local storage and the database so visitors can resume, capture UTM and source context, and only flip status to submitted on the final validated step.
Build steps
Full-Stack Intake Wired Into Supabase uses a web app route, data, and conversion layer for Full-Stack Websites. A multi-step intake form with partial-save and resume, backed by Supabase through a server action and RLS — capturing context, scoring, and UTM dat... The architecture connects design the intake table and, next, supabase + row level, and resumable partial answers with an explicit control path.
- 01Design the intake table and a migration capturing fields, status, score, and UTM context
- 02Set RLS so direct anonymous writes are denied and only the server action persists
- 03Build the multi-step form with per-step Zod validation
- 04Save partial progress to local storage and the database for resume
- 05Capture source and UTM context from the entry URL into the record
- 06Flip status to submitted only after the final step validates server-side
Stack
Tools and layers
- Next.js Server Actions
- Supabase + Row Level Security
- Service-role server client (lib/supabase.ts)
- Zod validation
- localStorage resume
- SQL migrations
- Experience layer: Design the intake table and a migration capturing fields, status, score, and UTM context
- Server layer: Set RLS so direct anonymous writes are denied and only the server action persists
- Database layer: Next.js Server Actions supports the route, form, or data boundary for Full-Stack Intake Wired Into so public UX and backend state stay connected.
- Automation layer: Supabase + Row Level Security handles routine steps while persist intake through a Next.js Server Action that writes with the service-role client while RLS denies direct anonymous writes.
- Measurement layer: Resumable partial answers survive a dropped session; RLS-safe no anonymous writes hit the database; Context-rich source and UTM captured with each...
Data flow
- 01Design the intake table and a migration capturing fields, status, score, and UTM context
- 02Set RLS so direct anonymous writes are denied and only the server action persists
- 03Build the multi-step form with per-step Zod validation
- 04Save partial progress to local storage and the database for resume
- 05Capture source and UTM context from the entry URL into the record
- 06Flip status to submitted only after the final step validates server-side
Controls
- A long intake form either submits all-or-nothing (so people abandon halfway and you lose everything) or writes straight from the browser to the dat...
- Persist intake through a Next.js Server Action that writes with the service-role client while RLS denies direct anonymous writes.
- When automation confidence is low, route the record to a manual owner with the source, stage, and last action attached.
Research basis
A route assembles through form, data, metadata, and deploy checks.
The same website operating path
Full-stack websites for service businesses and operators: route architecture, service pages, lead capture, metadata, proof boundaries, blog/database paths, analytics, and deployment checks.
Route map
Service architecture
Clear service routes
Lead capture
Form and context flow
Lead capture that saves context
Public metadata
SEO and schema layer
SEO and schema on public pages
Launch QA
Analytics and deployment checks
Analytics events tied to CTAs