# Partial submissions

Multi-step forms save progress when a visitor moves to the next step, never on keystrokes. The `MultiStep` component shows a short notice that answers are saved as they go.

- Each form mount gets a session id (kept in `sessionStorage`, so a reload continues the same partial).
- Moving to the next page validates that page and sends a `partial` submission with `pageIndex`. The server upserts by session id and records `pagesCompleted`.
- Submitting the last page completes the same record. There is never a duplicate.
- Partials show with status `partial` in the dashboard, with the pages completed. The form's settings page shows completion by step.
- Partials never fire email or webhooks. Only completed submissions do.
- Partials pass through the same validation and spam checks as full submissions, and are never counted as responses.

Partial submissions show under each form's Responses, Status → Partial, with completion by step under Insights.
