Open source · MIT · Flutter

Everything you train,
in one journal you own.

Strength sessions, GPS runs, sleep, food, body measurements and a periodized plan, logged in a single app that keeps its database on your device and works with the network off.

Works offline No account Local SQLite Android first

Nutrition diary showing daily calories, macronutrients and logged meals
Workout Notes dashboard with monthly workout count, volume, streak, quick actions and completed sessions
streak · volume 1-tap session start
Completed run with route map, distance, pace, calories and a pace chart
0 accounts, logins or servers to sign up for
6 domains: strength, cardio, sleep, food, body, planning
2 languages: English and Brazilian Portuguese
MIT licensed, auditable, built with Flutter
What it covers

Six connected areas, one database

Every domain reads the same local data, so your body weight feeds calorie estimates, your runs count toward goals, and a periodization week can drive both your routine and your macros.

Live session

Logging that keeps up with the set you just finished

Open a routine day or start empty. Each new exercise arrives pre-filled with the weight and reps from the last time you trained it, so most sets are one tap.

  • Rest timer starts itself when you tick a set, anchored to wall-clock time so it stays accurate in the background.
  • Pause is honest: resuming shifts the start time forward, so paused minutes never inflate your session duration.
  • RPE 0–10, warm-up flags and per-set comments in one sheet, with controls that adapt to the exercise type.
  • Personal records detected on finish for top weight, session volume and cardio distance.
Strength training documentation
Live strength session with a session timer, rest timer, and completed and pending sets for each exercise
rest 1:30 volume vs last session
Running

Runs that survive a locked screen

Recording runs in an Android foreground service, with the durable copy written by the native side and imported into SQLite when you reopen the app. Kill the app mid-run and the session is still there.

Splits
Per km + fastest
Elevation
Gain / loss
Efforts
1K → marathon
  • Live map, splits and interval rows while you run
  • Route replay and pace charts after the session
  • Stationary bike sessions timed without GPS or a native service
Running & cycling documentation
Run in progress with a live route on the map, elapsed time, distance, pace and session controls
live GPS
Recovery & fuel

The two habits that decide whether training works

Sleep and nutrition are first-class tabs, not afterthoughts. The sleep monitor labels 30-second epochs as awake, sleeping or deep using only aggregate signals computed on the device. Raw audio is never read by the analysis.

  • Sleep dashboard with efficiency, latency, awakenings, 7- and 30-day averages and a regularity score.
  • Calorie and macro targets suggested from Mifflin-St Jeor and an activity factor, then adjusted for a cut, maintenance or bulk.
  • Barcode and label-photo entry so building the food library stays quick.
Sleep dashboard with goal completion, efficiency, bedtime and estimated sleep stages
Weekly nutrition balance with daily intake versus target, a seven-day rolling average and macronutrient distribution
Progress

Numbers you can trace back to a formula

Charts are built from your own rows, and the maths is written down. Estimated one-rep max uses Epley on the heaviest set of a session; volume is always the sum of weight × reps with warm-ups excluded; body-weight trend is a least-squares slope per week.

Metric How it is computed
Estimated 1RM weight × (1 + reps / 30)
Volume Σ weight × reps, is_warmup = 0
Density volume ÷ session duration
Streak consecutive days with a finished workout
Progress & analytics documentation
Training progress report with goals, an annual activity heatmap and weekly workout frequency
yearly heatmap
Optional AI Coach

Bring your own provider. Keep the veto.

Point the app at any OpenAI-compatible endpoint, paste your token and pick a model. The coach answers with your data because it calls read tools against your local database, never from memory or guesswork.

  • Read tools run directly: workouts, exercises, records, runs, sleep, nutrition, goals and cross-domain analyses.
  • Writes are proposals only: routine changes and new manual foods are reviewed in the app, revalidated, then applied in a transaction.
  • Credentials stay in secure storage: never in SQLite, logs, prompts or backups.
  • Fully optional: nothing is bundled and no key ships with the app; skip it and the rest works unchanged.
AI Coach documentation
ai coach
Is my squat actually moving, or am I just adding sets?
get_exercise_history
get_weekly_volume_breakdown
Top set went 92.5 kg × 5 → 100 kg × 5 over eight weeks, so estimated 1RM is up about 8%. Weekly leg volume rose 34% in the same window; the strength gain is real, but the volume jump is the part I'd watch.
Proposal · needs your approval

Trim Leg Day from 5 to 4 squat sets and add one back-off set at 80%.

Review Discard
Your data

Local by default, portable on demand

There is no backend to trust. The database is a SQLite file on your device, and the only outbound calls are the ones you switch on yourself.

One file, versioned schema

Every domain lives in the same local database with UUID keys and cascading deletes. Schema upgrades are incremental migrations covered by tests.

Backups you can read

Export a JSON backup, share it, or restore it from a file or pasted text. Import validates every collection before it deletes anything, then restores in one transaction.

Deliberate boundaries

Sleep analysis reads aggregates, not audio. A wake-up mission stores a salted hash, not your barcode. AI tokens never leave secure storage.

Feature availability by platform
Capability Android Other targets
Workouts, exercises, routines, timers, progress Full Full
Nutrition diary, food library, targets Full Full
Periodization, goals, body measurements Full Full
Background GPS run tracking Full Not available
Sleep monitoring, alarms, wake-up mission Full Manual entries only
Barcode scanning, native voice coaching Full Not available

Android is the most complete target. Elsewhere the native features report themselves as unsupported instead of failing. See data, backup & privacy.

Open source

Read it, build it, change it

Flutter and Material 3 on the front, SQLite repositories underneath, Kotlin foreground services for the Android-only features. State management stays deliberately small: setState for local state, ChangeNotifier for shared services.

  • MIT licensed, issues and pull requests welcome
  • Analyzer and test suite run in CI before every Android release
  • English and Brazilian Portuguese strings live in ARB files
build it yourself
$ git clone https://github.com/RafaelGoulartB/workout-notes
$ cd workout-notes
$ flutter pub get
$ flutter run
# checks used in CI
$ flutter analyze
$ flutter test
$ flutter build apk --release
Documentation

Every feature, written down

The docs walk through each area of the app screen by screen, and spell out the formulas and safety rules behind the numbers.

Start logging tonight

Install the latest Android build, or clone the repository and run it yourself. Either way, nothing leaves your device until you ask it to.

Android APK · MIT license · no telemetry