Inspiration

I own a standing desk. I almost never raise it.

It sits in the sitting position all day, an expensive piece of furniture doing the job of a cheap one. Reminder apps didn't fix that — they nag, you dismiss, nothing changes. Knowing I should stand has never once made me stand.

So I stopped building a reminder and built a reason. Something has to be at stake, and something has to be waiting on the other side.

What it does

StandProof runs your work rhythm: 30 minutes sitting, 8 standing. When the sit phase ends, it asks you to stand — with a real alarm that cuts through Focus, so it isn't a notification you swipe away without reading.

Standing up pays +10 coins. Ignoring the prompt costs 10. Coins go to one place: the cat that lives on your home screen, who wants a scarf, some headphones and a plant for the desk. Nothing is staked to start a session, so coins never stand between you and a prompt to move — they only make it matter whether you answer it.

The phone can also tell whether the desk really went up: put it on the desk and the barometer catches the ~60 cm rise while the motion sensors confirm the phone was lying still rather than in your hand. That's a nice touch, not the point. The point is that you stood up.

How I built it

Flutter, iOS 26+ for AlarmKit. Monetization is RevenueCat end to end: a virtual currency holds the authoritative coin balance, coin packs sell through a dashboard paywall, and the device's balance is a cache plus an outbox syncing through my own server.

Challenges

  • Making the alarm unignorable. A local notification is too easy to dismiss, so the end of each phase is an AlarmKit alarm — which set the floor at iOS 26.
  • 0.06 hPa. That's what half a metre of desk travel does to air pressure, a few times a barometer's noise floor. Median filter, plus the altitude has to hold for seconds. Desks vary, so the app measures yours on first run.
  • Coins that survive a reinstall. A virtual currency balance is non-transferable, so keeping it meant real accounts, a server, and in-app deletion.

What I learned

The design shrank the whole way. I cut a subscription, a streak, a streak shield, a session stake, a daily gift and two bonus tiers — every one of them a number the user would have to think about. What's left is one line: stand up, earn coins, dress the cat.

Also: the sensor work was the fun part and the motivation loop was the important part, and those are not the same part.

What's next

Cash pricing on every cosmetic — earn it, or buy it outright.

Built With

Share this project:

Updates

Submission history