The proof · Build With Gemini XPRIZE

One person.
AI-native by necessity.

4thCoach is a real business run by one person — which is only possible because AI does the operating: analyzing every clip, routing every model call, keeping the books. This page documents that machinery, with numbers. It's the evidence file for theBuild With Gemini XPRIZE.

Category 01 · Education & Human Potential2 days to submission19 sports · 73 movement scopeslast verified 2026-08-15
01

Business Viability

Costs audited nightly, automatically

A real product with real users — sign-up, analysis, and feedback all in production — and open books: costs are pulled nightly from billing APIs by the same system that runs the app.

02

AI-Native Operations

42 automated jobs run the business

AI isn't a feature here; it's the staff. Models make production decisions on every clip — classification, routing, quality scoring — scheduled jobs do the back office, and a fleet of scheduled AI agents reviews the business itself: costs, security, release state, business trends, and Android parity, each posting its findings to public GitHub issues.

03

Category Impact

19 sports · 73 hand-authored movement scopes
Our category · 01 Education & Human Potential

Education & Human Potential: 4thCoach turns the clips already on a phone into patient, repeatable coaching for anyone working at a physical skill — a swing, a sprint, a lift, at any age — closing a feedback loop most people never get, on video handled the way children's video should be.

The three judging criteria, equally weighted. Ties break on Business Viability first. — geminixprize.com/rules

The 90 days

The whole arc — idea to operating business — inside the window.

Everything that makes this a business was built inside the contest window: 3,409 of 3,540 commits (96%), ~655K lines, the entire production backend, and every loop below. Full disclosure, because the rules ask for it: the first commit is 05/13 — an iOS spike, one of many personal AI explorations over the past ~24 months — and I found out about the Build With Gemini XPRIZE on 05/26, after the window had already opened.

  1. 01 · Ideate2026-05-13

    Prototype spark

    First commit: an iOS spike — one of many personal AI explorations over the past ~24 months. 131 commits of prototype existed on day one.

  2. 02 · Build2026-05-19

    Window opens

    96% of all commits (3,409 of 3,540) and ~655K net lines land after this date.

  3. Show 4 more stepsShow fewer steps
    1. 03 · Ship2026-05-26

      Found the contest

      Learned about the Build With Gemini XPRIZE two days after the real backend went live on Cloud Functions + Firebase, with Gemini on Vertex AI as the production brain — and decided to build a submission around what was already running.

    2. 03 · Ship2026-05-30

      Real-business guardrails

      Prod data protection (PITR, backups, delete-protection), separate staging/prod projects, gated deploys.

    3. 03 · Ship2026-06-14

      Coach chat + release rings

      TestFlight + Firebase App Distribution rings; features soak on staging before a human cuts the prod tag.

    4. 04 · Grow2026-07-06

      Growth machinery

      Moment feedback shipped, live scoreboard on the site, this proof page — the business starts marketing itself.

  4. 04 · Grow2026-07-25

    Built for minors' video

    Vertex-only inference, a 180-day media expiry that keeps the coaching and drops the footage, audited admin access, and an adult-account gate at signup — the safety half of a product built on children's video, shipped before the submission rather than promised in it.

  5. 04 · Grow2026-08-17

    Submission

    1:00pm PT. The window closes.

The tools, rung by rung

  • IDEAGemini AppScoping the problem: what makes youth-sports clips coachable, and what a solo founder can realistically ship in 90 days.
  • PROTOTYPEGoogle AI StudioPrompt prototyping against real clips. It is deliberately not in the production chain: athlete video is frequently of minors, so every production call is pinned to Vertex AI's enterprise terms.
  • DESIGNFigma + Google StitchScreens designed in Figma and generated from text prompts with Google Stitch, then refined in code — every screen, this page included.
  • DESIGNNano Banana + VeoMarketing and demo imagery generated with Nano Banana, and demo video clips generated with Google Veo.
  • BUILDClaude Code, Cursor + GeminiAI agents (Claude Code, Cursor) running on Claude and Gemini models wrote most of the code and operate the business. The build process is itself AI-native operations.
  • SHIPFirebase + Google CloudCloud Functions, Firestore, Storage, Vertex AI — plus Secret Manager, Cloud Scheduler, BigQuery billing export.
  • LAUNCHTestFlight + this siteStaged release rings and a marketing site with a live scoreboard.
  • GROWThe loops belowFeedback, referral, and revenue loops — each one either closed or being closed in public.

● = Google stack · Gemini API powers every analysis in production

AI-native operations · the pipeline

What happens to every clip, untouched by hands.

From upload to coaching, the pipeline runs itself. The cyan stages are decisions AI makes in production on every single clip — which sport this is, which model to use when capacity shifts mid-request, and whether each finding is actually backed by what's in the video.

UploadFirebase Storage◈ Classifysport + skill · GeminiPrompt assemblycontext + priorsContent cachehash dedup · skips the paid call◈ Escalation chaincapacity + confidence routingSchema validationgated + salvaged◈ LLM judgeper-finding evidence checkPose snapdeterministic window fitUser feedbackthumbs + reasons + corrections
analyze prompt at v3.26, 26 iterations shipped2-model escalation chainevery response schema-validatedevery finding judged by a second model353 clips analyzed in prod
AI-native operations · the model layer

Calling Gemini is the easy part.

Anyone can post a video to an API. The distance between that and a product a parent trusts is all in the layer around the call — how the video is sampled and delivered, what happens when the model is uncertain or at capacity, what happens when it returns something half-broken, and how a prompt change is allowed to reach a real kid's clip. Prompt v3.26, 2 models, every call on Vertex.

  • Frame rate

    Sampled at 6 frames a second, not one

    Gemini samples video at roughly 1 fps by default. A swing or a pitch is about one second long, so the default can miss the entire event — early clips came back described as unanalyzable still images. Every analyze call sets the sampling rate on the clip part itself, which is why athletic motion registers at all.

  • Delivery

    Two paths in, chosen by clip size

    Clips under 14 MiB are sent inline. Anything larger is handed to Vertex by storage URI instead, so the bytes are never downloaded into the function at all — the difference between a request that works at 40 MiB and one that dies trying to base64 it.

  • Routing

    A chain, not a call

    Flash handles the normal case. A low-confidence read escalates to Pro; a capacity error walks to the next entry rather than failing the user. The whole chain runs against a time budget that reserves room for the validation, judging, and writes that happen after the model returns.

  • Output

    Schema-validated, and salvaged

    Responses are validated against a schema before anything reaches a user. A response that is partly malformed doesn't fail whole — the valid findings are salvaged and the bad paths dropped, because one broken field shouldn't cost a parent the other four things the model got right.

  • Cost

    The same clip is never paid for twice

    Analyze results are keyed by a content hash of the clip and the assembled prompt. A re-analysis that would produce an identical call skips the model entirely and serves the cached result — the cheapest inference is the one never issued.

  • Change control

    The prompt is versioned like code

    The analyze prompt is at v3.26 — the minor is a real count of shipped iterations of the v3 line, each one gated by the eval harness before it could ship. Prompt changes are reviewed, versioned, and regression-tested, not edited live.

Every prompt change is gated by the harness inevidence it works ↑ · the Vertex pin and why it exists is in handling minors' video

Category impact · evidence it works

Prompt changes don't ship on vibes.

Every change to the coaching brain runs a gauntlet first: a golden set of real clips with hand-authored ground truth, 12 deterministic scorers, and an LLM judge grading every finding on 5 axes — specificity, actionability, correctness, tone fit, grounding. A replay harness re-runs the real production corpus to catch regressions before they reach a single kid's clip.

The evals UI: the golden set of real clips with hand-authored ground truth, sourced from functions/eval/golden, that gates every prompt change.
schema compliancemotion matchwindow accuracyfinding coveragecue presencetags coveragetier matchtier languagepositive precisionexplain coverageannotation placementprimacy rank
Category impact · handling minors' video

Many of the clips are of kids. That changes what we owe them.

That is a responsibility before it is a product decision, so the guardrails were built into the pipeline rather than bolted on for a submission — 5 of them run in production today, and each one is a line of code a judge can go read.

None of them ask how old you are. The same rules govern every clip and every account: an adult working on a squat gets the video handling, the retention limits, and the coaching boundaries a nine-year-old's swing gets. Minors set where the bar sits — everyone gets the bar.

Live in production · 5

  • Every analysis runs on Vertex, by force

    Athlete video is frequently of minors, so no clip ever touches the consumer AI Studio surface, whose terms historically may use submitted content for training and human review. Vertex AI's enterprise terms do neither. buildProductionChain() rewrites any @aistudio entry back to @vertex, so even an environment-variable override can't reintroduce it.

    since 2026-06-16
  • Video expires; the coaching doesn't

    A daily sweep deletes source video and audio 180 days after upload and flips the clip to an expired state, with a storage lifecycle rule as backstop. Findings, trends, and the poster frame persist — the value outlives the liability. Users are told the window up front, so expiry is never a surprise.

    since 2026-07-23
  • Nobody looks at a kid's clip unlogged

    Admin access to any clip writes a durable record — who, which clip, when. It's a top-level collection on purpose: a record nested under the session would die with the session, which is exactly when a retroactive question would need it.

    since 2026-07-14
  • A user's media is reachable only by that user

    Storage rules scope every read and write to the owning account, cap uploads, and deny client-side update and delete outright — deletes go through a function so media and metadata can never drift apart. A scheduled job re-checks the deployed rules against the repo daily and fails loudly on drift.

    since 2026-07-07
  • Production data is recoverable, not just backed up

    Point-in-time recovery over a rolling 7-day window, automated daily snapshots, and delete protection on the production database — so no API call or console mis-click can take it out.

    since 2026-05-30

Rolling out · 4

  • Adult account holders, structurally

    The whole minor-data posture rests on the account holder being an adult, with any child in a clip a subject whose guardian consented. A neutral date-of-birth screen now blocks account creation for a self-identified minor, and the server refuses to analyze for an account with no adult attestation. Deliberately stores the verdict, never the birth date. Server enforcement is staged behind a flag until the build carrying it is in users' hands.

    since 2026-07-25
  • The model is told what it may not say about a kid

    Coach chat is the one surface where a user types freely, and the subject is a child's body. A scope block now bounds it: no medical or injury judgment, nothing evaluative about anyone's body in EITHER direction — praise about a kid's build teaches the same lesson criticism does — and any sign of real distress routes to a trusted adult instead of a drill. Asserted by tests so a prompt refactor can't quietly drop it.

    since 2026-07-25
  • Harm thresholds are set, not inherited

    Every model call now pins its own harm-category thresholds instead of taking whatever the SDK default happened to be — a default that can change under you with no record that it did. Strictest on sexual content; deliberately moderate on 'dangerous', because youth sports is full of imagery a naive classifier reads as violent and blocking a bat swing protects nobody. A withheld response is handled as a content outcome, not an outage, so the block rate stays visible.

    since 2026-07-25
  • A parent can report the AI, to a named human

    One tap on a finding or a coach reply files a report — no explanation required, because friction in front of a harm report is friction that loses reports. Reports land in their own collection, never the general feedback queue: sharing a queue would mean a report about a child gets ranked against feature requests. The daily ops job trips on any unread report older than 24 hours, with no volume floor. Owner and response times are written down, including that the backup is currently nobody.

    since 2026-07-25

The COPPA / minor-data position is written up and pending counsel review — listed as pending rather than claimed, same as everything else on this page.

Business viability · running the business

One person operates this, because the metrics come to him.

40 dashboard views over pre-aggregated rollups — growth, quality, cost, and ops — built for a staff of one. Spend is pulled nightly from three billing APIs. Model toggles take effect in seconds and every flip is audit-logged. Nothing here requires a data team; the data team is a cron schedule.

The admin Overview dashboard: north-star and usage KPIs, waitlist, and an itemized cost pipeline (per-service spend), auto-updated from the rollups.
  • Growthoverview · funnel · retention · signups · referrals · gates
  • Qualityquality · feedback · critiques · coach review · classifications · movement profile
  • Costbusiness cockpit · daily spend · per-model spend · escalation rates · comp codes · pricing
  • Opshealth · system map · model toggles · events · taxonomy · issue catalog · users · admins
Business viability · open books

The numbers, in the rules' own format.

The submission requires revenue by month, total costs, marketing spend, and related-party revenue reported separately. Here they are — kept honest automatically, because costs are recorded nightly by the same billing syncs that run the business. Revenue is the youngest number on this page: both rails are wired end-to-end, and neither has recorded a sale yet.

Total revenue (arms-length)Blocked · App Store review$0
Revenue by monthMay $0Jun $0Jul $0Aug $0
Apple has not approved the iOS build, so the in-app purchase rail — the one most users would buy through — cannot take a payment yet; the submission that was in front of Apple on 2026-08-15 came back for changes and is being resubmitted. Stripe web checkout is live in production and has recorded nothing either. Sandbox and TestFlight purchases deliberately write no ledger row, so judge testing cannot move this number.
Total costs (excl. marketing)$732.19
Receipted cash for the full window, every row linked to its invoice in docs/finance/LEDGER.md: $566.25 of AI development tooling and CI, $10.00 of Google Cloud AI Studio prepaid credits (the only GCP cash — promotional credits cover the rest), $155.94 of domain registrations for the rebrand. No salaries, contractors, or ads. Understated, not final — the hitplai.app renewal and the LLC formation fee are excluded by founder decision, and adding them only moves the loss further negative.
Marketing + customer acquisition$0
Related-party revenue (reported separately)$0
AI-native operations · while I sleep

42 jobs that never ask for a day off.

The rules ask for "evidence that playbooks are running in production continuously." This is the playbook roster — every scheduled and event-triggered job, and the human work it replaces.

10 Event-triggered · 19 Scheduled syncs & rollups · 12 AI agents · 1 Maintenance routine

JobRunsWhat it does for the business
Event-triggered · 10fire on product and crash events
onClipFinalizedon every uploadRuns the full AI analysis the moment a clip lands in Storage — classify, analyze, judge, validate, persist.
onPosterFinalizedon every uploadClassifies the sport off the poster frame, minting a new activity into the catalog if it's one the catalog has never seen.
onSignupCreatedon every signupSends the welcome email without a human touching the list.
onGoogleRtdnMessageon Play Store eventIngests Google Play real-time developer notifications so Android subscription state stays server-authoritative.
onPlayerCreatedon every player addedEnforces the plan's player cap at write time.
onSessionDeletedon deleteCleans up analysis subcollections and media when a user deletes a session.
onSessionScopeChangedon player/sport/skill editReconciles the issue ledger when a session's scope changes so a pattern never tracks against the wrong athlete or skill.
onCrashlyticsFatalIssueon Crashlytics alertPushes a fatal iOS crash into the same ops feed that watches the backend — Crashlytics has no poll API, so this is event-driven, not a cron.
onCrashlyticsRegressionon Crashlytics alertFlags a previously-resolved crash that came back.
onCrashlyticsVelocityon Crashlytics alertFlags a crash spiking in frequency before it becomes a fatal-issue alert.
Scheduled syncs & rollups · 19keep the books, metrics, and hygiene current on a cron
bizopsRollupSyncdailyRebuilds the business-cockpit rollups, timed after the billing syncs so same-day cost data is folded in.
userBlockersRollupSyncdailyRebuilds the fleet-level view of which users are stuck and where.
ledgerBackfillSyncdailySelf-heals any issue-ledger key that a prior backfill missed.
sessionsRollupSynchourlyAggregates usage events into the KPI rollups the dashboard reads.
dailyRollupSynchourlyBuilds 90 days of per-day metrics: sessions, failures, active users, activity heatmaps.
funnelRollupSyncdailyRecomputes the sign-up → import → first-analysis → feed funnel.
gatesRollupSyncdailyRecomputes the gate metrics the roadmap is judged against, including paying subscribers.
billingSyncdailyPulls Google Cloud spend from the BigQuery billing export; flags cost spikes.
anthropicBillingSyncdailyPulls LLM-judge spend from the Anthropic cost report.
githubBillingSyncdailyPulls CI/build spend from GitHub billing.
pricingSyncdailyDiscovers current per-model pricing from the Cloud Billing SKU catalog.
modelsSyncdailyDiscovers available models and probes each for callability.
mediaExpirySweepdailyDeletes expired source video while preserving the session and its findings, so coaching outlives the file.
compExpiryReminderSyncdailyWarns time-boxed comped users before their access lapses — no silent expiry.
sportTaxonomySyncon change + dailyPromotes provisional activities to permanent once enough distinct users hit them, and merges duplicates.
coachReviewBatchSyncweeklyComposes an uncertainty-weighted clip batch for the human coach panel to label.
progressRecapSyncweeklySends each family a recap of what changed in their athlete's patterns.
winBackSyncweeklyReaches out to families who stopped uploading, referencing their own players.
triggerStatusevery runEvery job above logs its own completion, latency, and errors for ops visibility.
AI agents · 12read production and post their findings to GitHub
agent-ops-digestdailyAn AI agent reads production health end-to-end — failure rates, costs, crashes, feedback, ledger freshness — and posts a dated digest, filing and now also closing its own issues as conditions clear.
agent-bizopsdailyAn AI business analyst re-evaluates every open observation against fresh data, writes new schema-validated ones through a deterministic I/O harness, and files roadmap issues for the ones that demand action.
agent-release-traindailyReports what is merged but undeployed per release channel and composes the exact tag command a human would push — the AI decides what should ship; a human pushes the button.
agent-chief-of-staffdailyAn AI chief of staff reads the rest of the fleet's findings plus the triage and PR queues and posts one ranked 'top 3 today' brief — a synthesizer bound by an anti-noise contract: it files no issues and holds no credential at all.
agent-usage-reportweeklyWrites the per-user prod usage narrative: who used the product, what failed for whom, and whether features are used as intended.
agent-authz-sweepweeklySecurity review of route auth, Firestore/Storage rules permissiveness, credential hygiene, and the agent fleet’s own privileges.
agent-gtm-funnelweeklyDrafts the go-to-market funnel report from prod signup and funnel rollups.
agent-growthweeklyDrafts up to three send-ready growth assets — outreach, listing copy, testimonial requests with an explicit consent ask — grounded only in shipped features and public pages. Drafts only: the founder sends; the agent never publishes or emails.
agent-cost-guardianweeklyOwns week-over-week cost trends across GCP, GitHub, and Anthropic spend, plus CI run-shape anomalies.
agent-parity-ledgerweeklyDiffs two weeks of shipped iOS changes against the Android port and maintains the public parity ledger: ported, n/a, or gap.
agent-architecture-reviewmonthlyJudgment-level architecture review, capped at five findings so every one is worth reading.
agent-doc-truthmonthlyVerifies checkable claims in the ops docs against the code and opens a correction PR when reality drifted.
Maintenance routines · 1change code, but only as draft PRs a human reviews
routine-dead-codeweeklyFinds dead code, verifies the build stays green without it, and opens a draft deletion PR for human review.
AI-native operations · the loops

This business is a set of loops. Here's each one.

Every loop below is a signal, a decision, and an action. Closed means the whole cycle runs without a human. Closing means the work is underway. Open means a human is still the middleware — listed anyway, because a trajectory you can audit beats a claim you can't.

Closed — the whole cycle runs without a human 17

Clip → coaching
signalA clip lands in StoragedecisionWhat sport, what skill, what's coachableactionFull AI analysis persisted, zero human touch
The core product loop — live since May 24.
AI grades its own coaching
signalEvery finding the analysis producesdecisionIs this actually supported by what's in the clipactionA second model scores each one inline; the verdict is shown to the user and blocks weak findings from hardening into a pattern
The quality bar is enforced by a model, on every clip, before anyone sees it.
Pattern lifecycle
signalEach new clip, judged against every pattern already tracked for that athletedecisionIs this pattern still watching, confirmed, fixed, or backactionStatus advances on the evidence alone, a win is celebrated once, and a regression reopens itself
Progress is derived, never curated — and it's measured in when the footage was shot, not when it was uploaded.
Model routing
signalA model call hits capacity errorsdecisionWhich model/backend to try nextactionEscalation chain advances automatically mid-request
AI infrastructure decisions made in production, per request.
Sport detection
signalA new clip's poster framedecisionWhich sport and skill this isactionClassifier routes the analysis; low confidence falls back to user input
Don't pay twice
signalThe same clip, the same prompt inputs, the same model chaindecisionHas this exact question already been answeredactionA hit returns the prior answer and skips the paid model call entirely; anything uncertain pays for a fresh one
A broken cache is designed to cost money, never correctness.
Spend circuit breaker
signalRunning AI spend for the day, counted on every analysisdecisionHas today's ceiling been reachedactionAnalysis sheds itself with a retryable error until the day rolls over — no human, no pager
A blunt instrument on purpose: it protects the runway, then resets itself.
Cost bookkeeping
signalDaily spend across Google Cloud, Anthropic, GitHubdecisionWhat the business spent, itemizedactionThree billing syncs write auditable cost records nightly
The books keep themselves.
Spend anomaly detection
signalA day's cost deviates from trenddecisionIs this a spike worth flaggingactionAlert surfaces on the ops dashboard
Detection is closed; targeted auto-mitigation is still an open loop below.
Price discovery
signalVendor model pricing changesdecisionWhat each model costs todayactionDaily sync updates the pricing store
Model health probes
signalDaily model registry sweepdecisionWhich models are actually callable right nowactionUnreachable models flagged on the ops dashboard
Robot customer
signalEvery production release, and once a day regardlessdecisionDoes the whole product still work, not just bootactionA synthetic user uploads a clip, waits for real coaching, and deletes it — a release that can't coach fails itself
Rollback stays one click away instead of waiting for the first family to notice.
Nightly ops review
signalProduction telemetry, cost alerts, job health, feedback ratesdecisionWhat degraded overnight and what's worth escalatingactionAn AI agent reads production through a read-only credential and posts a dated digest, filing deduped issues on what it finds
The write side runs unattended every night; a human decides what to fix.
Business observations
signalDaily bizops rollups: revenue, funnel, quality, cost, and gate trendsdecisionWhich business trends are real, which resolved themselves, and which demand actionactionAn AI analyst re-evaluates every open observation against fresh data, writes new schema-validated observations through a deterministic I/O harness, and files a roadmap issue for each act-severity one
Cron live since 2026-08-14 after supervised dry and live runs; the LLM never touches the database directly — a tested harness validates, caps, and dedupes every write.
Metrics pipeline
signalRaw usage events, continuouslydecisionWhat the KPIs areactionHourly rollups feed every dashboard without a human query
Revenue
signalA supporter subscribesdecisionWhat they're entitled to, and what the business earnedactionCheckout → signature-verified webhook → entitlement, launch-price redemption, and referral credit, all unattended; the dollar figure in the finances section is still typed by a human
Live end-to-end since #212 closed. Subscribing today primarily runs through the App Store (StoreKit 2), with web Stripe checkout kept working as an unlinked fallback — no sale through either path yet, which is why the number below is honestly zero.
Taxonomy growth
signalThe classifier sees an activity the catalog has never seendecisionIs this genuinely new, or a name for something already knownactionHigh-confidence new activities are minted into the live catalog on the spot; repeat sightings across users promote them to permanent
The product's vocabulary grows itself — a human never approves a sport.

Closing — the work is underway 2

Feedback → coaching quality
signalUsers rate findings (helpful / off-target, with reasons)decisionWhether this coaching survives, and which clips deserve expert reviewactionAn off-target rating retires that finding and rederives the whole pattern view on the spot; flagged clips are automatically weighted into the coach-review queue. What feedback still does not do is reshape the analysis prompt itself
In production so far: 120 findings rated — 55 helpful, 65 off-target, 45 with a written reason. Each off-target rating retired that finding and rederived the athlete's pattern view on the spot. Small numbers, honestly reported: this is a beta.
The last mile — feedback steering the prompt — is the honest gap.
Coach verdicts → eval set
signalA weekly batch of uncertain clips goes to a human coach paneldecisionWhich of the AI's calls the regression suite should hold it toactionEach verdict converts itself into a golden-set candidate; a human approves it and commits it to the repo
The batch is chosen and the candidate is written without a human; only the commit is deliberate.

Open — a human is still the middleware 3

Cost-aware routing
signalLive per-model pricing (already synced daily)decisionWhich model gives the best quality-per-dollar right nowactionToday prices are bookkeeping only — routing is a fixed chain, reordered by clip difficulty, never by cost. Next: the chain orders itself on current prices
Model auto-heal
signalA model's daily health probes flip, in either directiondecisionShould the routing chain changeactionProbe results reach the ops dashboard but never the live chain — a human still toggles a model in or out
Spend auto-mitigation
signalA detected cost spike correlates with a misbehaving modeldecisionDisable it or ride it outactionToday a blunt daily ceiling halts spend indiscriminately; next: the specific culprit is disabled and a human is told

a closed ring runs itself · a spinning ring is being closed · the dot in the broken ring is a human, still doing that step

Case study

One loop, end to end

The clearest way to see the difference between AI that advises and AI that runs things is to follow a single loop all the way through. Think of the "coaching recipe" as the instructions the AI follows when it looks at a swing and decides what to say.

  1. Real users' complaints rewrote the recipe. When someone taps "this advice isn't right," that signal is collected. An AI agent reviews those complaints weekly and decides whether the recipe itself is at fault. It decided it was. The recipe was rewritten, and the new version has been live for every user since August 12 — the production records show the exact moment users moved from the old recipe to the new one.
  2. An automated referee can stop a release — and it did. Every night the system re-runs the AI against videos whose correct answer is already known, and scores it. If quality drops, that job raises a failure, and the release process refuses to ship to production while it stands. For two days, nothing shipped. Nobody overrode it.
  3. It let go when the evidence changed. The system re-read its own scoring history and worked out that the failure was ordinary run-to-run variation on one wobbly test video rather than a real drop in quality — it could tell because that same video had swung that far before with nothing changed underneath it. It cleared the block itself, and releases resumed.

AI changed what the product says to real families, and held the power to stop a release until it was satisfied. A human still pushes the production release button — that gate is deliberate, and it is the only step in this loop a person performs.

Meta · this page maintains itself

Who keeps the evidence honest? The same agents — and a human who signs off.

This page is maintained by an agent skill — proof-sync — that re-inventories the codebase, refreshes every number above, diffs the claims against reality, and opens a pull request the founder reviews. The roadmap that schedules that work is itself groomed by agents in GitHub issues. Product strategy lives in a separate knowledge base with one standing rule: when a document disagrees with shipped code, the code wins and the document gets fixed.

"…agent execution logs, API usage records, and screenshots of dashboards — anything that strengthens the case that playbooks are running in production continuously."— what the official rules ask for. This page is that, as a URL.
last verified: 2026-08-15maintained by: proof-sync (agent) · reviewed by: Bryanrecent syncs: #843 · #1459 · #1606 · #1686 · #1704

Watching the race? The live scoreboardtracks clips, total users, and revenue against the deadline — and thefounder letter explains why this exists at all.