diff --git a/.planning/phases/03-visual-flattening/03-CONTEXT.md b/.planning/phases/03-visual-flattening/03-CONTEXT.md new file mode 100644 index 0000000..3fcbac9 --- /dev/null +++ b/.planning/phases/03-visual-flattening/03-CONTEXT.md @@ -0,0 +1,65 @@ +# Phase 3: Visual Flattening - Context + +**Gathered:** 2026-01-18 +**Status:** Ready for planning + + +## Phase Boundary + +Transform semantic items (games, travel, custom) into display rows, sorted deterministically by sortOrder within each day. This phase provides the row-to-semantic translation needed for Phase 4 drag interaction. + + + + +## Implementation Decisions + +### Sort boundaries +- sortOrder = 0 is the first game position; negatives appear before games, positives appear after/between +- Purely sequential sorting within a day — no time-of-day grouping (morning/afternoon/evening) +- No visual indicator at the boundary between pre-game items and games +- Items just flow in sortOrder order; games are distinguished by their visual style + +### Section structure +- Day headers display day number + date (e.g., "Day 1 - Jan 15" or "Day 1 (Wed, Jan 15)") +- Headers scroll with content — not sticky +- Empty days show the day header with no rows beneath (don't skip empty days) + +### Item differentiation +- **Games:** Sport-colored accent (left border or icon matching sport: MLB=red, NBA=orange, NHL=blue) +- **Travel segments:** Subtle/muted style — gray text, smaller row, less prominent than games +- **Custom items:** Note icon + text indicating user-added item +- **Drag affordance:** Drag handle icon (three-line grip) on draggable items + +### Edge case handling +- Ties shouldn't occur — system always assigns unique sortOrder when positioning items +- No special visual treatment for items at first/last position in a day +- Days with only games can still receive drops (between games, subject to Phase 2 constraints) +- Flattening is a pure function — stateless, same input always produces same output + +### Claude's Discretion +- Whether to use UITableView sections or inline day headers (based on drag-drop requirements) +- Whether travel/custom items can use sortOrder in the 100-1540 range (based on Phase 2 constraint logic) +- Exact styling details (spacing, typography, border thickness) +- Tiebreaker for identical sortOrder (by item type priority: games > travel > custom) if it ever occurs despite unique assignment + + + + +## Specific Ideas + +- "New items added to specific positions should get unique sortOrder values" — the system should proactively avoid ties rather than handling them after the fact +- Sport colors should match existing SportsTime app patterns for consistency + + + + +## Deferred Ideas + +None — discussion stayed within phase scope + + + +--- + +*Phase: 03-visual-flattening* +*Context gathered: 2026-01-18*