My Flow Active
{{ l.label }}
{{ pathMsg }}
{{ peek.emoji }}
{{ peek.name }}
{{ peek.typeLabel }}
Add a technique
Drops a new node into your graph
Name
Type
Gi / No-Gi
Connects to {{ addCount }} selected
{{ note.id }}
{{ note.emoji }}
{{ note.name }}
{{ bd.label }}
Reference: {{ note.name }}
[ reference photo ]
Reference: {{ note.name }}
Why it works
{{ note.why }}
{{ noteBody }}
Links & Backlinks
Sensory Checkpoints — What you should FEEL
{{ c.text }}
Common Errors & Fixes
✗ {{ er.e }}
→ {{ er.f }}
Decision Tree — If / Then
IF
{{ d.cond }}
THEN
{{ d.ans }}
Where are you with this? — DRILL
{{ curStage.name }}
{{ curStage.blurb }}
Due for review — tap a DRILL stage to log a fresh session.
Personal Notes
Sensei Context
{{ note.name }} — {{ note.senseiHint }}
{{ m.text }}
Film Room — clips for this technique
{{ nc.platIcon }}
{{ nc.label }}
{{ nc.platform }}
Open ↗
🌊
My Flow
Your personal system — what flows naturally
Style
Create personal chain
Building: {{ buildingChainName }}
{{ cp.emoji }}{{ cp.name }}
API key, backup, and app settings →
Primary Positions — The core of your game
Target Submissions — What you actively hunt
My Personal Chains
{{ ch.name }}
{{ cp.emoji }}{{ cp.name }} {{ cp.arrow }}
Sensei Analysis
🥷
Sensei
Your world-class instructor. Knows your Flow.
🔑
Sensei needs an API key
Free, no card required — takes about 2 minutes.
Free tier · no credit card · key stays on your device
🥷
The Sensei is ready
30 years of experience. Ask anything.
Step {{ wizardStep }} of 2
Connected
Get a free Gemini key
Sensei runs on Google's Gemini API. It's genuinely free — no credit card, no trial that expires — you just need a key tied to your Google account.
What you'll see over there
1
If asked, sign in with your Google account
2
Tap Create API key
3
Under "Name your key," type Flowverse BJJ — so you can find it later
4
Under "Choose an imported project," tap Create project → name it Flowverse BJJ
5
Tap Create key — if Google shows an error, just tap it again
Paste it in
Click Copy key next to the key named for this app in AI Studio's API Keys page, then paste the whole thing here — not the project name, not your Google account.
{{ wizardDraftHint }}
Free tier basics: plenty of requests per day for personal training use, resets daily. Google may use free-tier conversations to improve their models — switch to a paid Anthropic key in Settings later if that matters to you. Exact current limits at aistudio.google.com/rate-limit once signed in.
{{ wizardError }}
Sensei is ready
30 years of experience. Ask anything.
{{ m.avatar }}
{{ m.text }}
🥷
Chains & Systems
Proven sequences from the world's best
{{ c.name }}
{{ cp.arrow }}
Gym Flows — from your curriculum
{{ c.name }} {{ c.beltLabel }}
{{ cp.arrow }}
My Personal Chains
{{ c.name }}
{{ cp.arrow }}
🔍 Path Finder
Find the shortest connection between any two techniques and explore it as a guided sequence.
Progress & Journal
Le journal — track every roll
My Rank
{{ userBeltName }}
Stripes
{{ beltStripes }}/4
{{ timeAtRank }} at this rank
Promotion history
{{ bh.belt }}{{ bh.stripes }} {{ bh.date }}
Your belt is your one overall rank. Each technique tracks its own DRILL stage — independent of the belt you wear.
{{ s.num }}
{{ s.label }}
📈 Consistency
{{ totalActiveDays }} active days
{{ streakWeeks }}
{{ streakLabel }}
This week {{ thisWeekCount }} / {{ weeklyGoal }}
Weekly goal {{ weeklyGoal }}
last 12 weeks · green = goal met
Log a Sparring Session
Techniques drilled
{{ cp.emoji }}{{ cp.name }}
Technique Mastery — DRILL distribution
{{ b.name }} {{ b.count }}
Sparring Log
{{ e.date }} ▲ {{ e.caught }} ▼ {{ e.submitted }} ↔ {{ e.passed }}
{{ e.notes }}
🎥
{{ sc.note }}
Watch ↗
Session Journal
🎬
Film Room
Clips you spotted — paste a link, drill it later
{{ clipCount }}
Saved
{{ clipToTry }}
To Try
{{ clipTested }}
Tested
Save a Clip
🎞️
No clips yet
Spot a slick technique on your feed? Paste the link above and tag it to a technique to find it later.
{{ c.platIcon }}
{{ c.label }}
{{ c.platform }} {{ c.techLabel }}
Open ↗
Dilemmas
Decision points you haven't resolved yet
{{ dilemmaCount }}
⚔️
No open dilemmas
Add a dilemma below — 2, 3, or more options. When you've committed to one, mark it resolved.
{{ d.title }}
{{ d.situation }}
{{ o.text }}
{{ d.notes }}
+ Add Dilemma
Resolved ✓
{{ d.title }}
Resolved · {{ d.defaultChoice }}
Decision Quiz
{{ quizProgress }}
No decision trees found for this technique. Try another.
{{ quizNode.emoji }}
{{ quizNode.name }}
If…
{{ quizIf }}
Then…
{{ quizThen }}
Positional Sparring Prompt
{{ randomDrillWhy }}
Suggested: 3-minute rounds, reset to the start position each time
Injury / Load Tracking
Track niggles and rehab so you train smart
Log Injury
{{ inj.joint }}{{ inj.side }} {{ inj.date }}
{{ inj.note }}
Training Partners
Track your regular training partners
Add Partner
🥋 {{ ptn.name }} {{ ptn.weight }}
{{ ptn.style }}
{{ ptn.notes }}
Gym Curriculum
Your gym's real syllabus — tap a belt to open it, set each technique's DRILL stage
{{ gm.name }}
{{ gc.name }}
{{ gi.name }}
{{ gi.stageName }}
Competition
Match log · weight tracking · opponent scouting
{{ compWins }}
Wins
{{ compLosses }}
Losses
⚖️ Weight / Goal
Current weight
Target / weight class
Competition goal
✅ Match Day Checklist
{{ ci.label }}
🥋 Log Match
{{ cm.resultEmoji }}
{{ cm.opponent }} {{ cm.result }}
{{ cm.date }} {{ cm.pointsSuffix }}
{{ cm.notes }}
🔍 Opponent Scouting
{{ cs.name }}
↑ {{ cs.strengths }}
↓ {{ cs.weaknesses }}
{{ cs.notes }}
Drills & Mental
Movement drills · mental training · breathing techniques
{{ dg.emoji }} {{ dg.label }}
{{ di.name }}
{{ di.why }}
Steps
{{ ds.n }} {{ ds.text }}
When: {{ di.whenToUse }}
Technique Studio
Build multi-step techniques with two movable grapplers, markers, and playback
No techniques yet.
Name one above and hit Create to open the builder.
{{ studioStepNum }}
{{ studioHint }}
Position Preset
Steps
Step Details
Duration (ms)
Markers
{{ ml.label }}
Fitness
Strength & conditioning · goals · stretch routine
💪 Log Workout
{{ fl.typeLabel }} {{ fl.date }}
{{ fl.details }}
{{ fl.notes }}
🎯 Goals
{{ fg.text }}
by {{ fg.targetDate }}
🧘 Stretch Routine
Last done: {{ stretchLastDone }}
{{ si.label }}
Round Timer
Mat-side interval timer · rounds · rest · audio cues
{{ timerPhaseLabel }}
{{ timerDisplay }}
⚙️ Setup
Rounds
{{ timerRounds }}
Round length
{{ timerRoundLen }}
Rest length
{{ timerRestLen }}
Prep countdown
{{ timerPrepLen }}
Warning beeps (end of round)
{{ timerWarnLen }}
Recall Review
{{ crProgress }}
🎉
Session complete
Reviewed {{ crReviewedCount }} technique(s). DRILL stages updated.
Recall this technique
{{ crItem.name }}
Picture the setup, the steps, the finish — then reveal.
{{ crItem.beltLabel }}
{{ crItem.module }} · {{ crItem.category }}
{{ crItem.nodeEmoji }} Linked technique: {{ crItem.nodeName }}
Current stage: {{ crItem.stageName }}
How well did you recall it?
No curriculum items to review yet.
Settings
App configuration & data management
🥷 Sensei AI
Provider
Gemini API Key
Model: gemini-3.5-flash. Free tier available at Google AI Studio (aistudio.google.com). Note: free-tier requests may be used by Google to improve their models — use a paid tier if privacy matters to you.
Anthropic API Key
Model: claude-haiku-4-5. Pay-per-use billed to your Anthropic account. No free tier — each message costs a fraction of a cent.
Runs a small AI model ({{ localModelName }}) entirely in this browser tab — no internet needed once it's downloaded, nothing you say ever leaves this device. Lower quality than Gemini/Anthropic, but works with zero signal. Needs a WebGPU-capable browser (recent Chrome/Edge on desktop or Android; not supported on iOS Safari yet). One-time download, ~{{ localModelSizeMB }}MB.
⚠ Known limitation: small on-device models sometimes over-flag grappling terms (choke, submission, attack) as violence and refuse to answer — a quirk of their generic safety training, not something this app controls. Gemini and Anthropic don't have this problem. If it happens often, Gemini's free tier is the better default.
⏳ {{ localModelProgress }}
✓ Local model loaded and ready — fully offline from here.
{{ localModelError }}
{{ localModelError }}
🔄 Cloud Sync (GitHub)
{{ ghSyncMsg }}
Last sync: {{ ghLastSyncLabel }}
Pulls if remote is newer, pushes otherwise. Token needs repo write scope. The target repo should be private — separate from the app's public source repo.
💾 Backup & Restore
Saves a JSON file with your progress, notes, chains, dilemmas, and settings. Keep it somewhere safe — restoring replaces what's on this device.
🔮 Export to Obsidian
Writes one Markdown note per technique you've worked on — with [[wikilinks]], your notes, journal, tagged film, and DRILL stage — plus journal / flow / chains / curriculum summaries, into a vault folder you pick. On phones (no folder access) it downloads one combined .md instead.
{{ obsidianStatus }}
⚠ Your last change couldn't be saved (storage may be full or restricted). Back up now.
Flowverse BJJ v{{ appVersion }}
⚠ Danger Zone
This permanently deletes all your progress, notes, chains, and session history from this device. Export a backup first.