Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
f514326
Add user-scoped, path-validated photo lookup for private workout images
jasrasr Oct 27, 2026
4ae9f73
Provide non-destructive per-user backup export with original JSON and…
jasrasr Oct 27, 2026
f4392d7
Add authenticated private photo endpoint, ZIP backup action and mobil…
jasrasr Oct 27, 2026
e58802c
Add mobile workout detail viewer with private image links, set histor…
jasrasr Oct 27, 2026
f354b33
Style compact touch-friendly workout details, photos and backup contr…
jasrasr Oct 27, 2026
15905e0
Test authenticated per-user photo resolution and safe read-only backu…
jasrasr Oct 27, 2026
a730c82
Test full ZIP backup integrity and strict photo ownership in CI
jasrasr Oct 27, 2026
776adb9
Regression-test private photo detail viewer with actual safe DOM rend…
jasrasr Oct 27, 2026
5b6722c
Add mobile photo detail viewer regression tests to CI
jasrasr Oct 27, 2026
80f3cbe
Ensure ZIP close failures never mask original backup errors
jasrasr Oct 27, 2026
f4f2b79
Initialize photo manifest explicitly for reliable empty-backup checks
jasrasr Oct 27, 2026
7ba8c81
Document signed-in backup downloads and safe, controlled Hostinger re…
jasrasr Oct 27, 2026
4770336
Document private photo detail viewer, full ZIP exports and Hostinger …
jasrasr Oct 27, 2026
3cc5ed5
Record v1.5.0 private photo details and backup export without storage…
jasrasr Oct 27, 2026
1d59d85
Validate optional heart rate BPM without changing existing workouts
jasrasr Oct 27, 2026
df453ee
Parse heart rate (BPM, HR, pulse) without mistaking it for speed or e…
jasrasr Oct 27, 2026
9dae0cc
Allow revision-checked heart-rate edits while retaining all other rec…
jasrasr Oct 27, 2026
9adc812
Expose BPM entry and trend filters and include heart rate in optional…
jasrasr Oct 27, 2026
ae5dffe
Show heart rate in history, private workout details, mobile entry/edi…
jasrasr Oct 27, 2026
4267869
Test natural heart-rate parsing, multiple exercises, and bpm-versus-s…
jasrasr Oct 27, 2026
8b48c09
Verify BPM input, parsing and legacy-safe edit persistence without li…
jasrasr Oct 27, 2026
292a6d9
Regress iPhone workout edit/manual heart-rate fields and hidden-value…
jasrasr Oct 27, 2026
975e502
Verify mobile detail view displays recorded heart-rate BPM
jasrasr Oct 27, 2026
e39d808
Run heart rate parser and non-destructive BPM storage regression in CI
jasrasr Oct 27, 2026
7fd07c2
Document BPM natural parsing, phone entry, trends and historical-reco…
jasrasr Oct 27, 2026
e4ad79d
Add v1.5.1 changelog for BPM tracking and backward-compatible parsing
jasrasr Oct 27, 2026
2f6cf8c
Calculate unique workout-day attendance and weekday streaks without t…
jasrasr Oct 27, 2026
a426c2d
Add responsive attendance dashboard for rolling seven-day, weekday, o…
jasrasr Oct 27, 2026
482098c
Compute live attendance and streak cards from stored dates without mo…
jasrasr Oct 27, 2026
1502af5
Style mobile attendance percentages, weekday streaks and seven-day ca…
jasrasr Oct 27, 2026
5ad2bc8
Test 3-of-7 and 3-of-5 attendance, weekday streaks and DST without re…
jasrasr Oct 27, 2026
fe47125
Test mobile attendance rendering with user example and safe read-only…
jasrasr Oct 27, 2026
f6a0f6e
Include attendance dates, weekday streak and mobile dashboard tests i…
jasrasr Oct 27, 2026
556e364
Document attendance formulas, first date, weekday streaks and mobile …
jasrasr Oct 27, 2026
67288d2
Record v1.6.0 attendance calculations and mobile weekday streak dashb…
jasrasr Oct 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 22 additions & 2 deletions .github/workflows/workout-tracker-validation.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# File Name: workout-tracker-validation.yml
# Author: Jason Lamb (with help from ChatGPT)
# Description: Validate PHP, JavaScript and preservation of Workout Tracker records.
# Revision: 1.1.0
# Revision: 1.5.0
# Created Date: 2026-10-22
# Modified Date: 2026-10-27
# Changelog: 1.1.0 - Validate optional measurements, legacy-safe set edits and new advanced UI tests. 1.0.1 - Run DOM-backed Edit button regression test to catch empty CSS class exceptions. 1.0.0 - Run parser and lossless edit regression tests on pull requests.
# Changelog: 1.5.0 - Validate seven-day and since-first attendance, weekday streaks, mobile card rendering. 1.4.0 - Run BPM parsing, input-validation and legacy-data isolation regression tests. 1.3.0 - Verify mobile detail-view DOM and private photo URLs. 1.2.0 - Test user-bound image access, backup ZIP, and read-only storage. 1.1.0 - Validate optional measurements, legacy-safe set edits and new advanced UI tests. 1.0.1 - Run DOM-backed Edit button regression test to catch empty CSS class exceptions. 1.0.0 - Run parser and lossless edit regression tests on pull requests.
name: Workout Tracker validation
on:
pull_request:
Expand All @@ -19,10 +19,21 @@ jobs:
contents: read
steps:
- uses: actions/checkout@v4
- name: Enable ZIP support for archive verification
run: |
if ! php -r 'exit(class_exists("ZipArchive") ? 0 : 1);'; then
sudo apt-get update -qq
sudo apt-get install -y php-zip
fi
php -r 'if (!class_exists("ZipArchive")) { fwrite(STDERR, "ZipArchive is required to test backup contents.\n"); exit(1); }'
- name: Validate PHP code
run: |
php -v
php -l workout-tracker/index.php
php -l workout-tracker/photo.php
php -l workout-tracker/backup.php
php -l workout-tracker/tests/photo-backup.test.php
php -l workout-tracker/tests/heart-rate.test.php
php -l workout-tracker/entries.php
php -l workout-tracker/measurements.php
php -l workout-tracker/tests/measurements.test.php
Expand All @@ -34,9 +45,18 @@ jobs:
php workout-tracker/tests/parse.test.php
php workout-tracker/tests/edit.test.php
php workout-tracker/tests/measurements.test.php
php workout-tracker/tests/photo-backup.test.php
php workout-tracker/tests/heart-rate.test.php
- name: Verify JavaScript syntax and Edit button behavior
run: |
node --check workout-tracker/app.js
node --check workout-tracker/attendance.js
node --check workout-tracker/tests/attendance.test.cjs
node --check workout-tracker/tests/attendance-ui.test.cjs
node workout-tracker/tests/attendance.test.cjs
node workout-tracker/tests/attendance-ui.test.cjs
node --check workout-tracker/tests/workout-detail.test.cjs
node workout-tracker/tests/workout-detail.test.cjs
node --check workout-tracker/advanced.js
node --check workout-tracker/tests/advanced.test.cjs
node workout-tracker/tests/advanced.test.cjs
Expand Down
30 changes: 28 additions & 2 deletions workout-tracker/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,39 @@
File Name: CHANGELOG.md
Author: Jason Lamb (with help from ChatGPT)
Description: Cumulative release history for private Workout Tracker.
Revision: 1.3.0
Revision: 1.5.0
Created Date: 2026-10-21
Modified Date: 2026-10-27
Changelog: 1.3.0 - Document v1.4.0 calories, custom numeric metrics and per-set strength logging. 1.2.2 - Document workout-specific fields and iPhone-safe date/time layout in v1.3.2. 1.2.1 - Document v1.3.1 Edit button DOMException repair and regression. 1.2.0 - Document v1.3.0 non-destructive edits, tags, incline and regression coverage. 1.1.0 - Document v1.2.0 AI fallback, prepared screenshots and secrets convention. 1.0.0 - Initial release history including v1.0.0 and v1.1.0.
Changelog: 1.5.0 - Record v1.6.0 attendance dates, weekend-excluded percentages, and streaks. 1.4.1 - Document optional heart-rate BPM field and local parser in v1.5.1. 1.4.0 - Document v1.5.0 authenticated photos, workout details and ZIP backups. 1.3.0 - Document v1.4.0 calories, custom numeric metrics and per-set strength logging. 1.2.2 - Document workout-specific fields and iPhone-safe date/time layout in v1.3.2. 1.2.1 - Document v1.3.1 Edit button DOMException repair and regression. 1.2.0 - Document v1.3.0 non-destructive edits, tags, incline and regression coverage. 1.1.0 - Document v1.2.0 AI fallback, prepared screenshots and secrets convention. 1.0.0 - Initial release history including v1.0.0 and v1.1.0.
-->
# Workout Tracker changelog

## v1.6.0 — 2026-10-27

- Add four attendance metrics: 7-day calendar / weekday percentages and overall calendar / weekday percentages, each starting no earlier than the first workout date.
- Count distinct workout dates, not individual exercises. Example on October 27 for dates 21, 22, 27: **3/7 = 42.9%** and **3/5 = 60.0%**.
- Show current and longest streaks for calendar days and weekdays only; weekends do not break weekday streaks, and today is treated as unfinished.
- Mobile-ready two-column cards and a seven-day history strip with completed, missing and weekend statuses. Adapt to very narrow phone screens.
- Keep everything read-only from existing per-user workout dates: no migration, new database table, JSON edits, or data reset.
- Add isolated calendar/DST/weekday regression tests and safe DOM mobile rendering tests.

## v1.5.1 — 2026-10-27

- Add optional, validated `heart_rate_bpm` (1–300 integer BPM) to exercise records without any JSON migration, replacement or legacy backfill.
- Parse explicitly reported heart rate from no-key natural workout descriptions including **heart rate 143 bpm**, **HR 143**, **pulse 143**, or **143 bpm**. Avoid false positives from `1 hr 15 min` and avoid interpreting BPM as treadmill speed.
- Show heart rate in mobile treadmill/cardio manual entry, review, editing, workout history and the private details viewer; other exercises can use **Show other measurements**.
- Chart BPM per exercise, separate from speed/calories. Support explicit optional AI fallback output for BPM, with user review required before saving.
- Keep past record/photo/session data intact and prevent older API clients from clearing heart-rate fields. Add parser, validation, stale-write, and mobile regression checks.

## v1.5.0 — 2026-10-27

- Add a mobile-first **Details** view for each saved workout, including notes, individual lifting sets, custom measurements, totals and edit history. Continue editing through the existing revision-checked **Edit** flow.
- Serve uploaded photos through a **session-authorized, per-user file resolver**. Requests accept workout entry IDs, not filenames or paths, and reject cross-account access, traversal, symlinks and non-image content. Private storage remains denied by Apache/LiteSpeed.
- Add an authenticated, CSRF-protected **Download my workout backup** ZIP action with unchanged original JSON plus only owned referenced photos. Archives are prepared outside the web root and never replace or delete live data.
- Reject incomplete exports when a stored photo is missing. Keep restoration as a separate, explicitly authorized administrator process.
- Add PHP media/backup integrity tests and JavaScript detail-view/mobile regression tests to CI, plus a Hostinger backup and recovery runbook.
- No database migration or change to existing JSON file names, record IDs, edit history, photos or version-1 schema.

## v1.4.0 — 2026-10-27 (Issue #128)

- Optional calories burned (kcal) and arbitrary validated named numeric measurements, each with unit and individual exercise chart.
Expand Down
Loading
Loading