← Home
AlphaMay 2026

Route-aware hydration and nutrition briefs for long rides — because knowing you sweat more in the heat and packing for it are two different things.

Next.jsReactVercelClerkPrismaPostgresClaudeStravaRide with GPSLeaflet

The ride that started it

I haven't been riding as much as in previous years. But last weekend I did 50 mile coffee ride with some friends. Around mile 40, both legs started cramping. There wasn't of a much warning. They just both said, enough.

I've under-eaten and under-hydrated on long rides before and I think it caught up with me again. Wrong bottles (too small), forgot to eat until it was too late, no emergency pickle juice in the bag. Under-prepared, and out of shape.

Map of the 50-mile ride through the Peninsula and South Bay
Latte and a Rice Krispies treat at the coffee stop
The route — and the coffee stop that came a little too late to save my legs.

Why the existing apps don't work

When I'm planning a new route, it's a lot of work figuring out how much food and water to carry, where to refill, what the day will actually feel like. Ride with GPS, Strava, and Komoot are great for following a route but less great for answering "what do I need to finish this one?" The standard: drink a bottle every hour or so and eat a bit every 45 minutes are great starting points but don't account for temperature, exertion, fitness and aren't personalized.

Before, it's scour the map, guess at time and temperature on each climb or flat, and hope you packed right. A useful but gross data point is that I sweat a lot and way more in the heat. Most cyclists get a sense for this but I actually measured my sweat rate vs. temperature after a bunch of indoor riding during the pandemic. Knowing that a hot, steep climb will wreck you is different from showing up prepared for it. That's the gap Domestique is trying to close.

The first version

The first goal was simple: help with hydration and nutrition so you don't bonk. The fastest test was feeding a route into Claude and seeing what came back.

It knew more about the area than I expected. I'd given it some popular local routes and it knew aboiut the Bike Hut (cash only, a treasure and one of my favorite stops). That was enough proof of concept to keep going.

What changed

Testing and details matter. The model would sometimes be confidently wrong like talking about riding into the East Bay when the route was miles away on the coast. I needed to cut the route better, provide better instructions on what to follow and what was important.

v1 mostly dumped raw prompt output which was great at first but limited formatting and wasn't easy to scan on a phone before a ride. v2 added structure: find sensible rest stops with water and bathrooms, research highlights (climbs, descents), lookup forecasted temperatures along the route when the rider is expected to be there, surface practical tips, and be more specific about what to expect along the way.

I'm still tuning how much to trust the model vs. how much to verify against the actual route geometry.

Where it is now

Domestique works with Ride with GPS routes (public and private). I'm waiting on Strava approval so others can use that integration. For now I can test it as the developer but Strava even requires a login for public routes, which was a surprise.

I'd like to add Komoot, GPX upload, and other sources over time.

Next up: a route guide you can print and stash in a pocket — not a full cue sheet of every turn, but timeline, highlights, and a feeding plan.

Longer term, I'd like some type of a feedback loop: you get a brief, try it on the ride, add notes, and the next brief gets better. Everyone's different and more personalized feedback is what I'm shooting for. Faster generation would be nice too but not sure how much more I can squeeze out of the LLM side without cutting corners.

What I learned building it

In about three days I burned through my Cursor API budget and most of my regular agent allowance. I was on Claude for everything at first which went fast. I've since switched to Claude for planning and Cursor's Auto agent for implementation, which has been working well. When Auto got stuck, I'd jump back to Claude and that usually unblocked things faster.

Cursor usage dashboard showing ~$77 spend over a few days, mostly default and Claude Sonnet models

The bill for v1 — mostly "default" and Claude Sonnet before I started reserving Claude for planning.

I also lost half a day on a Vercel deploy that wouldn't cooperate — probably misconfigured something. I deleted the Vercel project, started fresh, and it worked fine after that.

TLDR -3 days headsdown with lots of tweaking since -AI coding passion projects - so fun!


Domestique is in alpha. Try it at domestique.starterlabs.ai.


← Home