powerlifting app
  • Dart 94.8%
  • C++ 1.5%
  • Python 1.3%
  • CMake 1.1%
  • Makefile 0.4%
  • Other 0.8%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-23 14:06:40 +02:00
android heart rate tracking start/stop strengthened 2026-05-26 07:01:44 +02:00
assets/sql migration finally works due to duckdb buggy behavior being mitigated 2026-07-03 22:06:38 +02:00
benchmark Add cardio workouts, text parsing, and heart-rate tooling 2026-05-29 12:30:16 +02:00
data changes: 2026-03-02 14:11:44 +01:00
docs refactor(input): split validation/controller modules and add RR analysis tooling 2026-06-03 13:14:15 +02:00
integration_test Add cardio workouts, text parsing, and heart-rate tooling 2026-05-29 12:30:16 +02:00
ios heart rate tracking start/stop strengthened 2026-05-26 07:01:44 +02:00
lib Fix Bluetooth auto-stop hanging 2026-09-22 13:38:00 +02:00
linux Migrate app persistence to DuckDB 2026-06-01 16:32:21 +02:00
macos Migrate app persistence to DuckDB 2026-06-01 16:32:21 +02:00
scripts yt upload 2026-09-03 09:17:27 +02:00
test Fix Bluetooth auto-stop hanging 2026-09-22 13:38:00 +02:00
test_driver some e2e rendering checks 2026-05-28 14:00:07 +02:00
web Migrate app persistence to DuckDB 2026-06-01 16:32:21 +02:00
windows Migrate app persistence to DuckDB 2026-06-01 16:32:21 +02:00
.gitignore automatic youtube upload and naming + fix datetime export and script to fix export datetime offset 2026-06-17 11:50:30 +02:00
.metadata initial project on web 2026-02-26 16:10:38 +01:00
AGENTS.md weekly reporting before integrated in app 2026-09-23 14:06:40 +02:00
analysis_options.yaml default weight increment + better kg input field with +/- + exception fix on scroll + default settings 2026-03-06 14:25:41 +01:00
dart_test.yaml Migrate app persistence to DuckDB 2026-06-01 16:32:21 +02:00
Makefile automatic youtube upload and naming + fix datetime export and script to fix export datetime offset 2026-06-17 11:50:30 +02:00
pla-icon.png icon generation for linux 2026-03-03 12:06:54 +01:00
pubspec.lock update deps 2026-06-01 21:58:23 +02:00
pubspec.yaml update deps 2026-06-01 21:58:23 +02:00
README.md yt upload 2026-09-03 09:17:27 +02:00

pla

A new Flutter project.

Getting Started

This project is a starting point for a Flutter application.

A few resources to get you started if this is your first Flutter project:

For help getting started with Flutter development, view the online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

Latest Workout Report and Videos

--latest-week finds the date of the newest workout log in the .pla file and selects the inclusive seven-day window ending on that date. It does not use the current date, so rerunning it for the same state file is deterministic.

Generate the latest workout report:

dart --disable-dart-dev scripts/training_report.dart \
  --in=path/to/latest-state.pla \
  --latest-week \
  > build/training_report_latest_week.txt

Rename videos from the same seven-day window, then upload them:

dart --disable-dart-dev scripts/correlate_videos_with_workouts.dart \
  --pla=path/to/latest-state.pla \
  --videos=path/to/video-directory \
  --latest-week \
  --latest-week-number=13 \
  --week-major=5 \
  --include-day \
  --apply

python3 scripts/youtube_upload_dir.py \
  --dir=path/to/video-directory \
  --client-secrets=path/to/client-secret.json \
  --name-prefix="Week " \
  --playlist="Training videos"

--latest-week-number is optional; it supplies the Week N filename prefix and is separate from the date-selecting --latest-week flag. The correlator is safe to rerun: it ignores already named videos, deduplicates identical local movies, and avoids overwriting an existing target. The uploader is idempotent when --playlist is supplied because it skips titles already present in that playlist. Without a playlist, YouTube uploads cannot be detected and rerunning the uploader may create duplicates. Omit --apply or add --dry-run to the uploader to inspect each operation first.

State Versioning

The app currently persists one canonical state shape: WorkoutState in lib/workout_state.dart, with version = 2 and storage key workout_state_v2.

When state changes in the future:

  1. Create WorkoutStateV3 (or next version) alongside WorkoutState.
  2. Add a dedicated migration function (v2 -> v3) in one place.
  3. Keep migration code only while old persisted blobs must be supported.
  4. Once migration window is over, bump storage key and remove old versions.