Early access
Log the set you’re actually in the middle of.
Calistenio is a training log for bodyweight work. Plan the sets you mean to hit, then tick them off with the reps you really managed and how hard it felt.
The plan and the result live on the same row — which is what makes am I ready to move up? answerable later.
Free while in early access. Runs in the browser today — iOS and Android are in the store queue.
| Set | Target | Actual | RPE | Logged |
|---|---|---|---|---|
| 1 | 8 | 8 | 7 | Logged |
| 2 | 8 | 7 | 9 | Logged |
| 3 | 8 | 5 | 10 | Logged |
| Set | Target | Actual | RPE | Logged |
|---|---|---|---|---|
| 1 | 45s | 45s | 8 | Logged |
| 2 | 45s | 37s | 10 | Logged |
How it works
A session, end to end
Six steps, and only two states — in progress, or done.
Start
One tap creates the session and drops you straight into it. There's no planned state to keep tidy — a session exists because you started it.
Add an exercise
From the catalogue of bodyweight movements, with its coaching cues one tap away.
Set the target
How many sets, and what you're aiming at: reps for a dynamic exercise, seconds for a hold. The app already knows which of the two applies.
Log what happened
The reps or seconds you actually managed, optional RPE, one tap on the tick. A failed set at zero reps is a real result and records as one.
Change your mind
Swap an exercise mid-session and the slot keeps its place. Remove it and the slot frees up.
Finish
Enter how long you actually trained, and the session closes as completed.
Two sessions in a day is normal here
An AM/PM split is two sessions, not one row with two blocks in it. Sessions are ordered by timestamp, never bucketed by calendar day.
Duration is time under tension
Not start-to-finish. A session paused to answer the door isn’t twenty minutes longer for it.
Logging Tuesday on Friday is fine
The day you trained and the day you wrote it down are two different facts, and the app keeps both.
A set is reps or seconds, never both
The result can only be recorded in the same unit as the target, so the two halves of the row always compare.
Effort
How hard it felt, counted in the reps you had left
RPE is rate of perceived exertion, and here it means reps in reserve. Anything easier than four more in the tank is a warm-up, so the scale starts at 6.
- 64 more reps in the tank
- 73 more reps
- 82 more reps
- 91 more rep
- 10Nothing left
The wording adapts to the set you’re logging. On a rep set it reads “Could have done 2 more reps.” On a hold it reads “Could have held a good bit longer.”
It’s optional on every set. Whole numbers only for now — half-steps aren’t in yet.
Exercises
27 movements, each with the cues that make it count
Not a gym app — no weights, no barbell math. Push, pull, core, squat and hinge, with a horizontal and a vertical variant of each. Tap any of them for its numbered coaching cues.
Horizontal push4
Push-UpDiamond Push-UpArcher Push-UpPseudo Planche Push-Up
Vertical push4
Pike Push-UpDipHandstand Push-UpHandstand Hold
Horizontal pull3
Australian RowFront Lever RowFront Lever
Vertical pull4
Pull-UpChin-UpMuscle-UpDead Hang
Core5
PlankHollow Body HoldL-SitHanging Leg RaiseAb Wheel Rollout
Squat4
Bodyweight SquatBulgarian Split SquatPistol SquatWall Sit
Hinge3
Glute BridgeSingle-Leg DeadliftNordic Curl
Dynamic — worked through a range of motion, measured in reps.
Isometric* — held still, measured in seconds.
Where it runs
One codebase, three platforms, and a database that keeps your rows to itself
Web today
The browser build is live and ships to real users. iOS and Android come out of the same codebase and are in the store queue.
Your settings follow you
Theme, date format and time format are stored on the account rather than the device, so they're the same wherever you sign in. Dark mode is fully built out.
Your data is yours
Every table is protected by row-level security: you can only ever read or write your own rows, and that's enforced by the database itself rather than by application code.
Early access
What isn't built yet
This is the part most sites leave out. Everything above exists and works; everything below doesn't, and won't be pitched as though it does.
Programs, routines and progressions
Designed in full · not implemented
A progression is an ordered ladder of exercises, easiest first. A routine is a list of slots that name a progression rather than a fixed exercise. A program is an ordered rotation of routines — A/B/A/C, not a weekday calendar.
Starting a session resolves each slot to whichever rung you’re currently standing on. Moving up or back down a rung is always one deliberate tap, never automatic, with the app suggesting the move once you’ve cleared the bar.
This is what the plan-and-result-on-one-row idea is for. The logging has to be right before any of it can be.
An in-app timer
Duration is typed in by hand today. The column is already shaped for a timer to accumulate into.
Your own exercises
The database already stores custom movements and keeps them private to you. There's no screen for adding one yet.
Naming a session
Every session currently gets a placeholder name. Routines will supply real ones.
Charts, stats, streaks, PRs
Nothing analytical ships yet. The data to build it on is being recorded from day one.
Half-step RPE
Whole numbers only for now — no 8.5.
Not on the roadmap at all: social, sharing, coaching, video.
Early access is open.
It’s free while it’s early. Sign up, start a session, and log the set you’re in the middle of.
Email and password. No app store required.