Crest

An offline-first gym workout tracker: log sets, run rest timers, and see progress without a connection.

Role
Design and build
Scope
Mobile app, 2026
Stack
Flutter, Dart, Drift, SQLite, Riverpod
Crest active workout: the Push session timer, a finished exercise folded away, a new PR on the next lift, and the rest timer at the bottom
Crest's ongoing workout notification during rest: the next set, a progress bar, and +15s and Skip buttons
Crest exercise detail for Back Squat: estimated one-rep max trend chart and personal records
Crest Stats screen: weekly volume chart and sets per muscle, in the dark theme
Crest History screen: monthly totals and a list of past workouts with personal records

Crest active workout: the Push session timer, a finished exercise folded away, a new PR on the next lift, and the rest timer at the bottom

Overview

Crest is an offline-first gym workout tracker for Android, built with Flutter and now in closed testing on Google Play. You pick a template or start an empty session, log each set, and a rest timer runs between them. Afterwards you get history, personal records and charts of your progress.

Who it’s for

Someone who lifts and wants a fast, quiet logbook that works with no signal and doesn’t ask for an account.

Status

Crest is in closed testing on Google Play ahead of a public release. It will be published under the studio name Applied Theory.

The problem

Gyms have bad signal and sweaty hands. A workout tracker has to log a set in a couple of taps, keep a rest timer running with the screen off, and never lose data because the network dropped. Crest keeps everything in a local SQLite database and treats the network as optional.

How it's built

Active sessionDrift / SQLiteHistory and PRsAnalyticsLive notificationBackup

Select a part to see what it does.

  • Active sessionLogs sets against the current workout and drives the rest timer (features/session).→ Drift / SQLite, Live notification
  • Drift / SQLiteLocal source of truth for exercises, templates, sessions and set logs (data/tables.dart).→ History and PRs, Analytics, Backup
  • History and PRsReads finished sessions and works out personal records (features/history).
  • AnalyticsAggregates volume and progress over time into charts (features/analytics).
  • Live notificationShows the running session and rest countdown outside the app (services/live_workout_notifications.dart).
  • BackupOptional export to Google Drive or a local folder, and restore (services/drive_backup.dart).

What I'd change

I'd add automated tests around the set-logging and session-summary logic earlier. The visual and motion work moved quickly, and that logic is where a silent bug would cost a user their numbers.

What this means for your project

This is a personal project, not a client job, but it covers what most mobile apps need: a real local database, background behaviour (an ongoing notification and rest timers), backup and restore, and charts. A mobile app for your business would be built the same way, with the offline case designed in from the start.