-
f93aa331d9
feat(config): add GENIUSRUN_FRONTEND_URL, defaulting to PublicBaseURL
Christophe Vila
2026-07-25 22:50:46 +02:00
-
d73c841ab7
docs: add implementation plan for the OIDC callback redirect fix
Christophe Vila
2026-07-25 22:49:02 +02:00
-
fe4978dbea
docs: add design spec for fixing OIDC callback redirect origin
Christophe Vila
2026-07-25 22:42:50 +02:00
-
85577c9d26
added ideas
Christophe Vila
2026-07-25 21:59:56 +02:00
-
487df1f9b9
fix(garmin): give startup login its own result queue, not the shared one
Christophe Vila
2026-07-25 21:52:48 +02:00
-
e422f86925
fix: bound startup-login timeout, refresh stale SKILL.md and doc comments
Christophe Vila
2026-07-25 21:43:52 +02:00
-
136567d964
docs: remove stale cmd/mcpspike references
Christophe Vila
2026-07-25 21:31:24 +02:00
-
2fad83fe9a
chore: drop the mcp-go dependency and remove mcpspike throwaway spike
Christophe Vila
2026-07-25 21:27:19 +02:00
-
f122f28206
docs: fix stale mcp-garmin references in CLAUDE.md's overview
Christophe Vila
2026-07-25 21:23:24 +02:00
-
1b9088bd03
chore: wire up the new garmin.Config shape, refresh start.sh and CLAUDE.md
Christophe Vila
2026-07-25 21:18:50 +02:00
-
284ec3142d
feat(config): drop MCP_GARMIN_SERVER, default GARMIN_WRAPPER_PYTHON
Christophe Vila
2026-07-25 21:07:04 +02:00
-
8c94c94c3f
feat(garmin): implement data-fetch methods via generic call dispatch
Christophe Vila
2026-07-25 21:02:49 +02:00
-
9cbcf62aed
feat(garmin): implement Authenticate/CompleteMFA on subprocessClient
Christophe Vila
2026-07-25 20:54:54 +02:00
-
df197f45fd
fix(garmin): wait for stderr-copy goroutine before cmd.Wait()
Christophe Vila
2026-07-25 20:50:39 +02:00
-
6c161f2206
feat(garmin): replace mcp-go transport with a JSON-lines subprocess client
Christophe Vila
2026-07-25 20:41:44 +02:00
-
7985000440
feat(garmin): add direct garminconnect wrapper script
Christophe Vila
2026-07-25 20:35:13 +02:00
-
de48c44858
docs: add implementation plan for the direct Garmin wrapper
Christophe Vila
2026-07-25 20:30:05 +02:00
-
0936d98161
docs: embed the garmin wrapper script instead of configuring its path
Christophe Vila
2026-07-25 20:14:36 +02:00
-
961a7d8aca
docs: add design spec for dropping MCP in favor of a direct Garmin wrapper
Christophe Vila
2026-07-25 20:04:18 +02:00
-
0ff6793854
store: enable WAL journal mode
Christophe Vila
2026-07-25 19:33:15 +02:00
-
644d87f1dc
store: collapse migrations into a single schema.sql, drop legacy-owner path
Christophe Vila
2026-07-25 19:24:19 +02:00
-
0f2101bce5
docs: add IDEAS.md for informal backlog, link from CLAUDE.md
Christophe Vila
2026-07-25 19:07:48 +02:00
-
15c2b6a2b6
docs: update CLAUDE.md for per-user profile isolation
Christophe Vila
2026-07-25 19:05:09 +02:00
-
1329387528
Merge branch 'worktree-per-user-profile'
Christophe Vila
2026-07-25 19:00:04 +02:00
-
-
00605f950b
config: default GarminTokenStoreRoot instead of leaving it empty
Christophe Vila
2026-07-25 18:55:53 +02:00
-
7f5d2da6a2
frontend: add Create-profile setup screen for brand-new accounts
Christophe Vila
2026-07-25 18:42:23 +02:00
-
d62544f1cc
cmd/seedsample: provision a sample user before seeding
Christophe Vila
2026-07-25 18:38:09 +02:00
-
ad906a10f7
api: add end-to-end cross-user isolation tests
Christophe Vila
2026-07-25 18:33:44 +02:00
-
e37173ea08
api: scope activities, sync, review-queue, and reclassify handlers to userID
Christophe Vila
2026-07-25 18:28:02 +02:00
-
eaca8e602b
api: scope profile, workout-kind, Garmin auth, and progression handlers to userID
Christophe Vila
2026-07-25 18:16:06 +02:00
-
5930cc4ef5
api: build per-user garmin.Client/sync.Service via lazy caching
Christophe Vila
2026-07-25 18:10:09 +02:00
-
2cda0adbf8
api: fix chi middleware-ordering panic in resolveUser registration
Christophe Vila
2026-07-25 18:02:49 +02:00
-
4dceb03fc0
api: add user-resolution middleware and POST /api/setup
Christophe Vila
2026-07-25 17:55:13 +02:00
-
9140a00da7
config: add per-user Garmin token store root and legacy-owner bootstrap var
Christophe Vila
2026-07-25 17:49:51 +02:00
-
69103b7a4b
sync: scope Service to one user per instance
Christophe Vila
2026-07-25 17:45:41 +02:00
-
3a1333017d
store: add cross-user isolation tests
Christophe Vila
2026-07-25 17:37:40 +02:00
-
99984e319e
store: scope sync state, sync runs, and reset to a user_id
Christophe Vila
2026-07-25 17:33:43 +02:00
-
47dbf4e446
store: scope kind assignments, laps, and samples via activity ownership
Christophe Vila
2026-07-25 17:27:51 +02:00
-
f82549524b
docs: update Task 3 design for removed dead-code scenario
Christophe Vila
2026-07-25 17:05:37 +02:00
-
c2bdfe3798
store: remove dead-code branch from ClaimLegacyOwner
Christophe Vila
2026-07-25 17:02:52 +02:00
-
b08f0152ef
store: fix migration 0026's silent-cascade-delete FK toggle bug
Christophe Vila
2026-07-25 14:28:16 +02:00
-
d8b722820d
store: activities UNIQUE constraint rebuild for per-user design
Christophe Vila
2026-07-25 14:12:54 +02:00
-
62753e4604
store: scope activities to a user_id
Christophe Vila
2026-07-25 14:11:51 +02:00
-
e8bde134ae
store: scope workout kinds and their pace/HR ranges to a user_id
Christophe Vila
2026-07-25 13:44:06 +02:00
-
ef410863c6
store: scope GetProfile/UpdateProfile to a user_id
Christophe Vila
2026-07-25 13:17:17 +02:00
-
b0a7462ebe
store: add ClaimLegacyOwner one-time upgrade bootstrap
Christophe Vila
2026-07-25 13:06:20 +02:00
-
36bc651d66
store: add User type and ProvisionUser
Christophe Vila
2026-07-25 12:59:56 +02:00
-
46ad8a7e08
store: test that pre-existing FK-referencing rows survive the 0023-0025 rebuild
Christophe Vila
2026-07-25 12:25:01 +02:00
-
f57b314be4
store: fix PRAGMA foreign_keys scoping for table-rebuild migrations
Christophe Vila
2026-07-25 10:33:35 +02:00
-
245d4bf821
store: add users table and user_id scoping to migrations
Christophe Vila
2026-07-25 10:20:59 +02:00
-
033e412cb7
docs: add per-user profile implementation plan
Christophe Vila
2026-07-25 10:13:12 +02:00
-
d29f69903d
docs: design per-user profile and data isolation
Christophe Vila
2026-07-25 09:20:37 +02:00
-
-
502e61e7b4
Fix OIDC login-gate cross-file wiring bugs from whole-branch review
Christophe Vila
2026-07-24 22:03:02 +02:00
-
eeff1e9b40
docs: document the OIDC login gate and its required env vars
Christophe Vila
2026-07-24 21:50:42 +02:00
-
815db1ec1f
frontend: add LoginGate, wire session into App, add logout link
Christophe Vila
2026-07-24 21:47:41 +02:00
-
6dd4d9309c
frontend: add session API, credentialed fetch, 401-triggered relogin
Christophe Vila
2026-07-24 21:44:19 +02:00
-
f9990ddcc2
geniusrund: construct the OIDC verifier and require its config at startup
Christophe Vila
2026-07-24 21:41:32 +02:00
-
26b903721a
api: gate all routes behind an OIDC session, add session endpoints
Christophe Vila
2026-07-24 21:36:00 +02:00
-
48c17bf8ba
auth: add RequireSession chi-compatible middleware
Christophe Vila
2026-07-24 21:30:39 +02:00
-
59df391291
auth: add Keycloak OIDC verifier, role check, and test mock
Christophe Vila
2026-07-24 21:26:15 +02:00
-
bf41a34f59
auth: add signed session/transaction cookie mint and parse
Christophe Vila
2026-07-24 21:20:04 +02:00
-
5c0a9ad96c
config: add OIDC/session env vars for the login gate
Christophe Vila
2026-07-24 21:11:28 +02:00
-
f9d85e16ef
Rename smartrun to geniusrun throughout the codebase
Christophe Vila
2026-07-24 21:08:07 +02:00
-
70c6d143e1
Add implementation plan for the OIDC login gate
Christophe Vila
2026-07-24 21:02:42 +02:00
-
fd80065e81
Add design doc for OIDC-based app login gate
Christophe Vila
2026-07-24 20:45:46 +02:00
-
2fab788208
Fix Garmin connect race, surface tool error content, add dev start scripts
Christophe Vila
2026-07-21 18:33:49 +02:00
-
518bccf5ab
Dedup Garmin data storage, configurable chart colors, taxonomy fixes, sync/progression fixes
Christophe Vila
2026-07-20 06:33:47 +02:00
-
9818d35910
Tolerate exactly one extra trailing lap when aligning workout targets
Christophe Vila
2026-07-19 18:01:06 +02:00
-
513418123f
Add configurable pace-artifact filtering to replace the hardcoded cutoff
Christophe Vila
2026-07-19 17:38:50 +02:00
-
619277b0ee
Suppress the target band for laps that are just an unplanned continuation
Christophe Vila
2026-07-19 17:17:19 +02:00
-
1fb00f5bc6
Merge consecutive same-phase laps before computing the average reference line
Christophe Vila
2026-07-19 16:57:47 +02:00
-
2c2d4966b2
Fix pace/elapsed-time formatting rounding 59.6s up to ":60" instead of carrying over
Christophe Vila
2026-07-19 16:55:11 +02:00
-
82f08c0c1e
Stack Pace/HR charts vertically at double height instead of side by side
Christophe Vila
2026-07-19 16:41:30 +02:00
-
db4c76b558
Paginate the Review Queue with cursor-based infinite scroll
Christophe Vila
2026-07-19 16:31:24 +02:00
-
9ec721b9fc
Style chart tooltips to match the dark theme
Christophe Vila
2026-07-19 16:13:52 +02:00
-
02ee9fa76e
Show the average line for single-effort-type workouts too; rebrand header to geniusrun
Christophe Vila
2026-07-19 16:05:41 +02:00
-
a6efcec33b
Fix Y-axis label overlap, add phase-boundary lines and warm-up/cool-down average lines, map INTERVAL to Effort
Christophe Vila
2026-07-19 15:58:04 +02:00
-
252c8fa0d1
Filter start-of-run pace artifacts, use a percentile-based Y scale, round pace ticks to 30s
Christophe Vila
2026-07-19 15:42:49 +02:00
-
7f0373f2f3
Build the Review Queue chart's actual trace from per-second samples, not lap averages
Christophe Vila
2026-07-19 15:25:48 +02:00
-
647757dcab
Add a raw-data viewer to Review Queue cards, improve chart color palette
Christophe Vila
2026-07-19 15:05:46 +02:00
-
6c6783ce50
Redesign the Review Queue pace/HR chart: always show actuals, time-based X-axis, area style, phase-colored bands
Christophe Vila
2026-07-19 14:54:10 +02:00
-
249826afc0
Move backfill horizon from a startup env var into the editable profile
Christophe Vila
2026-07-19 12:57:18 +02:00
-
93746666b5
Reload the page after Reset all finishes
Christophe Vila
2026-07-19 12:45:03 +02:00
-
7f7e4b10f0
Merge backfill into Sync now, replace Full backfill with a destructive Reset all
Christophe Vila
2026-07-19 12:41:38 +02:00
-
af41aa0f7f
Show expected vs actual pace/HR per lap in the Review Queue
Christophe Vila
2026-07-19 11:55:13 +02:00
-
0610897541
Replace per-kind reclassify with a single global reclassify that respects manual and Race locks
Christophe Vila
2026-07-19 11:11:50 +02:00
-
8ff3d62b2f
Add Race workout kind with Garmin eventType auto-detection, sync-time running filter, and pill-based review queue filter
Christophe Vila
2026-07-19 10:52:09 +02:00
-
dfc883acb6
feat: replace per-workout-type phase-detection settings with one global pair
Christophe Vila
2026-07-18 08:53:21 +02:00
-
7f4877df57
feat: review queue polish (pace, sort, type filter), drop unused phase-detection UI
Christophe Vila
2026-07-18 08:39:23 +02:00
-
75d8a8dd0d
docs: fix stale env-var docs, document validateProfile's zone-range rationale
Christophe Vila
2026-07-17 19:36:51 +02:00
-
91b901ba60
fix: update seedsample for the fixed workout taxonomy and profile-based max HR
Christophe Vila
2026-07-17 19:29:02 +02:00
-
17ebe3c665
feat: add profile settings page and fixed-taxonomy WorkoutKinds UI with pace/HR-zone editing
Christophe Vila
2026-07-17 19:22:25 +02:00
-
9cfa3e138e
feat: source Garmin credentials from the profile instead of env vars
Christophe Vila
2026-07-17 19:18:06 +02:00
-
c11dd152ba
feat: classification reads max HR from the profile instead of static config
Christophe Vila
2026-07-17 19:13:24 +02:00
-
078c87c413
feat: fix workout taxonomy to 7 types, add pace/HR-zone fields to the API
Christophe Vila
2026-07-17 19:09:55 +02:00
-
9c42931c9e
fix: restore standard HR zone defaults, relax zone-boundary validation instead of migration
Christophe Vila
2026-07-17 19:06:01 +02:00
-
57be9065cd
feat: add profile REST endpoints with HR zone validation
Christophe Vila
2026-07-17 19:03:29 +02:00
-
6f62686d29
feat: support updating Garmin credentials at runtime
Christophe Vila
2026-07-17 18:57:54 +02:00
-
684b026ff4
feat: add per-workout-type pace range and expected HR zone
Christophe Vila
2026-07-17 18:53:55 +02:00
-
6e8bde7854
fix: rename colliding test workout kind name in sync test after taxonomy reseed
Christophe Vila
2026-07-17 18:50:21 +02:00