Commit Graph

67 Commits

Author SHA1 Message Date
Trey t
4e6d8ff37f Add F-037, F-038, F-091 UI tests; mark F-016 red (no accessibility ID)
- F-037: Route preference cards (Direct/Scenic/Balanced) selectable
- F-038: Allow repeat cities toggle buttons work
- F-091: Date range filter sheet opens and applies correctly
- F-016: Marked RED - featured trip card buttons lack accessibility IDs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 01:16:25 -06:00
Trey t
ab1d7bc6b6 Add F-015, F-076, F-094 UI tests for home refresh, trip detail, diagnostics
- F-015: Featured trips refresh button works without crash
- F-076: Trip detail loads correctly with single-stop trip
- F-094: Schedule diagnostics sheet opens from filter menu

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 01:03:12 -06:00
Trey t
56c17e79a4 Mark 45 impossible/unreliable UI tests RED in QA test plan
Tests that require network control, StoreKit sandbox, CloudKit
operations, photo permissions, visual verification, or missing
accessibility IDs are marked RED as not automatable via XCUITest.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 00:55:09 -06:00
Trey t
4cb8d89fbd Add F-084, F-133, F-134 UI tests; mark F-131, F-132 red (toggle unreliable)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 00:52:07 -06:00
Trey t
be72367fb1 Add F-040, F-081, F-083 UI tests for review step and polls section
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 00:37:34 -06:00
Trey t
54be5cae3e Add F-030, F-031, F-032 UI tests for calendar date edge cases
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 00:30:48 -06:00
Trey t
61fd7f5209 Add F-041, F-047, F-051 UI tests for wizard and trip options
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 00:25:50 -06:00
Trey t
378f65f82c Add F-058, F-059, F-090 UI tests for trip options and schedule search
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 00:19:28 -06:00
Trey t
0f0e534214 Add F-018, F-060, F-062 UI tests and update QA test plan
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 00:06:38 -06:00
Trey t
2d759274a8 Add F-068, F-069, F-070 UI tests for custom itinerary item lifecycle
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 23:49:29 -06:00
Trey t
dad3270be7 Add F-010, F-017 UI tests and update QA test plan with 24 automation mappings
- F-010: Tap active tab scrolls to top (TabNavigationTests)
- F-017: Recent trips section with saved trips (HomeTests)
- Update SportsTime_QA_Test_Plan.xlsx with all 60 automated test mappings
- Green highlight on automated cells for visual tracking

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 23:18:00 -06:00
Trey t
dc142bd14b feat: expand XCUITest coverage to 54 QA scenarios with accessibility IDs and fix test failures
Add 22 new UI tests across 8 test files covering Home, Schedule, Progress,
Settings, TabNavigation, TripSaving, and TripOptions. Add accessibility
identifiers to 11 view files for test element discovery. Fix sport chip
assertion logic (all sports start selected, tap deselects), scroll container
issues on iOS 26 nested ScrollViews, toggle interaction, and delete trip flow.
Update QA coverage map from 32 to 54 automated test cases.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 19:44:22 -06:00
Trey t
d53f222489 feat: add XCUITest suite with 10 critical flow tests and QA test plan
Add comprehensive UI test infrastructure with Page Object pattern,
accessibility identifiers, UI test mode (--ui-testing, --reset-state,
--disable-animations), and 10 passing tests covering app launch, tab
navigation, trip wizard, trip saving, settings, schedule, and
accessibility at XXXL Dynamic Type. Also adds a 229-case QA test plan
Excel workbook for manual QA handoff.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 16:23:59 -06:00
Trey t
53cc532ca9 chore: commit all pending changes 2026-02-10 18:15:36 -06:00
Trey t
8e937a5646 feat: fix travel placement bug, add theme-based alternate icons, fix animated background crash
- Fix repeat-city travel placement: use stop indices instead of global city name
  matching so Follow Team trips with repeat cities show travel correctly
- Add TravelPlacement helper and regression tests (7 tests)
- Add alternate app icons for each theme, auto-switch on theme change
- Fix index-out-of-range crash in AnimatedSportsBackground (19 configs, was iterating 20)
- Add marketing video configs, engine, and new video components
- Add docs and data exports

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 09:36:34 -06:00
Trey t
dbb0099776 chore: remove scraper, add docs, add marketing-videos gitignore
- Remove Scripts/ directory (scraper no longer needed)
- Add themed background documentation to CLAUDE.md
- Add .gitignore for marketing-videos to prevent node_modules tracking

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 18:13:12 -06:00
Trey t
a8b0491571 wip 2026-01-19 22:12:53 -06:00
Trey t
b008af1c71 refactor(itinerary): consolidate duplicate optional unwrapping in CustomItemRow 2026-01-17 21:34:18 -06:00
Trey t
05a3efd9c8 docs: comprehensive itinerary reorder refactor design
Complete design for TripDetailView refactor with constrained drag-and-drop:
- Games are fixed anchors (immovable, ordered by time)
- Travel is movable with hard constraints (after departure games, before arrival games)
- Custom items are freely movable anywhere

Key decisions from 100-question brainstorming session:
- Unified ItineraryItem model (replaces CustomItineraryItem + TravelDayOverride)
- Separate testable ItineraryConstraints type
- Full structure stored (not derived)
- Debounced sync, local-first, last-write-wins
- Invalid zones dim during drag, barrier games highlight
- Gap opens at drop position, haptic feedback throughout

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 20:29:28 -06:00
Trey t
c82029abe7 docs: add itinerary reorder refactor design
Unified data model approach:
- Single ItineraryItem type (travel becomes a category)
- Constraint validation layer for travel rules
- Red zone visual feedback for invalid drops
- Simplified flattening logic

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 17:20:34 -06:00
Trey t
828059a12a docs: add flexible itinerary ordering implementation plan
13-task plan covering:
- TravelDayOverride model update with sortOrder
- CloudKit schema update
- Flattening logic to sort games/travel/custom together
- Drag constraint updates for flexible custom items
- Regression tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 11:07:58 -06:00
Trey t
6e9b9f728b docs: add flexible itinerary ordering design
Design for fully customizable item ordering in trip itineraries:
- Custom items can go anywhere (before/after games, any day)
- Travel constrained to valid day range but freely positioned within days
- Games get sortOrder for positioning but remain immovable
- TravelPosition stored in SwiftData, synced to CloudKit

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 11:01:16 -06:00
Trey t
59ba2c6965 docs: add detailed itinerary refactor implementation plan
11 bite-sized TDD tasks to replace anchor-based positioning with
simple (day, sortOrder) model. Includes migration path for CloudKit.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 09:12:16 -06:00
Trey t
bd1e24181f docs: add itinerary refactor design
Replace anchor-based positioning with simple sort-order system:
- Custom items use (day, sortOrder: Double) instead of anchors
- Travel segments have hard guardrails based on city game schedules
- Route waypoints follow exact visual display order

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 09:08:42 -06:00
Trey t
0130141f8a Merge branch 'custom_ish' 2026-01-16 15:38:28 -06:00
Trey t
035dd6f5de docs: add TDD test rewrite design
Specification-first + property-based TDD methodology to surface
logic bugs by testing expected behavior, not current implementation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 11:11:46 -06:00
Trey t
966a580def docs: add unit test rewrite design
Comprehensive plan to delete broken tests and create new Swift Testing
coverage for Planning Engine, Domain Models, and Services with parallel
execution across multiple simulators.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 10:22:25 -06:00
Trey t
8bba5a1592 docs(plans): add brutalist app-wide implementation plan
Detailed step-by-step plan for extending brutalist style to:
- TripDetailView
- SavedTripsListView
- ScheduleListView
- SettingsView

Includes StyleProvider protocol, adaptive routers, and complete
code snippets for each task.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 09:13:10 -06:00
Trey t
dc43bf0d53 docs: add brutalist app-wide design spec
Design for extending Brutalist style from home-screen-only to app-wide:
- StyleProvider protocol for shape/typography language
- Adaptive view routers for each major screen
- Brutalist variants for TripDetail, MyTrips, Schedule, Settings
- Colors still controlled by user's selected Theme

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 09:04:32 -06:00
Trey t
ae88dd3807 i dunno 2026-01-16 00:32:14 -06:00
Trey t
b534ca771b docs: add custom itinerary items design
Design for allowing users to add personal items (restaurants, hotels,
activities, notes) to saved trip itineraries with drag-to-reorder and
CloudKit sync.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 23:07:18 -06:00
Trey t
d034ee8612 fix: multiple bug fixes and improvements
- Fix suggested trips showing wrong sports for cross-country trips
- Remove quick start sections from home variants (Classic, Spotify)
- Remove dead quickActions code from HomeView
- Fix pace capsule animation in TripCreationView
- Add text wrapping to achievement descriptions
- Improve poll parsing with better error handling
- Various sharing system improvements

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 09:35:18 -06:00
Trey t
2b16420fb4 docs: add sharing overhaul implementation plan
13-task plan covering:
- Delete old ProgressCardGenerator
- Create ShareableContent protocol and 8 theme presets
- Create shared card components (header, footer, stats, maps)
- Create generators for progress, trip, and achievement cards
- Create ShareService for Instagram and system sharing
- Create SharePreviewView and ShareButton
- Integrate into ProgressTabView, TripDetailView, AchievementsListView

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 22:34:17 -06:00
Trey t
c989b7b1d1 docs: add sharing system overhaul design
Complete redesign of sharing to support:
- Trip summary cards with route maps
- 4 achievement card types (spotlight, collection, milestone, context)
- Stadium progress cards
- 8 user-customizable color themes
- Instagram Stories as primary target (1080×1920)
- Contextual share buttons throughout app

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 22:28:21 -06:00
Trey t
16514a40ac Merge branch 'feature/sync-reliability' 2026-01-13 22:09:26 -06:00
Trey t
8e78828bde docs: add group trip polling implementation plan
12 tasks with TDD workflow:
- Domain, CloudKit, and SwiftData models
- PollService for CloudKit operations
- Creation and detail ViewModels
- SwiftUI views with vote ranking
- Deep link handling
2026-01-13 21:01:58 -06:00
Trey t
cd68ba834b docs: add group trip polling design
Design for CloudKit-based group coordination feature:
- Ranked choice voting on trip options
- Share via link with 6-char codes
- Anonymous results (aggregate only)
- Real-time updates via CloudKit subscriptions

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 20:47:30 -06:00
Trey t
76a6958f5e docs: add comprehensive sync reliability documentation
Adds SYNC_RELIABILITY.md covering:
- Architecture overview with diagrams
- Component documentation (CloudKitService, CanonicalSyncService,
  BackgroundSyncManager, NetworkMonitor, SyncCancellationToken)
- Data flow diagrams for all sync triggers
- Error handling strategies
- Debugging guide with LLDB commands
- Testing checklist
- Performance considerations

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 19:28:42 -06:00
Trey t
d377d03b10 docs: add comprehensive sync reliability documentation
Adds SYNC_RELIABILITY.md covering:
- Architecture overview with diagrams
- Component documentation (CloudKitService, CanonicalSyncService,
  BackgroundSyncManager, NetworkMonitor, SyncCancellationToken)
- Data flow diagrams for all sync triggers
- Error handling strategies
- Debugging guide with LLDB commands
- Testing checklist
- Performance considerations
- Info.plist configuration requirements

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 19:24:04 -06:00
Trey t
5686af262f feat(sync): add pagination, cancellation, and network restoration
- CloudKit pagination: fetchAllRecords() handles >400 record batches
  with cursor-based pagination (400 records per page)
- Cancellation support: SyncCancellationToken protocol enables graceful
  sync termination when background tasks expire
- Per-entity progress: SyncState now tracks timestamps per entity type
  so interrupted syncs resume where they left off
- NetworkMonitor: NWPathMonitor integration triggers sync on network
  restoration with 2.5s debounce to handle WiFi↔cellular flapping
- wasCancelled flag in SyncResult distinguishes partial from full syncs

This addresses critical data sync issues:
- CloudKit queries were limited to ~400 records but bundled data has ~5000 games
- Background tasks could be killed mid-sync without saving progress
- App had no awareness of network state changes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 19:18:55 -06:00
Trey t
b433e1dad5 docs: add sync reliability design for CloudKit pagination and cancellation
Design covers three improvements:
- Paginated CloudKit fetches to handle >400 records
- Graceful cancellation with per-entity progress saving
- NWPathMonitor for auto-sync on network restoration

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 18:49:12 -06:00
Trey t
f180e5bfed feat(sync): add CloudKit sync for dynamic sports
- Add CKSport model to parse CloudKit Sport records
- Add fetchSportsForSync() to CloudKitService for delta fetching
- Add syncSports() and mergeSport() to CanonicalSyncService
- Update DataProvider with dynamicSports support and allSports computed property
- Update MockAppDataProvider with matching dynamic sports support
- Add comprehensive documentation for adding new sports

The app can now sync sport definitions from CloudKit, enabling new sports
to be added without app updates. Sports are fetched, merged into SwiftData,
and exposed via AppDataProvider.allSports alongside built-in Sport enum cases.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 18:27:56 -06:00
Trey t
3d40145ffb docs: update planning documents and todos
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 13:16:52 -06:00
Trey t
e4204175ea docs: add In-App Purchase implementation plan
14 bite-sized TDD tasks covering:
- StoreKit configuration file setup
- StoreManager with entitlement checking
- PaywallView and OnboardingPaywallView
- ProGate view modifier for feature gating
- Trip saving, PDF export, and Progress tab gating
- Settings subscription management

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 10:11:02 -06:00
Trey t
56138d3282 docs: add in-app purchase and subscription system design
Freemium model with StoreKit 2 local-only entitlement checking.
Pro features: unlimited trips, PDF export, progress tracking.
Monthly ($4.99) and annual ($49.99) pricing with Family Sharing.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 10:07:08 -06:00
Trey t
f8204007e6 docs: add loading redesign implementation plan
13 tasks covering LoadingSpinner, LoadingPlaceholder, LoadingSheet
creation, ProgressView replacements, and deprecated component removal.
Includes TDD with 13 new tests.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 22:17:33 -06:00
Trey t
7cb5aafd67 docs: add loading system redesign design
Complete design spec for overhauling all loading views, progress
indicators, and spinners. Covers LoadingSpinner, LoadingPlaceholder,
and LoadingSheet components with Apple-style minimal aesthetic.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 22:14:57 -06:00
Trey t
9531ed1008 docs: add Trip Planning Enhancements implementation plan
12 tasks with TDD approach:
- TripWizardViewModel with reveal state logic
- 8 step components (PlanningMode, Sports, Dates, Regions, etc.)
- TripWizardView container with auto-scroll
- Settings toggle for classic vs wizard mode
- Integration tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 19:38:05 -06:00
Trey t
4999c90595 docs: add dynamic sports via CloudKit design
Hybrid approach: keep Sport enum for existing 7 sports,
add DynamicSport struct for CloudKit-defined leagues.
Unified via AnySport protocol for seamless UI integration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 19:32:42 -06:00
Trey t
3530b31cca docs: add 3 feature enhancement design plans
- Trip Planning Enhancements: progressive reveal single-screen wizard
- Progress Tracking Enhancements: multiple visits, games history, zoomable map
- Polish Enhancements: grouped sorting, 100+ planning tips

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 19:07:46 -06:00