Submit
Quenga Designs · 2026
A training journal for everyone on the mats — log rolls, track techniques, and watch progress compound over time. (Formerly BJJ Journal.)
- Problem
- Training progress in BJJ is slow and easy to lose track of — sessions blur together, and nothing connects what you logged last month to what you should focus on this week.
- Solution
- I built a full training journal on React and Supabase: session logging, a technique library, tournament and seminar tracking, trend analytics, and an AI Coach grounded entirely in the user's own logged data.
- Result
- Currently in testing. The successor to BJJ Journal, rebuilt with Supabase auth and a hardened test suite.
The brief
Submit is the second life of BJJ Journal, the studio's original training log. The rebuild had a sharper thesis: a journal for everyone on the mats — adults, competitors, and kids via a Parent Mode — where progress compounds because the app remembers what you did and reflects it back.
What was built
The core loop is session logging: rolls, rounds, the 7 P's, breathing, partners, and notes. Around it sits a technique library of positional concepts and steps, tournament and seminar tracking with match history, a crossover-training log, videos, photo memories, and a trends dashboard with rolling averages, streaks, and baselines.
The AI Coach layer is nine features deep: session debriefs, technique tagging, weekly focus, fatigue breakpoint detection, partner scouting, a progress narrative, kids coaching notes, Ask Your Journal, and a competition game plan. Every one is grounded in the user's own logged data and every one is optional — without an API key configured, they fail gracefully and the journal works untouched.
Supabase provides email/password auth, and Parent Mode lets one account track multiple kids.
Under the hood
Stack: React 18, Vite 6, TypeScript in strict mode, Tailwind 4, Recharts, and Supabase for auth and journal data. The AI Coach calls /api/coach, a Vercel serverless function that proxies to the Anthropic API with a server-only key — never a VITE_ variable, so it can't reach the client bundle. Privacy is structural: AI calls send only a digest built locally from logged data, never raw account data, and results cache on-device so repeat views cost nothing.
The stability phase closed a real coverage gap — 39 of 41 components originally lacked tests. The suite now stands at 105 passing unit tests across 20 test files, plus Playwright end-to-end specs and a Node-native storage test.
Where it stands
In testing. The migration from the original localStorage-only BJJ Journal to a Supabase backend is the defining move of this generation — accounts, multi-device access, and family links instead of data trapped in one browser. The roadmap ahead is phased around stability first, then mobile one-handed use, because the honest use case is logging a session right after training.