Coach Graici — Full Member Journey
Catalina Health · Coach Graici · Internal Build Reference
Full Member Journey
Onboarding → Ongoing Prompting → Tier Opt-In · April 2026
Dev Team Reference
Coach Graici App
Affiliate Health Hub
7 Modules · 5 Journey Phases
Sage Bio Visualizer
Marketplace + Stripe
Confidential
Journey Overview
From Invite to Fully Integrated Member
The member journey has five distinct phases, each with specific triggers, data requirements, and Graici prompts. Onboarding is a 7-module scripted conversation. Ongoing engagement is AI-driven, data-triggered, and designed to progressively opt members into higher health tiers.
Phase 1
Affiliate Invite & Account Setup
Portal → Graici link → 2FA
Phase 2
Onboarding Conversation
7 modules · ~15 min
Phase 3
Diagnostics, Visualizer & Review
Req → Sage Bio → Results → Review decision
Phase 4
Ongoing AI Prompting
Data-triggered · Behavioral
Phase 5
Tier Progression
T1 → T2 → T3 → T4
🔗
Phase 1
Affiliate Invite & Account Setup
Affiliate portal → Member receives Graici invite → Account creation
Triggered by Affiliate
Affiliate Portal Action
Portal Side
1
Member loaded into portal
Via Wodify/PushPress API sync (preferred) or manual CSV upload. Record includes: name, contact, membership status, attendance frequency.
2
Health tier is set — by affiliate or by member
The affiliate owner may assign a tier directly in the portal (Tier 1–4). Alternatively, if no tier is pre-assigned, the member can browse and opt into a tier during the Graici onboarding conversation or at any time from the My Plan screen. Either path triggers the same tier configuration in the system.
3
Graici invite link generated and sent
Portal generates a unique, affiliate-attributed link. Member receives via email or SMS. Portal status updates: Not Invited → Invited. If tier has been pre-assigned by the affiliate, it travels with the link. If not, member will be prompted to select a tier during onboarding.
4
Member creates account + 2FA
Member taps link, creates Graici account, completes 2-factor authentication. Graici pre-populates name, affiliate, and assigned tier from portal data.
5
Portal status updates
Portal reflects: Invited → Account Active. Affiliate dashboard notified. Onboarding conversation begins automatically in Graici app.
Dev Note — Data Handoff
Portal must pass to Graici at invite time: member_id, affiliate_id, affiliate_name, tier, services_available[] (from affiliate config profile). This context drives which modules and offerings are surfaced during onboarding.
🤖
Phase 2
Onboarding Conversation — 7 Modules
Scripted AI conversation · Estimated 12–20 minutes · All modules sequential with branching
In-App Chat
👋
Module 1 — Intro, Orientation & Goals
Scripted
"Hi, I'm Coach Graici. I'm here to help you own your health — and your data. I see you're a member of [Affiliate Name], is that correct?"
Yes, that's me ✓
Not yet — help me find a gym
Collect demographics
CrossFit experience level + training frequency per week. Used to personalize all downstream offerings and Graici prompts.
Brand new
1–3 yrs
3–5 yrs
5+ yrs
Data to Capture
experience_level, training_days_per_week → stored in member profile, used to personalize Graici recommendations and tier upsell logic.
🏋️
Module 2 — Gym Offerings
Scripted + Dynamic
Present affiliate-specific services
Graici dynamically pulls the affiliate's configured services (from portal config profile) and presents only what's available at that location.
🧪
Labs
Foundations · Elite · Specialty panels
🫀
Clinical
Physician reviews · Nutrition · Health coaching
❄️
Recovery
Sauna · Cold plunge · Red light · Compression
Lab interest captured
If member expresses interest in labs, Graici surfaces available panels with pricing. Lab order intent logged to profile — triggers affiliate portal alert to follow up.
Performance diagnostics eligibility shown
VO2 Max, RMR, InBody presented if available at affiliate and eligible under assigned tier.
🏥
Module 3 — CommunityCare
Scripted + Branch
"Through your affiliate, you have the opportunity to enroll in CommunityCare — an alternative way the CrossFit community pays for healthcare expenses without traditional insurance. No networks, no surprise bills. Most members save thousands a year."
Yes, tell me more
I already have insurance
Maybe later
If interested → Website + Calendly CTA
Member routed to CommunityCare website or rep booking link. Interest flag stored in profile. Portal notified. CommunityCare enrollment status: Not Enrolled → Invited.
If insured / not now → Non-blocking
"Worth knowing — some members carry CommunityCare alongside traditional insurance." Interest preserved in profile for future prompting.
🔐
Module 4 — Health Records & Data Ownership
Scripted + API
"We believe that to truly own your health, you have to own your data. Right now, your health history is scattered across doctors' offices and health systems. I can change that."
Security declaration (always shown)
"Your data is yours. Full stop. Protected by the highest level of security available. It will never be sold. Not to insurers. Not to advertisers. Not to anyone."
What Graici pulls (with authorization)
📋
Clinical History
Past diagnoses, medications, surgical history, family history
🧪
Prior Labs
Previous panel results from any provider
👨‍⚕️
Care Team
Current providers, patient portal connections
Connect MyChart / Epic
Manual health history entry
Not right now
Personalized Health Summary generated
Once records are connected, Graici compiles the full Health Summary: biomarkers, clinical history, wearable data, medications, family history, assigned provider, CommunityCare status. Available in-app and shareable with providers.
Dev Note — EHR Connections
EHR integration via Epic/MyChart: SMART on FHIR. Members may also manually enter or upload health history where automated pull is unavailable. HIPAA-compliant storage required. Member can revoke access at any time. All data encrypted end-to-end. Wearable and Apple Health integration is out of scope for current build.
Module 5 — Wearable Data Integration
API Connection
"Once you're connected, I'll have access to your HRV, sleep quality, recovery scores, activity, heart rate zones, and readiness — and I'll start building a picture of how your body is actually responding to your training and life load."
Supported device connections — future scope
Wearable integration (Garmin, WHOOP, Oura Ring, Polar, and others) is planned for a future build phase. Not in scope for current development. Data fields are being architected now to ensure the member profile is ready to receive wearable data when that integration is built.
Garmin — Future
WHOOP — Future
Oura — Future
Polar — Future
Notification preference setup
"Once connected, I'll check in when something is worth your attention — not daily noise, just meaningful patterns." Member sets channel (push / in-app / email) and frequency.
🥗
Module 6 — Nutrition Tracking
API Connection
"What you eat has a direct impact on your performance, recovery, and your lab results. Connecting your nutrition data means I can start connecting dots that would otherwise stay invisible."
Supported apps
MyFitnessPal, Cronometer, Carbon Diet Coach. If member doesn't track: manual logging offered. If declined: non-blocking, flag preserved for future prompting when labs are in context.
🎯
Module 7 — Full Picture & Ongoing Coaching Setup
Closing + Configuration
"Here's where everything you've connected starts working for you. Your labs, wearable data, nutrition, health records — I pull all of it together into a single, continuously updated health picture."
Provider review scheduled (if labs ordered)
"They're not coming in cold. They have your full health picture — labs, trends, wearable data, nutrition patterns, health history, and anything I've flagged." Lab review scheduled via CFMS or in-house.
CommunityCare cost linkage explained
"Your CommunityCare cost is tied directly to your verified health metrics. The healthier you are, the more you save. This isn't a wellness points gimmick. It's real cost reduction based on data you own."
Session closes with full-picture confirmation
"Your data is secure, it's yours, and it's finally working in your favor. That's what owning your health actually looks like."
🧪
Phase 3
Diagnostics Journey
Lab eligibility check → Requisition → Collection → Sage Bio Visualizer → Results notification → Review decision
Portal + Graici + Sage Bio
📋
3A — Lab Panel Eligibility & Requisition Preparation
Graici + Internal Team

Lab panels can reach a member two ways: bundled in their health tier (entitlement already on file) or ordered à la carte. Graici handles both paths with the same requisition preparation and internal notification flow. The key gate in both cases is: does this member have panels available, and are they ready to create a requisition?

1
Graici checks lab panel eligibility
On login, after tier confirmation, and at any Graici-triggered prompt, the system reads member.lab_panels_remaining and member.panels_available[] from the portal record.
Bundled in Tier
Entitlement already on member record. Graici surfaces: "You have 2 lab panels included in your plan. Ready to use one?"
À La Carte
No bundled panels or panels exhausted. Graici routes to marketplace: member selects panel, pays via card on file or enters payment.
2
Member selects panel and confirms readiness
Graici presents available panels (Foundations, Elite, specialty) based on tier eligibility. Member selects and confirms.
"You have a Foundations Panel available. This covers 40+ biomarkers including metabolic health, inflammation, hormones, and nutrient levels. Ready to create your requisition?"
Yes — create my requisition
What does this panel include?
Schedule for later
3
Graici prepares requisition information
Graici collects and assembles the data required to generate the lab requisition. This is prepared within Graici before being handed off to the Catalina internal team for order processing.
👤
Member Info
Name · DOB · Contact · Affiliate ID · Assigned provider
🧪
Panel Details
Panel type · CPT codes · ICD-10 if applicable · Draw method (site vs. Speedy Sticks)
💳
Payment Source
Bundled entitlement reference OR card on file charge authorization
4
Graici notifies internal Catalina team
Once the member confirms, Graici sends an internal notification to the Catalina ops team with the assembled requisition package. The internal team processes the order, generates the lab requisition, and confirms dispatch to the draw site or Speedy Sticks.
Dev Note — Internal Notification
POST /internal/lab-requisitions → event: requisition_ready
Payload: { member_id, affiliate_id, panel_type, draw_method, payment_source, requisition_data{} }
Internal team receives in ops dashboard. On confirmation, requisition status updates to Ordered on both portal journey board and Graici member view. Member receives draw instructions via Graici notification.
🔬
3B — Sage Bio Visualizer — One-Time Access Setup
Graici ↔ Sage Bio API

Lab results are delivered into the Sage Bio Visualizer — the clinical dashboard that powers the biomarker display and trend visualization layer. Before results can flow into Graici, the member must complete a one-time Visualizer portal access setup that establishes the API connection between Graici and Sage Bio.

1
One-time Visualizer setup — prompted at first lab order
When a member orders their first panel (bundled or à la carte), Graici checks member.visualizer_connected. If false, setup is prompted before the requisition is finalized.
"Before we create your requisition, I need to connect your results to the Sage Bio Visualizer — this is a one-time step that takes about 2 minutes. Your results will live there, and I'll pull them directly into your Health Summary."
Set up Visualizer access
What is the Visualizer?
2
Member authorizes Graici → Sage Bio API connection
Member authenticates through the Sage Bio Visualizer portal (OAuth or token-based). Authorization grants Graici read access to that member's result records in the Visualizer. Member can revoke at any time.
3
Connection confirmed — requisition proceeds
Once member.visualizer_connected = true, the API token is stored securely and the requisition preparation continues. All future results flow automatically without re-authorization.
Dev Note — Sage Bio Integration
Establish OAuth 2.0 or API key exchange with Sage Bio for per-member result access. Token stored encrypted in Graici member record. Graici polls or receives webhook from Sage Bio when results are deposited: POST /webhooks/graici → event: results_ready with { member_id, panel_type, result_url, flagged_markers[] }. Results rendered in Graici via the CFMS Visualizer component.
📊
3C — Results Delivery & Lab Review Decision
Graici Prompt Logic
1
Sample collected → results deposited into Sage Bio Visualizer
Member completes draw at site or via Speedy Sticks. Lab processes sample. Results are uploaded to the Sage Bio Visualizer. Graici receives webhook notification.
2
Graici pushes results-ready notification to member
Member is notified via their preferred channel (push / in-app / email). Results are rendered inside Graici using Sage Bio Visualizer API data. Flagged markers are surfaced in plain language.
"Your Foundations Panel results are ready. 9 of 11 markers look strong — 2 are worth paying attention to. I've pulled them into your Health Summary."
3
Lab review decision — conditional on tier
Graici checks whether the member's tier includes a physician lab review as a bundled entitlement (member.reviews_remaining > 0). The prompt branches accordingly.
Review Included in Tier
Graici prompts to schedule immediately.
"Your plan includes a physician review. Ready to schedule time with Dr. McCoy to go over your results?"
Yes — schedule now
Schedule later
Review Not in Tier
Graici presents it as a decision, not a default.
"Your results are in. A physician review isn't included in your current plan — would you like to add one? A review puts your results in context of your training and gives you a clear action plan."
Yes — add a review ($300)
No thanks
Upgrade my plan
4
Portal journey board updated in real time
Every state transition — results deposited, member notified, review scheduled/declined — fires a status update to the affiliate portal journey board. Affiliate sees member's diagnostic status without accessing clinical data.
Journey Status Board — Affiliate Portal View
Graici Enrollment
Not Invited
Invited
Account Active ✓
Health Assessment
Not Started
In Progress
Profile Active ✓
Visualizer Connected
Not Set Up
Connected ✓
Lab Panel
None Ordered
Req Pending
Ordered
Sample Collected
Results In ✓
Physician Lab Review
Not Scheduled
⚠ Prompted
Scheduled
Completed ✓
Performance Diagnostics
Not Scheduled
Scheduled
Completed ✓
Recovery Services
Not Active
Active ✓
CommunityCare
Not Enrolled
Invited
Enrolled ✓
Phase 4
Ongoing AI Prompting
Data-triggered · Behavioral nudges · Not noise — only when something matters
Graici Intelligence Layer

Graici monitors the member's continuously updated health picture — biomarkers, training attendance, nutrition, care completion status, and wearable trends (future phase) — and surfaces prompts only when a specific threshold or pattern triggers action. These are the production examples from the Master Script.

🧪
Trigger: Lab results uploaded
"Your Foundations Panel results are ready."
Results surfaced with flagged markers in plain language. Physician review scheduling prompted.
Schedule physician review
View my results
Ask Graici about a marker
📅
Trigger: Review completed
"You've completed your lab review. Here are your top 3 action items based on your biomarker results."
Action items ranked by priority. Each item links to a service or resource available at the affiliate.
View action plan
Order supplements
Schedule follow-up
❤️
Trigger: HRV trending down 10+ days
"Your HRV has been trending down for 10 days — your recovery isn't keeping pace with your training load."
Training frequency from Wodify/PushPress API cross-referenced with wearable recovery data. Wearable data triggers are future phase — currently sourced from training attendance + self-reported data.
What should I do?
Book cold plunge at CFCF
Adjust training
😴
Trigger: Sleep quality drop 2+ weeks
"Your sleep quality has dropped significantly over the past two weeks. A few things in your data may explain it."
Cross-referenced with cortisol trend, training load, and nutrition patterns. Actionable insight surfaced.
Tell me what you're seeing
Talk to Dr. McCoy
🏃
Trigger: High training volume + VO2 not yet completed
"Your affiliate offers VO2 Max testing. Based on your recent training volume, this may provide useful performance insights."
Only surfaced if VO2 is available at affiliate (from config profile) and eligible under member's tier.
Schedule VO2 at CFCF
What is VO2 Max?
Not now
❄️
Trigger: High training frequency + low HRV + recovery service available at affiliate
"Your affiliate offers cold plunge recovery. Based on your training frequency, scheduling a session this week may support recovery."
Tier-gated: only shown if cold plunge is at the affiliate and member is Tier 3+. Otherwise Graici suggests upgrading.
Book cold plunge
Learn about Tier 3
🔄
Trigger: 11 months since last panel
"Your annual panel is coming up. Would you like to reorder your Foundations Panel?"
Automated reorder prompt with one-tap ordering. Routes through affiliate portal for attribution.
Yes — reorder panel
Schedule mobile draw (Speedy Sticks)
Not yet
🥗
Trigger: Consistent protein deficit relative to training output
"You've been consistently under your protein target this week relative to your output."
Requires nutrition app connected (Module 6). Cross-referenced with training attendance from gym software API.
Help me adjust
Book nutrition consult at CFCF
🏥
Trigger: Preventive screening indicated by age/history, not in records
"Based on your age and health history, a colonoscopy screening is indicated and not showing up in your records."
Surfaced from health history (Module 4). Graici routes to scheduling resource or Dr. McCoy referral.
How do I get this scheduled?
Talk to Dr. McCoy
💰
Trigger: Health Score improvement logged
"Your Health Score has improved. Everything you've connected is working toward lowering your CommunityCare cost."
Financial feedback loop — makes the behavioral investment tangible. Shown to CommunityCare members only.
View my Health Score
See what drove the change
Prompt Logic Rules
Not noise — only when something is worth the member's attention. Member controls channel (push / in-app / email) and frequency (urgent only / daily / weekly summary). Weekly summary always sent regardless of preference. Prompts must reference a specific data point, not generic wellness advice. All tier-gated prompts check member.tier before surfacing. Recovery service prompts check affiliate.services_available[]. Wearable-triggered prompts (HRV, sleep, recovery score) are future phase — in current build, training-load prompts source from gym software attendance API only.
🏅
Phase 5
Health Tier Progression
Affiliate-assigned tiers · Graici surfaces upgrade prompts based on data · Member requests through app
Affiliate Configured

Tiers can originate two ways. Affiliate-assigned: the affiliate owner sets a tier in the portal before or after sending the Graici invite — this is the expected default. Member opt-in via Graici: if no tier is pre-assigned, the member browses available tiers and selects one during onboarding or from the My Plan screen at any time. Both paths produce the same result — the affiliate is notified in the portal and the tier is confirmed before services activate. Pricing and tier availability are always affiliate-configured.

Tier Lab Panels Physician Reviews Performance Dx Recovery CommunityCare
Tier 1Graici Health
Graici OS + diagnostics eligibility
2 / year 2 / year
Tier 2Health Navigator
Full diagnostics + performance testing
4 / year 4 / year ✓ VO2, RMR, InBody
Tier 3Recovery
T2 + unlimited facility recovery
Affiliate-defined Affiliate-defined ✓ Full suite ✓ Sauna, cold plunge, red light, compression
Tier 4Integrated Healthcare
Complete system + CommunityCare
Affiliate-defined Affiliate-defined + Specialty ✓ Full suite ✓ Full access ✓ Enrolled · Health Score cost linkage
Graici Tier Upgrade Triggers
These are the in-app prompts Graici uses to move members toward higher tiers. Each is data-triggered, not sales-driven.
🤖
Trigger: High training load + low HRV + cold plunge at affiliate + member is Tier 1 or 2
CFCF offers cold plunge recovery. Based on your training frequency and HRV trend over the past two weeks, scheduled recovery sessions may make a real difference. This is available through Tier 3.
Tell me about Tier 3
Upgrade to Tier 3
Not now
🤖
Trigger: High labs spend + no CommunityCare + member is Tier 1–3
You've invested in your health data this year. Tier 4 brings in CommunityCare — an alternative to traditional insurance. Your Health Score directly impacts your monthly cost. Most members save $150–$400/month compared to what they're paying now.
Tell me more about CommunityCare
See Tier 4 details
Request upgrade
🤖
Trigger: Foundations Panel used + VO2/RMR not completed + member is Tier 1
You've completed your Foundations Panel. Tier 2 unlocks 4 panels per year, 4 physician reviews, and VO2 Max testing at CFCF — based on your training volume, a VO2 assessment would add meaningful context to your health picture.
Upgrade to Tier 2
Learn more
Tier Assignment & Upgrade Flow — Two Paths + Webhook
Path A — Affiliate assigns: Affiliate sets member.tier in portal. Tier travels with the Graici invite link and is active on first login. No member action required.

Path B — Member opts in via Graici: No tier pre-assigned. During onboarding (or from My Plan screen), member browses available tiers and selects one.
→ Graici fires webhook: POST /webhooks/affiliate-portal → event: tier_opt_in with payload { member_id, affiliate_id, requested_tier, bundled_services[], timestamp }
→ Affiliate portal receives webhook, creates pending tier request, notifies owner.
→ Affiliate confirms in portal → member.tier updates → Graici receives confirmation callback.
→ Graici notifies member: "Your tier is confirmed. Here's what's now available to you." Bundled services (labs, reviews, recovery access) are surfaced immediately in the member's Graici dashboard.

Bundled services note: When a tier includes bundled services (e.g., 2 lab panels, 2 reviews), those are instantiated as entitlements on the member record at confirmation — member.lab_panels_remaining, member.reviews_remaining. Graici reads these entitlements to determine what the member can act on without additional payment.
Commerce Layer
Product Marketplace & Payments
Graici needs a built-in marketplace for à la carte services, and a card-on-file system for subscriptions and recurring purchases. This is the payment infrastructure that runs underneath both bundled tier services and standalone purchases.
🛍️
Product Marketplace
In-App · Affiliate-Attributed

The marketplace surfaces purchasable products and services directly in Graici. Items are contextually recommended — Graici shows the right product at the right moment based on the member's data and journey stage. All purchases are attributed back to the originating affiliate.

🧪
Lab Panels — V1
Foundations · Elite · Specialty panels. Available à la carte when not bundled in tier, or when bundled panels are exhausted.
📅
Physician Reviews — V1
Add-on reviews when not included in tier. $300/review. Booking integrated with provider scheduling.
💊
Supplements — V3/V4
Recommended based on biomarker results (e.g., Vitamin D deficiency → supplement suggestion). Subscription-eligible. Scoped for future build.
Dev Note — Marketplace Architecture
Products are fetched from a Catalina product catalog API: GET /products?affiliate_id={id}&member_tier={tier}. Affiliate-specific pricing and availability is applied server-side. Contextual placement logic: Graici checks member.flagged_markers[] and journey_stage to determine which products to surface and when. All purchases create an order record attributed to affiliate_id for revenue tracking.
💳
Card on File & Subscription Billing
Stripe · Required for À La Carte + Subscriptions

Members need a payment method on file for: à la carte panel purchases, add-on reviews outside their tier, and future subscription services (supplements in V3/V4). Card is collected and stored securely at first purchase or during onboarding if prompted.

1
Card collected at first purchase or proactively during onboarding
If member's tier includes bundled services, Graici may prompt card setup during onboarding as a convenience step: "To make future purchases seamless, would you like to add a payment method now?" Not required until first actual purchase.
2
Stripe processes and stores payment method
Card tokenized via Stripe. Catalina never stores raw card data. member.stripe_customer_id stored in profile. Member can update or remove card at any time from profile settings.
3
Subscription services — V3/V4 scope
When supplements and recurring services are added to the marketplace, card-on-file enables one-tap reorder and auto-renewal subscription management. Subscription records stored as member.subscriptions[] with status, next billing date, and product reference.
V3/V4 Supplement Logic: After a lab review, if Dr. McCoy recommends a supplement based on biomarker results (e.g., Vitamin D 5,000 IU), Graici surfaces a one-tap purchase from the Catalina marketplace with the specific product pre-selected. Member can add to subscription for auto-reorder.
Dev Note — Payment Infrastructure
Use Stripe for all payment processing. Required capabilities: PaymentIntent for one-time purchases · SetupIntent for card-on-file without immediate charge · Subscription object for recurring services (V3/V4) · Customer object per member with stripe_customer_id stored in Graici member record. All revenue attributed to affiliate via order metadata. Refunds and disputes handled through Catalina ops team.
For the Dev Team
Key Data Fields — Member Profile
These are the fields Graici needs to have populated to execute the full journey. Source noted for each.
🏋️
From Affiliate Portal
member_id · affiliate_id · affiliate_name · tier · services_available[] · training_frequency · lab_panels_remaining · reviews_remaining
🔐
From EHR / Health Records
diagnoses · medications · surgical_history · family_history · prior_labs · care_team
🔬
From Sage Bio Visualizer
visualizer_connected · panel_results[] · panel_date · flagged_markers[] · review_status · action_items[]
💳
Commerce & Payments
stripe_customer_id · payment_method_on_file · subscriptions[] · order_history[] · supplement_subscriptions[] — V3/V4
From Wearables — Future Build
hrv · resting_hr · sleep_quality · recovery_score · training_strain · readiness — fields reserved, out of scope current build