Sali
Gym tracker
A gym tracker for a few friends, made for logging between sets.
Why I built it
I wanted logging a set to take one thumb and two seconds, and to share my workouts with friends.
- Type
- Web app, PWA
- Status
- In use
- Code
- Private
- Revision
- 2026.10
The problem
Gym apps are either bloated or locked to one person. I wanted one that is fast enough to use between sets and that a few friends can share.
What it does
- Everyone has their own sign-in, their own workouts and remembered weights per exercise, and gym buddies can share a workout.
- A logging screen made for one thumb, a rest timer that keeps the screen on, and progress per exercise.
- It installs to the phone’s home screen and works in Finnish and English.
How it’s built
- One Node process: Hono serves the API and the React app, and all the data is a single SQLite file.
- New people join through invite links. There are one-time links for the first admin and for password resets.
- An end-to-end test walks every screen on a headless phone, in both languages and both themes.
Functional block diagram
Inputs
- Phone, one thumb between sets
- Invite and password-reset links
- Exercise library
Core
- Hono API
- SQLite, one file
- Sessions, remembered weights and progress
- Suggestions and weekly summary (AI)
Outputs
- Installable web app, Finnish and English
- End-to-end test of every screen
Specifications
| Platform | Installable web app (PWA) |
|---|---|
| Users | A few friends, each with their own sign-in |
| Storage | One SQLite file |
| Hosting | Home server, reached over Tailscale |
| Languages | Finnish, English |
| Status | In use |
| Built | 2026 |
| Stack | TypeScript, React, TanStack Query, Hono, SQLite, Vite, vitest, Playwright, PWAs |
| Code | Private |
Revision history
| Rev | Date | Change |
|---|---|---|
| E | 2026-10-26 | Drag to reorder workouts, and a recovery view per muscle group. |
| D | 2026-10-24 | Alternative exercises on the logging screen; in use on a home server. |
| C | 2026-10-20 | AI notes when progress stalls, and a weekly summary. |
| B | 2026-10-19 | The logging screen, rest timer, progress charts and records. |
| A | 2026-10-18 | Accounts, invites and sessions backend; remembered weights; history. |



