Every morning, a cron job wakes up and asks: how many burpees should I do today?
Not a fixed number. Not a vibe. A logistic regression model sweeps goals 1–50 and picks the one with the highest expected value: P(I'll actually do it) × goal. The model trains fresh each morning on all my history.
I've been doing burpees semi-consistently for a while. The problem with a fixed daily goal is that some days you're fresh and some days you're wrecked — and a number that's too easy stops meaning anything while a number that's too hard just gets skipped.
I wanted a system that adapts. Not AI-slop adapts. Actually adapts — from my own data.
Hit Done or Skip for a few days and watch the goal adjust:
https://dcm31--22eabcfe1a4311f1953c42dde27851f2.web.val.run
The real model has 31 input features:
- Momentum: rolling 7/14-day success rates, streak direction
- Volume: burpees total and averages over recent windows
- Effort ratio: how close to goal I actually got (burpees / goal)
- Gap ratio: whether I beat or missed goal, and by how much
- Day of week: both one-hot encoded and as sin/cos for cyclicality
- Activity rate: what fraction of recent days I've been active at all
It fits a logistic regression on my history (requires ≥15 rows), normalizes features, and runs 500 gradient descent iterations with L2 regularization. The toy above uses just the recent weighted success rate as a proxy.
The goal is locked once per day — after that it doesn't change, even if I ping the API again.
The number shows up in four places:
- Atom Matrix — a 5×5 LED display on my desk shows the goal as a Cistercian numeral in red. When I'm done, it turns green. The bottom row shows a 5-dot streak history.
- Apple Watch complication — always visible on my watch face
- iOS lock screen — widget on my lock screen
- Telegram — morning message from the bot
My primary trigger is finishing an HIIT workout on Apple Watch. The workout completion auto-fires an Apple Shortcut called "Log Burpee Goal" which pings /api/done on the val.
Beeminder: every goal hit POSTs a +1 datapoint to my Beeminder burpees goal. If the cumulative line falls below the yellow brick road, I lose money. This is the actual forcing function.
Fatebook: every morning the system creates a prediction — "Will I do N burpees on [date]?" — with the model's probability as the forecast. The next morning it auto-resolves YES or NO from the database. Over time this tells me if the model is well-calibrated.
Everything runs on Val Town. SQLite for history and locks, blob storage for the yoga/burpee routine state, Deno for the runtime.
The whole thing is embarrassingly over-engineered for "did I do my workout today." That's kind of the point.