# Milestone 05 — Optional Guest Interactions ## Reference Read `plans/wedding-bootstrap-plan.md` first. This milestone depends on Milestone 04. ## Goal Add optional guest interaction sections that make the wedding experience more personal: song requests, toast/speech requests, and advice/wish/memory messages. ## Scope Implement only: - Guest song request form section. - Guest toast/speech request form section. - Guest advice/wish/memory message form section. - Query modules for these tables. - Validation schemas. - Admin display and basic management for these submissions. - Localization copy for these sections. ## Non-goals Do not implement: - MinIO photo upload. - Presigned URLs. - CSV export unless explicitly requested later. - Complex scheduling UI for toasts. - Final design polish. ## Required constraints - Guest-facing copy must use `invitations.language`. - Admin UI must use shadcn/ui components only. - Use Kysely query modules; do not add an ORM. - Song requests should be limited, recommended max: 3 per invitation. - Toast requests are voluntary and admin-approved. ## Implementation tasks - Add query helpers for: - song requests - toast requests - guest messages - Add Zod schemas for interactions. - Add localized copy for interaction sections. - Add guest-facing form sections to `/invite/[token]`. - Persist submissions. - Add admin views on invitation detail page for: - song requests - toast requests - guest messages - Add toast status controls if feasible: - pending - accepted - declined - scheduled ## Verification Run: ```bash npm run lint npm run build ``` Manual checks: - Guest can submit up to 3 song requests. - Guest can submit optional toast/speech request. - Guest can submit advice/wish/memory message. - Guest-facing text is localized by invitation language. - Admin can view all submitted interaction data. - Admin can update toast request status if implemented. - Admin pages use shadcn/ui only. ## Acceptance criteria - Optional guest interactions work end-to-end. - Admin can review them. - No upload functionality was implemented in this milestone.