auto-synced 12 Aug 2026 · live numbers:
canonical_facts.json+ the Growth Cockpit.The one shared surface Aga + Nic drive from every day, toward £25K recurring MRR. Funnel + company P&L + efficiency. No personal finances live here — ever. Owner: Nic (funnel + fixes). Reviewed weekly by Aga (strategy, budget). Kept fresh by the Scorekeeper (agent + daily email robot).
This is not the war room. The war room (TMA-TURNAROUND-WAR-ROOM-JUL2026.html) is founder-only — cash, runway, burn, payroll, personal spend. It stays private.
This is the shared growth scoreboard: the ~8 numbers that move us toward £25K MRR, plus company revenue & spend (P&L level, not bank balances). Both Aga and Nic can see it, edit it, and ask Claude questions of it — same page, same second.
The sharing line (locked): - ✅ Shared: funnel stages, MRR-to-goal, Cost per Trial, CAC, channel efficiency, retention/churn, ad spend, email engagement, company revenue & spend (P&L). - 🔒 Never shared here: cash position, bank balances, runway, burn, VAT/tax, payroll by name, personal spend, valuation/exit maths. Those live in the war room only.
Only recurring MRR counts. Lifetime / promo cash is one-time — it is EXCLUDED from the MRR line (it's cash, not MRR).
~£10K now → £12K BREAK-EVEN (next rung) → £15K (month-6 gate) → £25K (GOAL)
Nic stares at the next rung daily (break-even, ~£2K away), not the far number. £25K is the horizon on the bar.
Traffic → Leads → Trials → Paid → Retained, plus two efficiency gates.
| # | Metric | Target | Status today | Owner action |
|---|---|---|---|---|
| 1 | MRR (combined recurring) vs £25K | £12K → £25K | 🟡 LIVE* | *Fix: old brief showed app-rail only, under-reporting ~5×. Now Stripe web + RC app combined. |
| 2 | Traffic (sessions + installs) | grow, quality-weighted | ✅ LIVE | Watch for cheap-junk inflation |
| 3 | Leads + lead rate | 28% (now ~12.6%) | ✅ LIVE | Rate > count |
| 4 | Lead → Trial — #1 leak | rising WoW | 🔴 DARK | Instrument (Phase 0) |
| 5 | Trial → Paid % | ≥40% | 🟡 PARTIAL | Hold |
| 6 | Net retention / churn | churn ↓ | 🟡 PARTIAL | 80% of June's drop was here |
| 7 | Cost per Trial | <$20 | 🔴 DARK | The gate to re-open paid |
| 8 | CAC / LTV:CAC | ≥3:1 | 🔴 DARK | Tag UNVERIFIED until attribution lands |
Half the board is dark — that is the point, not a bug. The DARK boxes ARE Nic's job #1. One fix — RevenueCat→Meta CAPI + repair RevenueCat→Amplitude + de-inflate begin_checkout (Phase 0 in the tracking brief) — lights up the entire right half at once: clean trials, trial→paid, lead→trial, Cost per Trial, CAC.
Event-source naming convention (Nic · 9 Jul 2026): rc_* = RevenueCat · af_* = AppsFlyer · unprefixed = web/GTM. Amplitude's AI-merge unifies same-meaning events across sources (af_purchase + purchase + rc_initial_purchase → merged Purchase); the raw prefixed events stay unmerged for audit. The scoreboard's pullers should read the merged events for KPIs and the raw rc_* stream for the ±5%-vs-RevenueCat reconciliation gate. Verified 9 Jul: af_* flowing; rc_* zero in taxonomy. RE-VERIFIED 24 Jul (live Amplitude API): 7 rc_* event types NOW EXIST and are flowing — but volumes fail the reconcile badly (rc_trial_started = 3/30d vs ~128 web trial_started in GA4). The pipe is connected; most events aren't leaving RevenueCat. Next step = RC→Amplitude integration settings audit (all event types, both platforms) + backfill, then the ±5% gate. Boxes 4/7/8 stay DARK until reconciled.
Three layers, one job each:
Netlify stays only for one-way story docs (the growth analysis, the tracking brief). It is read-only — never the editable scoreboard.
Data flow: growth_scoreboard_pull.py → scoreboard_snapshot.json → push_to_sheet.py → Google Sheet → Looker board + daily email.
An AI never runs unattended in the daily job. The email is a deterministic robot; Claude is the on-demand brain you ask.
launchd runs the Python puller on a Mac → emails the full report (Gmail SMTP). £0. Needs a Mac awake.daily_email.gs) on the Sheet — a daily time-trigger on Google's servers pulls + emails the full report to Aga + Nic. £0, no n8n, no Anthropic, no git, no laptop dependency. This is the version that survives Aga going part-time.| Owns | |
|---|---|
Scorekeeper (tma-growth-daily-brief agent + the email robot) |
The mechanical daily refresh + first-draft brief + the ONE flagged action |
| Nic (human owner) | The funnel and the fixes. Job #1: turn the 🔴 DARK boxes 🟢 (Phase 0 instrumentation). Drives leads → trials → conversion. |
| Aga (founder, part-time) | Weekly 30-min review · strategy · budget sign-off. Not the daily grind. |
Governance: Nic owns growth and reports the numbers and has equity gated on £25K MRR — so the control is that every number traces to Stripe/RevenueCat truth, runs through the Skeptic + Attribution gates, and Aga reviews weekly. Not distrust — hygiene, protecting both sides.
google-analytics-claude-access@the-movement-athlete.iam.gserviceaccount.com. Then export GROWTH_SHEET_ID=<sheet id> (drop it in .env.local).tools/finance/venv/bin/pip install gspread google-auth. Then python tools/finance/growth_scoreboard_pull.py → python tools/finance/push_to_sheet.py → Sheet populates. (£0/run, no LLM.)daily_email.gs into the Sheet's Apps Script, set recipients, add a daily trigger (7am). (Or wire the launchd plist for the ship-today path.)Source of truth for this system. Update this doc — never let the Sheet, the Looker board, and this doc drift.