Randori

The jiu-jitsu training log. Built because I train.

Every fitness app files jiu-jitsu under Other — an hour of the hardest training a body can do, logged as a calorie guess. I wanted three things after class: what did tonight cost me, what caught me, and how do I make sure it doesn't catch me again. Randori is those three questions, answered properly.

Randori on iPhone showing a live training session with heart rate, effort, and session timing
Why this exists

I built this for me, on the mat, after class

I do jiu-jitsu. Most nights end the same way: sitting on the edge of the mat, trying to remember what actually happened in the last hour — which rolls emptied the tank, which armbar I walked into twice, what my coach said in the thirty seconds I could still hear him.

The apps I tried wanted me to be a runner. The notebooks got soaked. So I built the thing I kept reaching for and not finding: a log that speaks jiu-jitsu — effort, positions, submissions, notes in my own words — and turns tonight's mistakes into tomorrow's study plan.

That's the whole product brief. Everything in the app answers one of my three after-class questions, and anything that didn't got cut.

The session

The physical truth of a night of training

Start a session and the Watch (or a paired chest strap) streams heart rate live while you roll. Effort is logged per round, in the seconds between rolls — one thumb, gloves-off honest. When class ends you have the real shape of the night: how hard, how long, how much was left in the tank.

Randori on iPhone showing a live training session with heart rate, effort, and session timing
A live session: heart rate from the wrist, effort per roll.
Randori training view with per-roll effort logging
Effort per roll, logged between rounds.
Randori afterimage view summarizing the session after class
The afterimage: what the session cost, once it's over.
Learn from your rolls

Stop getting caught by the same thing

This is the feature I built the app to get. You write what happened in your own words — a note, not a dropdown — and Randori matches it to film-backed lessons from instructors worth learning from. Get caught in an armbar, see the defense. Then the counters to the counters.

Session note

got caught in an armbar from closed guard, couldn't get my elbow back in time

From the mat

Stacking Armbar Defense

Escape · closed guard · 2 films

The matching happens on your iPhone — your notes never leave your device to be understood. The library runs white belt through black, so the answer meets you at your level.

Randori lesson view suggesting a stacking armbar defense from a session note
A note becomes a lesson: matched on-device, backed by film.
Belt progress

The belt, made honest

Jiu-jitsu progress is famously opaque — years between belts, promotions that arrive when they arrive. Randori counts what you can control: sessions accumulate into an honest forecast of where your training is heading, so the long road has mile markers.

Randori rank view showing belt progress forecast
Where the training is heading.
Randori promotion celebration screen
The day it happens, the app knows what it took.
Partners & architecture

A gym is people. So is the app.

You don't train alone, and the log shouldn't pretend you do. Connect with the people you actually roll with and share sessions — a social layer that runs on CloudKit's public database. No accounts, no server of mine holding your data.

iPhone + Apple WatchSwiftUI · HealthKit · live HR
CloudKitpublic database · no accounts
Reports941 telemetry · moderation

Community features carry community responsibilities: user reporting shipped in 1.0, wired into the studio's own moderation tooling, so a report filed from the mat reaches a human the same day — not a backlog.

Small, honest machinery

SwiftUI on iPhone and Watch. Sessions sync through your private iCloud and write to Apple Health as real workouts. Even the anonymous usage telemetry defines a session the way a training log would — a burst of activity, ended by half an hour of quiet:

Swift · SessionTracker
enum SessionTracker {
    static func noteActivity(now: Date = .now) {
        if let last, now.timeIntervalSince(last) >= quietGap {
            rotate(at: now)   // ≥30 quiet minutes = a new session
        }
        last = now
    }
}

Twelve languages at launch, from Japanese to Arabic — because the sport's vocabulary is already global, and the app should meet it there.

Your training, finally counted.

Randori 1.0 is on the App Store for iPhone, with Apple Watch live sessions.

Download Randori randoriapp.com