open source · Apache-2.0

Every watt.
Every kilometre.
Yours.

An open-source training log for cyclists. Self-host it in five minutes, track progression for a lifetime, and keep your data yours.

week 14 · Load
612/ 720 target
actual weekly target
01 / POWER

Your power curve, modelled.

Mean-maximal power in watts or W/kg, with Critical Power, exponential and power-law curves fitted over it — and an FTP estimate you can accept in one click.

02 / FORM

Fitness, fatigue, form.

The Banister model on your real training history — not an estimate. Project it forward to see where form lands on race day.

03 / IMPORT

Bring your whole history.

Drop in an entire Strava bulk export — FIT, GPX and TCX, compressed or not — or sync new rides automatically from Strava and Wahoo.

Compatible with Strava Wahoo
04 / COACH

A coach that reads your data.

Koutsi breaks down every ride, sums up your training status each day, and says whether a goal is realistic — then answers your own questions from your actual numbers. Runs on your instance's model, or on one you bring yourself.

05 / PLANS

Periodized plans that keep score.

Generate a Base → Build → Peak → Taper plan around the hours you actually have. Rides link themselves to the day's session, skipped sessions are recorded with a reason, and an adherence score tracks how closely you followed it.

06 / RECON

Ride the course before you ride it.

Upload a GPX and get the route back as segments — a power target and a predicted split for each, solved from your own FTP, weight and bike. Pace it to a finish time or an average power, and read the plan for where to spend and when to eat. On instances that enable it.

07 / WORKOUTS

Build structured sessions.

Design interval workouts with per-step power, HR, or cadence targets — zone numbers, % FTP, or absolute watts. Export to Zwift (.zwo) or as FIT workout files for Wahoo ELEMNT and Garmin bike computers.

08 / CLASSIFICATION

Know what you trained.

Every ride is classified automatically — Recovery through Sprint — using Coggan's power model. Override with one click.

09 / METRICS

The shape of the work.

Efficiency factor, aerobic decoupling and W′ balance on every ride, weekly time in zones, and whether a block came out polarized, pyramidal or threshold-heavy.

10 / ASSISTANTS

Ask from your own AI client.

An MCP server lets Claude, Copilot or any MCP client read your training — read-only, scoped to a token you issue and revoke at will.

11 / PRIVACY

Zero telemetry.

No analytics, no third-party SDKs. Your rides stay on your server, and the AI can run on a model you host yourself. Privacy policy →

12 / EXPORT

Portable by design.

SQLite under the hood. Export your raw FIT files and profile data as JSON — anytime.

hosted in the EU · app.koutsi.dev

Don't want to self-host?
Use our EU instance.

We run a public instance at app.koutsi.dev — the same open-source openkoutsi, hosted and kept up to date for you. No server to rent, no Docker, no maintenance.

It runs on a single UpCloud server in Helsinki, Finland: an EU-owned provider, on EU soil, under EU and Finnish law. Your training data stays inside GDPR's protections and out of reach of the US CLOUD Act. Storage is encrypted at rest and backed up daily, and — as everywhere in openkoutsi — each user gets a private database that no one else, not even an administrator, can read.

Access is by invitation, or by self-serve email sign-up where an instance enables it.

Data residency
app.koutsi.dev
Location
Helsinki, Finland
Provider
UpCloud · EU-owned
Jurisdiction
EU · Finnish law
Regulation
GDPR
US CLOUD Act
Not applicable
Storage
Encrypted · daily backups

Prefer full control? Export your data and self-host anytime — no lock-in.

Your server.
Your rules.

Run openkoutsi anywhere — a Pi in your closet, a €4 VPS, or your home NAS. Docker compose for one-command setup, or build from source. No sign-ups, no lock-in.

Core training features are free forever. AI coaching runs on your own model, or — on shared instances — a subscription the host can offer.

docker sqlite arm64 / amd64 Apache-2.0
~/openkoutsi
# clone & run
git clone https://github.com/openkoutsi/openkoutsi
docker compose up -d

# open
http://localhost:8080