Thursday, February 5, 2026

Mr. T’s Fitness Tracker: The Tiny Web Page That Became a Four‑Sheet, Multi‑API, AI‑Fueled Data Pipeline

I swear I didn’t mean for this to happen.

All I wanted was a simple little web page — a public accountability nudge, a digital sticky note that said, “Hey Tony, did you move your body today or nah.” Something tiny. Something honest. Something that would quietly roast me if I skipped too many days.

For months I’d been posting my daily walks on Facebook — a little ritual of “proof of life” updates that kept me honest. It worked, but it was clunky. Manual. Too dependent on me remembering to actually post. I wanted something automatic, something that lived on its own, something that didn’t require me to open Facebook like it was a confessional booth.

But the universe knows me too well.

Give me a “simple” idea and I will immediately turn it into a multi‑API, OAuth‑refreshing, Google‑Apps‑Script‑powered, domain‑hopping, spreadsheet‑layered contraption involving two AI models, four sheets, and a data architecture diagram that looks like a subway map.

This is the story of Mr. T’s Fitness Tracker — the page, the pipeline, the chaos, and the weirdly personal satisfaction of shipping something that absolutely should not exist and yet very much does.

The origin story: A joke that became a project

It started as a vibe.

I wanted a public page that said, in essence:

“Tony walked today. Or he didn’t. Either way, here’s the truth.”

No gamification. No badges. No “earn 50 XP for not dying.”
Just a little window into my daily movement so I’d feel mildly embarrassed if I slacked off.

I spun up a domain:

  • mrtsfitnesstracker.stabthefinger.com (funny, but long enough to qualify as a novella)

Then tightened it to:

The page itself was intentionally minimal — a bold header, a clean table, no frameworks, no nonsense. Just vibes.

But then came the real question:

Where does the data come from?

And that’s when the project stopped being a joke.

The data problem: MapMyWalk, I love you, but no

I started with MapMyWalk because it’s what I’d used for years. But the moment I tried to automate anything, I realized their API situation was… let’s call it “archaeological.”

Technically present.
Functionally ancient.
Emotionally exhausting.

So I did what any reasonable person would do:
I opened Copilot and said, “Talk me out of this.”

Copilot, ever the research engine and debate partner, pulled up documentation, forum threads, and a few digital sighs from developers who had tried before me. The verdict was unanimous:

MapMyWalk was not the hill to die on.

Enter Strava, glowing like a modern API angel.

Strava’s API is clean, well‑documented, and shockingly pleasant. So I migrated my daily walks there and instantly felt like I’d stepped into the future.

Withings joins the party

Meanwhile, my Withings ScanWatch was sitting there tracking:

  • steps
  • heart rate
  • sleep

And Withings has a modern OAuth2 API that I’d already tinkered with. So suddenly I had two data sources:

  • Strava → activity minutes + workouts
  • Withings → steps

The goal: merge them into one daily truth‑bomb.

Google Sheets: The database I will defend with my life

Look, I know real developers use Postgres or DynamoDB or something with a mascot. But for personal projects?

Google Sheets is undefeated.

  • free
  • instantly viewable
  • instantly publishable
  • easy to automate
  • easy to debug
  • easy to share

So I built a four‑sheet architecture:

1. raw_steps

Nightly Withings step data.

2. raw_activities

Nightly Strava workouts + activity minutes.

3. daily_summary

The merge layer — formulas combining steps + activity minutes into one row per day.

4. public_feed

A distilled, read‑only, minimal summary that the webpage consumes.

This separation kept the chaos contained and made debugging feel like archaeology instead of surgery.

The Google Apps Script pipeline: Where things got serious

This is where the project stopped being “cute” and became “Tony, why are you like this.”

Withings script

Runs nightly:

  • refresh OAuth token
  • fetch yesterday’s steps
  • append to raw_steps
  • dedupe by date

Strava script

Also nightly:

  • refresh OAuth token
  • fetch recent activities
  • convert meters → miles
  • convert seconds → minutes
  • extract activity minutes
  • append only new rows

Sheet #3: The summary layer

This is where the spreadsheet magic happens:

  • SUMIF to total daily walk distance
  • SUMIF to total activity minutes
  • LOOKUP to merge steps + workouts
  • a streak formula that checks whether I hit my daily movement target

Sheet #4: The public feed

A tiny, clean, minimal slice of the truth — published as a CSV endpoint.

Publishing the sheet: The secret weapon

Google Sheets has a feature that feels like cheating:

Publish to Web → CSV

Suddenly I had a stable, public, auto‑updating endpoint.
The webpage just fetches it and renders the truth.

If you’re curious (or just want to see the madness up close), here’s the public read‑only version of the sheet that feeds the tracker web page.

The web page: Minimalism as a lifestyle

The page itself is intentionally simple:

  • bold header (“Mr. T’s” on the left, “FITNESS TRACKER” stacked on the right)
  • a clean table
  • no frameworks
  • no dependencies
  • loads instantly

But then I got curious.

Enter Gemini: The chart‑summoning sorcerer

At some point I wondered:

“What if this had charts?”

So I opened Gemini and said, “Code me some charts.”

And Gemini — bless its chaotic, code‑vomiting heart — generated a second version of the page (“gemini2”) with:

  • charts
  • graphs
  • visualizations
  • a more dashboard‑y feel

It was fun, it was pretty, and it was absolutely overkill for a page whose entire purpose was “Tony walked today.”

I considered making it the main index.
In the end, I kept both. (Gemini2 version is the current "main" page, with a link to the "lite" original.)
Because why not.

Copilot’s role: Research engine, debate partner, technical co‑pilot

Throughout this whole build, Copilot was:

  • the MapMyWalk vs Strava debate moderator
  • the API researcher
  • the OAuth explainer
  • the formula debugger
  • the Apps Script co‑author
  • the architectural sounding board

I was the technical director.
Copilot was the engine room.

Together we built something small, weird, and surprisingly robust.

This post is one chapter in my ongoing adventures with Copilot — another one, from a very different angle, lives here.

What I learned (against my will)

1. Small projects are never small

Not for me. Not ever.

2. Google Sheets is a legitimate backend

I will die on this hill.

3. Strava’s API is a joy

MapMyWalk made me feel like I was scraping a fossil.

4. Public accountability works

Even a tiny dashboard can nudge you to move more.

5. Shipping beats perfecting

The tracker is simple, maybe even plain — but it exists. And that’s the whole point.

Will I expand it?

Probably. Maybe. Depends on caffeine levels.

Potential upgrades:

  • charts (already in the Gemini version)
  • weekly summaries
  • a “don’t break the streak” alert
  • a full dashboard with historical stats

But honestly, I like the stubborn minimalism of the current version. It tells the truth. That’s enough.

Final thought

Mr. T’s Fitness Tracker” isn’t a product. It’s not even a project. It’s a reminder that the web is still a place where you can build something small, personal, and slightly absurd — and that’s enough.

And if it keeps me from skipping workouts, even better.

No comments: