⚠️ At-Risk
🖥️ Kiosk
🛒 POS
📱 Inbox
 Credits
COMMAND CENTER
Every number the gym runs on, in one place.
Live from Supabase · refreshes on load · build 2026-08-11 10:01
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
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.
📞 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.
Adult BJJ
Muay Thai
Adult MMA
Kids Cubs (4-7)
Kids Lions (7-14)
General (any program)
📅 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.
💬 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.
🔊 Test My Cloned Voice (ElevenLabs)
Type any line — hear it spoken in your cloned voice. Same TTS used for outbound calls + voicemails + AI receptionist.
📞 Twilio Connection
Your Twilio credentials power inbound calls, SMS, and the AI voice agent. Save these once — the system uses them automatically.
Account SID
Auth Token
Twilio Phone Number (From)
Your Cell (Forward unanswered calls to)
Inbound Voice Webhook URL (paste into Twilio dashboard → Phone Numbers)
Inbound SMS Webhook URL (paste into Twilio dashboard → Messaging)
📚 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
📞

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
⚠️ 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.
📅 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 — attach to projects to keep everything organized
👤 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:
⚙️ 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
📍 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 — Cal.com & Fluid Pay
Owner/admin only. These credentials 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. Leave a key field blank to keep what is already saved.
📅 Cal.com
API key
Timezone
Event type ID
Event types
Username
💳 Fluid Pay
API key (private)
Public key (tokenizer)
Environment
Fluid Pay needs BOTH the API key and the public key together — fill in both, or leave both blank to keep what is already saved.
📈 Google (Analytics, Search Console & Business Profile)
GA4 Property ID
⚠️ In Google Analytics, add <your-service-account-email> as a Viewer on this property, then paste the GA4 Property ID here.
Search Console Site URL
⚠️ In Search Console, add <your-service-account-email> as a Full user on this property, then paste the property's Site URL here.
GBP Place ID (CID)
Find this by searching your gym on Google Maps, opening Share → Embed a map, and copying the numeric CID from the embed URL.
📣 Facebook / Meta Ads
Ad Account ID
⚠️ In Meta Business Suite, grant our Business Manager access to this ad account (Business Settings → Ad Accounts → Add → give access), then paste the Ad Account ID here.
🎟️ 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)
🏢 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
Loading…
🏋️ Existing gyms
Name Subdomain Owner email Created
Loading…
➕ Create new gym
Gym name
Subdomain
Lowercase letters, numbers and hyphens only. Automatically lowercased for you.
⚠️ After creating this gym, go to Netlify → Domain management → Add domain alias, and add ___.jfive.io there. This does not happen automatically — the gym's subdomain will not work until you add it.
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.
🧠
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