How lzrant/picklediq works
PaddleIQ captures pickleball sessions on Apple Watch, classifies motion windows into shot events, and syncs match updates to the iPhone for history and analytics. The phone also supports manual match entry, paddle management, social/profile surfaces, and Firebase match sync. Shared models and services provide the domain layer. Firebase capabilities are documented, but sampled source does not establish all backend wiring; those relationships are marked unverified or omitted.
Main entry points: AppViewModel.swift App State · RootTabView.swift App Navigation · LiveMatchViewModel.swift Live Match State · LiveMatchView.swift Live Match UI
Components 27
Watch Capture
- Live Match UI
watchOS/PickledWatchApp/Views/LiveMatchView.swift - Live Match State
watchOS/PickledWatchApp/Services/LiveMatchViewModel.swift - Motion Capture
watchOS/PickledWatchApp/Motion/MotionCapturePipeline.swift - Workout Session
watchOS/PickledWatchApp/Services/WorkoutSessionController.swift - Watch Sync Sender
watchOS/PickledWatchApp/Services/WatchConnectivitySender.swift
iPhone App
- Phone Sync Receiver
iOS/PickledApp/Services/PhoneConnectivityController.swift - App State
iOS/PickledApp/ViewModels/AppViewModel.swift - Analytics Dashboard
iOS/PickledApp/Views/DashboardView.swift - Match History
iOS/PickledApp/Views/MatchHistoryView.swift - Paddle Bag
iOS/PickledApp/Views/PaddleBagView.swift - Social Feed
iOS/PickledApp/Views/SocialView.swift - Profile
iOS/PickledApp/Views/ProfileView.swift - App Navigation
iOS/PickledApp/Views/RootTabView.swift - Match Sync Client
iOS/PickledApp/Services/FirebaseSyncClient.swift
Shared Domain
- Shot Classifier
Shared/Sources/PickledShared/Services/ShotClassifier.swift - Sync Messages
Shared/Sources/PickledShared/Services/SessionSyncMessage.swift - Paddle Analytics
Shared/Sources/PickledShared/Services/PaddleAnalytics.swift - Paddle Library
Shared/Sources/PickledShared/Services/PaddleLibrary.swift - DUPR Abstraction
Shared/Sources/PickledShared/Services/DUPRService.swift - Match Model
Shared/Sources/PickledShared/Models/Match.swift - Paddle Models
Shared/Sources/PickledShared/Models/Paddle.swift - Shot Events
Shared/Sources/PickledShared/Models/ShotEvent.swift - User Profile
Shared/Sources/PickledShared/Models/UserProfile.swift
Cloud Services
- Cloud Functions
Firebase/functions/index.js - Firestore
Firebase/firestore.rules - DUPR Service
Other components
- Player
Connections 28
- Player → Live Match UI: controls
README.md - Live Match UI → Live Match State: invokes
watchOS/PickledWatchApp/Views/LiveMatchView.swift - Live Match State → Motion Capture: starts capture
watchOS/PickledWatchApp/Services/LiveMatchViewModel.swift - Motion Capture → Shot Classifier: classifies windows
watchOS/PickledWatchApp/Motion/MotionCapturePipeline.swift - Live Match State → Workout Session: controls workout
watchOS/PickledWatchApp/Services/LiveMatchViewModel.swift - Live Match State → Watch Sync Sender: sends events
watchOS/PickledWatchApp/Services/LiveMatchViewModel.swift - Watch Sync Sender → Sync Messages: encodes messages
watchOS/PickledWatchApp/Services/WatchConnectivitySender.swift - Phone Sync Receiver → Sync Messages: decodes messages
iOS/PickledApp/Services/PhoneConnectivityController.swift - App State → Phone Sync Receiver: observes updates
iOS/PickledApp/ViewModels/AppViewModel.swift - App State → Match Sync Client: syncs matches
iOS/PickledApp/ViewModels/AppViewModel.swift - Match Sync Client → Cloud Functions: calls upsertMatch
iOS/PickledApp/Services/FirebaseSyncClient.swift - Cloud Functions → Firestore: uses data store
- App State → Match Model: manages matches
iOS/PickledApp/ViewModels/AppViewModel.swift - App State → Paddle Models: manages paddles
iOS/PickledApp/ViewModels/AppViewModel.swift - App State → User Profile: maintains profile
iOS/PickledApp/ViewModels/AppViewModel.swift - App State → Paddle Analytics: computes metrics
- App State → Paddle Library: loads paddles
iOS/PickledApp/ViewModels/AppViewModel.swift - App Navigation → Analytics Dashboard: routes to
iOS/PickledApp/Views/RootTabView.swift - App Navigation → Match History: routes to
iOS/PickledApp/Views/RootTabView.swift - App Navigation → Paddle Bag: routes to
iOS/PickledApp/Views/RootTabView.swift - App Navigation → Social Feed: routes to
iOS/PickledApp/Views/RootTabView.swift - App Navigation → Profile: routes to
iOS/PickledApp/Views/RootTabView.swift - Analytics Dashboard → App State: reads metrics
iOS/PickledApp/Views/DashboardView.swift - Match History → App State: reads history
iOS/PickledApp/Views/MatchHistoryView.swift - Paddle Bag → App State: manages bag
iOS/PickledApp/Views/PaddleBagView.swift - Social Feed → App State: reads social data
iOS/PickledApp/Views/SocialView.swift - Profile → App State: reads profile
iOS/PickledApp/Views/ProfileView.swift - DUPR Abstraction → DUPR Service: provides integration