Praccy is an iOS app for music teachers and their students. Teachers assign tasks and goals; students see them on a "today" screen, practise, and tick them off. Teachers get an overview of progress, and students gamify their practice with daily streaks.
- Today screen - Mascot-led student home with a progress ring, today's teacher-assigned tasks, and a collapsible done section.
- Teacher roster - Students sorted active before pending. Per-student detail shows task and goal history.
- Join-code linking - Six-character codes redeem against a CloudKit public record, then promote to a private CKShare for ongoing sync.
- Practice streak - Flame pill in the header opens a celebration sheet.
- On-device recordings -
.m4acapture per task, stored underDocuments/recordings/{taskID}/and attached to records asCKAsset. - Accent-pattern metronome - Driven by
AVAudioSourceNodewith no queued-buffer drift. Per-beat accent customisation. - Drone tuner - Tunable A440.
- Onboarding - Eight-step flow with Sign in with Apple. Replays cleanly via
-ForceOnboarding.
| Layer | Technology |
|---|---|
| UI | SwiftUI |
| Persistence | SwiftData (local-only, cloudKitDatabase: .none) |
| Sync | CloudKit (custom CloudKitBackend + BackendOperationQueue) |
| Auth | Sign in with Apple, Keychain-stored identifier |
| Audio | AVAudioSourceNode (metronome + tuner drone), AVAudioRecorder |
| Pitch | FFT-based detection (Tuner.swift) |
| Haptics | UIImpactFeedbackGenerator |
| Fonts | Nunito (Bold / ExtraBold / Black) |
| Min iOS | iOS 17 |
- Clone the repository
- Open
Praccy.xcodeprojin Xcode 16 or later - Pick a scheme:
Praccy: student side. Pass-SeedStudent YESto land on a populated home with a mock teacher and a week of tasks.Praccy (Teacher): teacher side. Pass-SeedTeacher YESfor a 3–4 student roster.- Add
-ForceOnboarding YESto either scheme to replay onboarding without wiping the simulator.
- Build and run with
⌘R.
The MockBackend keeps things working in DEBUG; CloudKitBackend is bound to iCloud.tomaddison.Praccy.
Docs/DESIGN.md: design principles, typography, palette, voice rulesDocs/ARCHITECTURE.md: folder layout and the SwiftData / CloudKit splitDocs/TODO.md: roadmap, blocking work, done logDocs/Voice.md: copy and tone rules