Honeypot spam protection is overengineered for this project's scope. Removed the acceptance criteria from both stories and added addenda documenting the decision. Updated implementation order and review findings accordingly. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
124 lines
5.8 KiB
Markdown
124 lines
5.8 KiB
Markdown
# 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 |
|
|
| 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 |
|
|
|
|
### 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 |
|