TwentyTwelve JJ
app v1.324 · worker v1_279
Live rounds
6:00
Round 1 of 5
Tap a block — these are the real presets, at real speed

Nobody logs
anything.
The clock does.

Every other gym app asks members to record their own training, so the numbers are always wrong. This one never asks anyone anything. The coach runs the round clock exactly as they would anyway — and the stats fall out of it.

The stat engine

Run the class. That's the whole input.

The clock is the only thing anyone touches, and it's a thing coaches already use. Everything downstream — dashboards, leaderboards, the screen on the wall, promotion checks, retention flags — is a by-product of a class simply happening.

1 · The coach runs a block

Pick the type, the round length, how many rounds. Start it. It plays on the TV and beeps the rounds.

WARM-UP DRILLING POSITIONAL LIVE

2 · Everyone on the mat is credited

Whoever is marked in gets the minutes and the rounds, automatically. No forms, no honesty system, no forgetting.

+30 min live · 5 rounds +15 min warm-up +1 session · mat time from check-in

3 · It becomes everything else

One ledger, read by every part of the app.

Member training dashboard Leaderboards, gym-wide The screen on the wall Who's due a promotion Who's quietly drifting off

And when it goes wrong, it can be put right.

Sat someone out by mistake? Clock never got started? Open the session, open the block, and put them on it — they get the minutes, the rounds and the session, because it credits them against the block that actually ran. Delete a block that shouldn't have happened and everyone's minutes go with it.

Pairings

Who rolled whom.
Wired up in twenty seconds.

During live rounds the coach pairs the room from their phone — tap-tap, tap-tap, done. Shuffle deals the next round fairly: it remembers who has sat out and never benches the same person twice until everyone has. Every pairing lands on both members' profiles as a round that actually happened, against the block that actually ran.

After class, each member can privately review their rounds — how hard it was, what they caught, what caught them, how it felt. Nobody else ever sees a review. Over months it becomes something no notebook survives long enough to show: your whole history with every training partner.

TRY IT — START THE BLOCK, OPEN 🔗 PAIRS, TAP TWO NAMES TO WIRE THEM, OR JUST HIT SHUFFLE

The coach's phone — the shipped engine, time at 20×. Thirteen made-up names.

Members

what everyone in the gym gets

Training dashboard

Sessions, mat time, live rounds, and minutes split by warm-up, drilling, positional and live — over 7 days, 30 days, this month, or all time.

Timetable & booking

Book, cancel, join a waitlist. Reminders before class.

QR check-in

Scan the screen on the wall. That's the check-in, and it starts the mat-time clock.

Your rounds

Every live round you rolled, who with, round by round — logged by the coach's pairing board, not by you. Partner-by-partner history builds itself.

Round reviews — private

After class, rate each roll: intensity, subs, taps, how it felt. Only you can see it. Months later it's a training diary you never had to keep.

Going away

Off-island or injured? Set a return date. Reminders stop, nobody chases you, and the coach's list shows when you're back instead of flagging you as drifting.

Belt journey

Every belt and stripe, the date, who promoted them, and a photo of the day.

Gym chat

Reactions, photos, edit, delete, and quoted replies. Plus a separate coaches-only room.

Direct messages

Member to member, and to the coaches. Kids' accounts are locked to staff-only messaging, and kids never appear in the member directory — protection is the default, not a setting you have to find.

Claude, in the app

DM the bot to book a class, ask what's on, ask about the rules or the price. It books it for you.

Games & leaderboards

Scrappy Bird, Tappy Gets Invited, and more — with gym-wide high scores.

Your tab

What you owe, itemised, and how to settle it.

Notifications

Class reminders, replies, mentions, announcements, promotions. Each one can be switched off.

Waiver & gym info

Signed once, on file. Payment details, hygiene rules, contact.

Installs like an app

Home screen icon, full screen, works with no signal. No app store.

Coaches

the mat, and the people on it

The mat clock

Four block types, any round length, any number of rounds, rest between. Runs on the TV, driven from your phone, beeps the rounds. And credits everyone on it.

Pairings

Wire up who's rolling whom in about twenty seconds. Shuffle deals the next round with fair benching — nobody sits twice until everyone has sat once. Every pairing lands on both members' profiles.

Accident book

An injury on the mat gets a proper record: who, what happened, what was done, follow-up — and a resolved log. The paperwork a real gym needs, without the paper.

Emergency contacts

Every session shows who's on the mat and their emergency contact, tap-to-dial. The moment you need it is the worst moment to go looking for it.

Missing in action

Everyone who hasn't trained in 14+ days, with a one-tap message. People come back when someone notices they're gone.

The roster

Who booked, who came, who didn't. Mark people in, add a walk-in.

Turnout warnings

Predicted attendance before the class, so you know when one is about to be empty.

Fix the record

Add someone to a block they were left off, take someone off one they weren't in, or delete the block entirely.

Classes

Create, edit, deactivate. Claim the ones you're teaching.

Private sessions

One or two students, a price, repeat weekly. Everyone sees the mat is booked; nobody sees who with. The price splits and lands on their tab when they're marked in.

Closures & special days

Shut a day, add a seminar, put on a one-off.

Coach notes

Private notes on a member. What they're working on, what's injured.

Promotions

Belt, stripes, date, photo. It goes on their belt journey.

Owner

the gym as a business

"Who's slipping?"

Not who's absent — who has dropped against their own baseline. Someone who trained three times a week and now comes once is leaving, and they're the person nobody notices until they've gone.

"Who's due a promotion?"

Candidates with the evidence: time at belt, sessions since, rounds, turn-up rate — against what this gym has actually required before. It surfaces. You decide.

"Give us some stats"

Busiest session, toughest session, top roller, most mat time, king of the warm-up. Ask in the gym chat and it reads them out to the room.

Class health

Which classes are growing and which are quietly dying, four weeks against the four before.

Money

Tabs, balances, who owes what, who hasn't paid.

Bulk admin, by message

Promote a list, fix a batch of dates, credit someone's rounds — by DM. Every change is confirmed before it happens, and every change is written down.

Roles & access

Build your own roles — an assistant coach who runs the clock but never touches money, a front-desk role that only does check-ins. Every permission is a plain-English switch; the risky ones make you type ENABLE and say exactly what they expose. Flip a switch and it applies to everyone holding the role immediately — and a change log always answers "who turned that on".

Exports

Members and attendance as CSV, whenever you want them. Your data leaves whenever you say so.

Signup codes

A different code per role. Turn any of them off.

Announcements

Push the whole gym at once.

The screen on the wall

One TV. It runs itself.

Pair any television to the gym once. Between classes it shows the time, what's on next, a QR code to check in, and the leaderboards on rotation. When a coach starts a block on their phone, it becomes the round clock.

It checks for new versions on its own and reloads when one lands — because nobody is ever going to walk over and refresh a screen bolted to a wall.

18:42
Most on the mats — 28 days
🥇 James Sealey · 14 sessions
🥈 Richard Mulholland · 12 sessions
🥉 Liam Blakemore · 11 sessions
Scan to check in · No-Gi Advanced
Underneath

Small, fast, and nobody else's.

Runs on the edge, so it's quick from a phone on gym wifi. Every gym's data is isolated from every other gym's. No app store, no monthly per-seat licence, no third party holding your members' details.

Cloudflare Workers — the whole backend D1 — the database PWA — installs, works offline Web Push — real notifications Claude — the assistant Per-gym isolation Capability permissions — every check, one table Audit trail — every role change written down Strict CSP — no third-party scripts