GymLog

A phone form that appends training sets to a Google Sheet. Built because the sheet was already the system and the phone keyboard was the problem.

Runs on
a small VPS, behind Caddy
Built with
Flask · Sheets API · SQLite
Screens
11
Sets logged
128
Type floor
17px · 56px taps
Written
Sep 2026, still changing

Training already lived in a spreadsheet. What it did not have was a way in: typing a set into a mobile sheet, one thumb, standing up, is a minute of work for five seconds of data. So the sheet stayed the database and the phone got a form in front of it.

Every rule in the design came out of the gym rather than the desk — dark ground under bad light, nothing tappable under 56 pixels, nothing to read under 17, and the numbers you are chasing set larger than the words that label them.

  1. Set the session up once — lift, programme, one-rep max, how many sets you are down for.
  2. Log a round: the main set and its superset, typed together, written as two rows.
  3. Tap any set to correct it. The sheet is written the moment you add it, so a fix is a fix in the sheet.
  4. Close the session. A nightly job pulls the rows into SQLite, where the figures on the home page come from.
Three GymLog screens on a phone: the session setup, the log mid-session with the done sets folded, and the review with sets, volume and top weight.
Set up, log, read back. Screens captured from the test environment, September 2026.
← the other projects
Run the NumbersCarmine leads a team of data analysts and races HYROX in Zurich. He trained on feel for years and got it wrong. Now he measures.
ColophonAstro on GitHub Pages · Sofia Sans + Newsreader · figures from SQLite
ElsewhereAbout · GitHub · gymlog.runthenumbers.ch ·RSS
Last measured17.10.2026 · Zurich · no newsletter, no schedule