Routine-based training, fast session logging, and local-first workout backups.
Fit Log is a Flutter workout tracker focused on routine-based training, fast in-session logging, and local-first data ownership. The app is designed for lifters who want structured routines, quick set registration during a workout, and backup-friendly data they can keep on-device.
The current product experience is built around two primary tabs:
Routinesfor routine management, exercise browsing, editing, and active sessionsPerformancefor analytics based on current active routines and exercise-level progress
Fit Log helps users do four things well:
- Build and manage structured workout routines
- Start an active session and log sets quickly with
kg, reps, RIR, rest timing, and notes - Finish a session with a dedicated summary flow for energy, mood, notes, and saved logs
- Export or import the app state through ZIP or table-level
.xlsxfiles
The app uses a dark Kinetic-Noir visual system across the redesigned flows. The implemented UX emphasizes fast read/write performance, compact session logging, and local-first backups instead of cloud sync.
Routines Library: entry screen for the app, optimized for quick drill-down into a programPerformance Dashboard: analytics for current active routines only, filtered by a selected time window
Exercise List: routine detail before a workout starts, with search and direct access to exercise progressRoutine Editor: full routine editing flow for metadata, exercises, and programmed set detailsActive Workout Session: compact logging screen with global set registration,kgonly, rest timer, notes, and per-exercise set controlsFinish Session Summary: full-screen end-of-workout review before saving the sessionExercise Progress Detail: exercise-centric progress screen accessed from the exercise list
Data Management: export/import backups opened from the RoutinesManagemenu
This screen is the main planning hub and the app entry point. Users can inspect active routines, reactivate inactive ones, create plans, enter a specific routine, and open backup tools from Manage.
The data screen handles export, share, and import flows. It is intentionally isolated from the main tabs so users can perform backup operations without mixing them into the training flow.
This is the pre-workout view for a selected routine. It shows the programmed exercises, supports filtering, and provides a direct Progress action for each exercise before the session starts.
The editor is a form-driven workflow for changing routine metadata and programmed exercise details without dropping into JSON or raw data editing.
The active session screen is optimized for fast logging. It uses kg only, keeps the global REGISTER SET action, supports + set and - set, and avoids heavy history UI during the workout.
The finish screen is a dedicated full-screen review of the session draft before persisting the workout logs and session summary.
The dashboard aggregates training data for the currently active routines in the selected window. It shows volume, day coverage, muscle focus, and recent PR-style signals.
The progress detail screen is exercise-centric. It aggregates logs by exerciseId and provides estimated 1RM, total volume, trend, and recent session context for a single exercise.
Fit Log uses a hybrid local storage model:
SQLiteis the runtime source for routines, exercises, plan details, workout logs, and workout sessions.xlsxtables are retained for compatibility, import/export, and human-readable backups- startup warmup seeds or rebuilds the runtime cache from
.xlsxwhen needed
Current tables and backup artifacts include:
fit_log.dbworkout_plan.xlsxexercise.xlsxplan_exercise.xlsxworkout_log.xlsxworkout_session.xlsxuser.xlsxbody_metrics.xlsxmuscle.xlsxexercise_target.xlsx
Operationally, the app now favors SQLite for responsive reads and writes during normal use, while still exporting a portable ZIP backup that includes both the database and spreadsheet-compatible tables.
The current app shell exposes two primary tabs from the bottom navigation:
RoutinesPerformance
The following screens are secondary routes opened from those tabs:
Data ManagementExercise ListRoutine EditorExercise Progress DetailActive Workout SessionFinish Session Summary
The analytics layer is intentionally scoped and should be read with these constraints in mind:
Performance Dashboardis based on current active routines only- the time selector changes the window, but does not include inactive routines unless they are active again
Exercise Progress Detailis keyed byexerciseId, so continuity depends on keeping the same exercise record instead of deleting and recreating it as a new id
This makes the dashboard good for understanding the current training block, while the exercise detail view is better for following a specific lift over time.
- Flutter
3.5or newer - Dart SDK compatible with the version declared in
pubspec.yaml
flutter pub getflutter runAt startup the app:
- ensures the expected
.xlsxtables exist - warms up the SQLite routine/runtime cache
- initializes local notifications used by the workout flow
- The app is organized under
lib/src/by feature and responsibility - UI lives in
presentation - domain contracts live in
domain - repositories and storage adapters live in
data
Important runtime entrypoints:
The app supports:
- exporting a full ZIP backup
- sharing the generated backup file
- importing a full ZIP backup
- importing individual
.xlsxtables when supported by the data layer
Backups are meant to preserve local ownership of the training data while keeping the runtime optimized for SQLite.
Run the main validation steps with:
flutter testAnd for targeted static validation:
flutter analyzeThe redesigned experience currently covers the main workflow from app entry to routine management, active workout logging, session summary, analytics, and backup operations. Future design folders outside the implemented screen list are not part of the shipped README documentation yet.







