Back

Designing a training product around live logging, clean data, and explainable progress.

Outliftr is a mobile-first training companion for serious lifters: plan programs, log sets fast in the gym, and get progress analysis the app can actually explain. The live session flow, data model, analytics, and recommendation logic are designed as one system.

Outliftr landing page
Outliftr landing page
Role
Sole product developer
Timeframe
2025 - 2026
Product
Mobile-first strength training app
Core stack
React, TanStack Start, Convex, Clerk, Capacitor

Overview

Outliftr is a mobile-first lifting companion for serious lifters. The product helps users plan workouts, log sessions quickly in the gym, track body weight, review exercise history, and understand whether training is actually moving in the right direction.

The thesis is practical: the app should answer what to do next, what happened last time, whether progress is real, and what should change in the next set or session. It deliberately avoids treating training as a generic habit tracker or hiding weak data behind vague AI copy.

I built the product across the stack: React and TanStack Start on the frontend, Convex backend logic, Clerk authentication, workout/session schema, analytics utilities, recommendation logic, tests, and mobile packaging through Capacitor.

A lifting app that starts in the gym

The most important screen is not an analytics dashboard; it is the active session. The user is in the gym, likely on a phone, and needs fast input, clear next actions, previous-performance context, and minimal friction.

That requirement shaped the whole product. If the session flow captures clean data without getting in the way, the app can later produce useful history, PRs, trends, bodyweight context, and next-session guidance.

Plan, train, finish, analyze, improve

Users create workout splits, define days and exercises, start a session from a day, and log sets as they train. Starting a session snapshots the template so later edits do not rewrite historical workouts.

During training, the app supports set completion, rest timing, previous performance, exercise substitutions, added or deleted sets, skipped work, and session reflection. Finishing the session turns the raw work into history and analytics.

What I built
  • Workout templates, day templates, planned exercises, sessions, session exercises, and session sets.
  • Set rows with weight, reps, status, completion timestamps, rest timing, and optional effort context.
  • Dashboard resume, next likely workout, recent sessions, bodyweight entry, and compact training signals.

Raw session data as the source of truth

The domain model is intentionally conservative. Templates describe intent. Sessions record what actually happened. Completed sets drive analytics. Body weight is logged as raw observations. Derived summaries exist only where they improve performance or user experience.

This avoids a common product trap: building impressive-looking charts on top of ambiguous data. Outliftr keeps the workout/session core clean so analytics can be explained later.

What I built
  • Template edits do not mutate past sessions.
  • Session startup copies exercise and day snapshots into historical records.
  • Performance summaries, bodyweight trends, and analytics are derived from completed work.
  • Billing, goals, and AI features stay outside the workout/session core until they need to interact with it.

Exercise exposures and context-aware progress

The analytics layer is built around the idea of an exercise exposure: one occurrence of one exercise inside a completed session, summarized with its sets and context. That is more useful than comparing individual sets in isolation or collapsing an entire workout into one number.

Exposure data can explain volume, top sets, estimated 1RM, completion quality, rest, order, prior same-muscle work, bodyweight context, and whether a comparison is fair. The goal is to help users understand progress without pretending that every performance change has a single cause.

What I built
  • Exercise progress, PR timelines, same-weight records, estimated 1RM trends, and completion trends.
  • Training load by sessions, completed sets, volume, muscle group exposure, and planned-vs-actual work.
  • Context notes for exercise order, rest, fatigue, effort, and prior same-muscle work.
  • Bodyweight trend and strength interpretation without turning the app into a nutrition tracker.

Transparent next-session recommendations

Outliftr uses recommendation logic as an explainable layer, not as a black box. The next-session target system looks at recent comparable work, completion quality, rep ranges, load type, and practical equipment increments.

That means the app can suggest adding load, holding steady, or backing off while showing why. AI can support program creation or summaries, but the strongest product claim is structured, explainable training feedback from visible data.

What I built
  • Double-progression style rules based on recent exposures.
  • Load-kind awareness for external, bodyweight, weighted bodyweight, and assisted movements.
  • Confidence and rationale attached to recommendations.
  • AI positioned as a structured on-ramp and explanation layer, not the core intelligence claim.

Testing the contracts that matter

The important tests are the domain contracts: starting sessions, snapshotting templates, guarding ownership, completing and uncompleting sets, rest behavior, finishing sessions, updating summaries, and producing chart-ready history.

This is the kind of reliability that matters for a product built on historical user data. If the session model is wrong, every later chart, recommendation, and training insight becomes suspect.

What I built
  • Convex tests for workout creation, session snapshots, set completion, rest timing, finishing, and reflections.
  • Coverage around template mutation boundaries, next-workout recommendations, PR/performance summaries, and exercise history.
  • Analytics utilities shaped around reusable contracts rather than one-off dashboard calculations.

Outcome

Everything in Outliftr serves one loop: capture training cleanly, make history useful, and give the lifter a better next action. The conservative data model is what makes the rest trustworthy. Because completed sets are the source of truth, every chart, PR, and recommendation can be traced back to work that actually happened.

It is also the project where product judgment mattered most. Deciding what not to build (gamification, vague AI coaching, nutrition tracking) kept the app focused on credible training feedback.