A production-grade platform for endurance athletes and their coaches
An athletic nutrition platform built for the way endurance sports actually work — athletes, coaches, teams, and partners all under one subscription model, with weather-aware fueling plans and billing that does not fall over under real-world edge cases.
The problem
Endurance athletes — ultra runners, triathletes, cyclists — plan fueling and hydration months in advance, adjust it the week of the race based on weather, and change it again on the start line. Off-the-shelf nutrition apps treat that workflow as a consumer checklist. Coaches, teams, and sponsoring partners treat it as a business.
The client needed a platform that could serve a solo athlete and a coached team from the same codebase, charge for access in ways that matched how athletes actually buy, and move real-time race-day conditions into every fueling plan. And it had to ship as production software — not a prototype that would have to be rewritten at scale.
Our approach
Production-grade from day one
Instead of a prototype wrapped around happy-path demos, we started with the foundations real products need: authenticated APIs, polymorphic ownership so any plan can belong to an athlete, coach, team, or partner, and query patterns that scale past the first few hundred users without a rewrite.
Subscription billing that respects real life
Stripe handles the money; the platform handles the nuance. Grace periods keep an athlete in their account through a failed-card retry window. Entitlements gate features on actual subscription state, not a cached boolean. Webhooks drive a clean state machine so a dropped event does not quietly strand a user in the wrong tier.
Real-time weather integration
Fueling plans pull live conditions into the planning pipeline so hydration and carbohydrate targets shift with forecast temperature, humidity, and elevation — not just calendar date. Athletes see a plan that reflects course day, and coaches see the same data when they review it.
The stack
Backend
- Ruby on Rails (API-only)
- PostgreSQL
- Polymorphic ownership
- Sidekiq
Frontend
- Next.js (App Router)
- React
- TypeScript
- Tailwind CSS
Payments
- Stripe Billing
- Grace-period entitlements
- Webhook-driven state machine
Infrastructure
- AWS (ECS, RDS, S3)
- CloudFront
- GitHub Actions CI/CD
- Observability + alerting
What we built
Production-grade from day one
Shipped with authentication, subscription billing, entitlement enforcement, observability, and CI/CD already in place — not deferred to "phase two".
Coaching model that matches reality
Polymorphic ownership lets a plan belong to an athlete, a coach, a team, or a partner — without a rewrite each time a new relationship shape shows up.
Billing that respects real life
Grace periods, entitlement windows, and clean webhook reconciliation mean a failed payment does not lock an athlete out mid-race-week.
Weather-aware fueling plans
Real-time weather is pulled into the planning pipeline so hydration and fueling adjust to conditions on course, not just calendar date.
Thinking about a project like this?
A free discovery call is the fastest way to find out if an engagement makes sense.