Performance Signal
A live ChatGPT app for understanding your running. Connect Garmin for new runs, import Strava history, then ask about pace, effort and progress.
What it shows: Trusted data and real tools put in front of a model ChatGPT users already have, instead of building another chat window.
Live as a native ChatGPT app, with sign-up at performancesignal.ai
Your running history, in conversation
Performance Signal brings a runner’s recorded activities into ChatGPT, so questions about a run, a race or a training pattern start with the data already available.
The website handles account setup and data connections. In ChatGPT, the runner can explore their history in plain language and follow a useful answer with another question.
It’s now live. Connect Garmin for automatic delivery of new supported runs, upload a Strava export ZIP for earlier runs, or use both. Then ask ChatGPT to compare efforts, explore pace and heart-rate patterns or put a training goal in context.
What was my last run like?
Your last run was 8.2 km yesterday morning, averaging 4:52/km with heart rate settling around 152 bpm and cadence steady at 174 spm.
Want the full detail, or how it compares to your recent average?
Eight or nine screenshots, every run
I run regularly, not really training for anything in particular. I just wanted to actually understand what happened out there and make better decisions about the next one.
After a run I’d open Garmin, screenshot the stats, eight or nine of them, pace, heart rate, cadence, and upload the lot into ChatGPT. Once it had the numbers, the conversation was genuinely useful: what happened, where effort dropped off, what recovery should look like, what the next run or week should be. It felt a bit like having an AI running coach.
The AI part worked. Getting the data in front of it didn’t.
- Garmin
- 8-9 screenshots
- ChatGPT
- Analysis
- Next run
Not another AI chat window
The obvious approach was to build a standalone app, add a chat interface and wire it up to a model API. I looked at that seriously, and it raised a problem I’d seen before in other software: usage-based AI costs are hard to predict. Different customers use wildly different amounts of tokens, and that makes pricing genuinely difficult to get right.
That led to a more basic question. Why build another chat interface at all when ChatGPT already provides one, and the user is often already paying for it? The interesting engineering problem wasn’t the conversation. It was getting trusted, structured running data in front of a conversation that already exists.
So Performance Signal isn’t an app with a chat bolted on. It’s a native ChatGPT app: structured running data and a set of tools ChatGPT calls directly. The account website handles connections and imports; the analysis happens in the conversation the runner already uses.
Your runs, ready for the conversation
Garmin supplies new supported activities after connection and authorisation. It does not backfill earlier runs. A Strava export ZIP supplies historical runs without requiring a live Strava connection, and either source can be used on its own. Existing eligible Strava connections remain supported, while new live connections are currently limited.
ChatGPT connects to Performance Signal as a native app over MCP, the Model Context Protocol, an open standard for exposing tools a model can call directly. Once connected, ChatGPT can call tools that list recent runs, pull the detail or full data for one run, search training history, or pull mileage and trend stats. The available detail depends on what was recorded: some runs have summaries only, while others include the streams needed to look closely at pacing or effort.
- Garmin / Strava import
- Structured running history
- MCP tools
- ChatGPT
How did my marathon go overall?
42.2 km in 3:41:12, averaging 5:14/km with heart rate around 161 bpm and cadence at 172 spm.
Pace held even through the first half and drifted out in the back third. Want me to pull the stream data and see exactly where that happened?
From the summary to the actual run
A normal activity summary gives you the averages. When the source includes detailed samples, Performance Signal also stores how pace, heart rate and cadence moved throughout the run. That lets the conversation go beyond the finishing numbers.
That’s the difference between “here’s your average pace” and “here’s roughly where you actually faded.” Performance Signal stores that stream data so ChatGPT can be asked about a specific part of a run, not just the summary.
Show me where I actually faded.
Breaking the stream into phases: a strong first wind out to about 28 km, a mini wall through 28–33 km where pace slipped and heart rate held high, then a second wind for the final stretch as cadence recovered.
That middle patch is usually where a better pacing or fuelling plan pays off most.
Under the hood
The interesting part isn’t another AI interface. It’s giving ChatGPT trusted, structured running data and the tools to work with it.
Build snapshot
- ChatGPT app
- Native ChatGPT app using MCP (StreamableHTTP), not a Custom GPT
- Data
- Garmin runs and Strava imports, with summaries and available streams in Supabase
- Backend
- TypeScript / Node.js API exposing structured MCP tools
- Connections
- Garmin authorisation and delivery, Strava ZIP imports, Auth0; eligible existing Strava connections
- Infrastructure
- Render backend, Supabase data, Vercel website, Cloudflare DNS
- Availability
- Live in ChatGPT, with sign-up and membership at performancesignal.ai
The workflow was the product
If you find yourself doing the same manual steps around AI over and over, there’s a reasonable chance the workflow itself is the product, not whatever you were originally trying to build.
Not every AI product needs its own AI interface. ChatGPT already has the model and the conversation. What was actually missing was trusted data and the right tools in front of it, which turned out to be a much more focused problem to solve than building a second chat app.
That’s also made MCP click for me in a way reading about it never did. It’s not really AI infrastructure. It’s a fairly ordinary API, with permissions, structured so a model can call it directly.
Usage-based AI economics were part of that decision too, not an afterthought. Unpredictable per-customer cost is a product problem as much as an infrastructure one.
