Files
SportstimeAPI/.planning/phases/03-visual-flattening/03-CONTEXT.md
Trey t 79de52d734 docs(03): capture phase context
Phase 03: visual-flattening
- Implementation decisions documented
- Phase boundary established
2026-01-18 15:43:10 -06:00

2.5 KiB

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