⚠️ At-Risk
🖥️ Kiosk
🛒 POS
📱 Inbox
COMMAND CENTER
Every number the gym runs on, in one place.
Live from Supabase · refreshes on load · build 2026-10-09 14:08
Loading…
change vs previous month
Revenue
—
—
Signups
—
— new — former
Cancelled
—
—
Net Growth
—
—
Leads
—
—
Show Rate
—
—
Active Members
—
live from members table
At-Risk
—
14+ days absent
Avg Member Value
—
revenue ÷ members
FB Leads
—
paid social
Organic Leads
—
web · social · referral · calls
Google Leads
—
paid search
Walk-in Leads
—
in-person
Chatbot Leads
—
website chat widget
Win-Back Pool
—
former clients
📊 Conversion & Health — this month
green = good · yellow = ok · red = needs work · — = not recorded
Show Rate
—
…
No-Show Rate
—
…
Lead → Member
—
…
Trial → Member
—
…
Cost / Lead
—
…
Cost / Client
—
…
⚠ Data quality — read this before trusting the numbers
Checking…
Weekly Scoreboard — Current Month
Month rule: a week belongs to the month holding most of its days; a 4–3 split goes to the later month. A blank cell means the value was never recorded — it does not mean zero.
Metric — — —
Loading weekly stats…
🧠 CLAUDE BRAIN
AI configuration, FAQ, voice rules, and prompt library for your gym
🧠
Pick an analysis
Brain sees your real numbers — members, at-risk, revenue, leads, ad spend
✅ Claude API connected via Netlify
Brain calls go through your server function — no key in the browser. Configured via the CLAUDE_API_KEY env var on Netlify.
💬 AI Prompt Advisor
Talk to Claude about improving your AI agent. Ask it to adjust how it handles specific situations, programs, or caller types.
📌 Prompt Library
Every advisor suggestion is saved here automatically. Mark applied when you've acted on it.
No suggestions saved yet — ask the advisor above.
📋 Generate FAQ Ideas from Missed Questions
AI reviews calls where it couldn't answer a question and drafts FAQ entries for you. One click adds them to your knowledge base.
📖 AI Playbook
The AI reads this before every automated SMS reply in Quick Phone. Edit anything → tap Save Playbook.
Gym Name
Location
AI Tone
📅 Class schedule is now managed in the dedicated 🗓 Class Schedule tab — AI reads from there automatically.
💡 Programs, pricing, and objection handlers are now configured per-funnel on the 📊 Funnels page.
🎯 Engagement Rules moved to Comms Center
Appointment reminders, no-show rebook, win-back, birthday texts, and all message timing/triggers now live there — this page is just Jay Five's personality and knowledge, not automation timing.
🎙️ AI Answers Calls
When ON, Jay Five picks up the phone. Turn OFF during office hours you want staff answering live — every call rings straight to staff/your phone instead.
📞 Voice AI Rules
When AI picks up the phone — inbound and outbound.
📥 Inbound Calls (when nobody picks up)
Rings before AI picks up
AI Greeting (what Jay Five says when picking up)
When caller escalates (cancel, refund, injury, wants to talk to you…)
📲 Connect / Call-back Number (where calls bridge to)
This is the phone that rings when you place a call or when the AI transfers a caller to a live person. Add one or more numbers, then pick the active one. Leave empty to keep using your cell from the environment config (no change).
No numbers configured — calls use your environment cell number.
🔗 Cal.com Booking Links (AI sends these to leads)
When a lead wants to book a trial, AI texts the right link based on their program interest. Add one row per program you offer — remove any you don't run. However many you add or remove, the AI still always has "General" to fall back to if it can't tell which program someone wants.
No program-specific links yet — the AI will use "General" below for every program until you add some.
General (any program)
Always kept — this is what the AI sends when it can't match a specific program above, so it's never left empty-handed.
📅 Class Schedule URL (texted to MEMBERS who ask about schedule)
Prospects get the booking link. Members get this schedule link. Set it to your schedule page or a PDF link.
📤 Outbound Call After Opt-In
Delay before call (min)
Only auto-call leads from these sources (comma-separated)
Script (use [Name] for the lead's first name)
🎙️ Voicemail Script (left when nobody picks up)
📞 AI Outbound Call Window (Eastern Time)
(unchecked = AI can call anytime)
📆 Trial Onboarding Times (AI references these on calls + texts)
When new leads ask "when can I come try?" — AI quotes THESE times. Click "Sync from Cal.com" to auto-fill from your booking pages, or type your times manually below. Either way works — just hit Save Voice AI Rules when done.
🎙️ JAY FIVE VOICE ID
Jay Five voice for AI receptionist and outbound calls. This is the ElevenLabs voice ID that powers your AI agent. Locked platform-wide — not editable here.
💬 Advisor Voice ID (optional — browser Jay Five only)
Leave this blank and the advisor uses the same voice as the phone — nothing changes. Only fill it in if your browser advisor talks to a different ElevenLabs account than your phone does. A voice ID only works inside the account that owns it, so a phone voice pasted here would fail with a 404. This box can never change how your calls sound. Locked platform-wide (2026-08-28) — not editable here.
📞 Texting & Calling
How leads call and text your gym.
Your texting and calling number is set up for you. You don't need to configure anything here.
Calls and texts to your gym's number already reach your AI assistant and your team — it was switched on when your account was created. If your number ever needs to change, or a call or text isn't coming through, contact support and we'll take care of it.
📚 FAQ & Knowledge
The AI's brain — what to say when leads ask common questions, and what to never say. Read by both reply AI and proactive AI.
❓ FAQ — Q & A pairs
If they ask Q → AI answers using A (in your voice — keeps your style)
📣 Always Mention (woven into replies when relevant)
🚫 Never Mention (guardrails)
📝 Notes / Context (anything else AI should know)
🖥️ FRONT DESK KIOSK
Open a class to see everyone eligible to train it. Search by name, tap who's on the mat, hit Save.
Loading…
🏷 CONTACT TAGS
Every tag in use across your contacts. Program-level "default tags" auto-apply when someone joins (set those in Programs & Pricing). Edit/rename/merge here to clean up legacy tags from imports.
Loading tags…
COACHES & STAFF
Members tagged as coaches — excluded from at-risk alerts
NameProgramPhone
RETENTION CENTER
Active members who haven't trained in 14+ days — call, text, or mark contacted
🤝 New-Member Check-ins
3-week / 2-month coach check-ins — who booked, who didn't, and who still needs an outcome
Loading…
📞

No data loaded

Upload your Active Clients CSV to see at-risk members

Today
Loading your morning briefing...
Total members
—
Live memberships
Revenue · this month
—
This month
Today —
On the mat · today
—
Students checked in
—
Signups
—
This month · all signups
Today —
Cancels
—
This month
Today —
New leads
—
Last 24 hours
Bookings today
—
Trial appointments
No-shows · 7d
—
Need recovery
AI messages · 24h
—
Sent by AI
📸 GMB PHOTOS THIS WEEK
—
—
Start here
Loading your briefing…
Needs you Good to know
Today's appointments
No trial appointments scheduled today.
Recover no-shows · last 7 days
Click 🔥 to fire AI rebook
No no-shows in the last 7 days. 🥋
Follow-ups due
Overdue + next 48hrs · View all upcoming →
Queue is clear! 🎯
Daily grind
View calendar →
Loading…
Today's tasks
No tasks for today. Add one above!
Questions the AI couldn't answer
Oldest first — answering one teaches the AI for next time
🎉 Nothing unanswered.
Needs your attention
Nobody is waiting on you. No member has raised a concern.
⏸ Paused conversations — nobody followed up
Reminders from the system — no member is waiting on a reply here.
No paused conversations.
👥 CONTACTS
Every contact. Click any name to open the full profile + conversation.
?
📷
👤 Handled by
📋 Personal Info & Waiver
💳 Membership
🥋 Belt & Rank
Loading ranks…
▼
📋 Attendance
Loading…
💳 Payment Method
No card on file
💵 Bills & Invoices
🏷 Tags
🥋 Programs
👨‍👩‍👧 Family / Linked Contacts
✅ Next Step / TODO
📝 Notes
🔮 Future Follow-Ups
"Ask me in May" / "After my baby" / "End of school year" — schedule it and AI fires the message on the day, with the original context.
🎯 Funnel Activity
Loading…
📋 Timeline
💬 Conversation
⌘/Ctrl+Enter to send
⚠️ Danger Zone
Permanently delete this contact from Supabase. Their messages, calls, and bookings stay archived but the lead record is removed.
🔮 FOLLOW-UPS
Every "ask me later" you've parked. AI fires them on the day with the original context.
HISTORY
Weekly snapshots from the spreadsheet era — kept as a record, no longer written to

📅 How This Works

This page is history in both senses. It holds the weekly snapshots that were saved when the dashboard ran off CSV uploads. That stopped on 2026-08-11 — every number on the site is now counted live from charges, memberships, leads, bookings and check-ins, so there is nothing to upload and nothing new lands here. The old rows are kept because they are the only record of the months before the live data starts.

Saved Weekly Snapshots (0)
No saved snapshots.
📁 DOCUMENTS
Business paperwork — insurance, leases, tax forms. Every staff member in your gym can see and download everything here.
Loading…
📅 COMMAND CENTER PLAN
Your calendar · AI project plans · Tasks — all in one scroll
📅 Google Calendar
Next 30 days from your connected Google Calendar
📅
Click Sync Calendar to load your Google events
AI will also scan upcoming events to suggest project plans
🧠 AI Project Planner
AI looks at your gym data + calendar → builds project plans + future ideas
🗂️
No projects yet
Hit Generate Projects — AI will create plans based on your gym data
📋 Tasks
Your tasks + staff tasks. Open tasks show on each person's Today page (coaches: Staff Today).
👤 My Tasks
👥 Staff Tasks
👥 STAFF SYSTEMS
Manage staff members, tasks, and daily cards
➕ Add New Staff Member
Loading programs…
Staff Members
⏳
Loading staff members…
🔥 DAILY GRIND
Build your streak. Hit your weekly targets.
🔥 STREAK
0
days in a row
✅ THIS WEEK
0%
of targets hit
🏆 BEST STREAK
0
all-time
📅 THIS MONTH
0%
days completed
✅ Today's Grind
Loading tasks…
📅 8-Week Activity
0%
1-49%
50-99%
100%
S
M
T
W
T
F
S
🎯 This Week's Targets
Loading…
📰 PR HUB
Write press releases · manage media contacts · track coverage
ANNOUNCEMENT TYPE
DETAILS
PRESS RELEASE
MEDIA CONTACT INFO
NAME / TITLE
GYM NAME
EMAIL
PHONE
WEBSITE
CITY / STATE
SAVED RELEASES
No saved press releases yet.
🔀 MESSAGE VARIABLES
Personalization tags for SMS & email templates — not to be confused with Contact Tags. Any style works — {first_name}, [First Name], or {{first_name}} — upper or lower case, and every occurrence gets replaced. Unknown tags are left as-is.
Tag Reference
Tag Also accepts What it fills in Example output If missing
Live Preview
Type a message with tags and see exactly how it renders with sample data.
Renders as
Sample data:
🚀 GETTING STARTED
Where you are in setting up your gym.
⚙️ GYM SETUP
These settings tell the AI who it works for — your gym's name, your name, the assistant's name, where you are and what time it is there. Change them here instead of in the code.
🏠 Identity
Gym name
Owner first name
This is the name the AI uses out loud — "Jamal will call you back."
Owner full name
Owner email
Owner cell — alerts text here
Escalations, new bookings and payment problems are texted to this number. Every gym has its own — this is not shared, and it is not the number the AI transfers live calls to.
🤖 The AI
Assistant name
Jay Five (fixed for every gym)
📍 Location & time
Street
City
State
ZIP
Gym phone
Timezone
🌐 Online presence
Website URL
Google Business Place CID
Google Business Location ID
Website repo
These decide which website and which Google listing the SEO tools read from and write to. They must be this gym's own — a leftover value here means another gym's listing gets edited.
🔌 Integrations
Owner/admin only. Click a connector below to view or update its credentials. These are this gym's own — they are never shared with any other gym, and once saved an API key is never shown again in this browser.
CAL
Cal.com
Trial-class booking & scheduling
Not connected
FP
Fluid Pay
Payment processing & billing
Not connected
G
Google
Analytics, Search Console & Business Profile
Not connected
FB
Facebook / Meta Ads
Ad account connection
Not connected
TW
Twilio
Texting & calling number
Not assigned
📇 Business Info (Invoices & Flyers)
What your invoices and marketing flyers print for your gym — used instead of another gym's info. Leave a field blank to omit that line.
Address
Phone
Email
🎟️ Default Offer
What the AI phone/text scripts, the public schedule page, and booking-confirmation texts say when they mention your trial. Leave as-is to keep today's wording.
Offer Label
Trial Length (days)
Price ($, 0 = free)
💳 Billing & Credits
Your prepaid balance for texts, calls and AI usage on this platform. A card on file is required — usage draws down your balance, and new sends pause automatically if it runs dry with no way to top up.
Loading…
🏢 CREATE GYM
Platform-owner only. This is how a new gym tenant actually gets created — no other screen in this app can do it, and there is no way to reach this page unless the server-side check in gym-create.mjs / gym-list.mjs already approved your account.
📋 Setup checklist
At a glance: what still needs to be set up for each gym. Read-only — use the panels below to actually connect something.
Gym Cal.com Fluid Pay Twilio Subdomain Client onboarding Onboarding stage
Loading…
🏋️ Existing gyms
Name Subdomain Owner email Created Credits left Actions
Loading…
➕ Create new gym
Gym name
Subdomain
Lowercase letters, numbers and hyphens only. Automatically lowercased for you.
ℹ️ Creating this gym also adds ___.jfive.io to Netlify automatically. If that step fails you'll see a ⚠️ below — then add it by hand in Netlify → Domain management → Add domain alias.
Owner name
Owner email
Password (optional)
Leave blank to auto-generate a secure temporary password.
📞 Twilio — assign this gym's number
⚠️ Platform-owner only, on purpose. Every gym shares ONE Twilio account (billing for usage is a future build) — a gym never enters its own Account SID/Auth Token, only the platform owner assigns which phone number is theirs here. Picking the wrong number here misroutes another gym's texts and calls to this one.
Gym
Phone number (From)
Which of the shared Twilio account's numbers belongs to this gym. E.164 format, e.g. +19175551234 — copy it straight from the Twilio console.
Messaging Service SID (optional)
Only if this gym uses its own Messaging Service pool. Leave blank to send from the number above directly.
🤝 Onboarding contact & booking link
Who this gym sees on their "Getting started" screen while they wait for approval, and the cal.com link they book their second setup call with. Per gym on purpose — a rep handover is a change here, not a deploy. Leave a field blank to fall back to the platform-wide default (the ONBOARDING_REP_* / ONBOARDING_CAL_URL environment variables).
Gym
Rep name
Rep phone — the client calls or texts this
Rep email
cal.com link for the second call
Embedded in an iframe on their Getting started page, with an "open in a new tab" link underneath.
📈 Margin by gym
Revenue (credits billed × your $/credit) minus your real vendor cost. Your own gym shows cost only. Set your true costs in the Credit Pricing card below.
GymRevenueCostMargin%
Loading…
💳 Credit Pricing (all gyms)
⚠️ Platform-wide, not per-gym — every gym buys credits from the SAME price list and pays the SAME markup rate. Editing this changes what EVERY gym on the platform sees and pays going forward; it never touches history already in the ledger.
Markup rate (what 1 credit costs a gym to spend)
Credits / SMS segment
Credits / call second
Credits / 1,000 AI tokens
Pass-through costs (ElevenLabs voice + external API pulls)
Credits / 1,000 TTS characters (ElevenLabs)
Credits / external API pull
💵 Your raw vendor cost — for the margin report only (never billed)
What each unit actually costs YOU (Twilio, Anthropic, ElevenLabs). Used only to compute margin per gym on the Create Gym page.
$ / SMS segment
$ / call second
$ / 1,000 AI tokens
$ / 1,000 TTS chars
$ / external API pull
Top-up tiers (Spark-style packs)
🧠
Jay Five
Live data · Ask anything
Hey Coach 👋 I'm Jay Five. Type a question and I'll write back. Tap Talk and we can just have a conversation — I'll keep listening between answers until you tap it again.
Follow-ups New leads Attendance Money
Typed questions come back written · spoken questions come back out loud