AI

  • Swanny – an AI-based cycling training app I built with Claude, and then stopped

    Earlier this year I spent a week exploring what was possible with Claude Code as my “engineering partner”. As someone with a design and product background I wanted to see how possible it would be for me to work with Claude to build a fully functional iOS app.

    As a keen amateur cyclist, I have lots of data across Strava, Garmin and Zwift. Over the last few years I’ve tried various training platforms like TrainingPeaks, WKO5, Intervials.icu and Xert – but I found that none of them really gave me what I was looking for. I was looking for an experience closer to that of having a personal coach – someone who would help explain all the data to me – but without the commitment and cost – because, as I said at the start, I was a keen amateur cyclist!

    So I set out with the goal of building an AI-based training coach. I called it Swanny – a “swanny” in cycling is the colloquial nickname for a soigneur. They are a non-riding support staff member who takes care of bicycle racers.

    The app pulled in your rides from Strava and Zwift, figured out what’s actually holding your fitness back, and gave you a training plan and a weekly review in plain English instead of a wall of charts. The bet I was actually testing, on myself, was: could an LLM do enough of what a $100-300/month human coach does that it’s worth it for the huge pile of amateur riders who’ll never hire one?

    I’ve ended up shelving it though. Not because the build didn’t work – it did. I used it myself for a while and even got as far as having some people sign up on a waiting list. Thanks for to those who expressed interest!

    I’m shelving it because Strava themselves rolled out MCP access to everyone’s ride data this year, and that quietly wrecked the specific bet I made.

    What it was

    Three apps, one Turborepo: a Hono API, an Expo app for iOS/Android, Postgres behind Drizzle on Neon. Clerk for auth, Stripe for payments, Resend for email, Claude Sonnet 4 doing the actual coaching bit. Rides came in through Strava OAuth, Zwift, or a raw FIT upload if neither worked.

    On top of that sat four things that the AI actually wrote:

    • A rolling 7-day training plan (cached 24 hours so I wasn’t burning tokens every time I opened the app),
    • a weekly review that’s meant to read like an email from an actual coach, and
    • a per-ride assessment that fires right after a sync, and a race plan for pacing and fuelling.

    If I’m honest, none of that list was the hard bit though. Wiring a call to Claude with a system prompt and some numbers was quick. What actually ate the most time was making it trustworthy enough that I’d take training advice from it – and I only found the places it wasn’t trustworthy because I was the user myself.

    Why I actually stopped

    I submitted the app to Strava for approval and to get the API limits lifted so I could open it up to my wait list. Days turned into weeks, weeks turned into months, and then finally I heard that Strava had decided to give every user MCP access to their own ride history.

    This meant the thing I was thinking of trying to build a business around, “connect your data, get an AI to make sense of it,” was now something anyone could get by pointing a general assistant at their own account. Swanny’s edge was never really the AI. It was the plumbing that turned messy ride data into something an LLM could reason about without hallucinating half of it. And that plumbing was what just stopped being scarce, more or less overnight.

    I don’t think it kills the whole category though – there’s real depth left in the sport-science side that a generic query won’t hand you for free: interval detection, zone modelling, periodisation, the trust guardrails above. But it kills the version I’d built, where “we plug into your data” was doing real work in the pitch.

    I could have kept building anyway. I’d already put a time into it, the app worked, and it was tempting to just keep going because it existed. Instead, I looked at what the market had just done to my actual differentiation and called it, rather than defending a plan because I’d already started it.

    What I actually took from it

    Setting aside that I got an API, a mobile app, a schema, auth, payments and four working AI features out in about a week, with Claude as my partner – the part I’d genuinely stand behind is the judgment calls sitting underneath all of it.

    Using the product myself, every day, helped me:

    • Decide where the quality bar was,
    • Decide what had to be non-negotiable, even when nobody’s asked for it yet,
    • Notice a small domain detail before it quietly poisoned everything downstream of it,
    • Understand the unit economics before getting attached to the idea.

    None of that is specific to a cycling app though. It’s what good product judgment actually looks like in practice, in my opinion, and I was able to do it at a scale small enough that I could see every part of it myself.

  • AI as a Consumer Advocate

    Let me preface all of this by saying I’m not a lawyer.

    I’m just someone who bought something (a fairly expensive thing at that)…and then a safety recall on a part of that product turned that shiny new purchase into something I couldn’t use a few months later.

    What followed was a maze: the seller of the product pointed one way, the manufacturer of the recalled parts another, I got different case numbers, mixed shipping instructions, and at one point there weren’t even boxes available to send the part in for inspection.

    Meanwhile, my new product was for all intents and purposes rendered unusable unless I was willing to incur additional costs to make it temporarily usable.

    The turning point in my experience wasn’t a magic phone call. It was opening ChatGPT and saying, “Here’s my issue, explain my rights like I’m five, and help me ask for the right fix if there is one.”

    The TL;DR on what I faced

    • Mixed messages between seller and manufacturer
    • Confusing “send it here / no, send it there” instructions
    • Logistics issues (even simple packaging became a blocker)
    • Weeks of waiting with an unusable product

    I didn’t want drama; I wanted a safe, working product, without incurring extra costs or having to deal with very unclear timeframes.

    How ChatGPT actually helped me

    ChatGPT helped point out that the part manufacturer in this case offered only one solution which came with significant inconvenience.

    ChatGPT helped me understand that legally this was not correct, and further to this, that legally, the seller was actually obliged to fix it free of charge, within a reasonable time, and without significant inconvenience; and when it’s a recall, consumers should have a real choice of remedies (if repair isn’t possible, that usually means replacement or refund).

    This meant that I could actually contact the seller of the product (who at this point was trying to quietly stay out of things) and ask for a solution.

    ChatGPT helped write the emails I’d probably have spent ages trying to write – keeping them short, calm and specific. It helped me:

    • Summarise my timeline
    • Ask for practical outcomes (safe replacement or refund)
    • Include logistics (collection, packaging, fitting)
    • Set a clear, short deadline

    And maybe more importantly, it kept my tone steady, even when the first response I got from the supplier was pretty patronising and had me getting even more frustrated!

    But, with ChatGPT, there were no rants. Just a consistent “Here’s the problem, here’s what the rules say, here’s what I’m asking for.”

    It also gave me a backup of an escalation map. If things stalled, I knew the next steps (consumer mediation, small-claims-style routes). Just knowing that made me more confident in my communications with both the seller and manufacturer.

    The key rights that mattered (EU-flavoured, in plain English)

    • Seller responsibility: Your contract is with the seller. They’re on the hook to make it right free of charge, as quickly as reasonably possible, and without major hassle for you—collection, packaging, and fitting included.
    • Recall remedies: In a recall, you should get a genuine choice (often replacement or refund if repair isn’t feasible). If it drags on or becomes a pain, you can push for a refund.
    • No extra costs: You shouldn’t pay to fix a safety problem with something you already bought.

    Note: this is a practical summary. It’s not legal advice.

    The playbook I used (steal this if you want!)

    1. Write a timeline. Dates, who said what, any blockers (routing mistakes, no packaging, etc.).
    2. Ask ChatGPT for a checklist of your rights tailored to your situation.
    3. Send a calm, clear email to the seller (cc the manufacturer if helpful):
      • “The product is unusable due to a safety issue.”
      • “Please provide a safe replacement or an adequate refund.”
      • “Cover the logistics and fitting.”
      • “Please confirm by [specific date].”
    4. Don’t confuse goodwill with the fix. The seller tried this, but reimbursing small costs is nice; it’s not the remedy.
    5. Follow up on your deadline with the same message—polite and persistent.
    6. Escalate if needed. Knowing you have options keeps things moving.

    How it ended

    After a few firm, well-structured exchanges, I got a free replacement within a week that solved the safety issue and made the product usable again. Not instant, but once the requests were precise and grounded in the right standards, things clicked.

    Why this matters

    Most of us don’t speak “legal.” We shouldn’t have to.

    ChatGPT didn’t argue in court; it helped me ask for the right thing, the right way, at the right time. That alone turned a frustrating recall into a manageable process, and a better outcome (for me at least).

    Prompts you can copy/paste

    “Explain my rights in the EU when a product I bought is affected by a safety recall. Keep it plain English and actionable.”

    “Draft a short, polite email to the seller asking for a remedy within a reasonable time and without significant inconvenience. Include collection/packaging/fitting and a deadline.”

    “Turn this timeline into a concise email with dates.”

    “If the manufacturer only offers replacement, when can I ask for a refund? Keep it brief.”

    “Write a firm but friendly follow-up if I don’t have tracking/ETA by [date].”

    Legal disclaimer

    This was one person’s experience (mine), and as such is not legal advice. But if you’re stuck in a similar mess, this approach may help you move from confusion to resolution—without needing a law degree.