A multi-page survey built around the group most surveys discard: the people who leave halfway. Every completed step upserts into Supabase against a session ID, and the final submit clears a partial flag, so an abandoned response is still a response. Turnstile and rate limiting are both optional.
Most surveys throw away everyone who leaves halfway, which is exactly the group whose reasons for leaving you would like to know.
What it does
- Every completed step upserts the current state into Supabase, keyed by a
per-browser session ID. The final submit flips
is_partialto false, so an abandoned response is still a response. - Next.js App Router with React Hook Form and Zod for validation, and Zustand holding the cross-step state.
- Cloudflare Turnstile and Upstash rate limiting are both optional. If their keys are unset the widget hides and the checks are skipped, so the app still runs locally without them.