Claude Code + brx-programs setup checklist
Get Jordan's machine ready. This is mechanics — do it first so the real meeting isn't interrupted by install issues.
Everything above is setup. These are the outcomes that actually need to happen in this meeting.
Build an AI-assisted system that generates a 90%-complete individualized training program from athlete data and coaching rules, with a coach review step before publishing. Think of it as: the system does the first draft, Jordan reviews and tweaks, then it gets pushed to the athlete on Exercise.com.
Tier 1: Hard Guardrails
Non-negotiable safety and structural rules enforced automatically. Volume ceilings, age gates for barbell work, block structure order (Mobility→Power→Strength), rep range validation.
5-10 coded rules. If the AI violates one, the draft gets flagged before a coach sees it.
Tier 2: Structured Constraints
Coaching decision patterns that Jordan reviewed and approved. Progression logic, exercise substitution boundaries, throwing phase sequencing, training economy pairings.
10-15 rules. Claude extracted candidates from the Coaching Logic page — Jordan reviews yes/no/modify.
Tier 3: Narrative Context
Jordan's full coaching philosophy fed directly to the AI as context. The AI reads the Coaching Logic page for nuance, multi-dimensional tradeoffs, and the "everything is connected" approach.
Plus reference program retrieval — finding similar athletes' past programs as starting points.
// The full pipeline
1. Coach flags athlete as needing a program (HubSpot)
2. System pulls athlete profile (assessment, age, level, role, time of year)
3. Tier 1: Check hard guardrails (volume caps, age gates, block order)
4. Tier 2: Apply structured constraints (progression, substitution, phase rules)
5. Tier 3: AI reads coaching philosophy + finds similar past programs, generates draft
6. Jordan reviews, tweaks, approves
7. Program pushed to athlete on Exercise.com
| Piece | Status | What it does |
|---|---|---|
| Workout data in Supabase | Done | 155 athletes, 13K workouts, 47K blocks, 154K exercises synced. Expanding to ALL coaches (not just Jordan) for clients since Jan 2024. |
| Tagger tool | Done | Web app for annotating past programs with training context (phase, goals, constraints) |
| Phase auto-detection | Done | Automatically detects throwing/strength phases from block names and workout structure |
| Daily sync pipeline | Done | New programs from Exercise.com sync to Supabase automatically every day |
| Coaching Logic doc | Done | Jordan's full framework documented in Notion — all sections filled. Covers athlete variables, periodization, strength/throwing decisions, volume guidelines, training economy. |
| Candidate rules extracted | Ready for review | 22 candidate rules (8 hard guardrails + 14 structured constraints) extracted from the Coaching Logic page. Jordan adjudicates yes/no/modify. |
| Reference program matching | Not built | The engine that finds the most similar past program for a new athlete |
| AI program generation | Not built | The AI that takes a reference program + rules and produces a draft |
| Exercise.com push | Not built | Automatically publishing the finished program to the athlete's account |
Job 1: Review Candidate Rules
Claude already extracted 22 coaching rules from the Coaching Logic page. Jordan reviews each one: yes (correct), no (wrong), or modify (close but needs adjustment).
Format: 30-minute sessions with Brooks
Target: 15-20 approved rules
Time: Weeks 1-2
Job 2: Tag Programs with Reasoning
Use the tagger to annotate programs. The tool auto-fills 80% of fields — Jordan adds the "why" (top decisions, what would change, constraints).
Tool: tagger.brxperformance.cloud
Target: 15-20 tagged programs with reasoning
Priority: Diverse profiles (different ages, seasons, in-gym vs remote)
Job 3: Validate Phase Detection
As part of tagging, confirm/correct the auto-detected phases. This IS validation — built into the tagger workflow.
Tool: tagger.brxperformance.cloud + Claude Code
What to check: Are the auto-detected throwing/strength/season labels accurate?
Time: Ongoing, 5-10 min per program
When Jordan writes a NEW program (not retroactive tagging), the plan is:
The voice note pipeline isn't built yet — it's the next piece after the rules documentation is in good shape.
A coaching rule is a decision you make repeatedly when writing programs. It has three parts:
WHEN
The situation or condition
THEN
What changes in the program
BECAUSE
Why you make this change
You already apply these rules every time you write a program — they're just in your head. The goal is to get them into a format the system can learn from.
Injury Constraint
WHEN an athlete is returning from a shoulder injury
THEN eliminate overhead pressing, cap pulling volume at 2 sets, start throwing at plyo-intro phase regardless of calendar date
BECAUSE overhead loading under fatigue is the highest-risk movement for a compromised shoulder. Throwing restarts from scratch to rebuild tissue tolerance progressively.
Equipment Constraint
WHEN athlete is remote with DB-only equipment
THEN substitute all barbell compounds with DB equivalents (DB RDL for barbell deadlift, DB bench for barbell bench), add unilateral work to compensate for lower absolute load
BECAUSE DB max loads are lower than barbell, so we shift to higher rep ranges and single-leg/single-arm variations to maintain training stimulus.
Training Age + Season
WHEN athlete is a novice AND it's off-season
THEN keep exercises simple (DB-only, no barbell yet), focus on movement quality over load, program 3x/week max, use higher rep ranges (8-12)
BECAUSE novices build strength on anything — the priority is building movement competency and training habits before adding complexity. Barbell comes after ~1.5 years of consistent DB work.
These are the areas where rules matter most. You don't have to do them all at once — pick a category and talk through it with Claude.
Injury & Pain Rules
What changes for shoulder, elbow, back, hip, knee pain? What about returning-from-injury vs managing-chronic?
Equipment Substitution Rules
DB-only, bands-only, no rack, no mound — what swaps for what?
Season & Phase Transition Rules
How does volume/intensity change across off-season → pre-season → in-season? What triggers a phase change?
Training Age Progression Rules
When does an athlete graduate from bodyweight → DB → barbell? What determines exercise complexity?
Schedule & Frequency Rules
How does programming change for 2x/week vs 4x/week? What about athletes in-season with heavy game schedules?
Throwing Program Rules
How do you determine starting throwing phase? Ramp-up timelines? When to add/remove mound work?
Safety Guardrails
Things the system should NEVER do — exercises that are always wrong for certain conditions, red-line volume limits, etc.
You don't need to write these in any special format. Just talk to Claude naturally:
// Example conversation with Claude in brx-programs
Jordan: "I want to document my injury rules. When an athlete has elbow pain, here's what I change..."
Claude: [asks clarifying questions, structures it into WHEN/THEN/BECAUSE format, saves to rules file]
Jordan: "Actually, it depends on whether it's UCL or flexor mass. Let me break those apart..."
Claude: [updates the rule with sub-conditions, creates branch, opens PR]
Claude saves rules as structured files in the brx-programs repo. Each rule gets a file in rules/ that looks like this:
# rules/injury-shoulder.md
## Shoulder Pain — Returning from Injury
When: injury_status = "returning" AND pain_area includes "shoulder"
Then:
- Eliminate all overhead pressing
- Cap horizontal pulling to 2 sets
- Start throwing at plyo-intro regardless of calendar
- Add extra shoulder CARs to mobility section
Because: Overhead load under fatigue = highest risk for compromised shoulder...
Example athlete: [name] — October 2025, post-labrum, used this approach
Exceptions: If medical team clears overhead work, can reintroduce at 50% volume
Think of it like Google Docs, but for code:
brx-programs is a repo.Commits = save points
Every time you (or Claude) finish a chunk of work, you "commit" it — that's a snapshot of exactly what every file looks like at that moment. Each commit has a message like "Add phase detection for throwing programs." You can always go back to any commit.
Branches = parallel drafts
Imagine you photocopied the entire project folder and worked on the copy. That's a branch. The original is called main — it's the "real" version. When you create a branch called jordan/expiring-programs, you can make changes there without touching main. If something goes wrong, main is untouched.
Pull Request (PR) = "hey, I'm done — please review"
When you finish work on a branch, Claude creates a PR on GitHub. It shows exactly what changed — lines added in green, lines removed in red. Brooks looks at it, and either approves & merges (the changes get folded into main — one click) or comments ("change this part" and you revise).
Push = upload your commits to GitHub.
Pull = download the latest from GitHub to your computer.
Clone = copy the whole repo from GitHub to your computer for the first time.
Jordan opens Claude Code in brx-programs/
|
"Build me a script that shows expiring programs"
|
Claude creates a branch: jordan/expiring-programs
Claude writes the code
Claude commits (saves) the work
Claude pushes the branch to GitHub
Claude creates a PR with a summary
|
Brooks gets a notification
|
Brooks opens the PR on GitHub
Reads the summary, sees the green/red diff
Clicks "Merge pull request"
|
Changes are now in main ✓
Jordan never touches main directly. Every change goes through a PR that Brooks approves. That's the safety net.
| Fear | Why it's fine |
|---|---|
| "I break everything" | You work on branches. main is untouched until Brooks merges. |
| "We both edit the same file" | Git detects this ("merge conflict") and forces you to pick which version wins. Claude handles this automatically. |
| "I lose work" | Every commit is permanent. You can undo any merge with one command. Git is basically an infinite undo button. |
| "I don't understand what changed" | PRs show a plain-English summary (Claude writes it) plus the exact line-by-line diff. |
You won't type most of these — Claude does it. But good to know:
| What you want | Command | Plain English |
|---|---|---|
| Get the latest changes | git pull | Download what's new from GitHub |
| See what's been happening | git log --oneline | Show me recent save points |
| Undo a bad merge | git revert <commit> | Create a new commit that undoes that one |
| See what changed this week | git log --oneline --since="1 week ago" | Self-explanatory |
| Check current state | git status | What files have changed since last save? |
Think of main as the published book. Branches are rough drafts. PRs are editor reviews. Commits are autosave snapshots within a draft. GitHub is the shared bookshelf where both of you can access everything.
Key URLs
Jordan's Workflow
Checkboxes saved in your browser. Blue boxes explain the "why." Dark code blocks are prompts — click to copy into Claude.