Galgo on three iPhones: Today on a tempo day, a workout's steps, and a long run marked done from COROS.

One question every morning: what do I do today?

Galgo is the training app I built for my first marathon, Copenhagen, May 2027. I designed it, built it with Claude Code, connected it to my watch and shipped it on Vercel. I open it every morning.

Role
Everything: product, design, build
Built with
Claude Code, React, Vercel
Timeline
18 days, Sep–Oct 2026

01 · The problem

A 259-day plan, and nowhere good to read it.

My coach built me a plan from September to race day: every run with its pace and heart-rate zone, gym sessions that change by phase, mobility, and how much to eat around each workout. It lived in spreadsheets and messages.

Every morning I had to piece together the same answer from four places. Running apps track what you did; none of them told me what to do today, from my coach’s plan.

Galgo poster: a greyhound silhouette over a line from Córdoba, 21 September 2026, to Copenhagen, 9 May 2027. 259 days, 42.195 km.

02 · One job

The app answers one question in under three seconds.

That one rule decided everything else. Today opens on the workout: one big number, what it’s for, and one button. Gym, mobility and meals sit below it, never above.

Colour is a signal, not decoration: blue means today and done, amber means heat, red only appears when I log pain. A high-contrast “Sun” mode keeps it readable outside at noon, and there are no session times, because I decide when I train.

The real app, recorded from the production build: Today, the workout, then the plan.
Galgo Today screen on a quality day: Tempo, Fartlek, 8 km, See workout, then Mobility and Fuel for this run.
Before: today’s run, and nothing else above it.
Galgo Today screen after a long run: 14 km, Done from COROS, 86 minutes, average heart rate 146.
After: filled in from my watch.

03 · The watch

I stopped typing my runs: Galgo reads them from my watch.

Logging every run by hand was the step I kept skipping. COROS has an MCP server — the same protocol AI tools use to talk to other apps — so I used it as an API: two small Vercel functions handle the login and fetch my workouts, and the phone fills in the day.

Privacy was a product decision, not an afterthought. The only thing stored on a server is the login token. Workouts go straight into the log on my phone, without names, locations or GPS.

Diagram: COROS watch, then the COROS MCP, then Vercel functions with OAuth, then Galgo on the phone showing Done from COROS. Workout data is never stored on a server.
Abril in running clothes with her COROS watch, in a plaza in Córdoba.
Córdoba, a few weeks in.

04 · The heat

Córdoba summers are hot, so the app checks the weather for me.

Most of my training happens in an Argentine summer. Galgo reads the hourly “feels like” from Open-Meteo for the time I usually run. Over my limit, it suggests what my coach would: run earlier, split a long easy run, or take a quality session to the treadmill.

It’s always a suggestion. The plan never changes on its own.

Chart of feels-like temperature through a January day in Córdoba, peaking at 35° in the afternoon. The planned 18:00 run is at 34°, over the 32° limit; 06:30 is 21° and 20:30 is 29°. Next to it, Galgo's heat card suggests running earlier or later.

05 · Built with AI

I wrote the brief. Claude Code wrote the code. I checked every screen against my design.

The core of the project is a CLAUDE.md file: the product’s rules, the data model and every design decision I made along the way. It’s a product spec written for an engineer that reads it at the start of every session.

I worked in small steps — plan, build, try it on my phone, commit — with tests for the logic that can’t break, like dates and heart-rate zones. And because I’m a designer, I added one more step: a script that screenshots every screen and diffs it against my Figma frames, so the build matches the design, not just roughly.

Six steps: brief in CLAUDE.md, plan mode, build in small steps, 327 tests, npm run shots to compare with Figma, git push to Vercel. A loop goes from check back to build. 53 commits, 18 days, about 9,700 lines of TypeScript, 327 tests.

06 · The brand

A greyhound, because it’s built for distance.

Galgo is Spanish for greyhound. I gave a personal tool a full identity — posters, a launch film and a season — because the details are what make you want to open it at 6 a.m.

The launch film.
Galgo poster: a white greyhound over a blurred field. Season 01, 2026–2027, Córdoba. Galgo poster: a runner in fog. Easy run: easy means you can talk in full sentences. Under 150 bpm.
Motion sketch: one day becomes the whole plan, then the greyhound.

07 · Outcome

I use it every morning.

Galgo is live on my home screen and runs my training: what to do, how it went, what to eat, and when it’s too hot. The real test is in May, in Copenhagen.

What it taught me: with AI, the bottleneck moves from writing code to deciding what to build and checking that it’s right. That’s product design.

18
Days to build
327
Tests
Daily
Real use