← All writing

Week 8: The Unglamorous Half of Shipping

Week 8 of Shipping Every Week — I hired a coach, then built the coach-share flow so he never has to open the app. The demo feature you'd put in an ad sits on top of the migration plumbing nobody posts about.

Week 8 of Shipping Every Week: I hired a powerlifting coach last week. Then I spent this week making sure he never has to open my app.

Becoming my own customer in a new way — a coached lifter — immediately surfaced a workflow problem I'd never felt as a solo trainee. The best product feedback is the kind you get by living the use case, and this week I got handed one.

The problem with the coached-lifter loop

The normal coached-lifter loop is ugly. You finish a session, then you re-type every set into the spreadsheet your coach gave you, then you text him the form videos separately, in a different app, with no connection between the numbers and the clips. Your coach is now reconstructing your workout from a spreadsheet and a camera roll.

The absurd part: I already track all of it in Powr. The program he wrote, my sets, the weight, the RPE, a note when a set felt off, the form video — it's all in there, already linked together. Re-typing it into a Google Sheet so my coach could see it felt insane. The data wasn't missing. It was trapped behind a login he had no reason to create.

The coach-share flow

So this week I built it. I log the workout like I always do. When I'm done I tap "Share with coach." That generates a private link — a long, unguessable token, no account attached — that I send him. He opens it in any browser. No login, no app download, no friction. He sees every set from the block: the RPE I was prescribed sitting right next to what I actually hit, my per-set notes, and the form video playing inline next to the numbers it belongs to. And because it's a link I own, I can revoke it; access is a switch I control, not a copy I've lost custody of.

That was the headline feature — the one you'd put in an ad. But it only works because of something much bigger and far less postable underneath it.

The video rebuild went live

Powr's form-video archive had been running on a pipeline I'd patched one bug at a time for months — the same pipeline I spent week 6 shoring up. Patching has a ceiling. This week the ground-up rebuild became the default path for new uploads in production. New recordings now run end to end through the new pipeline; the old one stays up only to serve clips that already exist while the migration finishes.

The rebuild wasn't a polish pass, it was a different architecture. The old pipeline keyed videos off filenames, which meant collisions were possible and a video's identity was fragile. The new one gives every video a server-issued unique ID that nothing else can clash with. The old one pushed the raw video bytes through my own server, which is what caused the out-of-memory failures — the server had to hold the whole file in RAM. The new one has the phone upload straight to the storage provider over a signed URL, so my server never touches the bytes at all. And the new one soft-deletes, with a reconciler that cleans up provider assets afterward, instead of trying to delete everything synchronously and orphaning assets when a step fails. Same feature from the outside. A fundamentally more trustworthy machine inside.

The video tab got redesigned in the same pass, so the whole surface — the tab list, the workout summary, the player — finally matches the rest of the app. Same content, screens that now look like they belong together.

Program import got more honest

Importing a 12–16 week program is the slowest operation in the app, and it used to give up entirely if you closed the app mid-parse — you'd come back to nothing and have to start the whole wait over. Now the import resumes where it left off when you return. The app remembers the job is still running on the server and picks the polling back up. You don't lose the parse you already waited on.

The part you'd put in an ad — and the part that makes it safe

Here's the honest accounting of the week. The coach-share flow is maybe a tenth of the work. The other nine-tenths is the kind nobody posts a demo of: closing write-path gaps, killing queue deadlocks, swapping the upload architecture, the migration plumbing that makes a coach link trustworthy enough to actually send to a coach.

And that ratio is the point. The coach-share flow is the part you'd put in an ad. The reason it's safe to send — the reason I'd put my own coach behind that link without bracing for a "video not found" text — is everything underneath it. The demo is the tip. The trust is the iceberg.

What did you ship this week?

Want a site that does this for your business?

I build warm, fast, mobile-first sites for local businesses and solo pros — clear price, quick turnaround. A free, no-pressure intro call is the place to start.