Frontend flow contracts

The MVP supports owner editing and anonymous link viewing. A Shared or Public board has the same access behavior: anyone with its link can view, only its owner can edit. Private boards and their uploaded images require the owner’s session. The permanent URL remains unchanged across edits and visibility changes, including after writing it to NFC.

Creation and returning users

Editor behavior

Uploads

The server-backed editor accepts static JPEG, PNG, or WebP files up to 10 MB and displays processing, success, or failure. SVG is intentionally excluded. Server-backed uploads must also validate file contents and dimensions. Failed upload or board switching while an upload is pending must not replace another board’s content.

Mobile

The same 1200 × 800 coordinates apply on every device; viewport changes never rewrite positions. Mobile supports viewing, adding items, changing text/style, moving, resizing, ordering, and removing items. The board may pan or scale to the viewport; all wall content must remain reachable. The page itself must not overflow horizontally. Controls and dialogs must remain reachable at 390 × 844.

Loading and failure states

Verification

tests/e2e/frontend-flows.spec.ts exercises account-backed board rename/reopen/delete, undo/redo, drag grouping, visit-mode history restrictions, upload rejection, and mobile editing. The original editor tests use a PNG fixture and verify WebP persistence. Eight additional account-backed frontend acceptance tests now pass against the real server with an isolated database. They cover shared/private/missing boards, permanent URLs after editing, and offline retry in addition to editing and board management. Guest signup retention and native Supabase recovery are now implemented, with seven unit/handler tests passing. Guest signup retention now passes browser tests; three recovery UI contract tests also pass. Real Supabase email verification remains pending; see SUPABASE_AUTH.md. Run npx playwright test --config tests/frontend.playwright.config.ts to verify the frontend suites without sharing a test database with other work.