Open follow-ups show on Admin & Front Desk Daily Grind cards.
Open Follow-Ups
Loading…
🤖 Handled by AI (recent)
Loading…
📋 Task Manager
➕ New Task
Tip: to assign to one specific person instead, open their profile and add the task there.
Tasks by Employee
Loading…
Welcome aboard
Optional — opens the assistant with a real question about your day.
You've got training videos assigned. Head to Staff Training when you're ready to watch them — no rush, they'll be waiting.
Staff Profile
—
👤 Basic Information
✅ Assigned Daily Grind Tasks
Tasks this staff member is responsible for. Add from the dropdown; ✕ to remove.
Loading tasks…
🎬 Curriculum
Assign teaching curricula — the coach sees today's video on their Daily Grind.
📅 My meeting links
Cal.com booking links for member check-ins — one per meeting. New members are texted the link for their coach.
🔑 Security & Access
Member Since: —
➕ Add Lead
👥 Contacts
💰 Win-Back
📊 Funnels
📅 Class Schedule
👥 Roster
🥋 Belts
💳 Plans & Pricing
📱 Kiosk
COMMAND CENTER
Every number the gym runs on, in one place.
Live from Supabase · refreshes on load · build 2026-10-09 14:08
⏸ MEMBERS ON HOLD 0
Name
Phone
Program
Hold Start
Hold Until
📂 Upload CSVs
Each button saves directly to Supabase
▼
Members & Programs
Member count · Programs · At-Risk
Revenue & New Members
Revenue · New Members · Cancelled · Trials
Show vs No-Show
Appt Show % · No-Show · Weekly breakdown
Win-Back Pool
Win-Back Pool count
Facebook Leads
FB lead count · Total Leads
Organic Leads
Organic lead count · Total Leads
New Members by Lead Source — enter once per month
Loading…
Total Leads by Source — enter once per month
Loading…
🧠 AI Business Advisor
Ask about your numbers
Loading…
change vs previous month
Revenue
—
—
Signups
—
— new— former
Cancelled
—
—
Net Growth
—
—
Leads
—
—
Show Rate
—
—
Not collected yet · this month
—
Loading…
▾
Member
Plan
Amount
Billing date
Group
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
No figures for this month yet
📊 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…
🌐 Website & Google — last 30 days
📈 Google Analytics isn't connected yet
These panels stay empty until Analytics is wired up. Nothing here is estimated — an empty card means no data, never a guess.
People who contacted you
—
from the website
Visitors who contacted you
—
website-form enquiries ÷ website visits
Free Google search clicks
—
found you without paying
Website visitors
—
visits, not unique people
ℹ️ Analytics isn't cross-checking your enquiry count
The two numbers above are fine — since 11 Aug they are counted from your own leads table, the people who actually got in touch, not from a tag firing in a visitor's browser. Nothing here is blank or zero because of this.
What is missing is the second opinion. No event on your site is marked as a key event in Analytics, so there is nothing to compare your real count against. If you want that cross-check, mark your contact-form submit and your click-to-call as key events in Analytics (Admin → Events). Worth knowing before you do: the last time this tag was working it read 8 enquiries in a month while 101 real people had got in touch — which is exactly why the headline stopped depending on it.
Where your visitors come from
Website visitors — last 6 months
Free Google search clicks — per weekly snapshot
Clicks — not impressions or average position. Clicks is the one Search Console number that wasn't disturbed by Google's September 2025 change to how results are counted.
Pages people land on first
Phone vs computer
The US runs roughly 43–47% phone. If your phone share is high but phone visitors contact you less often, that's a specific, fixable problem.
📍 Google Maps & Business Profile
For a gym, a large share of demand never reaches this website at all — someone searches “bjj near me”, taps Directions, and turns up. Calls, direction requests and Maps views are the closest thing to a digital intent-to-visit signal you have.
Google gates this behind a written access application, reviews it over about two weeks, and starts new projects at zero quota — so it can't be switched on from here. Worth applying now; the clock runs in the background.
Current split. The trend over time is the "Students by Program — Trend" chart below.
Loading…
📅 Total Bookings by Month
Revenue Trend
Member Growth
Leads by Source
New vs Cancelled
Appointments: Show vs No-Show
Show Rate % Over Time
Students by Program — Trend
Leads by Channel
Loading…
📈 No History Yet
These charts count your live data — charges, memberships, leads, bookings and check-ins. Nothing to upload. If this note is showing, the database returned no rows at all, which usually means a connection problem rather than an empty gym.
📈SITE TRAFFIC · LAST 30 DAYS
TOTAL VISITS
—
sessions
ORGANIC
—
free search traffic
PAID
—
FB + Google ads
NEW VISITORS
—
first-time visits
Cost Per Lead
—
Enter ad spend below
📣 Ad Spend Tracker
Checking FB Ads…
FB Ad Spend ($)
Google Ad Spend ($)
FB Leads
—
—
FB CPL
—
Google Leads
—
Google CPL
—
Organic Leads
—
Cost Per Member
—
🔄 Conversion Analysis Loading…
FB Leads Funnel
—
Total Leads0
Booked0
Attended0
Became Member0
Total Leads → Booked: 0%
Booked → Attended: 0%
Attended → Became Member: 0%
Lead → Became Member: 0%
— (from lead source tags)
Organic Leads Funnel
—
Total Leads1
Booked0
Attended0
Became Member0
Total Leads → Booked: 0%
Booked → Attended: 0%
Attended → Became Member: 0%
Lead → Became Member: 0%
—
Cost Per Acquisition
FB — Cost Per Lead
—
FB — Cost Per Booked
—
FB — Cost Per Conversion
—
Auto from FB API ($0)
FB vs Organic — Current Month
Monthly Conversion Trend
Sold from FB
0
from member records
Sold from Organic
0
from member records
Total Sold
0
all sources
🔁 Bookings & Rebookings
Counted on the day the booking was made — not the day of the appointment.
Loading bookings…
New Appointments
—
First time they booked
Booked Their Next
—
Came back and booked again
Rescheduled
—
Moved a future appointment
Cancelled
—
Gave up the slot
By week
Week of
New
Booked next
Rescheduled
Cancelled
Moved more than once — worth a call
Who
Times moved
Currently booked for
Showed up?
Nobody has moved an appointment more than once. That is a good sign.
Sun
Mon
Tue
Wed
Thu
Fri
Sat
Click any day to see that day's appointments below.
Appointments
Appts Booked
—
Loading…
Show Rate
—
Loading…
No-Show Rate
—
Loading…
Appts Cancelled
—
Loading…
🎟️ Trial → Member Conversion
Only counts trials that ended long enough ago for someone to have decided.
Loading conversion…
Conversion Rate
—
of decided trials
Signed Up
—
became members
Didn't Sign Up
—
click to see who
Still Deciding
—
not counted either way
Who didn't sign up
Name
Program
Trial
Days ago
Status
🧠 CLAUDE BRAIN
AI configuration, FAQ, voice rules, and prompt library for your gym
🧠
Analyzing your gym data...
🧠
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.
Thinking…
📌 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.
Reviewing your call history…
📖 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.
⚠️ All automated calls/texts are currently paused platform-wide (Comms → master switch) — calls won't reach the AI even while this shows ON.
📞 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…)
Transfer to this number (leave blank to use your cell from Twilio config)
📲 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)
Earliest call time
Latest call time
📆 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.
📋 This is starter content, copied from AllStar's own setup so you're not starting from a blank page. Review it below and rewrite anything that isn't true for your gym — it stops showing as soon as you save a change.
❓ 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)
🥊 PROGRAMS
The things you teach and who they are for. Classes, offers and lead follow-up all point at these. For prices and plans, use Plans & Pricing.
Loading…
🗓 CLASS SCHEDULE
Weekly recurring classes. Cal.com is for trial appointment bookings — this is the ongoing schedule for members. AI agent reads this when asked "what time is BJJ tonight?".
📄 Schedule PDF Link (auto-sent when leads text "send me the schedule")
+ New Class
Name
Program
Level
Day
Start Time
Duration (min)
Instructor
Loading…
🎽 ROSTERS
Manual rosters grouped by program. Create a roster (e.g. "Adult BJJ — Advanced", "Comp Team", "Cubs Beginner"), then assign members to it. A member's roster controls which classes they're allowed in.
Group members into class cohorts — this is not daily attendance. Looking for today's attendance? See Kiosk →
+ New Roster
A roster is defined by which classes its members can attend. Name it, tie it to one or more programs, then check the classes below.
Roster Name
Tied To Programs — check every program this roster belongs to (a roster can span multiple, e.g. "Comp Team" across BJJ + MT + MMA)
Loading…
Description (optional)
Class size limit (optional)
Leave blank for no limit. With the box unticked the number is just a guide — nobody is stopped.
🗓 Classes — check every class this roster's members can attend
Loading classes…
No classes yet? Build them first — Gym Ops → Classes.
Loading…
🥋 BELT RANKINGS
Track ranks, stripes & promotions across all programs
What a stripe is.
A stripe is a small step between belts — students earn a set number of
stripes on their current belt before moving up to the next one. You decide
how many classes each stripe takes, per rank, under
Belt Settings.
Promotion Eligible lists everyone
who has now attended enough classes for their next stripe or belt. Nothing
is ever awarded automatically — the list only tells you who has earned the
conversation. You promote them.
Class counts come from kiosk check-ins, and the count resets each time you
award something. Programs without stripes (armband systems, for example)
simply count classes to the next rank instead.
The belt beside each name is drawn
in that program's own colours, with the stripes already on it filled in and
the one they are due drawn hollow. It means "ready", never "promoted".
Needs a rank set is everyone who is
checking in but has no belt on record yet — nothing can be counted toward a
stripe or a belt until someone types in the rank they are already wearing.
Loading…
Loading belt data…
CONFIGURE BELT SYSTEMS
Build your own belt/rank system for each program — custom names, any color, stripe counts, and how many classes are needed at each level.
💡 Tip: Each color picker lets you choose any color. If a rank has stripes enabled, "Classes/Stripe" = how many check-ins earn one stripe. With stripes off it's the total classes to reach the next rank.
💳 PROGRAMS & PRICING
What members can buy. Edit prices anytime — changes apply to NEW signups. Existing members keep their grandfathered price unless you bulk-update.
Follow-up after purchase — what a new member hears once they've paid for this program
Check-in coach — who new members on this program book their check-ins with
Loading programs…
📝 Waivers & Contracts
Manage document templates, send signing links, and track who has signed
Templates
Loading templates…
No templates yet. Click "+ New Template" to create your first waiver or contract.
Cancellation Policy
How a member cancels, and what's required before it takes effect.
This gym only
These settings belong to this gym and nobody else.
Saving here changes the rules for this location only — no other gym on the platform sees or inherits them.
The renewal-reminder email — when it sends and what it says — is set up in Comms → Automations → 🔁 Membership Renewal Notice.
Loading policy…
Drives the effective date the member profile computes when staff record a cancellation. Must not exceed the renewal notice window set in Comms.
Only templates of type Cancellation appear here. Create one in Templates above.
New Template
Saving creates version 1. Editing an existing template saves a new version and keeps history.
Merge tags — these are replaced with the member's real info on the signing page: [Member Name] full name · [First Name] · [Date] signing date · [Program] their program · [Gym Name] AllStar MMA
Signers
Loading…
✓ Signed (0)
✗ Not Signed (0)
🖥️ KIOSK & CHECK-INS
Today's attendance · manage the front-desk kiosk display
Tick what someone needs before class. Ask lets the check-in go through and prompts them at the kiosk. Must fix first refuses the check-in and sends them to the front desk.
Applies to new and returning faces only — established members are never stopped at the door. Nothing is enforced while the gate is OFF.
📋 Today's Attendance Log
Loading…
🛒 Point of Sale
Ring up memberships, apparel & equipment
Loading…
💳 BILLING SETUP
Who gets charged automatically, who is one step away, and who should never be charged at all.
🔒Nothing is charged from this screen. It only sets when a charge should happen. Members who paid in full can never be switched on here — no tickbox, no date, no exceptions.
Loading…
Show me
Nothing ticked
Both buttons show you exactly what would happen before anything is saved.
Preview — nothing has been saved yet
Loading memberships…
Start automatic billing?
Read this line back to yourself before you press it.
💰 BILLING & CHARGES
Upcoming auto-charges + past billing history. Each charge inherits the program/plan/category from the membership at charge time so reports stay stable even if you change prices later.
💳 Card Collection Drive
Members re-adding their card while the old processor's tokens are stuck
Loading…
✅ HAVE A CARD
—
⏳ STILL NEED
—
📲 TEXTS TO SEND
—
📵 NO PHONE
—
📲 Send card links
Use {first}, {name}, {names} (both kids on a shared phone), and {link} — the link is required and is unique + signed per family.
Next 30 days
Memberships scheduled to auto-bill in the upcoming period
PROJECTED TOTAL
$0
Loading…
Charge history
Every billing event recorded. Someone hand you cash, a check or a Venmo? Use Record Payment.
PERIOD TOTAL (collected)
$0
Loading…
📦 INVENTORY
Equipment · Supplies · Purchase Orders
TOTAL ITEMS
—
TOTAL VALUE
—
LOW STOCK
—
CATEGORIES
—
NEW PURCHASE ORDER
ITEM NAME *
CATEGORY
VENDOR / SUPPLIER
QUANTITY
UNIT COST ($)
TOTAL COST
ORDER DATE
EXPECTED DELIVERY
NOTES
ORDER HISTORY
TODAY'S REVENUE
$0
TRANSACTIONS
0
ITEMS SOLD
0
AVG SALE
$0
🛍️ PRODUCTS FOR SALE
Only items with a retail price set appear here. Add price in Equipment tab.
Loading products…
📋 RECENT SALES
Loading…
⚠️ LOW STOCK ITEMS
Items at or below their reorder level — order these soon
💵 Payroll
Hours × rate for a date range — GROSS, before taxes
These are GROSS figures — before taxes. Nothing here withholds tax, files anything,
or produces a W-2 or 1099. Hand these totals to whoever runs your payroll. If you do not
have one yet, this screen is not a substitute for one.
Loading…
💰 Pay rates
A raise is a new rate with a start date, never an edit to the old one. Shifts worked
before that date keep the old rate for ever, so reprinting last quarter after a raise gives
the same numbers it gave then.
⚙️ Overtime & rules
Overtime rule — confirm with your accountant.
Default: time-and-a-half over 40 hours per week (federal standard).
New Jersey is believed to follow the federal weekly rule with no separate daily
overtime rule — but that is a recollection, not advice, and this software should not be
the reason you believe it. Ask your accountant once, set the numbers below to match, and
you never have to think about it again.
Leave blank for none — that is the federal position.
Overtime is counted per 7-day week, never per pay period.
Closed overnight and flagged. Counts as zero hours until you confirm the real time.
Rounding is to the nearest minute and is not adjustable — quarter-hour rounding is a paper-timecard habit that carries real legal risk.
🔒 Payrolls already locked in
Loading…
📋 REPORTS
Business Intelligence · Export · Save
📅
Monthly Business Summary
Revenue, new members, cancellations, leads, conversions — your month at a glance
🎯
Lead & Conversion Report
Leads by source, conversion rate, cost per new member, follow-up status
📈
Member Growth Report
Sign-ups vs cancellations, net growth by month, breakdown by program
🔄
Retention & At-Risk Report
Churn rate, who's gone quiet, at-risk members, average member lifetime
🎁
BOGO Memberships
How many, and when each expires
📣
Ad Performance Report
Facebook + Google side by side: spend, leads, cost per lead, best campaign
💰
Revenue Report
Monthly and quarterly revenue, by program, vs. same period last year
📞
Follow-Up Report
Open leads, no-shows, unconverted trials, days since last contact
📰
Weekly Digest
Last 7 days: revenue, new members, cancels, top lead source, action items
🥋
Class Attendance Report
Which classes are packed, which are empty, best days and times
🏆
Year in Review
Annual summary: total revenue, members gained/lost, best month, ad spend ROI
💵
Financial Summary
Total revenue, avg revenue per member, month-over-month growth, projected annual
📉
Revenue Trend Report
Revenue over time, growth rate, best and worst months, seasonality patterns
📊
Marketing ROI Report
Ad spend vs. new members, cost per acquisition, revenue generated from ads
💳 Financial Reports
💳
Financial Transactions
All charges, payments, and credits in a date range — by type, member, and status
🔄
AutoCharge Report
Recurring billing status, failed charges that need follow-up, EFT overview
🔮
Financial Forecast
Projected monthly, quarterly & annual revenue based on active memberships
🛒
Items Sold
Memberships, gear, retail products — units and revenue by period
↩️
Financial Refunds
All refunds issued — amount, reason, member, refund rate vs gross
📊
Gross Financial History
Monthly gross revenue, refunds, net — up to 24 months, YoY growth
💾 SAVED REPORTS
No saved reports yet — run a report and click Save.
FROM
TO
🧠 AI INSIGHT
⚡ Usage & Credits
What the texting, calling and AI actually consumed — and what it cost you
When ON, Jay Five picks up the phone. Turn OFF while the desk is staffed and answering live — every call rings straight to staff/the owner's phone instead.
⚠️ All automated calls/texts are currently paused platform-wide (Comms → master switch) — calls won't reach the AI even while this shows ON.
Loading...
⏱ Time Clock
Who is on the clock, and everybody's hours
🟢 On the clock right now
Loading…
Hours only — your pay rate is not shown here. Times are rounded to the nearest minute.
Something look wrong? Tell the owner; shifts can only be corrected by them, and every
correction is recorded with a reason.
Loading…
Today's problems
Scheduled but never clocked in · clocked in late · still on the clock overnight · shifts waiting for you to confirm.
Loading…
Recurring weekly schedule
The normal week — "Mon/Wed/Fri 4–9pm". This is what "scheduled but never clocked in"
and "clocked in late" are measured against. It is not a published rota: one-off shifts,
swaps and time off are not handled here yet.
Loading…
Clock-in PINs
Everyone needs a 4-digit PIN before they can clock in — the tablet is shared, so the PIN
is what proves who is punching. PINs are stored scrambled and can never be looked up,
only replaced. Tell people theirs in person. Five wrong tries locks that person out for
15 minutes.
Loading…
📖 Curriculum Builder
Create and manage lesson plans
Loading...
🎬 Today's Video
Your daily lesson content
Loading...
🎓 Staff Training
Training videos for new staff — build the library, assign to people, track who's watched what
Loading...
👥 Staff Management
Create and manage staff accounts
Add New Staff
Current Staff
Loading...
🎬 Add Onboarding Video
— or —
MP4 or MOV, up to 500MB. Filming on your phone and uploading here works.
🎯 Assign to staff
🖥️ 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…
Nothing marked yet.
Only the students you tapped are saved. Anyone you didn't touch stays unmarked — a partial roll is never recorded as absent.
🏷 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
Name
Program
Phone
📱 SMS INBOX
One inbox for every text — Replied to AI, AI Handling, Needs Attention, Closed, Dead. Every SMS the dashboard sends shows up here.
⏸ Automation is OFF — no texts or emails will be sent, and the AI won't answer or place calls, until you turn it back on. Staff can still call, text and email manually.
Texts Sent
—
—
Confirmed Delivered
—
—
Failed
—
—
Texted Back
—
—
📣 Sending a one-off message to a group?
Closings, schedule changes, win-back offers — those live in Campaigns, where you can test it first and spread it over days.
NEW PEOPLE & TRIALS
Everything someone hears from the moment they book through their first weeks.
📅 Booking Confirmation & Reminders
Everything sent around a booking — the instant confirmation, optional follow-up details, and reminders leading up to class.
Booking confirmation tone (AI rewrites in this voice)
Placeholders for the messages below: {name}, {full_name}, {time}, {program}, {date}
24-hour reminder message
1-hour reminder message
Follow-up message (sent AFTER the confirmation above)
⭐ Google Review Requests
NOT RUNNING
Asks for a review after a trial and again after they join. Each text names the class they took and — only when we actually know it — their own town, so reviews spread across every town you draw from.
Your Google review link (required — nothing sends without it)
Days after the trial
Message — leave blank to use the default
Days after joining
Joining gift (optional)
Message — leave blank to use the default
The final text someone who drifted away ever gets. The offer goes to everyone; the review ask is only added for people who actually trained with you.
Win-back offer
⚠️ The gift is a joining gift, stated on its own — never offered in exchange for a review. Google prohibits paying for reviews and will remove them.
CURRENT MEMBERS
What goes out once they have signed up.
👋 New Member Welcome
Sent once, automatically, the day someone joins. This one is yours to write — say whatever you'd say if you texted them personally.
Use {first} · {name} · {program}. Leave blank to use the default above.
Welcome video (optional)
One video for every new member, added as a line under this text. Leave it blank and nothing extra is sent. A YouTube or Vimeo link is safest.
🎂 Birthday Text
Sends a personal birthday SMS to any lead or member whose birthday matches today's date. Reads the birthdate from their profile.
Send at (time, ET)
No sales pitch on birthdays — just a nice message.
Message (placeholder: {name})
WIN-BACKS
For people who went quiet — cold leads and former members.
💔 Win-Back (cold leads & former members)
Days of silence before win-back
Message (placeholders: {name}, {program})
🌱 Lead Nurture — one track, two channels
Long-term follow-up for leads who never converted. The texts and the emails below are the same track on two channels, not two versions of it — a cold lead can get both.
Channel 1 of 2 — text messages
Channel 2 of 2 — emails
🌱 Lead Nurture — emails
The email half of the Lead Nurture track above. Same people, same sequence — these are the days 30 / 60 / 90 emails; the texts are set up in the card above.
1. Trigger
Starts when a trial ends without them signing up.
2 & 3. Rules & Messaging — EMAIL ONLY (days 30 / 60 / 90). The text messages for these same days are in the card above.
Day 30 — subject
Day 30 — email preview
✏️ Edit HTML
Day 60 — subject
Day 60 — email preview
✏️ Edit HTML
Day 90 — subject
Day 90 — email preview
✏️ Edit HTML
4. Next Steps
Repeats every 90 days, forever, until they book a trial or you turn it off.
5. Tags
Applies former_trial when the sequence starts.
SWITCHES
On/off and timing. No message to write here.
✅ Post-Show Check-In
Fallback only — the Funnels page's "Post-Show" funnel is the primary system. This only fires if that funnel has no steps configured.
Hours after they show
Max check-ins
📞 Missed Call → Auto-Text
When an outbound call doesn't connect, the person gets a text that says who called (your gym's name from Gym Setup) and what to do next. Which text goes out depends on why we called. Placeholders: {first_name}, {gym_name}, {ai_name}, {trial}, {booking_link} (lead outreach only). Leave a box blank to use the default shown.
🤖 AI lead outreach (opt-in / funnel calls) — always on
A lead who opted in gets called by the AI. If they don't pick up, the AI writes a quick "just tried to reach you" text from the step's angle and drops their trial booking link. If the call reaches voicemail without anyone speaking, this exact text goes out instead:
💳 Calls to current members (billing, card, hold, general)
When you or staff call a paying member from the dashboard and they don't pick up. No booking link — they have nothing to book. Just who called and how to reach us.
👤 Calls you place to leads by hand
When you or staff dial a lead from the dashboard and they don't pick up. Only fires if enabled here. No booking link is added — you're the one following up.
🤝 Member check-ins (3-week / 2-month)
New members get texted a link to book a check-in with their coach (the coach's Cal.com link from their staff profile). Bookings live in their own list on the Retention Center page and never touch trial appointments, show rate or the Today bookings count. Put {checkin_link} in a sequence or funnel step to send it.
Check-in kinds
"Text on day" is days after they join that the booking link goes out (when a step uses it); "Meet by day" is the target date shown to staff. Keys are what funnel/sequence steps pick.
"Didn't book" after (days)
🔁 Membership Renewal Notice
This gym only
Memberships are annual contracts that auto-renew unless the member gives notice. This is the email that warns them ahead of time — the in-person sign-off itself lives in Settings → Templates & Waivers → Cancellation Policy.
🧪 Dry-run mode: the daily check runs and logs what it would send, but no real email goes to members yet. Ask your developer to flip RENEWAL_NOTICE_LIVE on when you're ready to send for real.
Send notice (days before renewal)
Sent by
Example: 90 days before renewal, telling them they need to notify you 60 days out or it auto-renews.
Subject
Message
Merge tokens — click to insert:
TEXTS TO YOU
Not to members — these come to your phone.
☀️ Morning Briefing Text
Texts you a daily summary every morning with a link to open Today on your phone.
Send at (ET)
Includes: new leads, bookings today, follow-ups due, needs attention count + link to your dashboard.
FIXED SEQUENCES
These run on their own. Open one to see exactly what it sends and when.
🔧 System Funnels
These move leads through your pipeline automatically. Every one follows the same layout: Trigger → Rules & Messaging → Next Steps → Tags.
Two more lifecycle funnels are edited on the Messages tab, next to the day-0 message they follow on from: 👋 New Member Onboarding (under New Member Welcome) and 🌱 Lead Nurture (with its own email templates).
📅 Booked
Reference only — the messages are edited on the Messages tab.
📅 Booked
1. Trigger
Starts the moment a lead books a trial appointment.
2 & 3. Rules & Messaging
Edited above in 📅 Booking Confirmation & Reminders — same setting, not duplicated here: confirmation message, 24hr reminder, 1hr reminder.
4. Next Steps
If they attend → moves to In Trial. If they don't show → moves to No-Show.
5. Tags
No tags applied at this stage.
📋 Member Comms — re-engagement, expiry, smart replies
Reference only — how the automatic member sequences behave.
📋 Member Comms
Automatic messages to existing members. Same layout as everything else: Trigger → Rules & Messaging → Next Steps → Tags. Click a step to see its rule and message.
🔄 Re-Engagement Sequence
1. Trigger
An active member stops checking in. Checked once a day at 9 AM ET.
2 & 3. Rules & Messaging (each step below is one rule + its message)
Step 1 — 14 Days No Check-In AUTO
RULE: Member hasn't checked in for exactly 14–27 days AND has not received this step yet.
📱 TEXT: "Hey [Name], it's Coach Jamal. Haven't seen you on the mats in a couple weeks — everything good? We miss you out here. Come roll with us soon! - Coach Jamal"
📧 EMAIL: Subject — "Hey [Name] — Coach Jamal checking in" · Includes booking link
Step 2 — 28 Days No Check-In AUTO
RULE: Member hasn't checked in for 28–41 days AND step 2 has not been sent yet.
📱 TEXT: "Hey [Name], Coach Jamal here. It's been about a month and I wanted to check in. Life gets busy — I get it. What's making it hard to get in? - Coach Jamal"
📧 EMAIL: Subject — "[Name], haven't seen you in a while" · Asks what's getting in the way
Step 3 — 42 Days No Check-In FINAL
RULE: Member hasn't checked in for 42+ days AND step 3 not sent yet. This is the last attempt.
📱 TEXT: "[Name], it's Jamal. I don't want to lose you from our team. If something came up — schedule, money, whatever — just reply and we'll figure it out. Door's always open. - Coach Jamal"
📧 EMAIL: Subject — "[Name] — let's talk" · Offers to work through whatever's in the way
4. Next Steps
Any reply stops the sequence — Smart Reply Handling (below) takes over. After Step 3 with no reply, the sequence ends and they show as unresponsive in the Send Log.
5. Tags
No tags — every send is logged to the Send Log below with its sequence and step.
💬 Smart Reply Handling
1. Trigger
A member texts back during any sequence above.
2 & 3. Rules & Messaging
They say "been coming / been there / made it" AUTO
📱 Auto-replies: "That's great! Just make sure you check in on the kiosk when you arrive — it tracks your progress and belt milestones 🥋" — then stops the sequence.
Any other reply AI
Marks them as replied in the log so you know they responded. Your AI (Coach Jamal voice) handles the conversation naturally from there.
4. Next Steps
Any reply stops the automated sequence for that member — no more scheduled steps send.
5. Tags
Reply is logged in the Send Log with status replied.
⚙️ To activate email — add your Resend API key
1. Sign up free at resend.com · 2. Copy your API key · 3. Netlify → Site Settings → Environment Variables → add RESEND_API_KEY · 4. Trigger redeploy. SMS works now without it.
FROM
TO
Loading messages…
Who
Message
Why it went
Sent
Status
✉️
No messages in this range
Widen the dates, or clear the filters above.
Saves every switch and reminder message on both tabs.
AT-RISK MEMBERS
Members who haven't trained in 14+ days — reach out before they quit
⏳
Loading members…
Pulling live data from Supabase
14–21 Days
19
Warm — check in
22–30 Days
12
Getting cold
31–60 Days
28
Hot risk
60+ Days
82
Critical
📱 Text Message Template (use [Name] for auto-fill)
Name
Program
Last Seen
Risk
Actions
Phone
Contact
Demian Chornii🆕 NEW · 40d ago
White
18 days ago
Warm
8622908210
Anthony Fernandez
—
913 days ago
Critical
2014711168
Jason Sullivan
White Belt
906 days ago
Critical
—
Rhys Jervis
White Belt
677 days ago
Critical
19732869351
Deren Miller
Blue
418 days ago
Critical
19732703100
Mike Burke
—
414 days ago
Critical
12016189585
Robert Leamy
Blue Belt
342 days ago
Critical
19085771704
Tristan Smith
Purple
334 days ago
Critical
12016021846
Kadeem Isaacs
Purple Belt
319 days ago
Critical
19732349385
Juan Montes
Purple Belt
293 days ago
Critical
17329109904
Gregory Kleiman
Brown Belt
292 days ago
Critical
19086424981
Ryan Maldonado
White
279 days ago
Critical
19088727874
Jeremy Montanez
—
266 days ago
Critical
19084147414
Julian Vitug
Blue Belt
266 days ago
Critical
19085680033
Theodore Dieujuste
White
259 days ago
Critical
19089864279
Juliana Robinson
White Belt
251 days ago
Critical
9084943679
Ryan O'Grady
White Belt
250 days ago
Critical
19083704488
Jason Okwuobi
Brown
249 days ago
Critical
18622186633
Omari Barnes
White Belt
245 days ago
Critical
15512278900
Valerie Santamaria
White Belt
206 days ago
Critical
9084046524
Adrian Fuentes
Purple
201 days ago
Critical
8624145321
Valentina Passos
White Cubs
201 days ago
Critical
9086323083
Liam Canares
White Belt
181 days ago
Critical
9082478689
Mason Canares
White Yellow
181 days ago
Critical
19082478689
Dorian Joseph
Blue Belt
178 days ago
Critical
19087649939
EXCLUDED MEMBERS
🎯 OFFERS
What you advertise — the page people land on, the form they fill in, and which follow-up sequence picks them up afterwards.
📊 FUNNELS
What happens after someone signs up.
Build the AI follow-up sequence for each program. Pick one from the dropdown to edit it, or add a new one for a custom program.
Choose Funnel
🛒 After purchase (memberships)
What a NEW member hears after they pay. Build the funnel here, then pick it on each membership type in Plans & Pricing → Follow-up after purchase. Types that don't pick one keep the New Member Welcome from Comms.
+ New Funnel
Pick one of your real programs so this funnel's name matches exactly what leads get tagged with — or type a custom name for something that isn't tied to one specific class.
Program
You don't have any programs set up yet. Add one in Programs — or just type a custom name below.
Funnel name
This becomes the program tag leads are matched against — exact spelling matters.
📈 Performance
Which funnels actually earn their keep — sends, replies and bookings per funnel.
📣 CAMPAIGNS
Write it once, choose who gets it, send now or spread it over days.
Loading campaigns…
One message, or a run of them?
📣 A campaign is ONE message.
Everybody on the list gets it once and that is the end of it. Closed Monday. New class Tuesday. A holiday offer.
🔁 A sequence is several, over days.
A text today, an email in two days, another text next week — automatically, and it stops the moment somebody replies or books. Winning old members back takes more than one message.
Opens the Sequences tab. Nothing sends until you say so.
NEW CAMPAIGN
🔒Nothing is sent while you build this. The only button that sends anything is 🚀 Start sending on step 4, and it asks you to confirm first.
Campaign name — just so you can find it later
How are you sending it?
💬
Text
Goes to their phone
✉️
Email
Goes to their inbox
💬✉️
Both
A text and an email
Your text message
Their details — click to drop in
🔗 Links — each person gets their own
Roughly how it'll read
Example values. You'll see it against a real person in step 4.
Subject line
Email body
Their details — click to drop in
🔗 Links — each person gets their own
Roughly how it'll read
Example values. You'll see it against a real person in step 4.
ℹ️ We add the gym's name, your street address and a working
Unsubscribe link to the bottom of every email automatically.
The law requires both. Don't type your own.
Quick picks
One click. This covers most sends.
Or narrow it down
Contact type
Program
Has these tags
Leave out these tags
Came to class in the last…
days
Has NOT been in for…
days
Hold ⌘ or Ctrl to pick more than one.
Who this reaches
Pick an audience above…
Exactly who gets this
Untick anyone you want to leave out. To try it on one person first, use Untick everyone then tick just yourself.
How fast should it go out?
⚡
All at once
Everyone gets it as fast as we can send.
📅
50 a day
Spread out so it doesn't look like a blast.
⚙️
My own number
a day
When should it start?
Only send between
and
So nobody gets a text at 3am. A drip pauses outside these hours and picks up the next morning.
See it as a real person would
This is rendered by the same code that does the actual sending — what you see here is exactly what goes out. Try two or three different people; the things that break usually only break for one kind of contact.
Email health check
Checking…
Before you send
CAMPAIGN
What's the gym's mailing address?
The law says every marketing email needs your street address at the bottom. What should it say?
It goes in small grey text in the footer. "Union, NJ" on its own is not enough — it needs the street and the ZIP.
Business name
Street address
Suite / unit — optional
Town
State
ZIP
🔁 SEQUENCES
A run of texts and emails that goes out over days or weeks. Write it once, put people in it, and it keeps going on its own.
What is this called?
A note to yourself (nobody else sees it)
The rules
Only send betweenandyour time — a message that comes due at 3am waits for the morning
If they text back:
but not withindays
Send at mosta dayleave blank for no limit
The messages
Who goes in?
The same lists the Campaigns screen uses. Pick one or more.
Who this reaches
Pick a list above and this will tell you how many people it reaches.
🔍 SEO COMMAND
Rankings · Content · Reputation
SEO Health Score
—
No crawls yet — run a Site Audit.
Google Reviews
—
★ avg
— total reviews
Last GMB Post
—
No auto-pilot GMB post recorded yet.
🛠️ Drop & Report
Drop an export → get a Report + Action Plan → the history graphs below update automatically.
🔍 Audit Workflow
Run these in sequence: audit your site → find local opportunities → track your ratings
1
🩺 Site Audit
Drop Screaming Frog internal_all.csv (+ optional external_all.csv).
📥
Drop CSV(s) or click
internal_all.csv · external_all.csv
2
📍 Lead Finder — Local Grid
—
…or drop a geo-grid heatmap CSV from a rank tracker (Place / Points / Competitor sections).
🗺️
Drop geo-grid CSV or click
geo-grid heatmap export
3
⭐ GBP Tracker
Snapshot the current Google rating & review count into history.
—
rating · reviews
Report + Action Plan
🎯 Master SEO Plan — Site + Local, combined
📁 Saved Reports
Tap a name to re-open (no AI, no cost) · 🗑 to delete.
📈 SEO History
🩺 Crawl Health Score
No crawls yet — run a Site Audit.
📍 Local Visibility (grid points)
No geo-grids yet — run Lead Finder.
🚦 Organic Traffic + Search Console
No Search Console / GA4 snapshots yet.
⚠️ Search Console is not connected — new weeks will stop arriving.
🎯 Keyword Rank Trend (lower = better)
No keyword snapshots yet.
🥊 Competitors & Content Gaps
Tracked Competitors
📝 Posts & Drafts — click any to read the full post
Add extra instructions — promotions, seasonal offers, tone adjustments — and they'll apply to next Monday's auto-run.
📍 GMB POST
📝 BLOG POST
📄 This Week's Content
🤖
Auto-Pilot Topics This Week
Run a Site Audit and Lead Finder to get topic recommendations for this week's auto-generated content.
🤖 Auto-Pilot Content
Runs every Monday at 8am ET · generates blog post + GMB post automatically · no manual action needed
Status & History
Loading…
📈 Site Traffic
Loading traffic data…
Visits This Month
—
total sessions (30 days)
Organic Search
—
visitors from Google
New Visitors
—
first-time visits
Direct Traffic
—
typed URL / bookmarks
📊 Organic Site Visits — Last 6 Months
🎯 Keyword Rankings Over Time
Position 1 is the best possible rank, so a falling number is an improvement.
"Change" compares the newest snapshot to the very first one on record.
KEYWORD
NOW
BEST
CHANGE
SNAPSHOTS
LAST SEEN
📊 Search Console Trend
WEEK
CLICKS
IMPRESSIONS
CTR
AVG POS
⭐ Google Business Profile Snapshots
DATE
RATING
REVIEWS
NEW REVIEWS
🗂️ Past Audits, Grids & Reports
🩺 Site Crawls
📍 Local Grids
📁 Saved Reports
Tap a name to re-open (no AI, no cost).
📉 Where you rank over time (lower is better)
The five keywords with the most weeks of data. A break in a line means Google reported nothing that week — not position zero.
No Search Console weeks recorded yet.
🎯 Work on these next
Ranked by how much traffic reaching the top 3 could unlock. Priority is a score for comparing these against each other — not a promise of clicks.
📋 Every keyword Google reported
KEYWORD
POS
CLICKS
SEEN BY
CHANGE
WEEKS
LAST SEEN
📣 ADS HUB
Facebook · Google · AI Brain · Ad Creator
⚡ Facebook: Not Connected⚡ Google: Not Connected
f
Facebook / Instagram
No data
SPEND
—
REACH
—
CLICKS
—
CTR
—
LEADS
—
COST/LEAD
—
G
Google Ads
No data
SPEND
—
IMPRESSIONS
—
CLICKS
—
CTR
—
LEADS
—
COST/LEAD
—
COMBINED
TOTAL SPEND
—
TOTAL LEADS
—
AVG COST/LEAD
—
TOTAL CLICKS
—
TOTAL REACH
—
AVG CTR
—
🧠 AI BRAIN — AD PERFORMANCE ANALYSIS
CAMPAIGNS
📊
No campaign data yet
Connect your Facebook or Google account, or enter data manually
✏️ MANUAL CAMPAIGN DATA
CAMPAIGN NAME
PLATFORM
SPEND ($)
REACH
CLICKS
LEADS
STATUS
DATE RANGE
AD SETTINGS
PLATFORM
GOAL
OFFER / HOOK (what are you promoting?)
TARGET AUDIENCE
GENERATED ADS
SAVED ADS
No saved ads yet.
f
Facebook / Instagram Ads
Not connected
To pull your live Facebook Ads data, you need a Facebook Access Token and your Ad Account ID. Here's how to get them:
📋 Steps to get your Facebook Access Token:
1. Go to business.facebook.com → your Business Manager
2. Go to System Users (under Business Settings → Users)
3. Create a System User with Advertiser role
4. Click Generate New Token → select your Ad Account → check ads_read
5. Copy the token and paste it below
Your Ad Account ID is in Facebook Ads Manager → top-left dropdown, starts with act_
FACEBOOK ACCESS TOKEN
AD ACCOUNT ID
📥
Google Lead Forms NO APPROVAL NEEDED
Checking…
When someone fills in a lead form inside a Google ad, Google sends them
straight here — they appear in your leads within seconds, already tagged with the
campaign that produced them. Paste these two values into Google Ads and you are done.
WEBHOOK URL
WEBHOOK KEY
📋 Where these go in Google Ads:
1. Campaigns → Assets → Lead forms, then edit your form
2. Scroll to "Export leads from Google Ads"
3. Choose "Other data integration options"
4. Paste the two values above
5. Click "Send test data" — this card turns green
⚠️ Your form must ask for Name, Phone and Email. Google makes each
question optional, and a lead missing any of them cannot be saved.
G
Google Ads
Not connected
Spend, impression and click figures come from the Google Ads API. The
connection is built and this gym's numbers appear the moment its credentials are in place —
checking…
Still needed before spend can be pulled:
Nothing is typed into this page. The three platform values are Netlify
environment variables; this gym's Customer ID and refresh token are stored server-side against this gym only.
Working right now, with no approval needed:
1. Google Lead Forms card above — paste the URL and key into Google Ads. Leads start arriving tagged as Google.
2. Type this month's spend into Dashboard → Conversion → Google Ad Spend until the API is connected.
Cost per lead fills itself in from those two. Connecting the API replaces the typing, not the leads.
🎟️ EVENTS
Create event pages with shareable links, QR codes and printable flyers. Registrations are tracked right here.
⏱ Time Clock
Tap your name
Loading…
○○○○
✅
Edit shift
Saved against your name with the before-and-after times. This is what protects you if
someone ever disputes their pay.
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
Oldest first — answering one teaches the AI for next time
🎉 Nothing unanswered.
They stay in the message log
Asked
Who asked
Question
Action
Needs your attention
Nobody is waiting on you. No member has raised a concern.
When
Contact
What they said
Action
⏸ Paused conversations — nobody followed up
Reminders from the system — no member is waiting on a reply here.
No paused conversations.
Flagged
Contact
How long
Why it's paused & what they last said
Action
Loading…
✏️ Answer this & teach the AI
Question (the AI couldn't answer)
Your answer (AI will use this for similar questions)
📊 Contact Hub
Kanban pipeline, table views, and contact management
Pipeline
Drag a card to move someone manually. Show/No-Show clicks, trial signups, and membership signups move cards automatically.
Loading pipeline…
🧲 Leads0✏️
📅 Appointment Booked0✏️
🚫 No Show0✏️
🔄 Reschedule0✏️
🥋 In Trial0✏️
🏆 Won0✏️
💔 Lost0✏️
Contacts
Total: 0 contacts
0 selected
Showing 0 of 0 results
Name
Email
Phone
Source
Status
Type
Programs
Joined
Action
Loading…
Page 1
➕ ADD LEAD
Walk-in, inbound call, or any new lead — drop them here. AI follow-up fires next.
New Lead Info
Lead Type *
First Name *
Last Name
🧒 Guardian Info — billing & SMS route here
Existing parent (search by name or phone)
— or create a new parent —
Parent first name
Parent last name
Note: phone/email entered below should be the parent's — kids don't have their own contact info on file.
Phone *
Email
Program of Interest *
Source *
📍 Address + Birthdate (optional, can fill later)
Birthdate
Street Address
City
State
Zip
🚨 Emergency Contact (optional, required to sign waiver)
Name
Relationship
Phone
Notes (optional)
WIN-BACK LIST
These people already know you. Easiest sales you'll ever make.
💰
No data loaded
Upload your Former Clients CSV
💬 Adult Win-Back Text
Hey [Name], it's Jamal from All Star BJJ in Union. We miss you on the mats! We've got some exciting things happening — would love to have you back. Reply and I'll set you up. 🥋
💬 Kids Win-Back Text (to parent)
Hey [Parent Name], it's Jamal from All Star Martial Arts in Union. We've been missing [Kid's Name] in class! Kids grow fast — would love to get them back on the mats while the friends from their old class are still here. Reply and I'll get you set up with a free week to ease back in. 🧒🥋
💬 Win-Back Text Template
Hey [Name], it's Jamal from All Star BJJ in Union. We miss you on the mats! We've got some exciting things happening — would love to have you back. Reply and I'll set you up. 🥋
Name
Last Program
Left
Phone
👥 CONTACTS
Every contact. Click any name to open the full profile + conversation.
⏳ Loading pipeline...
🔥
No leads in this filter
Name
Program
Stage
Last Contact
Phone
Contact
AI
💬 Text selected contacts
{name} = their first name · one text per phone, so families get one message · opted-out contacts are skipped automatically
🏷️ Add tags
Tags already in use
Or type new ones (comma separated)
New contact type
These are the only values the crons and reports understand — anything else makes a contact invisible to them.
📱 Send Mass Text
Use {name} and it will be replaced with each contact's first name.
Pick a date
📅
👆 Click anywhere in the box above to open the calendar
Draft
📷 Profile Photo
Click "Start Camera" to begin
📁
Pick a photo from your device
Membership Added
📋 Sign Membership Agreement?
The membership is saved, but the agreement isn't signed yet. The agreement covers the 12-month commitment, hold/injury policies, and cancellation terms.
All Star Martial Arts · Union, NJ
📋 Membership Agreement
Member Information
Full Name *
Birthdate
Address
City
State
Zip
Phone
Email
Plan & Pricing — 12-Month Commitment
🧒 Minor — Parent / Guardian Required
Parent / Guardian Name *
1. ANNUAL COMMITMENT — NON-CANCELLABLE. This is a twelve (12) month, non-cancellable membership. The Member is unconditionally and personally liable for the full annual obligation shown above, regardless of attendance, use, change of mind, relocation, dissatisfaction, or how the payments are scheduled (monthly, semi-annually, or annually paid in full). Payment frequency is a courtesy extended by All Star Martial Arts ("the Academy") and does not reduce or release the annual obligation.
2. PREPAID DISCOUNT FORFEITURE. Any plan billed at less than the standard monthly rate (including 6-month plans, annual plans, and any "BOGO" or promotional plans) reflects a discount granted in exchange for the Member's commitment to complete the full 12-month term. Amounts already paid under such a discount are fully earned and non-refundable consideration. If the Member breaks the term early for any reason, the discount is forfeited and the Member owes the difference between (a) what was actually paid and (b) what would have been owed at the standard monthly rate for months attended, in addition to all remaining payments due under Section 5.
3. PAYMENT & AUTHORIZATION. Member authorizes the Academy to charge the agreed amount on the agreed schedule by EFT, ACH, credit, or debit card. Authorization continues until the full annual obligation is paid in full, even if the Member's attendance ends earlier. Failed payments will be retried within 7 days. After two failed attempts, the Academy may immediately accelerate the entire unpaid balance for the remainder of the term and refer the account to collections. A $25 late fee applies to each declined transaction, and unpaid balances accrue interest at 1.5% per month (18% annually) or the maximum rate permitted by law, whichever is less.
4. HOLD / FREEZE POLICY. Member may request to freeze the membership in writing:
Medical hold: up to 90 consecutive days per occurrence with a doctor's note, totaling no more than 6 months in any 12-month term.
Personal hold: up to 30 consecutive days, max twice per term (travel, school, military under 30 days).
Holds extend the contract end-date by the hold length — they do not reduce the annual obligation, refund prepaid amounts, or pause the running balance.
Hold requests must be received in writing at least 7 days before the next billing date. Mid-cycle requests still bill that cycle.
5. INJURY POLICY. Injuries on or off the mat are reported to a head instructor in writing as soon as reasonably possible. Documented injuries qualify the Member for a Medical Hold (Section 4). Injury does not cancel, waive, or reduce the annual obligation and does not entitle the Member to any refund of amounts already paid.
6. CANCELLATION & LIQUIDATED DAMAGES.
This Agreement is non-cancellable during the 12-month term except as expressly provided here. To stop auto-renewal at the end of the term, Member must give the Academy 30 days written notice before the renewal date.
If the Member elects to terminate during the 12-month term, the Member shall pay, as liquidated damages (and not as a penalty), the full remaining balance of all monthly equivalents through the end of the term, immediately due and payable, plus a cancellation fee equal to one (1) month of the standard monthly rate shown above. The parties agree this represents a fair and reasonable estimate of the Academy's damages from early termination, which would otherwise be difficult to calculate precisely.
Prepaid plans are non-refundable. Amounts already paid for any partially-completed billing cycle (including a 6-month or annual prepay) are forfeited as earned consideration for the discount granted.
Example — 6-month plan: Member pays $1,182 for the first 6 months (10% off), then notifies cancellation in month 7. The first $1,182 is non-refundable. The Member still owes the second 6-month installment (the remainder of the 12-month commitment) plus the one-month cancellation fee. The discount is forfeited per Section 2 and the Member also owes the difference between paid amounts and the standard monthly rate for months attended.
The Academy may terminate this Agreement immediately without refund for non-payment, code-of-conduct violations, harassment, threats, or breach of the separate Liability Release.
7. RENEWAL. At the end of the 12-month term this membership automatically renews on the same plan and rate (subject to any rate increase noticed at least 30 days in advance) unless the Member provides 30 days written non-renewal notice before the renewal date.
8. NO CHARGEBACKS / DISPUTE WAIVER. Member acknowledges this Agreement is a binding, fully-disclosed contract and agrees not to dispute, charge back, or reverse any properly-authorized charge made under this Agreement. Member agrees to first attempt resolution directly with the Academy in writing. Any unjustified chargeback may be treated as a material breach, the entire remaining balance may be accelerated, and the Member shall be responsible for the chargeback amount, the bank's reversal fee, and any collection costs.
9. COLLECTIONS, ATTORNEY'S FEES & COSTS. If any amount under this Agreement becomes overdue and is referred to collections or to an attorney, Member agrees to pay all collection costs, reasonable attorney's fees, court costs, and any reporting fees in addition to the underlying balance. Member authorizes the Academy and its assigns to report the account to credit bureaus and any consumer reporting agency.
10. ELECTRONIC SIGNATURE. Under the federal E-SIGN Act and the New Jersey Uniform Electronic Transactions Act, the Member's typed name, drawn signature, and click-acknowledgment below have the same legal effect as a handwritten signature. Member confirms they have reviewed this entire Agreement and the linked terms summary above.
11. NO ORAL MODIFICATIONS / ENTIRE AGREEMENT. No statement, promise, or representation by any instructor, employee, or agent shall modify this Agreement. Any amendment must be in a writing signed by both parties. This Agreement, together with the Liability Release, constitutes the entire agreement between the parties and supersedes any prior understandings.
12. GOVERNING LAW & VENUE. This Agreement is governed by the laws of the State of New Jersey. Any dispute shall be brought exclusively in the state or federal courts located in Union County, New Jersey, and the Member consents to personal jurisdiction and venue there.
13. SEVERABILITY. If any provision of this Agreement is held invalid or unenforceable, the remaining provisions shall continue in full force and effect.
I have read this Agreement in full, fully understand the 12-month financial commitment, the non-refundable nature of prepayments, the cancellation and liquidated-damages terms, and I sign it freely and voluntarily without inducement.
✍️ Signature * (sign with mouse / trackpad / finger)
Date:
All Star Martial Arts · Union, NJ
📝 Liability Release & Photo Consent
Participant Information
Full Name *
Birthdate
Street Address
City
State
Zip
Emergency Contact
Name
Relationship
Phone
🧒 Signing for a Minor
Parent/guardian must sign on behalf of the minor. By signing below, the parent/guardian acknowledges all terms apply to the minor named above.
Parent / Guardian Name *
RELEASE OF LIABILITY, ASSUMPTION OF RISK, AND INDEMNITY AGREEMENT
In consideration of being permitted to participate in any way in the activities offered by All Star Martial Arts (the "Academy") at its facility located in Union, NJ, I, the undersigned participant (or parent/guardian of the named minor), acknowledge, agree, and represent that:
1. Assumption of Risk. I understand that participation in martial arts (including but not limited to Brazilian Jiu-Jitsu, Muay Thai, MMA, kickboxing, grappling, sparring, drilling, and conditioning) involves inherent risks, including the risk of serious bodily injury, permanent disability, paralysis, loss of life, and damage to property. I freely and voluntarily accept and assume all such risks, both known and unknown, and accept full responsibility for any injuries or losses sustained while participating.
2. Release and Waiver. I, on behalf of myself, my heirs, executors, administrators, assigns, and personal representatives, hereby release, waive, discharge, and covenant not to sue the Academy, its owners, instructors, employees, agents, volunteers, and other participants (collectively, the "Released Parties") from any and all liability, claims, demands, actions, and causes of action whatsoever arising out of or related to any loss, damage, or injury — including death — sustained in connection with any activity at or sponsored by the Academy, whether caused by the negligence of the Released Parties or otherwise.
3. Indemnification. I agree to indemnify and hold harmless the Released Parties from any loss, liability, damage, or cost they may incur due to my (or the minor's) participation, whether caused by my negligence or otherwise.
4. Medical Treatment. I authorize the Academy and its representatives to obtain emergency medical treatment for me (or the minor) if necessary. I confirm I (or the minor) am physically able to participate and have no medical conditions that would prevent safe participation, or that I have disclosed any such conditions to the Academy in writing.
5. Photo, Video & Media Release. I grant the Academy and its assigns the irrevocable right and permission to photograph, record, and use my (or the minor's) image, likeness, voice, name, and performance in any photograph, video, social media post, advertisement, marketing material, or website without compensation, in any format and any media now known or hereafter devised, worldwide and in perpetuity. This release expressly applies to minors, and the parent/guardian signing below grants this permission on the minor's behalf.
6. Membership & Conduct. I agree to follow the Academy's rules, code of conduct, and instructor directions at all times. I understand that the Academy may dismiss any participant for unsafe or disruptive behavior without refund.
7. Severability. If any portion of this Agreement is held invalid, the remaining portions shall continue in full force and effect.
I have read this Agreement, fully understand its terms, and sign it freely and voluntarily without any inducement.
✍️ Signature * (sign with mouse / trackpad / finger)
Date:
🎉 Added — sign them up?
Take the next step now, or do it later.
💳 Add Membership
Assigning to
The membership row gets attached to the picked person. Billing/communication still routes through the parent.
Is this a new member?
Checking…
Looking up whether this person has trained here before.
Only change this if you know something the system does not — for example the
same family under a different name. Whatever you pick is saved with your name
and your reason, next to what the system worked out.
Custom plan — sets its own price/term; recurring uses the Auto-renew setting below.
After the 60-day bundle period, the cron job will auto-create a new membership on this plan. Member won't have to re-sign anything.
$200
🧾 What gets invoiced
Pick a program to see what will be invoiced.
📅 Book Appointment
Booking for
⬆️ Import Member Roster
Step 1 of 3 — choose your CSV
Drop the roster export from your old system. One row per student. The first row must be the column headings.
Nothing is written until you run a dry run and approve it.
📄
Drop your roster CSV here, or click to choose
.csv · up to 2,000 rows per import
1 · MATCH YOUR COLUMNS
We guessed these from your headings. Check every one — change anything that looks wrong. Leave a field on
“— not in my file —” if your CSV doesn't have it.
2 · PREVIEW — FIRST 3 ROWS AS WE READ THEM
3 · DEFAULTS FOR EVERY ROW
FALLBACK MEMBERSHIP PLAN (OPTIONAL)
Every membership row in the database must point at a real plan. If a student's program/plan text doesn't
match one of your plans, that student still gets imported but their membership is skipped. Pick a catch-all plan
here and those students get a membership on that plan instead.
?
📷
·
—🚫 OPTED OUT
👤 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
+ Add
This creates a brand-new contact. Already in the system? Close this and use Search existing contacts below.
✅ 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.
When to follow up
Short reason (shows in the list)
Notes / Context (AI uses this to write the message)
🎯 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.
· ·
⌘/Ctrl+Enter to send
🔮 FOLLOW-UPS
Every "ask me later" you've parked. AI fires them on the day with the original context.
⏳ Loading follow-ups...
🔮
No follow-ups in this view
Schedule one from any contact's Profile, or let AI auto-detect "ask me later" replies.
When
Contact
Reason
Status
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
⏳ Loading your 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
🧠
AI is building your project plans...
🗂️
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
Only the owner, an admin or a manager can give tasks to other staff.
👥 STAFF SYSTEMS
Manage staff members, tasks, and daily cards
➕ Add New Staff Member
Staff Members
⏳
Loading staff members…
Unable to load staff members. Please try refreshing.
👥
No staff members yet. Add one using the form above.
Name
Email
Phone
Role
Status
Actions
📋 Task Manager
🚀
Coming in Phase 2
Create, assign, and track tasks for your staff team.
📌 Today Cards
📅
Coming in Phase 3
View daily staff assignments and activity cards.
✏️ Edit Staff Member
⚠️
Delete Staff Member?
Name will appear here
Staff Profile
👤 Basic Information
🔐 Task Administration Rights
Based on role: —
🔑 Security & Access
Last Login: —
Member Since: —
🔥 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
🎉 All done!
Loading tasks…
📅 8-Week Activity
0%
1-49%
50-99%
100%
S
M
T
W
T
F
S
🎯 This Week's Targets
Loading…
⚙️ Configure Grind Tasks
Set your recurring tasks and how often per week. These show on Today, Dashboard and the Grind calendar.
📈 History
🏷 Tags
💰 Billing & Charges
Communications
📞 Quick Phone
📱 SMS Inbox 0
Follow-Ups
🔮 Follow-Ups
📰 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.
🔍 FIND MEDIA CONTACTS
Search Google for journalists and outlets covering your topic
ADD MEDIA CONTACT
MEDIA LIST
Loading…
📡 MONITOR COVERAGE
Search Google News for mentions of AllStar BJJ and related topics
LOG A MENTION
COVERAGE LOG
Loading…
Create Event
Event Name *
Date & Time
Price ($0 = free)
Location
Description
Image URL (optional)
Capacity (leave blank = unlimited)
Button Text
Tag Applied at Registration (optional)
Everyone who registers for this event gets this tag automatically — attach it to a funnel's "Trigger Tags" on the Funnels page to auto-start a sequence for them.
Funnel — Starts at Registration (optional)
Fires the moment someone registers — good for reminders leading up to the event. Same as picking a follow-up funnel on an offer. Leave blank to keep using the tag above (or neither).
Post-Event Funnel — Starts After the Event (optional)
This one's day 0 is the EVENT DATE itself, not registration — so its steps only go out once the event has actually happened. Good for a "thanks for coming, ready to join?" follow-up.
Share this event
🎨 Flyer Designer
Template
Headline
Subheadline
Body
CTA Text
Accent
Background
Text
📷 Background Photo
Upload (recommended)
…or paste an image URL
💡 Drag the photo in the preview to reposition it.
Focal X
Focal Y
Zoom
Rotate
Brightness
Contrast
Saturate
Grayscale
Blur
Scrim (text readability)
Live Preview · 1080 × 1350
This is exactly what visitors see on the public event page.
Registrations
Add a walk-in from a paper sign-up
⌘/Ctrl+Enter to send
🔀 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.
⏳ Processing approval in progress
👤 Your setup contact
Anything at all — a question about a program, a price you want to change, or if something on this page does not look right. Call or text, do not wait for the next meeting.
📅 Book your second setup call
On this call we switch on your texting and calling number, your follow-up funnels, and your AI receptionist. Pick a time that works — allow about an hour.
📌 Before this call: put your intro / trial class times into your own calendar — the exact days and times a brand-new person can walk in and try a class. We build your booking links around those times on the call, so having them settled first is the difference between finishing in an hour and needing a third call.
🔒 Unlocks on your second call
These are hidden on purpose. Each one starts messaging real people the moment it is switched on, so we set them up together rather than leaving them for you to find.
📞 Your texting & calling number — the line leads text and call.
📊 Funnels — the automatic follow-up sequences for new leads.
🧠 Brain — what your AI receptionist knows and says.
⚙️ 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.
🏁 Set up your gym — start here
Three things, in order. Everything else in your dashboard is built on top of them, so nothing else opens until these are in. You can add more of each later — one of each is enough to move on.
What do you teach? One entry per class type you run — "Adult BJJ", "Kids BJJ", "Muay Thai". Your schedule, your pricing, your booking links and your AI receptionist all point at these, so this is the one to get right first.
Program name
Who is it for
Your weekly timetable — which program runs on which day, at what time. This is the ongoing schedule members and staff see, and it is what your AI answers with when someone texts "what time is BJJ tonight?".
Program
Day
Start time
Length (minutes)
Coach (optional)
What you actually sell. One entry per membership option — "Unlimited Adult", "Kids 2x a week". Prices can change any time; nothing here charges anyone until your payment processor is connected and approved.
Membership name
Price per month ($)
Category
Add at least one program, one class and one membership first.
📞 Your texting & calling number
🚀 Get fully set up
▾
A few real things to connect before your AI and front desk are fully live. Each one checks off only once it's actually saved — not just filled in.
🏠 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
CAL
📅 Cal.com
API key
Timezone
Username
Event Type IDs are now looked up automatically from your Cal.com Booking Links (set those in the Brain page) — you only need this if a program's ID can't be found automatically.
⚙️ Advanced: manually set an Event Type ID (optional — only needed if auto-lookup can't find it)
Event Types by Program
Each class/program you run in Cal.com has its own Event Type — add one row per program.
No programs added yet — auto-lookup will be used for every booking.
Default (fallback) Event Type ID
Used when a booking can't be matched to one of the programs above and auto-lookup also can't find it.
Leave a key field blank to keep what is already saved.
FP
💳 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.
G
📈 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.
FB
📣 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.
TW
📞 Twilio — texting & calling
📇 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…
Balance
—
Card on file
—
Auto-recharge below
—
Billing isn't connected on this platform yet — usage is unmetered and unblocked for every gym, same as before this feature shipped. Nothing to do here.
Gym
What this gym typed into their onboarding form
🏢 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.
✅ Gym created — their welcome email is on its way
It contains a link for them to set their own password, good for 24 hours and usable once. You only need the link below if their email never arrives — otherwise there is nothing to copy.
📞 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.
Gym
Revenue
Cost
Margin
%
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)
Add Equipment
ITEM NAME *
CATEGORY
QUANTITY
CONDITION
LOCATION IN GYM
PURCHASE PRICE ($)
RETAIL PRICE ($)
PURCHASE DATE
VENDOR
REORDER WHEN QTY BELOW
STATUS
NOTES
Item
Price: $0.000 in stock
CUSTOMER (optional — search by name or phone)
QUANTITY
DISCOUNT (%)
PAYMENT
NOTES (optional)
TOTAL DUE
$0.00
⬆️ Promote Member
Program
Current Rank
Promote To
Stripes (0–4)
Belt Preview
Notes (optional)
📱 Check-In QR
Member scans this to check in · kiosk shows their profile
📧 Send Press Release
Select which contacts to include — only contacts with email addresses are shown
🧠
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-upsNew leadsAttendanceMoney
Listening…
Typed questions come back written · spoken questions come back out loud