Everything the system already does for the gym, in plain English — grouped by the outcome it moves. Tap a card to open it. Rendered live from the same file our nightly checks guard, so this page can never disagree with reality.
When someone comments a keyword (like SUMMER) on your Instagram or Facebook post, the system sends them one private message with the guide — a button to tap, and a link if the button does not show. This is your own version of the feature Meta retired, and it works across both channels with one set of rules.
Proofship-register probe `comment-dm-engine` counts guide DMs sent in the last 7 days; the Facebook leg is tracked by `fb-comment-dm-funnel`.
The SUMMER guide page captures a name and phone, tags the person, and starts an eight-week check-in clock (weeks 1, 2, 4, 6 and 8). It turns a guide reader into a tracked lead with a nurture rhythm aimed at the September sign-up window.
Proofship-register probe `summer-guide-capture` counts people tagged in the window (zero before launch is expected).
When an ad delivers a lead, the enquiry is captured server-side straight away and reported back to Meta so your ad reporting is accurate. No lead sits in a Facebook inbox waiting to be noticed.
Proofno live counter card yet — verified by the capture smoke test `crm/scripts/smoke-test-capture-chokepoint.js` and the lead-capture chokepoint decision doc.
A click on a "message us" ad on Messenger or Instagram is stamped with which ad it came from, so you know which campaign actually produced a conversation, not just a click.
Proofno live counter yet — verified by commit `726c0c4` and the concept doc `ctm-ctwa-attribution.md`.
A set of tailored landing pages (women, mums, men, dads) that ad traffic lands on and converts into enquiries, live on the join subdomain.
Proofno live counter here — verified by deployment to join.crossfitbodmin.com (commits `c09758a`, `2671f12`).
Obvious spam and non-lead first contacts are filed away at the door — no reply, no card, no wasted attention. If there is any doubt, it treats the message as a real lead (it fails safe toward the human), so a genuine enquiry is never binned.
Proofship-register probe `ingest-never-respond` counts filings in the last 7 days; the real safeguard is the fail-open rule (a real person filed as spam is the watched failure).
The Marketing view generates campaign and content copy in your brand voice, so a promotion goes from idea to draft in minutes.
Proofno live counter — verified by `crm/marketing-prompt.js` (the generation module) and the weekly campaign-feedback loop.
Every inbound message is read, understood, and replied to by the AI following your conversation rules — the core "someone messages, they get a good answer" engine.
Proofno isolated counter — verified by live production traffic through `crm/conversation.js` and `crm/chat/entry.js`.
Before an AI reply goes out, a separate checker reads it against the known facts and blocks anything that claims something untrue (a wrong price, a class that does not exist). It holds bad drafts rather than rewriting them.
Proofno live counter — verified by `crm/scripts/test-verifier-blocks-not-rewrites.js`.
A lead who replied but never got a clear next step is caught by a safety net and surfaced with a ready-to-send nudge, so warm leads do not quietly go cold.
Proofship-register probe `ghost-net-survival` counts safety-net cards that stayed alive long enough to be actioned. ---
For a warm lead the AI offers genuine open times — a morning and an evening across two days — and when the lead says yes to one, it can book the slot in the same conversation with no tap from you. Only real, available slots are ever offered.
Proofship-register probe `slice3-offer-window` counts AI slot-offers in the window; auto-booking is tracked by `agreed-time-autobook` and `gate12-book-first`.
When someone books with you off to the side — a text, a call, in person — you capture it in one tap from their record. You pick from genuinely free slots only, and the system writes the roster or calendar entry, sends the confirmation, and puts it on your Google Calendar. The same record now also lets you cancel a roster booking or reopen a closed lead in one tap. No more re-typing a booking into PushPress and hoping your CRM caught it.
Proofship-register probe `capture-booking` counts one-tap captures in the last 7 days (zero reads as adoption-pending, not a fault).
The AI can only offer or book 1:1s and calls inside the hours you actually work — never a Sunday, never your lunch break, never with less than your notice period. Ask for a closed time and it apologises and re-offers real ones, instead of booking something you cannot make.
Proofship-register probe `working-hours-availability-floor` is an invariant check — it reads healthy while zero autonomous bookings land outside your hours.
When a call to you goes unanswered, the AI assistant picks up, introduces itself, answers questions, and can book a taster or a call — handing off to a human for anything off-script.
Proofship-register probe `ai-voice-answer-book` counts missed calls the AI answered (zero missed calls reads as legitimately quiet).
A missed call triggers an immediate "sorry we missed you" text, so the caller does not go to a competitor while you are on the gym floor.
Proofno live counter yet named — verified by commits `508f05e` and `f4a3953` (shipped 2026-06-10).
A running split of how many bookings the AI handled by itself versus how many needed you — the single number that proves the system is doing the work. An alarm fires if the AI ever stops booking.
Proofship-register probe `ai-booking-measurement-wired` confirms the health sweep is evaluating the alarm each day.
Your live class timetable is mirrored from PushPress every hour, so the AI never offers a class that was cancelled or moved. A daily check flags any drift between what it thinks and what is really scheduled.
Proofship-register probe `pushpress-mirror-live` confirms the hourly pull is running.
A non-member booked into a class gets a reminder the day before and again the morning of — the simple nudge that lifts the show-rate.
Proofship-register probe `coach-taster-headsup` (combined) counts reminder marks and coach heads-ups.
The evening before, each coach gets a direct message listing the first-timers on tomorrow's classes, so nobody walks in unwelcomed — the hospitality gap that loses new faces.
Proofship-register probe `coach-taster-headsup` counts heads-up sends.
Personal-training sessions are booked against credit packs — each booking decrements a credit, cancellations refund, packs expire on a schedule, and a "one credit left" prompt catches the rebuy moment.
Proofship-register probe `pt-credits-ledger-live` confirms the nightly expiry sweep is running plus counts new packs.
Two bookings can never land on the same coach at the same time, even under simultaneous taps — the calendar can be trusted at scale, and a clashing attempt gets a clean "slot just taken".
Proofship-register probe `pt-bookings-overlap-floor` is a structural invariant — it reads healthy while zero overlapping bookings exist. ---
The morning after someone attends a taster but has not joined, the AI opens a warm follow-up (day 1, then 3 and 7) to convert the warmest moment there is — someone who already came in.
Proofship-register probe `attended-conversion-trigger-v2` counts follow-up decisions in the window.
A survival curve built from your full membership history shows how long members typically stay, with recent cohorts plotted against the baseline — so a dip in retention is visible early, not a year late.
Proofno live counter — verified by commit `267cee4` and `crm/metrics-retention.js` (baseline n=448).
Percentage-of-max load progressions are generated for members, with a personal load-grid lookup — the number-crunching behind a structured strength programme, done automatically.
Proofno live counter — verified by commits `2a4e930`, `8d9a0d3` and the member-app %TM lookup `9c531e2`.
A drag-and-drop editor for building the week's or month's programming, with warm-ups generated to match — you design the sessions, the system keeps them organised and exportable.
Proofno live counter — verified by commits `1e09afa`, `37836df`, `92f1579`.
One honest count of active members and the net movement each month (joins minus leaves) against a growth floor — the fundamental number, computed one consistent way instead of three.
Proofno live counter card — verified by `crm/scripts/member-movement.js`, run on production 2026-06-25 (active 75, six-month net +9). ---
Instead of ten screens, you get one deck of decisions the AI could not make alone, each with a suggested reply and three buttons — follow up, take over, or close. An empty deck means the system handled everything.
Proofno live counter — verified by `crm/scripts/smoke-focus-resolution.js` and `smoke-focus-edit-suggestion.js`.
When a lead becomes a member, gets closed, or is already booked, any now-pointless cards about them are cleared automatically — so your board only ever shows live decisions, not fossils. Acting anywhere clears the board everywhere.
Proofship-register probe `action-chokepoint-card-triage` counts action-time triage decisions in the window.
Leads that have gone silent both ways for 30 days are automatically closed, and closed contacts are never messaged again. Getting the status right is what structurally prevents spam — the system cannot message someone it should not.
Proofship-register probe `auto-close-30d-sweep` confirms the nightly sweep ran.
A watchdog checks the system's own outbound behaviour and, if a message ever heads to someone it should not, demotes auto-send to review mode and raises a critical alert — the system polices itself.
Proofno live counter card — verified by the runbook `crm/docs/SELF-MONITOR.md` and in-container leak-to-halt tests.
Every time your brief is built, the system checks itself over — did the engine actually make decisions, did anything send while review mode was on, is any lead sitting behind two cards at once, and has any deferred piece of work finally become ready to do. A clean check says nothing at all.
Proofno live counter — verified by `crm/scripts/test-daily-brief.js` §15 and by the `ops_audit_error` stamp on the `daily-brief-morning` scheduler log row. Folded out of its own 8am cron on 2026-07-30 (`digest-brief-fold-debt`).
You run the business by replying to the AI in plain English on your own thread. Small, undoable things just happen and you get a receipt with an undo; anything a customer would see waits for your one clear yes; your pause, cancel and refund policy is offered back to you automatically (7-day pause, 30-day cancel, a one-month refund cap read live from your prices); the big or irreversible things stay in the app on purpose. It replies four short lines at a time, one question at a time, and its receipts never claim something happened when it didn't.
Proofship-register probe `reply-floor` counts your reply-driven actions in the last 7 days; the tiered rules are gated by `crm/scripts/test-reply-floor.js`.
WhatsApp, SMS, Instagram, Messenger and email all land in one place, and replies go back out on whichever channel the lead prefers — one conversation, not five apps.
Proofno isolated counter — verified by the channel modules (`crm/whatsapp.js`, `crm/sms.js`, `crm/instagram.js`, `crm/messenger.js`, `crm/email-channel.js`) all in production and the smart-routing logic in `crm/send/index.js`. ---
A pattern that flags members drifting toward cancelling, so a coach can reach out before they leave rather than after. Built as a decision tree, not yet switched on.
Proofbuilt-flag-off — verified by `crm/scripts/test-tree-router.js` and the concept doc `proposed-member-at-risk-tree.md`; not promoted.
A reusable library of workouts you can search, drag into programming, and import from — full feature, currently gated off.
Proofbuilt-flag-off — verified by commit `54b029f` ("full feature, flag-gated OFF").
A pipeline that tags and retains gym media so it can be reused into posts and campaigns — the asset layer under the content engine. Scoped, not yet built.
Proofscoped only — verified by the memory scope `project_content_flywheel.md`; no code yet.
Every booking would be required to record an outcome — attended, no-show, or cancelled — so show-rate is always real and no-show follow-ups always have a trigger. The rule is designed but not yet enforced in the schema.
Proofscoped only — verified by decision doc `2026-05-03-three-pillar` invariant (d); the schema invariant is a named gap, not yet enforced.