# Implementation Order Sequential implementation order for all user stories. No parallelization — one story at a time. ## Progress Tracker - [ ] US-1 Create event - [ ] US-2 View event page - [ ] US-3 RSVP - [ ] US-5 Edit event - [ ] US-4 Manage guest list - [ ] US-18 Cancel event - [ ] US-19 Delete event - [ ] US-12 Auto-cleanup after expiry - [ ] US-13 Limit active events - [ ] US-6 Bookmark event - [ ] US-7 Local event overview - [ ] US-17 Dark/light mode - [ ] US-8 Calendar integration - [ ] US-11 QR code - [ ] US-9 Change highlights - [ ] US-10a Update messages - [ ] US-10b New-update indicator - [ ] US-15 Color themes - [ ] US-16 Unsplash header images - [ ] US-14 PWA install ## Prerequisites All setup tasks (T-1 through T-5) are complete. ## Order Rationale ### Increment 1: Minimal Viable Event — US-1, US-2, US-3 The vertical slice. After these three stories, the app is usable: an organizer creates an event, shares the link, guests view it and RSVP. | # | Story | Depends on | Delivers | |---|-------|------------|----------| | 1 | US-1: Create event | T-4 | Event creation with tokens, localStorage, honeypot | | 2 | US-2: View event page | US-1 | Public event page with attendee list, expired state | | 3 | US-3: RSVP | US-2 | Attend/decline flow, localStorage dedup, honeypot | ### Increment 2: Organizer Toolset — US-5, US-4 The organizer needs to correct mistakes and moderate spam before the app goes to real users. | # | Story | Depends on | Delivers | |---|-------|------------|----------| | 4 | US-5: Edit event | US-1 | Edit all fields, expiry-must-be-future constraint | | 5 | US-4: Manage guest list | US-1 | View RSVPs, delete spam entries | US-5 before US-4: US-9 (change highlights) depends on US-5, so getting it done early unblocks Phase 3 work. ### Increment 3: Event Lifecycle — US-18, US-19, US-12, US-13 Complete lifecycle management. After this increment, the privacy guarantee is enforced and abuse prevention is in place. | # | Story | Depends on | Delivers | Activates deferred ACs | |---|-------|------------|----------|----------------------| | 6 | US-18: Cancel event | US-1 | One-way cancellation with optional message, expiry adjustment | US-2 AC5, US-3 AC11 | | 7 | US-19: Delete event | US-1 | Immediate permanent deletion, localStorage cleanup | US-2 AC6 (partial) | | 8 | US-12: Auto-cleanup | US-1 | Scheduled deletion after expiry, silent logging | US-2 AC6 (complete) | | 9 | US-13: Event limit | US-1 | `MAX_ACTIVE_EVENTS` env var, server-side enforcement | — | When implementing US-18, US-19, and US-12: immediately activate their deferred ACs in US-2 and US-3 (cancelled state display, RSVP blocking, event-not-found handling). These stories exist at this point — no reason to defer further. ### Increment 4: App Shell — US-6, US-7, US-17 The app gets a home screen. Users can find their events without the original link. | # | Story | Depends on | Delivers | |---|-------|------------|----------| | 10 | US-6: Bookmark event | US-2 | Client-only bookmark, no server contact | | 11 | US-7: Local event overview | — | Root page `/` with all tracked events from localStorage | | 12 | US-17: Dark/light mode | — | System preference detection, manual toggle, localStorage persistence | US-6 before US-7: bookmarking populates localStorage entries that the overview displays. Without US-6, the overview only shows created and RSVPed events. US-17 here (not in a late phase): event color themes (US-15) must account for dark/light mode. Having it in place before US-15 avoids rework. ### Increment 5: Rich Event Page — US-8, US-11, US-9, US-10a, US-10b Features that enrich the event page for guests and organizers. | # | Story | Depends on | Delivers | |---|-------|------------|----------| | 13 | US-8: Calendar .ics + webcal | US-2 | RFC 5545 download, webcal subscription, STATUS:CANCELLED support | | 14 | US-11: QR code | US-2 | Server-generated QR, SVG/PNG download | | 15 | US-9: Change highlights | US-2, US-5 | Field-level change indicators, localStorage-based read tracking | | 16 | US-10a: Update messages | US-1, US-2 | Organizer posts, reverse-chronological display, delete capability | | 17 | US-10b: New-update indicator | US-10a | localStorage-based unread badge | US-8 benefits from US-18 being complete: `STATUS:CANCELLED` in .ics can be implemented directly instead of deferred. US-9 benefits from US-5 being complete (increment 2): no dependency waiting. ### Increment 6: Visual Polish & PWA — US-15, US-16, US-14 Final layer: visual customization and native app feel. | # | Story | Depends on | Delivers | |---|-------|------------|----------| | 18 | US-15: Color themes | US-1, US-2 | Predefined theme picker, event-scoped styling | | 19 | US-16: Unsplash images | US-1, US-2 | Server-proxied search, local storage, attribution | | 20 | US-14: PWA | T-4 | Manifest, service worker, installability | US-15 before US-16: themes are self-contained, Unsplash adds external API complexity. US-14 last: PWA caching is most effective when the app has all its pages and assets. Service worker strategy can cover everything in one pass. Note: US-12 AC2 (delete stored header images on expiry) remains deferred until US-16 is implemented. When implementing US-16, activate this AC in US-12. ## Deferred AC Activation Schedule | When implementing | Activate deferred AC in | AC description | |-------------------|------------------------|----------------| | US-18 (#6) | US-2 AC5 | Cancelled state display | | US-18 (#6) | US-3 AC11 | RSVP blocked on cancelled event | | US-18 (#6) | US-8 AC9 | STATUS:CANCELLED in .ics (if US-8 not yet done — in this order, US-8 comes later, so implement directly) | | US-19 (#7) | US-2 AC6 | Event not found (organizer deletion) | | US-12 (#8) | US-2 AC6 | Event not found (expiry deletion) | | US-16 (#19) | US-12 AC2 | Delete stored header images on expiry |