Phase 5: Analytics

Status: Complete iOS PRs: #312 (5a), #313 (5b), #314 (5c)


Overview

Phase 5 implements the Analytics system for Archery Apprentice, providing archers with insights into their shooting performance across equipment, time periods, and scoring patterns.


Phase 5a: Analytics Dashboard Foundation

PR: #312 | Status: Complete

Foundation implementation providing:

  • Summary statistics (total rounds, arrows shot, average score)
  • Recent completed rounds list
  • Equipment drift statistics
  • Time-range filtering fixes

Guide: Analytics Dashboard Implementation Guide


Phase 5b: Individual Equipment Analytics

PR: #313 | Status: Complete

Extended analytics with:

  • Individual equipment performance tracking (per riser, limbs, sight, arrows, stabilizer)
  • ArrowEquipmentSnapshot entity for linking arrows to equipment
  • 15 new EquipmentStatsDao queries
  • Historical trend bar chart visualization
  • Time-range filtering (7d, 30d, 90d, All)
  • MainTabView integration with DI
  • N+1 query optimization with Swift TaskGroup

Guide: Individual Equipment Analytics Guide


Phase 5c: Equipment Comparison

PR: #314 | Status: Complete

Equipment comparison feature achieving Android parity:

  • Side-by-side bow setup comparison
  • Setup picker with A vs B selection
  • Performance stats comparison (average score, accuracy, consistency)
  • Delta visualization with color coding (green = better, red = worse)
  • Drift statistics comparison
  • Time-range filtering with @AppStorage persistence
  • Full TDD implementation (36 tests)

Guide: Equipment Comparison Guide

Key Patterns Documented:

  • KotlinLong interop pattern for KMP bridging
  • @AppStorage persistence pattern for user preferences

Architecture

Phase 5a (Foundation)              Phase 5b (Equipment)           Phase 5c (Comparison)
┌─────────────────────┐           ┌─────────────────────┐        ┌─────────────────────┐
│ AnalyticsTabView    │           │ IndividualEquipment │        │ EquipmentComparison │
│ AnalyticsHubViewModel│          │ PerformanceView     │        │ View                │
│ AnalyticsRepository │           │ EquipmentBridge     │        │ ComparisonViewModel │
└─────────┬───────────┘           └─────────┬───────────┘        │ ComparisonBridge    │
          │                                 │                    └─────────┬───────────┘
          └─────────────────┬───────────────┴──────────────────────────────┘
                            ▼
                 ┌──────────────────────┐
                 │   EquipmentStatsDao  │
                 │   RoundDao           │
                 │   BowSetupDao        │
                 └──────────────────────┘
                            │
                            ▼
                 ┌──────────────────────┐
                 │ ArrowEquipmentSnapshot│
                 │   (equipment→arrow)  │
                 └──────────────────────┘

Key Files

iOS

ComponentFilePhase
Analytics ViewAnalyticsTabView.swift5a
Analytics ViewModelAnalyticsHubViewModel.swift5a
Analytics BridgeAnalyticsRepositoryBridge.swift5a
Equipment ViewIndividualEquipmentPerformanceView.swift5b
Equipment BridgeIndividualEquipmentAnalyticsBridge.swift5b
Comparison ViewEquipmentComparisonView.swift5c
Comparison ViewModelEquipmentComparisonViewModel.swift5c
Comparison BridgeEquipmentComparisonBridge.swift5c
DI ContainerDependencyContainer.swift5b/5c
Protocol DefinitionsProtocols.swift5a/5b/5c

Android

ComponentFilePhase
Equipment TabIndividualEquipmentPerformanceTab.kt5b
Scoring ServiceRoundScoringService.kt5b
Stats DAOEquipmentStatsDao.kt5a/5b

KMP Shared

ComponentFilePhase
Snapshot EntityArrowEquipmentSnapshot.kt5b
Stats DAOEquipmentStatsDao.kt5a/5b

Test Coverage

PhasePlatformTestsFile
5aiOS28AnalyticsHubViewModelTests.swift
5aAndroid9RoundDaoTimeRangeFilteringTest.kt
5biOS+515AnalyticsHubViewModelTests.swift
5bAndroid7RoundScoringServiceTest.kt
5bAndroid5RoundDisplayServiceTest.kt
5bAndroid140 linesLandingPageTest.kt
5ciOS36EquipmentComparisonViewModelTests.swift

Total Phase 5 Tests: 90+ new tests iOS Total: 626 passing tests


Feature Parity Status

FeatureAndroidiOSPhase
Analytics DashboardYesYes5a
Summary StatisticsYesYes5a
Recent RoundsYesYes5a
Time-Range FilteringYesYes5a/5b
Individual Equipment StatsYesYes5b
Historical TrendsYesYes5b
Equipment ComparisonYesYes5c

iOS Feature Parity: ~88%



Last Updated: 2025-11-30

3 items under this folder.