Brush Quest

Branch: main
298 commits
Updated: 2026-06-09 18:30
Current #1 Priority
Confirm v28 flips in-review → live on Play Store, then watch crash-free % recover.
Phase: v28 promoted to PRODUCTION at 100% (in Google review, auto-publishes on approval) — carries the #1 Crashlytics audio-crash fix; displaces v22 (live prod since May 11). GTM strategy reset: freeze $1.5K spend, fix retention first, pricing → hybrid model
Workstreams
PRODUCT
APP
v28 promoted to PRODUCTION at 100% (in Google review, auto-publishes on approval) — ships the #1 Crashlytics audio-crash fix to all Android users, displacing v22.
Last commit: `78b9ec2` — chore: bump to 1.0.0+23 for audio StateError fix
What happened: Promoted internal v28 → production at 100% via `fastlane promote_to_production`. v28 carries the #1 Crashlytics audio crash fix (`AudioPlayer._completePrepared` "Bad state") plus v24 auth + v26 audio-lifecycle + camera-dispose/log-strip. Verified on Play Console: v28 IN REVIEW, auto-publishes on Google approval (live prod still v22 from May 11). No git commits — work was via fastlane/Play Console.
Last: v28 promoted to production — ships the #1 audio-crash fix to all Android users (in review, auto-publishing) (2026-06-09)
Next up: Confirm v28 flips in-review → live, then watch crash-free % recover
LANDING PAGE
Live at brushquest.app — email capture LIVE via Buttondown
Last commit: `9354055` — Desktop hero: QR code to open on phone, email form secondary
What happened:
Next up: Add Play Store badge (app approved), monitor first signups
PRICING
PIVOTING — moving away from $9.99/mo toward a hybrid model (free core + one-time unlock + cheap annual)
BLOCKED: Fix retention signal first (per GTM reset) — validate before reopening paid spend
Last commit:
What happened: GTM strategy reset (2026-06-09): three parallel evals converged on pivoting pricing away from $9.99/mo subscription toward hybrid (free core + one-time unlock + cheap annual). Retention signal must be fixed first.
Next up: Design hybrid pricing; validate retention before implementing paywall
CEO: Confirm hybrid pricing direction
MERCH
DONE
Last commit:
What happened:
Next up: Order on Printful (Oliver YS/YM black, Theo 4T/5T black)
BUSINESS
LLC
Complete — LLC approved, EIN obtained, bank open, Google Play org account active
Last commit:
What happened: Play Store org account registered, app deployed to internal testing
Next up: Monitor internal testing, prepare for production release
ACCOUNTING
In progress — QuickBooks + Mercury bank open, need to connect and log expenses
Last commit:
What happened:
Next up: Connect Mercury → QuickBooks, log all existing expenses
OPS
DEV CYCLE
v28 promoted to production at 100% (in Google review). Carries the #1 Crashlytics audio-crash fix + v24 auth + v26 audio-lifecycle + camera-dispose/log-strip.
Last commit: `78b9ec2` — chore: bump to 1.0.0+23 for audio StateError fix
What happened: `fastlane promote_to_production` pushed internal v28 → production at 100%. v28 bundles the #1 Crashlytics audio crash fix (`AudioPlayer._completePrepared` "Bad state") on top of v24 auth, v26 audio-lifecycle, and camera-dispose/log-strip changes. Play Console shows v28 IN REVIEW, auto-publishing on Google approval; live prod still v22 from May 11.
Next up: Confirm v28 flips in-review → live; watch crash-free % recover; iterate on Phase 1 / retention metrics
STRATEGY
GTM strategy reset — freeze the $1.5K spend, fix retention signal first. Routes-to-market are a sequence (D2C → dentists → insurance); pricing pivots toward a hybrid model.
Last commit: `2ac386c` — launch/branding docs + marketing screenshots/video + iOS fastlane
What happened: GTM strategy-reset session: three parallel evals (CFO / parent / risk) converged — freeze the $1.5K spend, fix the retention signal before spending. Routes-to-market sequenced (D2C → dentists → insurance). Pricing pivots away from $9.99/mo toward a hybrid (free core + one-time unlock + cheap annual). No code written this session.
Next up: Instrument/measure retention before reopening paid spend; validate hybrid pricing; run D2C route first
MEMORY SYSTEM
Active — 4-tier architecture built, knowledge graph operational
Last commit:
What happened:
Next up: Refine write gate criteria from real usage, improve cross-project entity linking, session handoff reliability
Dev Cycle
v28
Prod (in review)
v22
Live Prod
#1
Crash Fix Shipped
788
Tests
85.7 MB
APK
Date: 2026-06-09
Mode: production promotion via `fastlane promote_to_production` (no code; fastlane/Play Console)
Version: v28 promoted to production at 100% (IN REVIEW, auto-publishes on Google approval; live prod still v22 from May 11)
Carries: #1 Crashlytics audio-crash fix (`AudioPlayer._completePrepared` "Bad state") + v24 auth + v26 audio-lifecycle + camera-dispose/log-strip
Trend: C16 v20: 4 Oliver regression fixes, 784 tests 2026-04-28: Public Beta submitted, iOS port plan locked 2026-05-11 v22: dual-platform release — Android production review + iOS TestFlight (3 testers), 788 tests 2026-05-12 v23: audio StateError hotfix → Android internal track + TestFlight Beta Review submitted 2026-06-09 v28: promoted to production at 100% (in review) — ships the #1 audio-crash fix to all Android users
Benchmark insight (Chomper Chums): Chomper Chums uses animated character reactions as immediate feedback during brushing — the character visibly reacts to brushing speed with facial expressions (happy/sad/excited). In Brush Quest, mons
Deferred Backlog (2 items)
#2: Companion voice retirement — Jim said no unless strongly needed. Arc suppression (Cycle 3) is working.
#3: `audioplayers._completePrepared` crash — pre-v20 builds only; can deprioritize if install base rolls forward to v20.
Next: Post-v28 promotion — confirm v28 flips in-review → live on Play Store, then watch crash-free % recover; iterate on retention signal before reopening paid GTM spend
Active Decisions
D-010: GTM strategy reset — freeze spend, fix retention first, pricing → hybrid (2026-06-09) ACTIVE
Three parallel evals (CFO / parent / risk) converged: freeze the $1.5K spend and fix the retention signal before spending more. Routes-to-market are a sequence — D2C first, then dentists, then insurance. Pricing pivots away from $9.99/mo subscription toward a hybrid model (free core + one-time unlock + cheap annual). Supersedes the D-002 monthly-subscription model. No code written this session.
D-009: Dual-platform v22 release — first simultaneous Android+iOS ship (2026-05-11) ACTIVE
Android v22 submitted to Play Store production review (worldwide availability set via Play Console UI — API has no setter). iOS v22 uploaded to TestFlight 07:48 via `fastlane beta` + ASC API key 4YY7329MH5; 3 external testers invited (Jan Deloach, Antoine Markarian, Matt Ganser). Family-and-Friends 409 STATE_ERROR workaround: attach via `builds` then POST `betaTesterInvitations`. Cycle delivered parent-gated camera onboarding (4th page) + home camera nudge + 20s→15s default brush phase + new `voice_camera_prompt.mp3` asset; 788 tests pass.
D-008: iOS port plan locked — 4 phases, Kids 6-8 + Education, manual release, v1 iPhone-only (2026-04-28) ACTIVE
`docs/ios-port/PLAN.md` locks the iOS port at 50+ tasks across 4 phases with 11 compliance gaps mapped (Sign in with Apple, parental gates, privacy manifests, COPPA). Targets Kids 6-8 + Education category, manual release, v1 iPhone-only. Name conflict discovered with existing "Brush Quest" iOS app — needs differentiation.
D-007: Decouple Android Phase 1 from iOS port (2026-04-28) ACTIVE
GTM restructured into `docs/launch/CROSS-PLATFORM-GTM.md` + `docs/android-launch/PLAN.md`. Android Public Beta ships independent of iOS readiness; iOS follows after Apple Business verification + name conflict resolution.
D-006: Alpha closed test track + public tester Group (2026-04-22) ACTIVE
Configured Alpha closed test track on Play Console in 4 countries (US/CA/UK/AU). Created public Google Group brush-quest-testers@googlegroups.com with open self-enrollment for tester onboarding. Firebase auth resolved for v20 Crashlytics access (Chrome + jmchabas@gmail.com).
D-005: GTM-v4 portfolio frozen — 3 Tier-1 pillars, 400-600 WAK target (2026-04-21) ACTIVE
Trunk loop closed Phase 1. Portfolio frozen at 3 Tier-1 pillars; target reframed to 400-600 Weekly Active Kids. 3 Substack pitches drafted (PRD-007). instagram-executor-agent stub passed smoke test. Phase 2 = execution on frozen portfolio.
D-001: Ship to Play Store before v7 polish (2026-03-14) DONE — v1.0.0+10 approved by Google Play, live for internal testers (2026-04-12)
App passed Google Play review and is now live with completed release status. Cycle 13 addressed Oliver's 22-day playtest feedback before deployment.
D-002: "Space Ranger Pass" — $4.99/mo or $39.99/yr (2026-03-15, APPROVED) SUPERSEDED by D-010 — pivoting to hybrid model (free core + one-time unlock + cheap annual)
Deep research done (see `research/`). Parent-feature subscription rejected — camera "verification" is dishonest. Content-led model approved by Jim.
D-003: Feature freeze until 100 users (2026-03-14) ACTIVE
Zero new features until 100 real (non-Jim) users. Only allowed: bug fixes blocking brush completion, Play Store requirements, analytics instrumentation.
D-004: Cross-platform expansion — iOS scaffold with Sign in with Apple (2026-04-17) ACTIVE
Expand beyond Android-only. iOS platform scaffolded with Sign in with Apple auth to satisfy App Store requirements when Google Sign-In is offered. Cross-platform strategy spec committed.
Blockers
BlockerOwnerSinceImpactStatus
D-U-N-S number pending Jim 2026-03-20 Blocks Google Play org account DONE — Play Store org account active, app deployed
Google Play developer account (personal) suspended Jim 2026-03-14 N/A — going org account route ABANDONED — registering org account under AnemosGP LLC instead
No Firebase Analytics events APP 2026-03-14 Flying blind on retention DONE — COPPA-compliant, 10 events instrumented
No privacy policy page LANDING 2026-03-14 Blocks Play Store DONE — COPPA 2025 + CCPA compliant, 10 sections, live
No email capture on landing page LANDING 2026-03-14 Losing potential early adopters DONE — Buttondown, platform-aware forms, QR code for desktop
Play Store listing missing dashboard screenshot APP 2026-04-22 Blocks listing upload for Alpha track DONE — 8 captioned screenshots + 26s promo v5 submitted in Public Beta listing
Apple Business org verification Jim 2026-04-28 Blocks iOS App Store Connect setup OPEN — case #102880286319 escalated, May 4 ETA
iOS name conflict — existing "Brush Quest" iOS app Jim 2026-04-28 Blocks iOS App Store listing OPEN — needs differentiation (tagline, suffix, or rename)
TestFlight build 22 missing Beta Review approval Jim 2026-05-12 Blocks Antoine/Matt/Jan from receiving TestFlight invites OPEN — Beta Review submission started 2026-05-12
v28 awaiting Google production review Google 2026-06-09 #1 audio-crash fix not live until v28 publishes (prod still v22) OPEN — v28 IN REVIEW at 100%, auto-publishes on approval
Recent Activity
78b9ec2 chore: bump to 1.0.0+23 for audio StateError fix (internal/TestFlight only)
460e1db parent-gated camera onboarding + home nudge (1.0.0+22)
2ac386c launch/branding docs + marketing screenshots/video + iOS fastlane
e0f6f7d Cycle 16 v20: 4 regression fixes from Oliver v19 retest
86d938d docs(gtm-v4): trunk status + 3 Substack pitches drafted (PRD-007)
7602710 loop(trunk): termination gate — 2 PRDs + 6 meta-PRDs
8d391e1 loop(trunk): synth-final — portfolio frozen (3 Tier-1 pillars, target reframed 400-600 WAK)
8c23feb loop(trunk): 3 evaluator outputs
294c7e5 loop(trunk): synth-1 portfolio draft + live writer research for PRD-007
3018a76 loop(trunk): question + context brief + 5 lens research outputs
2510b1d docs(gtm-v4): Phase 1 closed — validation shipped; follow-on plans listed
4bfeb50 feat(gtm-v4): instagram-executor-agent stub + successful smoke test
829d836 docs: Sign in with Apple design spec
61949fa feat: iOS platform scaffold + Sign in with Apple + cross-platform strategy
8e0d3a0 chore: bump to v1.0.0+17
0c2a721 Cycle 14: 13 T1/T2 auto-fixes — audio, lifecycle, parent trust, consistency
f6f1987 chore: flip fastlane release_status draft → completed (app approved)
cb0102a fix: CI — upgrade Flutter 3.32.1 → 3.41.4 + format all files
1f3a643 chore: bump version to 1.0.0+10 and deploy Cycle 13 to Play Store
79e35da feat: legendary first-only + audio crossfade + K.O. voice variety
f6c3b01 fix: TAP TO FIGHT icon + onboarding P3 space theme
d130d00 feat: shop snackbars icon-only + evolution arrows (P1)
ed8281c feat: victory — route exits through _goHome, auto-open chest, bigger stats
9df66ed fix: shared purchase mutex across hero+weapon services
94d572d feat: add delete cloud data button — COPPA compliance
494f0d4 feat: home — stat animations on return + greeting voice stops on dismiss
36d0d1c feat: simplify Stars tab — visual summary, remove math
836831c feat: show monster silhouettes for uncaught trophies — Pokemon-style mystery
72c28b0 feat: add voice to locked trophy taps — P7 consistency with shop
2c37462 feat: home screen — badge icon for rank + icon-first greeting popup (P1, P11)
da8ba84 Add memory management system victory + design docs
7399d97 Update landing page download links to v1.1.0
076e28a Fix tests: update camera flow test for picker removal, add unlock voice assets
82e33cb Voice: 10 world mission briefings + 10 unlock encouragements (classic + buddy)
5c8702e World intro: 10s auto-advance timer with countdown ring
d628377 Victory: show next unlock name + icon, full card reveal, album highlights card
eef5b7c Text variety + performance: encouragement pools, cap popups, reduce particles, fix painters
4d76847 Remove pre-brush picker — hero tap opens shop, BRUSH button goes straight to battle
68ac272 Privacy policy: move phone to contact section, simplify legalese
f579c22 Privacy policy overhaul: COPPA 2025, CCPA, store-ready
d0af93f Update status board: Cycle 6 shipped, 99MB APK, 651 tests
e9cb7d5 Cycle 6: 30 findings — onboarding, victory, home, voice arcs, new tests (99MB APK, 651 tests)
def0ded Splash logo, weapon UI, voice latency, auto-sync, mentor voice pack (George)
7e22ecf Update status board: Cycle 5 shipped, 98MB APK, 593 tests
35ccca1 Cycle 5: voice preload, card duplicates, visual progress, audio compression (98MB APK)
Snapshot generated 2026-06-09 18:30 — View Build Log