The Coach — Marketing Strategy
LOCKED Apr 20, 2026
Hormozi x Suby x Dane Maxwell Hybrid
Positioning
"The first headless fitness coach. No app. No UI. Just a conversation."
"Other apps track calories. We track why you quit."
Value Equation (Hormozi)
- Dream Outcome: Lose 20+ lbs permanently
- Likelihood: NASM CPT + Navy nuke + data analyst + client zero (public)
- Time Delay: First coaching within 60 seconds. "10 lbs in 6 weeks."
- Effort: No app downloads. Text Billy on Telegram. Systems do the work.
Value Stack v2 ($2,188 → $297 founding / $49 regular)
- Billy AI Coach — daily behavioral check-ins, root cause analysis ($997)
- Weekly Scorecard + Dashboard — trends, rolling averages ($297)
- Nutrition Engine — cal/protein tracking, meal plans, grocery lists ($497)
- Base 6 Curriculum — sleep, exercise, journaling, meditation coaching ($397)
Funnel (Suby 8-Phase)
- ATTRACT: Meta ads + IG content + personal DMs (Dane: hot leads first)
- CAPTURE: Base 6 Guide PDF (HVCO / lead magnet)
- NURTURE: 5-email sequence (Days 0, 2, 4, 6, 8)
- CONVERT: 14-Day Challenge → founding offer at $297
- DELIVER: Billy bot daily coaching
- MULTIPLY: Client outcome stories → ad creative loop
Guarantee
Billy 30-Day: 10 lbs in 6 weeks at 80%+ Base 6 compliance or full refund.
Scarcity
First 100 founding members at $297 lifetime. After that: $49/mo.
Customer Acquisition Priority (Dane Effort Matrix)
- HOT: Text people Josh knows (Week 1 — 20 people)
- WARM: Fitness communities, Reddit, Facebook groups
- COOL: Zoom demos, webinars
- COLD: Meta ads, email sequences
Key Insight (Dane Behavior Spectrum)
Position as ELIMINATING behavior (meal planning, research, decision fatigue) not ADDING behavior (logging). "Stop thinking about what to eat. Just ask Billy."
14-Day Challenge Funnel (Dane)
- Day 1-3: Just tell Billy what you ate (no changes)
- Day 4-7: Billy suggests one substitution per meal
- Day 8-14: Full daily coaching
- Day 14: Founding offer drops
Path to $10K
- Week 1: Text 20 people, start 14-day challenge with 5-10
- Week 2-3: Convert challengers at $297 (~$1,485)
- Week 4-8: Meta ads scale, content compounds, first outcome stories
- Target: 34 founding members x $297 = $10,098
Schedule
- AM Block (10-noon): Marketing & sales (hard things first)
- PM Block (12:30-3): Build (easier on the brain)
- Content: 2x/day on IG, TikTok as testing lab
Key Quotes
"Three weeks of pain for 30 years of wealth." —Dane Maxwell
"Make people an offer so good they'd feel stupid saying no." —Sabri Suby
"Don't fall more in love with your product than the market will." —Dane Maxwell
"800 million heartbeats. Don't spend them on ideas that don't reward you." —Dane Maxwell
Night Research — Apr 21, 2026
Skill Sharpening + Competitive Intelligence
Meta Ads — Key Updates for The Coach
Compliance (Critical for Launch)
- Position as FITNESS COACHING, not "weight loss product" — unlocks before-and-after imagery + broader targeting
- No "you" statements implying viewer has a problem. Third-person only.
- No body-shaming, no guaranteed outcomes, no miracle language
- 2026 enforcement is AI-automated — borderline copy gets killed before human review. Write conservatively.
- Before-and-after is ALLOWED for fitness services (classes, coaching, equipment) — this is our opening
Andromeda Algorithm (2026)
- Creative DIVERSITY > volume. Don't clone winners — repurpose the winning MESSAGE across new FORMATS
- Feed 15-50+ active creatives for proper Advantage+ optimization
- Vertical, raw, social-native content explicitly rewarded
- Standard enhancements yield ~4% lower cost-per-result
- Refresh creative batch every 2 weeks
Action Items
- Rewrite ad copy as fitness coaching, not weight loss
- 10 core creative concepts, each in 2-3 format variations = 20-30 active creatives
- UGC-style: Josh talking to camera about his journey, Billy mascot statics, screenshot of Telegram convo
Email Nurture — Platform Decision
Recommendation: MailerLite
- Free tier: 1,000 subs, 12K emails/mo, drag-and-drop editor, landing pages, forms, automations ALL included
- Paid at 10K subs: $50/mo (vs Kit $119/mo, Beehiiv $49/mo)
- Best feature set for coaching funnels specifically
- Beehiiv is for newsletters, not coaching — wrong tool
Sequence Best Practices
- 7-email over 25 days (we wrote 5 over 8 days — consider extending)
- 80/20 value-to-offer ratio
- Subject lines under 45 chars, conversational
- Late openers (emails 7-8) convert 2-3x higher
- Consider tripwire at email 5 ($7-10 low barrier) before main $297 offer
Competitive Landscape
Market: $10.68B AI fitness (2025) → $57.8B by 2035 (19.3% CAGR)
| Competitor | Price | Weakness |
|---|---|---|
| Noom | $70/mo | 1.09/5 BBB, essentially a chatbot |
| Simple | Freemium | IF only, narrow |
| Welling | Sub | Photo logging, no accountability |
| BodyBuddy | Low-cost | Budget positioning, less credible |
| MFP | Freemium | 150M data breach, tracker not coach |
Stanford Research: AI + human coaching = 74% more weight loss than AI alone (~5 lbs vs ~3 lbs over 3 months). This validates The Coach's hybrid model — AI coaching with real human credibility.
White Space: Nobody combines AI coaching + NASM credentials + anti-guru voice + Telegram-native + behavioral tracking (Base 6). The "headless fitness coach" positioning is genuinely unique.
AM Brief Skill Sharpening Highlights
- Meta compliance pivot: Position ads as fitness coaching, not weight loss — unlocks before-and-after imagery
- Email platform decided: MailerLite (free tier, full automation, $50/mo at scale)
- Stanford validates hybrid model: AI + human credibility = 74% more weight loss
- Competitive gap confirmed: Nobody is doing headless AI coaching on Telegram with real credentials
- Creative strategy: 10 core concepts x 2-3 formats = 20-30 active creatives for Advantage+
- Bot API 9.5 streaming: sendMessageDraft enables ChatGPT-style token streaming for Billy
- Stars subscriptions: Near-zero commission, native Telegram billing — consider as payment rail
- OpenFoodFacts: Free barcode lookup API, no auth needed — wire into Billy as primary barcode handler
- Claude Opus 4.7 GA: Better vision + coding — consider upgrading Billy's brain from Haiku
Telegram Bot Development — Key Updates
Bot API 9.5 (March 2026)
sendMessageDraftstreaming available to ALL bots — stream AI responses token-by-token like ChatGPT- Bot-managed bots: programmatically create/configure sub-bots from a master bot
- Enhanced polls: descriptions, media, time-limited, shuffled answers — useful for check-ins/quizzes
Competitor Bots (direct)
| Bot | Price | Differentiator |
|---|---|---|
| CalPal.Pro | $3.30/mo | Photo/barcode/voice/text. Most polished. No coaching. |
| Delta Driven | $3.99/mo | Workouts + nutrition. 10 free messages. Basic. |
| BodySherpa | Sub | Meal plans + macro tracking. No behavioral coaching. |
| SnackWatch | Free? | Group tracking only. |
None of them have Base 6, behavioral coaching, or real credentials behind them. The Coach's moat is deep.
Stars Payments
- 1 Star ≈ $0.013-0.015 USD
- Near-zero Telegram commission (only taxes + processor fees)
- 30% BONUS when transferring Stars to Telegram Ad account
- Native recurring subscriptions supported
- Revenue threshold: ~5,000 DAU to be meaningful
OpenFoodFacts API (free, no auth)
GET https://world.openfoodfacts.net/api/v2/product/{barcode}- Returns: product name, Nutri-Score, full nutriments (cal, protein, carbs, fat, etc.)
- Millions of products globally
- Implementation: user sends barcode photo → decode with zbar → lookup OpenFoodFacts → return nutrition → log
Food Logging Accuracy
- AI vision: ~80-90% for common foods
- Portion size from photos is weakest link — prompt users for weight in grams
- Best practice: always let users confirm/edit before final log
- n8n has ready-made Telegram + Gemini Vision + nutrition tracking templates
Anthropic Updates
- Claude Opus 4.7 GA (Apr 16, 2026) — better vision + coding + long-running tasks
- Managed Agents public beta — could power persistent coaching agents at scale ($0.08/session-hour)
- Claude Design — visual output (prototypes, progress reports)
- Interactive visualizations — inline charts in responses
Action Items for Billy v2
- Wire OpenFoodFacts as primary barcode handler (free, accurate)
- Add sendMessageDraft streaming for AI responses
- Evaluate Stars subscriptions as alternative to Stripe ($297 = ~22,000 Stars)
- Add voice input via ElevenLabs Scribe (already have the key)
- Consider Opus 4.7 upgrade for coaching brain (better vision for food photos)
The Coach — Email Nurture Sequence
Trigger: Base 6 Guide PDF download
Goal: Guide → Trust → Trial → Founding Offer
Email 1: Deliver the Guide + Introduce Base 6 (Day 0 — immediate)
Subject: Your Base 6 Guide is here — and one thing to try tonight
Hey {{first_name}},
Your guide is attached. But before you read it, I want to tell you something most fitness apps won't:
Tracking calories isn't why you keep failing.
You already know what to eat. You've probably known for years. The problem isn't information — it's the six behavioral patterns that determine whether you'll actually stick to the plan past day 12.
That's what the Base 6 system tracks:
- Sleep — because you can't out-discipline exhaustion
- Food — calories and protein, yes, but WHY you skipped matters more than WHAT you skipped
- Exercise — movement, not perfection
- Journaling — 2 minutes of honesty with yourself
- Quiet Time — prayer, devotion, stillness. The thing you keep pushing off.
- Meditation — 5 minutes. Just breathing.
None of these are hard individually. But tracking all six together reveals the patterns that predict whether you'll quit — or whether this time is actually different.
Tonight, try this: Before bed, score yourself 0-2 on each one. Sleep, food, exercise, journal, quiet time, meditation. That's your Base 6 score for today. A perfect day is 12. Most people start around 4-5.
That number is more predictive than your scale weight. I'll explain why in my next email.
Talk soon,
Josh
Founder, The Coach | NASM CPT | BS Data Analytics
P.S. I'm doing this myself right now. Started at 275.9 lbs on April 12th. I'm tracking my Base 6 publicly because I believe in this system enough to bet my own body on it.
Email 2: Why Willpower Fails — Systems > Motivation (Day 2)
Subject: You didn't fail your diet. Your diet failed you.
Hey {{first_name}},
Quick question: How many times have you started a diet, lost some weight, felt great... and then gained it all back?
If you're like most people, the answer is "more times than I want to admit."
Here's what nobody tells you: willpower is a resource that depletes. It's not a character trait. It's a battery. And every diet plan that relies on motivation is asking you to run a marathon on a phone at 3% battery.
The Base 6 system works differently.
Instead of relying on willpower to make good choices, we build systems that make good choices the default. When you track all six behavioral indicators — not just food — you can see the collapse coming BEFORE it happens.
Here's what that looks like in practice:
- Your sleep score drops for 3 days → your food choices deteriorate on day 4. Every time.
- You skip journaling for a week → you stop being honest about what you're eating.
- Your meditation score flatlines → your stress eating spikes.
These patterns are invisible if you're only counting calories. But when you track all six, the data tells a story. And once you can see the story, you can change the ending.
This is why I built an AI coach that tracks behaviors, not just macros. His name is Billy, and he's annoyingly persistent in the best possible way.
More on Billy in my next email. For now — did you try scoring yourself? Reply and tell me your Base 6 score. I read every one.
Josh
Email 3: Josh's Story — The Builder Who Dogfoods His Own Product (Day 4)
Subject: I'm 275 lbs. Here's why I'm the right person to coach you.
Hey {{first_name}},
I know what you're thinking. "Why would I take weight loss advice from someone who weighs 275 pounds?"
Fair question. Here's my answer:
I'm not selling you a six-pack transformation photo. I'm building a system — and I'm testing it on myself first.
My background:
- 8.5 years US Navy, nuclear-trained electrician (the most demanding technical program in the military)
- NASM Certified Personal Trainer
- Certified Nutrition Coach
- BS in Data Analytics
I've spent my career building systems that work under pressure. Nuclear reactors don't run on motivation. They run on checklists, accountability, and data.
That's exactly what The Coach is.
On April 12, 2026, I stepped on the scale at 275.9 lbs. I'm tracking every day — publicly — using the same Base 6 system I'm building for you. Every check-in, every score, every stumble. Nothing hidden.
Why? Because I got tired of fitness influencers with perfect bodies selling programs they built AFTER they got in shape. I wanted to build something while I'm IN the fight. Not from the finish line — from the trenches.
The Coach isn't a meal plan. It's not a workout app. It's an AI coaching relationship that tracks the six behaviors that actually predict whether you'll succeed — and calls you out when you're slipping.
His name is Billy. He's a mountain goat. He's stubborn, encouraging, and he doesn't let you lie to yourself.
I'm putting together a founding group — the first 100 people who want to test this system with me. Founding members get lifetime access. No monthly fees. Ever.
If that sounds interesting, I'll have details in my next email.
Josh
P.S. Current weight: {{current_weight}} lbs. I'll update this number in every email until I hit 200. That's the deal I made with myself.
Email 4: Social Proof + Base 6 Data Story (Day 6)
Subject: What my first 2 weeks of Base 6 data revealed
Hey {{first_name}},
I've been tracking my Base 6 scores every day for {{days_tracking}} days. Here's what the data shows:
The pattern: Every time my sleep score dropped below 1 for two consecutive days, my food score crashed within 48 hours. Every. Single. Time.
The insight: I wasn't failing at nutrition. I was failing at sleep, and the nutrition collapse was a downstream effect.
No calorie counting app would have caught that. MyFitnessPal would have shown me "you went over your calories" — which I already knew. It wouldn't have shown me WHY.
That's the Base 6 difference. Six behavioral indicators, tracked daily, revealing the root cause patterns that no food diary can see.
Here's what the research backs up:
- 71% of fitness app users quit within 90 days
- Telegram/WhatsApp-based coaching shows 70-80% completion rates vs 8-12% for standalone apps
- AI-personalized coaching shows 50% higher retention than generic programs
The Coach combines all three: AI personalization + messaging-based (no app to download) + behavioral tracking that goes deeper than calories.
Billy's weekly scorecard shows you a rolling trend — not just today's number, but the pattern across weeks. You start to see yourself honestly. And that honesty is what makes this time different.
Tomorrow I'm going to share the founding member details. If you've been thinking about it — tomorrow's the email to watch for.
Josh
Email 5: The Founding Offer (Day 8)
Subject: 100 spots. $297. Lifetime. Doors open now.
Hey {{first_name}},
This is the one.
I'm opening The Coach to 100 founding members. Here's what you get:
The Coach — Founding Member Access
- Billy AI Coach — daily behavioral check-ins, root cause analysis, personalized accountability. Not a chatbot. A coaching relationship. ($997 value)
- Weekly Scorecard + Dashboard — visual progress tracking, rolling averages, trend analysis. Proof that the system is working, even when the scale doesn't move. ($297 value)
- Nutrition Engine — calorie and protein tracking, personalized meal suggestions, weekly grocery lists generated to your targets. The mechanism. ($497 value)
- Base 6 Curriculum — structured coaching on sleep optimization, exercise programming, journaling prompts, meditation guides. The edge that keeps you from quitting. ($397 value)
Total value: $2,188
Founding member price: $297 — one time. Lifetime access. No monthly fees. Ever.
After 100 spots fill, the price goes to $49/month. No exceptions.
The Billy 30-Day Guarantee: Hit 80% Base 6 compliance for 6 weeks and don't lose 10 lbs? Full refund. I'm betting on the system — and I'm betting on you.
Why lifetime at $297?
Because everything in The Coach is earned, not purchased. No premium tiers. No locked features. No pay-to-win. If you show up and do the work, you get everything. That's the deal.
I'm building this because I needed it myself. I'm at {{current_weight}} lbs and counting down. I want 100 people to do this with me.
JOIN THE FOUNDING 100 →
Josh
Founder, The Coach
NASM CPT | US Navy Veteran | Currently in the arena at {{current_weight}} lbs
P.S. You don't need another app. You need someone who won't let you quit. That's Billy. That's The Coach. That's us.
The Base 6 Guide
The 6 Things You're NOT Tracking That Are Sabotaging Your Weight Loss
By Josh Tibbetts | NASM CPT | Certified Nutrition Coach | BS Data Analytics
You Already Know What to Eat.
Let's get this out of the way: you don't need another meal plan.
You know that protein matters. You know vegetables are good for you. You know that the third slice of pizza at 11 PM is probably not advancing your goals.
The information isn't the problem. You've had the information for years.
The problem is that you keep quitting.
And you keep quitting because every app, every program, and every influencer is tracking the WRONG things. They're watching the scoreboard when they should be watching the players.
Calories are the scoreboard. The Base 6 is the game.
What Is the Base 6?
The Base 6 is a daily behavioral tracking system built on six indicators that predict — with startling accuracy — whether you'll stick to your health goals or abandon them by week three.
These six behaviors aren't random. They're drawn from behavioral psychology, habit formation research, and my own experience as a NASM-certified personal trainer, nutrition coach, and data analyst who spent 8.5 years in the US Navy's nuclear program building systems that don't fail.
Nuclear reactors don't run on motivation. They run on checklists, accountability, and data. Your health should work the same way.
Here are the six:
1. SLEEP
Score: 0-2 daily
This is number one for a reason. Not because it's the most exciting — because it's the most predictive.
When your sleep deteriorates, everything downstream collapses. Your food choices get worse within 48 hours. Your exercise motivation disappears. Your emotional regulation tanks, which means stress eating spikes.
Every "I fell off the wagon" story I've ever heard starts the same way: "I wasn't sleeping well."
What to track:
- Hours of sleep (target: 7+)
- Quality (did you wake up rested or wrecked?)
Scoring:
- 0 = Under 5 hours or terrible quality
- 1 = 5-7 hours or okay quality
- 2 = 7+ hours and woke up rested
The insight most people miss: Sleep isn't recovery from your day. Sleep is preparation for tomorrow. A bad night tonight doesn't just make tomorrow harder — it makes tomorrow's FOOD CHOICES harder. The research is clear: sleep-deprived people consume 300-400 more calories per day, mostly from high-carb, high-fat snacks. You're not weak. You're tired.
2. FOOD
Score: 0-2 daily
Yes, calories matter. Yes, protein matters. But the Base 6 doesn't ask you to weigh your chicken breast on a food scale.
Instead, we track two numbers: total calories and grams of protein. That's it. Not macros. Not micronutrients. Not whether your avocado was organic.
Why just two? Because compliance beats precision. A system you'll actually use for 6 months beats a perfect system you'll abandon in 6 days.
What to track:
- Total calories consumed
- Total grams of protein
Scoring:
- 0 = No tracking at all / way off target
- 1 = Tracked but missed targets significantly
- 2 = Tracked and hit within 10% of targets
The insight most people miss: The goal isn't perfection. The goal is AWARENESS. Most people have no idea how much they actually eat. When you start tracking — even imperfectly — you naturally adjust. The act of tracking IS the intervention. The number is secondary.
Quick protein targets:
- Sedentary: 0.6g per pound of body weight
- Active / trying to lose fat: 0.8-1.0g per pound of body weight
- Example: 250 lb person, active = 200-250g protein daily
3. EXERCISE
Score: 0-2 daily
Movement. Not a perfect workout program. Not a PR on your deadlift. Movement.
The biggest predictor of long-term weight loss isn't gym time — it's NEAT (Non-Exercise Activity Thermogenesis). That's the calories you burn doing everything that isn't formal exercise: walking, taking stairs, fidgeting, standing.
Steps are the simplest proxy for NEAT. That's why we track them.
What to track:
- Steps (target: 8,000+)
- Formal exercise (type and duration)
Scoring:
- 0 = Under 4,000 steps, no exercise
- 1 = 4,000-8,000 steps OR some exercise
- 2 = 8,000+ steps AND/OR structured exercise session
The insight most people miss: You don't need the gym to lose weight. You need to move. A daily walk does more for sustained weight loss than three intense gym sessions followed by four days on the couch. Consistency beats intensity. Always.
4. JOURNALING
Score: 0-2 daily
This is the one that makes gym bros roll their eyes. And it's the one that separates people who lose weight from people who lose weight and KEEP IT OFF.
Journaling isn't writing poetry about your feelings. It's 2-3 minutes of honest self-assessment. What went well today? What didn't? Why?
The "why" is everything. "I ate 3,000 calories" is data. "I ate 3,000 calories because I had a fight with my partner and I stress-eat when I feel unheard" is insight. One tells you what happened. The other tells you how to prevent it from happening again.
What to track:
- Did you journal today? (Even 2 minutes counts)
- Did you identify at least one behavioral pattern?
Scoring:
- 0 = No journaling
- 1 = Brief check-in (even a few sentences)
- 2 = Meaningful reflection with pattern recognition
The insight most people miss: Journaling creates a feedback loop that no app can replicate. When you write down WHY you made a choice, you build self-awareness. Self-awareness is the only sustainable weight loss tool. Everything else is a temporary patch.
5. QUIET TIME
Score: 0-2 daily
This is the spiritual discipline. Prayer, devotion, scripture, contemplation — whatever your practice is.
Why is this in a weight loss guide? Because weight loss is not a body problem. It's a whole-person problem. The people who sustain major weight loss aren't the ones with the best meal plans. They're the ones with the deepest sense of purpose.
Quiet time connects you to something bigger than the scale. It reminds you WHY you're doing this — not to look good at the beach, but to be the person you were designed to be.
What to track:
- Did you have intentional quiet time today?
- Duration
Scoring:
- 0 = None
- 1 = Brief (under 10 minutes)
- 2 = Intentional, focused quiet time (10+ minutes)
The insight most people miss: Every study on sustained behavioral change points to the same thing: people who maintain a spiritual or contemplative practice are significantly more likely to maintain health changes long-term. It's not woo-woo. It's data.
6. MEDITATION
Score: 0-2 daily
Separate from quiet time. Meditation is the practice of sitting with your own mind without trying to fix, solve, or escape it.
Why does this matter for weight loss? Because the #1 reason people break their nutrition plan is emotional reactivity. Stress, boredom, anxiety, loneliness — these are the triggers that send you to the pantry at 10 PM.
Meditation builds the gap between trigger and response. It doesn't eliminate cravings. It gives you 3 seconds of space to CHOOSE instead of react.
What to track:
- Did you meditate today?
- Duration
Scoring:
- 0 = None
- 1 = Brief (under 5 minutes)
- 2 = 5+ minutes of intentional practice
The insight most people miss: You don't need to be good at meditation. You don't need to clear your mind. You just need to sit there. The practice of TRYING to be still — even badly — is the intervention. Five minutes of distracted meditation still beats zero minutes.
How to Use the Base 6
Every day, score yourself 0-2 on each of the six behaviors. Your daily Base 6 score ranges from 0 to 12.
Scoring guide:
- 0-4: Red zone. Multiple systems are offline. Focus on getting ANY score above zero in each category.
- 5-7: Yellow zone. You're functioning but leaving gaps. Look for the pattern — which category keeps scoring 0?
- 8-10: Green zone. You're building momentum. Consistency here is where the magic happens.
- 11-12: Peak. You won't hit this every day. But when you do, notice how you feel. That's the signal.
The weekly view matters more than the daily view.
A bad day doesn't mean failure. A bad WEEK reveals a pattern. Track your Base 6 daily, but review it weekly. Look for:
- Which category is consistently lowest? That's your bottleneck.
- Do certain days of the week always score lower? That's an environmental trigger.
- When one category drops, which others follow? That's your cascade pattern.
The most important pattern: In my own tracking, every time my sleep score dropped for 2+ days, my food score collapsed within 48 hours. Every time. Your pattern might be different — maybe skipping meditation leads to stress eating, or missing exercise leads to poor sleep. The Base 6 reveals YOUR specific cascade.
Why This Works When Everything Else Failed
Every diet you've tried focused on ONE thing: food. Calories in, calories out. Macros. Meal plans. Points.
And it worked — for a while. Then you quit.
You quit because nobody was tracking the five other things that determine whether you'll stick to the food plan. Nobody noticed your sleep was falling apart. Nobody asked if you'd journaled. Nobody checked whether you'd taken five minutes to breathe.
The Base 6 tracks the WHOLE SYSTEM. Because you're not a calorie calculator. You're a human being with a body, a mind, and a soul — and all three need to be working together for sustainable change.
What Happens Next
You've got the framework. You know the six behaviors. You can start tracking today — a notebook, a spreadsheet, anything.
But if you want an AI coach who tracks it WITH you, holds you accountable, notices your patterns before you do, and won't let you quit on yourself...
Meet Billy.
Billy is an AI coaching relationship built on the Base 6 system. He checks in with you daily, scores your behaviors, generates weekly scorecards, and — most importantly — tells you WHY you're slipping, not just THAT you're slipping.
He's a mountain goat. Stubborn, surefooted, and he keeps climbing when everyone else quits.
I'm opening The Coach to 100 founding members at $297 — lifetime access. No monthly fees. Ever.
JOIN THE WAITLIST →
Josh Tibbetts is a NASM Certified Personal Trainer, Certified Nutrition Coach, and holds a BS in Data Analytics. He spent 8.5 years as a nuclear-trained electrician in the US Navy, where he learned that sustainable systems beat motivation every time. He's currently at {{current_weight}} lbs, tracking his own Base 6 publicly, proving the system works from the inside out.
The Coach is built by Ascent AI Automations. Billy the Goat approves this message.
Billy Onboarding Redesign
From "weak sauce" to Hooked Model
Current State (5-question text flow)
- First name
- Current weight
- Goal weight
- Biggest obstacle (a/b/c/d)
- Prior attempts (a/b/c/d)
→ Claude generates welcome message → done
Problems:
- No emotional hook — jumps straight to data collection
- No value demonstration before asking for info
- Multiple choice feels like a form, not a conversation
- No inline buttons on onboarding (only on checkins)
- No explanation of WHY these questions matter
- "Water break" error when Claude API fails — no graceful fallback
- User gets dumped into commands (/checkin, /scorecard) with no guidance
- No first check-in prompt after onboarding
Redesigned Flow: The Hooked Model
Spark → Mirror → Floor → Launch
Design principles:
- Give value BEFORE asking for data
- Every question has a reason the user can see
- Inline buttons wherever possible (reduces friction)
- Billy has personality from message one
- First check-in happens during onboarding, not after
PHASE 1: SPARK (The Hook — no data collection yet)
Message 1 (on /start):
Hey. I'm Billy.
I'm a mountain goat — stubborn, surefooted, and I keep climbing
when everyone else quits.
I'm also your new weight loss coach. But not the kind that gives
you a meal plan and disappears. I check in EVERY day. I notice
patterns. And I don't let you lie to yourself.
Sound intense? Good. That's the point.
Ready to see what makes me different?
Let's go → Tell me more first →
If "Tell me more":
Most weight loss apps track one thing: food.
I track six. Because your sleep, your journaling, your quiet time
— those predict whether you'll quit your diet on day 12 better
than any calorie counter.
It's called the Base 6. And it's why I actually work.
Ready?
Let's go →
PHASE 2: MIRROR (Reflect their situation back — data collection WITH context)
Message 2:
First things first — what do I call you?
(Free text — capture first_name)
Message 3:
Nice to meet you, {{first_name}}.
Now — I need two numbers. No judgment, just data.
Where are you now, and where do you want to be?
Current weight (lbs)?
(Free text — capture current_weight)
Message 4:
Got it. {{current_weight}} lbs.
And where are we headed?
Goal weight (lbs)?
(Free text — capture goal_weight)
Message 5:
{{first_name}}, that's {{lose_amount}} lbs. Totally doable.
Here's the real question though — and this one matters more
than the numbers:
What keeps getting in the way?
⏰ Time — I can't find the hours 🔥 Motivation — I start strong but fade 🧠 Knowledge — I don't know what works 🔄 Consistency — I know what to do but can't stick to it
Message 6:
{{obstacle_response}}
Last one. How many times have you tried to lose weight before?
First time → 1-2 times → 3-5 times → Lost count →
Obstacle responses (personalized):
- Time: "Time. Yeah — that's not really about time though. It's about systems. I'm going to show you a 5-minute daily practice that actually moves the needle."
- Motivation: "Motivation fades. That's not a character flaw — that's biology. We're going to build something that doesn't need motivation to work."
- Knowledge: "You might know more than you think. But I'll fill the gaps. That's literally my job."
- Consistency: "Consistency. That's the honest answer. And it's exactly what the Base 6 is designed for."
PHASE 3: FLOOR (Set the minimum — first taste of Base 6)
Message 7:
Here's the deal, {{first_name}}.
I'm not going to give you a perfect plan and hope you follow it.
I'm going to check in with you every single day and track the
6 behaviors that predict whether this time is actually different.
The Base 6:
Sleep
Food
Exercise
Journal
Quiet Time
Meditation
Each one scored 0-2. Max score: 12/day.
You don't need a 12. You need consistency above 8.
That's where the magic happens.
Want to do your first check-in right now?
Let's do it → Maybe later →
If "Let's do it": Trigger the /checkin flow immediately (inline buttons, same as current)
If "Maybe later": Skip to Launch phase
PHASE 4: LAUNCH (Set expectations + daily rhythm)
Message 8 (after first check-in, or after "maybe later"):
{{first_checkin_response}}
Here's how this works going forward:
I'll check in with you once a day
/scorecard shows your weekly trends
/mealplan generates a custom meal plan
Text me anytime — I'm always here
One hoof in front of the other, {{first_name}}. Let's go.
First check-in responses (personalized by score):
- Score 0-2: "Honest start. That's all I need. We build from here. Tomorrow the only goal is: score higher than today."
- Score 3-4: "Not bad for day one. You've got a foundation. Let's see what happens when you stack a few days together."
- Score 5-6: "Strong start. Most people don't walk in scoring this high. You might be further along than you think."
Code Changes Required
1. Replace ONBOARDING_QUESTIONS array:
Replace the 5-question text array with a state machine that handles the Hooked flow (8 messages, mix of text and inline buttons).
2. Add onboarding_step values:
- Step 1: Spark (waiting for "Let's go" button)
- Step 2: Name (free text)
- Step 3: Current weight (free text)
- Step 4: Goal weight (free text)
- Step 5: Obstacle (inline buttons)
- Step 6: Prior attempts (inline buttons)
- Step 7: Floor/first checkin prompt (inline button)
- Step 8: Launch (no input needed — just send and set step=0)
3. Add callback_query handlers for onboarding buttons:
onboard_start→ advance from Sparkonboard_tellmore→ send additional context, then Spark againonboard_obstacle_X→ save obstacle, advanceonboard_attempts_X→ save attempts, advanceonboard_checkin_yes→ trigger checkin flow, then Launchonboard_checkin_later→ skip to Launch
4. Personalized obstacle responses:
Map obstacle selection to a specific Billy response that validates their experience.
5. Immediate first check-in:
After onboarding, the user's first action IS a check-in — not waiting until tomorrow.
6. Fix the "water break" fallback:
Instead of "Billy's taking a water break," use a pre-written fallback response based on the context (onboarding complete, check-in score, etc.) so the user never sees a generic error.
DB Schema Changes
-- Add onboarding_phase column for tracking Hooked flow
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS onboarding_phase VARCHAR(20) DEFAULT 'spark';
-- Existing onboarding_step can remain for backwards compat, but the new flow uses onboarding_phase:
-- 'spark', 'name', 'weight', 'goal', 'obstacle', 'attempts', 'floor', 'launched'
Why This Is Better
- Emotional hook first — Billy introduces himself with personality before asking for anything
- Value before data — user understands the Base 6 concept before being asked to use it
- Inline buttons — reduces friction on multiple-choice questions
- Personalized responses — obstacle answer generates a custom response, user feels heard
- First check-in during onboarding — removes the gap between signup and first action
- Graceful errors — no more "water break" generic fallback
- Billy has voice from message one — "stubborn, surefooted, keeps climbing"
The Coach — DM Templates for Personal Outreach
For Josh's AM Block Week 1 — text these to people you know
Template 1: The Honest Ask (best for close friends)
Hey [name], I'm building something and I need honest feedback. It's an AI weight loss coach that lives in Telegram — checks in with you daily, tracks 6 behaviors that predict whether you'll actually stick to it this time. Not just calories.
I'm looking for 10 people to test it free for 14 days. Interested?
Template 2: The Personal Story (for people who know about your fitness journey)
Hey [name], you know I've been on my own weight loss thing — started at 276 a week ago. I'm actually building the tool I wished existed: an AI coach in Telegram that checks in every morning, tracks your food automatically, and won't let you quit.
Want to try it? Free for 2 weeks. I just need real people to test it with.
Template 3: The Dane Maxwell (for acquaintances / less close contacts)
Hey [name], quick question — I'm building an AI weight loss coach and I'm honestly not sure if it's any good yet. Could I get your gut reaction? It lives in Telegram, checks in daily, tracks 6 key behaviors. No app to download.
Would something like that be useful to you or anyone you know?
Template 4: The One-Liner (for mass texting)
Hey, would you try a free AI weight loss coach that texts you daily? Building one now and need 10 testers.
Follow-Up (if no response after 2 days)
Hey just bumping this — no pressure either way. If you know anyone who's been trying to lose weight and would appreciate a daily check-in buddy (AI-powered), send them my way. Appreciate you!
If They Say Yes
Awesome! Here's how it works:
1. Download Telegram (free, 30 seconds)
2. Search for @BillyTheCoachBot
3. Press /start
Billy will walk you through setup. Takes about 2 minutes. Then he'll check in with you every day for 14 days.
Fair warning — he's a mountain goat and he's persistent
Let me know once you're in and I'll make sure everything's working for you.
Who to Text (Josh's network categories)
- Gym buddies / people who've mentioned wanting to lose weight
- Navy friends who got out and put on weight
- Ultimate frisbee teammates
- Church community members
- Former personal training clients
- Family members who've tried diets
- Anyone who's complained about Noom/MFP/WW
Rules
- Text at least 10 on Monday, 10 on Tuesday
- Don't mass-blast — personalize with their name
- Follow up after 2 days if no response
- Anyone who says yes → manually onboard them (Zoom screen-share first 3)
- Log every response in Trello or message_log
5 Days in the Life of Dave
A 38-year-old dad trying to lose weight with The Coach
Written per Dane Maxwell's Day in the Life framework — sells the product before it exists.
Day 1: Monday
Dave weighs 242 lbs. He's tried Noom twice, MyFitnessPal three times, and a personal trainer once ($800 for two months, cancelled when his kid got sick and he missed three sessions). He knows what to eat. He just can't make himself do it past Thursday.
His friend Josh texts him: "Hey, I'm building an AI weight loss coach. Want to try it free for 2 weeks?"
Dave downloads Telegram in 30 seconds. Searches for @BillyTheCoachBot. Presses /start.
A mountain goat named Billy introduces himself. Asks Dave five questions: name, current weight, goal weight, biggest obstacle, how many times he's tried before. Dave types "consistency" and "lost count." Billy says:
"Consistency. That's the honest answer. And it's exactly what I'm designed for. Here's the deal, Dave — I'm going to check in with you every single day and track six things that predict whether this time is different. Ready for your first check-in?"
Six taps. Sleep? Yes. Food? Didn't track today. Exercise? Walked the dog. Journal? No. Quiet time? No. Meditation? No. Score: 2/12.
Billy says: "Honest start. That's all I need. We build from here. Tomorrow the only goal is: score higher than today."
Dave closes Telegram. Total time: 4 minutes.
Day 2: Tuesday
7:14 AM. Dave's brushing his teeth and his phone buzzes. It's Billy.
"Morning, Dave. Quick question — what are you having for breakfast?"
Dave types: "Probably just coffee and a bagel."
Billy responds: "The bagel's fine. Add 2 eggs and you'll hit 30g protein before 8 AM. That'll keep you from raiding the vending machine at 10:30. Trust me on this one."
Dave makes the eggs. It takes 4 minutes. He texts Billy: /food bagel with cream cheese and 2 scrambled eggs
Billy comes back instantly:
Food logged!
Bagel w/ cream cheese: 350 cal / 9g protein
2 scrambled eggs: 180 cal / 12g protein
This meal: 530 cal / 21g protein
Today's total: 530 / 2,100 target
Dave thinks: "That was easier than MyFitnessPal."
Day 3: Wednesday
Dave's at Chipotle for lunch. He takes a photo of his bowl and sends it to Billy.
Billy responds in 8 seconds:
Food logged!
Chicken burrito bowl w/ rice, beans, salsa, cheese: ~720 cal / 42g protein
Today's total: 1,340 cal / 78g protein
Remaining: 760 cal / 122g protein
Tip: You're heavy on carbs today. Dinner suggestion: grilled chicken
salad or a protein shake to close the protein gap.
Dave's wife asks what he's doing on his phone. "Texting my goat," he says. She looks confused. He shows her the conversation. She says: "Can I get one of those?"
Day 4: Thursday
This is the day Dave usually quits. He slept badly (kid was up at 2 AM). He skipped breakfast. He's stress-eating trail mix at his desk at 3 PM.
Base 6 check-in comes through. Sleep? Bad. Food? Off plan. Exercise? No. Journal? No. Quiet time? No. Meditation? No. Score: 1/12.
Billy doesn't guilt-trip. Billy says:
"Score: 1/12. Rough one. But here's what I notice — your sleep dropped, and your food followed. That's not a willpower failure. That's a cascade. Bad sleep → bad food choices. Every time. The fix isn't 'try harder tomorrow.' The fix is: what can you do tonight to sleep better? One thing. That's the whole assignment."
Dave puts his phone on the charger at 9:30 instead of scrolling until 11. He sleeps 7 hours for the first time in a week.
Day 5: Friday
Sleep: 7 hours. Food: tracked all three meals. Exercise: walked 6,000 steps. Journal: wrote two sentences ("Slept better. Felt clearer today."). Quiet time: 5 minutes in the car before work. Meditation: skipped.
Score: 9/12.
Billy says:
"9/12. Dave. Look at that. Yesterday was a 1. Today was a 9. You didn't change your diet. You didn't do a workout program. You slept better. That's the Base 6 — when the foundation is solid, the rest follows. Keep stacking days like this and we'll have a conversation about your scale weight next week that's going to make you smile."
Dave screenshots the scorecard and sends it to his wife. She downloads Telegram.
The Pattern
Dave didn't download a fitness app. He didn't create an account. He didn't set up a meal plan. He didn't join a gym.
He texted a goat. The goat texted back. And for the first time in his adult life, he made it past Thursday.
The Coach. AI accountability that lives in your Telegram. No app. No account. No excuses.
Join the founding 100 at the-coach.pages.dev
Billy SMS Architecture Spec
The Coach — SMS-First Coaching Engine
Version 1.0 | April 21, 2026
1. System Overview
USER (SMS/MMS)
↔
TWILIO
(webhook in/out)
↔
BILLY ENGINE (Node.js on VPS)
│
├── INPUT LAYER
│ ├── Text → direct to Orchestrator
│ ├── Voice (MMS) → ElevenLabs Scribe → text → Orchestrator
│ └── Photo (MMS) → Claude Vision triage → Orchestrator
│
├── ORCHESTRATOR (LLM Intent Classifier)
│ └── Haiku classifies → routes to Handler
│
├── HANDLERS (Deterministic)
│ ├── food_log → API Ninjas + food_log table
│ ├── check_in → Base 6 scoring flow
│ ├── coaching → RAG search + Sonnet response
│ ├── journal → save to daily_metrics
│ ├── weight → save to daily_metrics
│ ├── feedback → save to feedback table
│ ├── onboarding → state machine
│ ├── command → (STOP, HELP, STATUS, SCORECARD)
│ ├── greeting → quick reply
│ └── crisis → escalate to Josh
│
├── RESPONSE LAYER
│ ├── Sonnet (coaching conversations)
│ ├── Haiku (data confirmations, food parsing)
│ └── Template (structured responses, no LLM needed)
│
└── DATA LAYER
├── PostgreSQL (structured data)
└── Qdrant (coaching_context + user_coaching_history)
2. Input Layer
2a. Text Input
- Twilio webhook receives POST with
Body(message text),From(phone number),To(Billy's number) - Text passes directly to Orchestrator
2b. Voice Input (MMS)
- Twilio webhook receives
NumMedia> 0,MediaUrl0,MediaContentType0 - If content type is
audio/*:- Download audio from MediaUrl
- POST to ElevenLabs
/v1/speech-to-textwithmodel_id=scribe_v1 - Transcribed text passes to Orchestrator
- Reply includes: "I heard: '[transcript snippet]...'"
2c. Photo Input (MMS)
- If content type is
image/*:- Download image from MediaUrl
- Send to Claude Vision (Haiku) with triage prompt:
- "BARCODE: {number}" → OpenFoodFacts lookup
- "FOOD: {description}" → API Ninjas nutrition lookup
- "OTHER: {description}" → pass to coaching handler
- Result enters Orchestrator as classified input
3. Orchestrator (LLM Intent Classifier)
System Prompt
You are an intent classifier for a fitness coaching SMS bot. Given the user's
message and their current state, classify the intent into exactly ONE of these
categories. Return ONLY the JSON object, nothing else.
Categories:
- food_log: user is describing food they ate or asking to log a meal
- check_in: user is reporting on their Base 6 habits
- weight: user is reporting their weight (a number between 100-500)
- journal: user is writing a journal entry or reflection
- coaching: user is asking about nutrition, exercise, habits, or motivation
- feedback: user is giving feedback, reporting a bug, or requesting a feature
- onboarding: user is answering an onboarding question (only when state = onboarding)
- command: user is sending a keyword command (STOP, HELP, STATUS, SCORECARD, MENU)
- greeting: user is saying hi, good morning, etc.
- crisis: user expresses self-harm, severe distress, or dangerous behavior
Return: {"intent": "<category>", "confidence": 0.0-1.0, "extracted": "<any structured data>"}
Input to Classifier
{
"message": "<user's text or transcription>",
"user_state": "<onboarding_step | active | paused>",
"last_intent": "<previous message intent>",
"time_of_day": "<morning | afternoon | evening | night>"
}
Output
{
"intent": "food_log",
"confidence": 0.95,
"extracted": "2 eggs and toast with butter"
}
Routing Rules
- If
confidence < 0.7→ default tocoaching(let Sonnet handle ambiguity) - If
intent == "command"→ skip LLM response, use template - If
intent == "crisis"→ immediate escalation, no coaching response - If
user_state == "onboarding"→ forceonboardingintent regardless of classifier
4. Handlers (Deterministic)
4a. food_log
Input: extracted food description
Pipeline:
1. Claude Haiku parses into API-friendly queries (existing FOOD_PARSE_SYSTEM)
2. API Ninjas lookup per item
3. Sum totals (cal, protein, carbs, fat)
4. INSERT into food_log table
5. Query today's running total
Response template:
"Logged: [items]. This meal: [cal] cal / [protein]g protein.
Today's total: [total_cal] / 2300 cal | [total_protein] / 200g protein"
LLM needed: Haiku (parsing only)
4b. check_in
Input: Base 6 responses
Pipeline:
1. Parse scores (SMS format: "2,1,2,0,1,0" or conversational)
2. If conversational → Haiku extracts scores
3. INSERT/UPDATE coach_checkins
4. Calculate daily score
Response:
Sonnet generates coaching commentary based on scores + user history
LLM needed: Haiku (parsing) + Sonnet (coaching response)
4c. coaching
Input: user's question or statement
Pipeline:
1. Search Qdrant coaching_context (science/programs)
2. Search Qdrant user_coaching_history (personal patterns)
3. Pull last 5 check-ins from PostgreSQL
4. Build context: user profile + RAG results + recent data
5. Sonnet generates response (max 300 tokens for SMS)
Response: Sonnet coaching message
LLM needed: Sonnet
4d. journal
Input: journal text
Pipeline:
1. Save to daily_metrics.journal_text (append if exists)
2. Weekly: batch embed journal summaries to user_coaching_history
Response template:
"Journal saved. Keep writing — patterns emerge over time."
LLM needed: None
4e. weight
Input: number (100-500 range)
Pipeline:
1. UPDATE daily_metrics SET weight = X
2. Query last 7 weights for trend
3. Calculate rolling average
Response template:
"[weight] lbs logged. Trend: [direction] [amount] from last week.
Rolling avg: [avg] lbs."
LLM needed: None
4f. feedback
Input: feedback text
Pipeline:
1. INSERT into feedback table (user_id, text, category, timestamp)
2. Haiku auto-categorizes: bug | feature_request | positive | negative
Response template:
"Feedback received — thanks. This goes directly to the team."
LLM needed: Haiku (categorization only)
4g. onboarding
State machine — see Section 5.
4h. command
STOP → Twilio auto-handles opt-out. Log to DB. Mark user paused.
HELP → Template: "Billy commands: text CHECKIN, FOOD, WEIGHT,
SCORECARD, JOURNAL, FEEDBACK, or STOP. Or just talk to me."
STATUS → Template: today's Base 6 score + food total + weight
SCORECARD → Generate weekly scorecard, send as text + URL to visual
MENU → Same as HELP
4i. greeting
Response: Quick contextual greeting based on time of day + last interaction
Morning: "Morning [name]. Ready for today's check-in?"
Afternoon: "Hey [name]. How's the day going?"
Evening: "Evening [name]. How'd today go?"
LLM needed: None (template with time-of-day logic)
4j. crisis
Input: distress signals detected by classifier
Pipeline:
1. Send immediate supportive response (template — NOT LLM-generated)
2. "I hear you. If you're in crisis, please text HOME to 741741
(Crisis Text Line) or call 988."
3. Flag in DB: crisis_flag = true, timestamp
4. Send alert to Josh via Telegram
5. Do NOT attempt to coach through it
LLM needed: None — template only. Safety-critical path must be deterministic.
5. Onboarding State Machine (SMS)
All conversational. No buttons. Billy asks, user texts back.
State 0: WELCOME
Billy: "Hey! I'm Billy. I'm your AI fitness coach. I'm here to
help you hit your goals — not judge you, not lecture you, just
help. Ready to get set up? Takes about 2 minutes."
Wait for any response → State 1
State 1: NAME
Billy: "What should I call you?"
Save first_name → State 2
State 2: GOAL
Billy: "Nice to meet you, [name]. What's your main goal?
1 - Lose weight
2 - Eat better without thinking about it
3 - Get a workout plan I'll stick to
4 - Just be healthier overall"
Save goal_type → State 3
State 3: CURRENT_WEIGHT
Billy: "Got it. Current weight in lbs?"
Save current_weight → State 4
State 4: GOAL_WEIGHT
Billy: "[weight] lbs. Where do you want to be?"
Save goal_weight → State 5
State 5: SCHEDULE
Billy: "What time do you usually wake up? (like 6:30)"
Save wake_time → State 6
State 6: BEDTIME
Billy: "And what time do you usually go to bed?"
Save bed_time → State 7
State 7: INTERACTIVITY
Billy: "How much do you want me in your life?
1 - Light — just check in once a day
2 - Medium — daily check-in + tips + nudges
3 - Full send — coach me hard, don't let me slide"
Save interactivity_level → State 8
State 8: DELIVERY
Billy: "Last one. How do you want your daily lessons?
1 - Text message (read it)
2 - Voice message (listen to it)
3 - Both"
Save delivery_pref → State 9
State 9: PRIVACY
Billy: "One thing before we start — your data is yours. Your
journal, your weight, your check-ins — only Billy sees them.
I can't see your individual data. If I ever need to, I'll ask
and you can say no. Cool?"
Wait for any response → State 10
State 10: FIRST CHECK-IN
Billy: "Alright [name], let's do your first Base 6 check-in.
Quick scores, 0-2 each:
Sleep / Food / Exercise / Journal / Quiet Time / Meditation
Send as six numbers like: 2,1,1,0,0,0"
Parse + save → State 11
State 11: LAUNCH
Billy: "Score: [X]/12. [Personalized Sonnet response].
Here's how this works from here:
- I'll text you at [wake_time] every morning
- Quick daily lesson + check-in
- Text me anytime — food, questions, anything
- Text SCORECARD for your weekly report
- Text STOP anytime to pause
One hoof in front of the other, [name]. Let's go."
Set onboarding_step = 0 (complete) → ACTIVE
6. Scheduled Messages (Cron via Node.js)
PER USER (based on their wake_time and bed_time):
wake_time: "Morning [name]. Base 6 check-in time. How'd you sleep? (0-2)"
wake_time + 30m: Daily curriculum lesson (Week X, Day Y content)
bed_time - 15m: "Winding down? Quick end-of-day Base 6: text your scores (S,F,E,J,Q,M)"
bed_time: "Lights out, [name]. Rest well. Tomorrow we go again."
WEEKLY (Sunday):
Generate scorecard → send as text summary + URL to visual scorecard
"Here's your week: [text summary]. Full report: [URL]"
MISSED CHECK-IN (no response by noon):
"Hey [name], missed you this morning. Everything good?
Quick score whenever you're ready — or just say hi."
3-DAY SILENCE:
"Haven't heard from you in a few days. No judgment — just checking in.
Text anything to pick back up, or STOP if you need a break."
7. Database Schema Updates
-- Update coach_users for SMS
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS phone_number VARCHAR(20);
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS channel VARCHAR(10) DEFAULT 'sms';
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS goal_type VARCHAR(50);
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS wake_time TIME;
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS bed_time TIME;
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS interactivity_level VARCHAR(10)
DEFAULT 'medium';
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS delivery_pref VARCHAR(10)
DEFAULT 'text';
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS data_consent VARCHAR(20)
DEFAULT 'anonymized_only';
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS consent_expires_at TIMESTAMPTZ;
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS crisis_flag BOOLEAN DEFAULT false;
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS curriculum_week INT DEFAULT 1;
ALTER TABLE coach_users ADD COLUMN IF NOT EXISTS curriculum_day INT DEFAULT 1;
-- Update coach_checkins for 0-2 scoring
ALTER TABLE coach_checkins ALTER COLUMN sleep TYPE SMALLINT
USING CASE WHEN sleep THEN 2 ELSE 0 END;
ALTER TABLE coach_checkins ALTER COLUMN food TYPE SMALLINT
USING CASE WHEN food THEN 2 ELSE 0 END;
ALTER TABLE coach_checkins ALTER COLUMN exercise TYPE SMALLINT
USING CASE WHEN exercise THEN 2 ELSE 0 END;
ALTER TABLE coach_checkins ALTER COLUMN journal TYPE SMALLINT
USING CASE WHEN journal THEN 2 ELSE 0 END;
ALTER TABLE coach_checkins ALTER COLUMN quiet_time TYPE SMALLINT
USING CASE WHEN quiet_time THEN 2 ELSE 0 END;
ALTER TABLE coach_checkins ALTER COLUMN meditation TYPE SMALLINT
USING CASE WHEN meditation THEN 2 ELSE 0 END;
-- score now out of 12 not 6
-- Feedback table
CREATE TABLE IF NOT EXISTS feedback (
id SERIAL PRIMARY KEY,
user_id VARCHAR(20) NOT NULL,
category VARCHAR(20), -- bug | feature | positive | negative
message_text TEXT NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Curriculum progress
CREATE TABLE IF NOT EXISTS curriculum_progress (
id SERIAL PRIMARY KEY,
user_id VARCHAR(20) NOT NULL,
week INT NOT NULL,
day INT NOT NULL,
pillar VARCHAR(20) NOT NULL,
lesson_id VARCHAR(50),
completed BOOLEAN DEFAULT false,
completed_at TIMESTAMPTZ,
quiz_score INT,
UNIQUE(user_id, week, day)
);
8. Model Tiering
| Task | Model | Cost/msg | Why |
|---|---|---|---|
| Intent classification | Haiku | ~$0.001 | Speed. Runs on every message. |
| Food parsing | Haiku | ~$0.001 | Structured extraction, no creativity needed. |
| Photo triage | Haiku (vision) | ~$0.003 | Quick barcode/food detection. |
| Feedback categorization | Haiku | ~$0.001 | Simple classification. |
| Coaching responses | Sonnet | ~$0.01 | Nuanced, personalized, references RAG. |
| Post-checkin commentary | Sonnet | ~$0.01 | Needs pattern recognition + personality. |
| Onboarding welcome | Sonnet | ~$0.01 | First impression matters. |
| Voice transcription | ElevenLabs Scribe | ~$0.005 | Best accuracy for short voice clips. |
Estimated cost per user per day: ~$0.03-0.05 (3-5 messages)
At $49/mo: 98% margin on AI costs.
9. Twilio Integration
Webhook Endpoint
POST https://[VPS_IP]:8881/sms/incoming
Headers: Twilio signature validation
Body: From, To, Body, NumMedia, MediaUrl0, MediaContentType0
Outbound
const twilio = require('twilio');
const client = twilio(ACCOUNT_SID, AUTH_TOKEN);
async function sendSMS(to, body) {
return client.messages.create({
body,
from: BILLY_NUMBER,
to
});
}
async function sendMMS(to, body, mediaUrl) {
return client.messages.create({
body,
from: BILLY_NUMBER,
to,
mediaUrl: [mediaUrl]
});
}
Scheduled Messages
Node.js cron jobs query coach_users for each user's wake_time/bed_time, converts to UTC, sends at the right time. Uses node-cron or a simple setInterval check every minute.
10. File Structure
/root/telos-ea/billy-sms/
├── server.js # Express server, Twilio webhook handler
├── orchestrator.js # LLM intent classifier
├── handlers/
│ ├── food.js # Food logging handler
│ ├── checkin.js # Base 6 check-in handler
│ ├── coaching.js # RAG + Sonnet coaching handler
│ ├── journal.js # Journal save handler
│ ├── weight.js # Weight logging handler
│ ├── feedback.js # Feedback handler
│ ├── onboarding.js # Onboarding state machine
│ ├── commands.js # STOP/HELP/STATUS/SCORECARD
│ └── crisis.js # Crisis escalation handler
├── services/
│ ├── twilio.js # Twilio send/receive helpers
│ ├── claude.js # Claude API (Haiku + Sonnet)
│ ├── elevenlabs.js # Voice transcription
│ ├── qdrant.js # RAG search helpers
│ ├── nutrition.js # API Ninjas + OpenFoodFacts
│ └── db.js # PostgreSQL connection + queries
├── scheduler.js # Per-user scheduled messages
├── curriculum/
│ ├── week1-sleep.json # Day 1-5 sleep lessons
│ ├── week2-food.json
│ ├── week3-exercise.json
│ ├── week4-journal.json
│ ├── week5-qt.json
│ └── week6-meditation.json
└── package.json
11. Build Priority (This Week)
| Day | Task | Blocked By |
|---|---|---|
| Mon PM | DB schema updates | Nothing |
| Mon PM | Spec complete (this doc) | Nothing |
| Mon Night | Twilio webhook + basic send/receive | Twilio credentials (Fred) |
| Tue AM | Orchestrator (intent classifier) | Nothing |
| Tue PM | Onboarding state machine (SMS) | Twilio working |
| Tue Night | Food + weight + journal handlers | Nothing |
| Wed AM | Coaching handler (RAG + Sonnet) | Qdrant corpus ingested |
| Wed AM | Ingest coaching corpus to Qdrant | Nothing |
| Wed PM | Scheduled messages (wake/bed) | Twilio working |
| Wed PM | QA with AI test personas | All handlers working |
| Thu | First beta tester onboard (Zoom screen-share) | Everything above |
| Fri | Fix what broke, onboard remaining testers | Thursday learnings |
Built for Monday. Owned, not rented. One hoof in front of the other.