Cyclist on an open road at dusk
For the 6–10 hour week

Train like you have a coach. Live like you don’t.

Velogorgeous UI reads your rides, sleep, and HRV, then sketches a week that respects work, weather, and the fact that you still want Saturday lunch.

Not a pro dashboard. A Saturday dashboard.

Connect the apps you already use. Velogorgeous UI estimates fitness and fatigue in plain language, then plans cycling — with optional lifting — around your actual recovery.

Group of road cyclists

Import the messy history

Strava rides, Karoo summaries, TrainingPeaks iCal, Garmin sleep/HRV, and Withings scale + sleep mat readings.

Road bike on a countryside climb

See if you are actually tired

PMC charts (CTL/ATL/TSB + daily load), readiness, sleep stages, weight/body-comp trends, and a Withings-vs-Garmin deep-sleep comparison.

Weight training in a gym

Plan the bike — keep the gym

A deterministic or AI-drafted week with per-sport tiles, and a coach chat that reads your real numbers. Dark and light themes, installable as an app.

How the pieces talk

Each box is its own Rust service. You can rebuild just ingest, or just the planner, without touching the rest.

Browser You Edge Traefik App services web identity ingest fitness planner llm Data plane Redis Postgres Ollama (optional GPU) Traefik edge Hot path: new rides land in Redis, then Postgres. Ingest clears the fitness analysis cache so CTL/ATL/TSB refresh on the next request. Planner asks the local model, or falls back to a deterministic coach. Outside world: Strava OAuth · TrainingPeaks OAuth · Garmin CSV (sleep score, HRV, RHR). Tokens are encrypted at rest. Hobby translation: “Fresh / Balanced / Tired”, not a 14-zone lecture.

Recovery is not optional

Garmin sleep score and HRV do not need to make you a physiologist. If they are down and your form is already negative, Velogorgeous UI will not prescribe VO2 on a Tuesday.

Upload a CSV with date,sleep_score,sleep_hours,hrv_ms,rhr,body_battery,stress. Export from Garmin Connect or type a week by hand.

Quiet bedroom, recovery sleep

Protect the long ride

The Sunday ride is the season. Intervals only happen when last night looks like you slept.

Your watts stay in the house

The stack runs behind Traefik on your machine. Analysis can use Ollama on a Quadro P400 (2 GB) with a 1B-class model, or any larger NVIDIA GPU. No cloud coach account.

Local first

Postgres, Redis, and the UI all live in Docker Compose. One script starts them.

GPU optional

No GPU? The built-in coach still writes a week. With a GPU, Ollama drafts in your tone.

OWASP-minded

HttpOnly sessions, CSRF, origin checks, Argon2id, encrypted OAuth tokens, tight CSP.