FitOps Pro™
Admin Panel
👋

Coach Management

All FitOps Pro coach accounts and subscription statuses.

MRR
ARR
Total Coaches
Active
Past Due
Cancelled
Pending
0 selected
Coach Plan Status Joined Period End Reviewer Actions
Loading…

Resource Usage

Per-coach usage and estimated costs for communications, verification, and phone numbers.

Total Cost
--
SMS
--
Emails
--
Calls
--
Recordings
--
Phone Numbers
--
Email Verify
--
$0 (in-house)
Phone Verify
--
AI Calls
--
AI Cost
--
Anthropic (Claude)
Coach Phone Number A2P Email Domain SMS Emails Calls Recordings Number Email Verify Phone Verify AI Total Cost
Click the Resource Usage tab to load data.

Coach Emails

Send platform emails from @fitopspro.com to coaches. Use for onboarding, announcements, trial reminders, billing notices, etc. Routes through SendGrid using the verified fitopspro.com domain.

Compose
Pick a recipient filter, a quick template if you want, then write + send.
— recipients
Merge tags get substituted per-coach before send: {{coach.firstName}}, {{coach.name}}, {{coach.businessName}}, {{coach.email}}, {{coach.planType}}, {{coach.subscriptionStatus}}, {{coach.trialEnd}}, {{coach.currentPeriodEnd}}.
Recent sends
Latest 50 platform emails.
Click the tab to load history.

Operations

One pane to see if anything's broken — errors, latency, vendor health, quotas, and a feed of every event in the platform.

Polled · refreshes every 15 min · instant alerts via webhook for critical signals
Loading…
Polling data sources for the first time
Incidents
Degraded
Services
Status legend: ✓ Healthy ⚠ Needs attention ⛔ Incident
Errors 24h
waiting for first poll
API latency p95
comes from Sentry transactions
Traffic 1h
waiting for first poll
Saturation
DB pool · functions · storage
Loading vendor health…
Polling Twilio, Stripe, SendGrid, Expo push, and Supabase.
Loading self-checks…
Scheduled poller freshness vs expected cadence.
Loading quotas…
Polling AI spend, DB pool, R2, Upstash, and Supabase storage.
Events (24h)
Errors (24h)
Warnings (24h)
Affected Coaches
When Severity Event Coach Detail
Click Refresh to load events.
🔔 Your admin banner
ON
When Operations has issues, a banner appears at the top of YOUR CRM only.
✉ Email alerts
ON
When a Warn or Incident fires, an email goes to [email protected].
📢 Coach broadcast
LIVE
Composer below. Banner shows at top of every active+trialing coach's CRM within ~90s.
0 / 120
0 / 2000 · supports **bold**, *italic*, [link](url)
Leave blank for now
Auto-hide after this time
Preview
Start typing to see how coaches will see this.
Title Severity Audience Email SMS Status When
No broadcasts yet.

Each row below is one Operations data source. The warn column is the soft threshold — values above it surface as yellow attention. The incident column is the hard threshold — values above it surface as red and email [email protected]. Edit a value and click Save to override the default. Click Reset to fall back. Some signals (performance latency) have no incident tier because slow is not the same as broken.

Loading thresholds…

Each probe pings the URL on its cadence. A non-matching status code or timeout writes an incident snapshot — alerts fire through the same email + push + Slack path as built-in pollers. Useful for monitoring coach-facing endpoints, external dependencies, or anything you want a watchdog on.

Loading probes…

Changelog

Both logs bundle into every deploy from CHANGELOG.md and CHANGELOG.internal.md at the monorepo root. Edit those files in your IDE, commit, and ship — the coach-facing version appears at /changelog.

Loading…

Platform Settings

Settings that apply to all coaches on the platform.

Coach Plan Pricing
What new coaches pay. Saving creates fresh Stripe prices (test + live) — no need to open Stripe. Existing subscribers keep their rate. Turning on a sale shows the regular price struck through next to the sale price on signup (research-backed conversion lift).
Regular price
Monthly ($/mo)
Annual ($/yr)
Sale — strikethrough on signup
Sale monthly ($/mo)
Sale annual ($/yr)
Sale label
“Most Popular” badge on
Discount Codes
Promo codes coaches enter at signup. Created in Stripe (test + live). Lead with $ off on higher-priced plans.
Code
% off
or $ off
Applies to
AI Engine
Anthropic Claude powers all AI features. Kept server-side — never exposed to coaches.
Anthropic API Key
Get yours from console.anthropic.com
Prompt Caching
Cuts input-token cost ~90% on cache hits. Cache window varies by feature: Workout Generation uses a 1-hour window (large library + reference PDFs, written once per session), everything else uses the 5-minute default. First request pays a write premium (125% for 5-min, 200% for 1-hour); cache hits pay 10% of normal input rate. Master toggle controls everything — per-feature toggles let you turn caching off individually.
Dashboard Insights Prompt
Analyzes business metrics and generates the AI Insights card on every coach's dashboard.
Check-In Insight Prompt
Generates a per-client coaching insight when a coach clicks "Generate AI Insight" on a submitted check-in.
Task Planning Prompt
Powers the "AI Suggest" button in the daily planning wizard. Should return a 1-3-5 task plan as JSON.
Content Ideas Prompt
Powers the "Generate 10 Ideas" button in the Marketing tab. Injects the coach's niche from Settings and returns 10 trending post/reel/carousel ideas as JSON.
Workout Generation Prompt
Powers the "Generate with AI" card in the program builder. Bakes evidence-based hypertrophy principles + output schema by default (weekly volume landmarks, proximity-to-failure intensity, top-set + back-off structure, mandatory volume self-check). Template vars: {{DURATION_HINT}}, {{SESSIONS_HINT}}, {{SCHEDULE_STYLE_HINT}}. Leave blank to use the built-in default.
AI Reference Files
Upload PDFs or text files that the AI reads as supplementary context. Scope each file to one or more features (workout generation, content ideas, etc). Max 30MB per file.
No reference files uploaded yet.
Client app tabs (platform-wide)
Globally enable/disable a client-app bottom tab across ALL coaches' apps. Turn a tab on once it's built; coaches then pick which available tabs their own clients see (their Settings → Client app tabs). Home and Profile always show; Sessions follows the client's service type.
Calendar
Workouts
Nutrition
Check-Ins
Courses (in progress)
Community
Stripe Platform — API Keys
The platform Stripe account that receives coach SaaS subscription payments ($197/mo) and acts as the Connect platform. Get keys from Stripe → Developers → API keys. Never share the secret key publicly.
Live Secret Key
Starts with sk_live_. Used for all live-mode Stripe operations.
Test Secret Key
Starts with sk_test_. Used for test/sandbox operations.
Live Publishable Key
Starts with pk_live_. Used by the browser for card tokenization (Stripe Elements).
Test Publishable Key
Starts with pk_test_. Sandbox publishable key.
Stripe Connect — Client IDs
Lets coaches link their own Stripe accounts to FitOps Pro so client payments land directly in their bank — not the platform's. Uses OAuth Standard Connect. Get from Stripe → Settings → Connect → Onboarding options → OAuth.
Live Client ID
Starts with ca_. Used when Stripe Mode is Live.
Test Client ID
Optional. Used when Stripe Mode is Test.
Stripe Webhook Signing Secrets
Each webhook endpoint in Stripe has a unique signing secret (starts with whsec_) used to verify events came from Stripe. Get from Stripe → Developers → Webhooks — click an endpoint → reveal Signing secret.
Client-Billing Webhook — Live
Secret for the /stripe-webhook endpoint. Handles all client payment/subscription events.
Client-Billing Webhook — Test
Coach-Billing Webhook — Live
Secret for the /coach-billing-webhook endpoint. Handles the $197/mo SaaS subscription events.
Coach-Billing Webhook — Test
Platform Receipt Branding
How receipt emails FROM FitOps Pro TO coaches look — used when a coach's $197/mo (or annual) SaaS subscription is charged. Coaches brand their own client-facing receipts separately in their own CRM Settings.
Full URL to a PNG/JPG. Recommended: 200×48px, transparent background.
Live preview
Require Two-Factor Authentication
When on, every coach must enable 2FA before they can use the CRM. Existing coaches without 2FA will be prompted on their next sign-in.