Loading project case study
All work

Personal Projects / 2026

Liftroom

Designed and built Liftroom, a home gym app that plans each workout around the equipment you own, runs it under one thumb, and lets AI suggest changes that a rules engine checks before anything is saved.

Value and impact

AI proposes, the rules engine checks every edit
Checked AI
Plans built from the equipment at your place
Your Gym
Free AI requests per person, per month
30

01

Overview

Liftroom started as Workout Companion, a personal app that ran the sessions a coaching agent wrote from my Obsidian notes.

In October 2026 I rebuilt it as a product anyone can use at liftroom.app: it plans each workout itself from the equipment at your place, your goal, and what you logged last time, then runs the session with the same one-thumb logging. AI is there to adjust the plan, never to write the loads.

In November it gained setup from a photo, supersets, history imported from other apps, and an Android app with a home-screen widget.

  • Personal Software
  • Fitness
  • Agentic UX
  • AI/ML

Challenge

The first version depended on me: my notes, my agent, my home server.

To work for someone else, the app had to plan a sensible workout on its own, from whatever is in a basement or a garage, on the first day with no history.

AI could make planning feel personal, but a model that invents weights or picks a machine you don't own breaks trust fast. AI also costs money, and a public app can't hand everyone an open tab.

Approach

I split planning into two jobs.

A deterministic rules engine owns the plan: session shape by length, focus balanced against the last session, double progression that reads logged effort, and only exercises your equipment allows.

AI only proposes edits through a few tools (swap, change sets and reps, remove, add), and the engine checks each one and sets the weight.

Around that I made a Gym tab led by the place, Goals with a real target and pace, and accounts that stay optional, so the app still works offline on one device.

04

Solution

Setup starts with photos of your gear: AI ticks what it sees in the equipment list for you to check, then setup asks for a name, the place, and a first focus, and plans that first workout.

Today offers a few workout cards and a quick check-in: energy, sore spots, and time bend the plan by rule, with each change and its reason shown. Plan a workout takes a length, a focus, a note, or a photo of a workout sketched on paper.

Adjust with AI and a coach review run in the background, then show each proposed change next to the exercise it touches, to keep or set aside.

An exercise can be paired with the next one into a superset or circuit, which runs in rounds with rest after each round. Exercises link to technique videos, and a finished workout becomes a share image, with or without the weights.

Gym keeps each place's equipment, added from a description or up to five photos, so a hotel gym or a cottage gets plans of its own.

Goals shows pace, what is carrying the gains, and what is stuck; a lift stalled for three sessions rotates out for a variation, and a missed goal workout can be made up on an off day.

History imports workouts from Strong or Hevy and downloads all records. Rest can run on the lock screen.

On Android, a home-screen widget shows today's workout, and sessions and weigh-ins can be written to Health Connect.

Signing in with Clerk backs training up to Convex and syncs devices; anyone signed in gets 30 free AI requests a month, or connects their own OpenRouter, OpenAI, or Claude account for more.

01 / 05

Set up from a photo

Setup starts with photos of your gear. AI ticks what it sees for you to check, and the first workout is planned from that equipment.

02 / 05

A plan that bends to the day

A check-in on energy, sore spots and time changes the plan by rule. Each change is listed with its reason before you use it.

03 / 05

One thumb between sets

Large steppers and one Log set button during the set, a rest ring with an optional effort rating, and personal bests at the end.

04 / 05

Supersets, and a picture to share

Paired exercises run in rounds, with rest after each round. A finished workout becomes an image to post, with or without the weights.

05 / 05

Bring your history, train anywhere

Import workouts from Strong or Hevy, open an exercise's technique video, and get a plan for whichever place you're training at, like a hotel gym.

6 more screens

The rest of the product

On the Android home screen

The Android app adds a home-screen widget with today’s workout. Start opens the workout in the app.

Goals, gym and history

A goal shows its pace and which lifts carry the gains, Gym shows what each place can train, and History counts workouts by type.

AI changes, checked in context

On a wide screen the plan reads as a table of targets, last time and rest, with each AI change marked on the exercise it touches.

Focus mode

Focus mode puts the workout map, the current set and the coach's note on one screen, with keyboard shortcuts for logging.

A goal with a pace

The goal page says whether you're on pace for the end date and how far each main lift has come.

History at a glance

Workouts grouped by week, with counts by type and a search across exercises and sessions.

05

Impact

Liftroom now runs on its own at liftroom.app, on a Cloudflare Worker that works offline, with no notes or home server behind it.

Every AI change passes the same checks as the engine's own plan, so a suggestion can reshape a workout but never put an unknown exercise, an unavailable machine, or a made-up weight in front of someone mid-set.

The free allowance has a per-person and a global monthly cap, so AI cost stays bounded as more people sign up. The Android app is the same public build in a Capacitor shell, so the web app and the phone app come from one codebase.

06

Key learnings

Deciding what the model is not allowed to do mattered more than the prompt.

Once AI could only propose edits and the engine had the final word, I could add AI to planning, check-ins, sketches, gym setup, and reviews without each one becoming a new risk.

Moving from a tool for me to a product for others was mostly about defaults: what the app does on day one, with no history, no account, and no AI. That is why setup now starts from a photo and ends on a planned first workout, and why history from another app can come in on the first day.