• Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
dcm31

dcm31

mdsite

Public
Markdown as a site
Like
mdsite
Home
Code
4
blog
1
content.md
H
main.tsx
posts.ts
Connections
Environment variables
Branches
1
Pull requests
Remixes
History
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
blog
/
burpees-system.md
Code
/
blog
/
burpees-system.md
Search
3/8/2026
Viewing readonly version of main branch: v91
View latest version
burpees-system.md

Advertising to myself

Every morning at 7am, a machine on Val Town wakes up, trains a logistic regression on my history, and tells me how many burpees to do. The number appears on my watch, in my Telegram, on a glowing LED cube on my desk, and on a web dashboard I built. If I disagree with the number, I can argue back, and the number actually changes.

Apple Watch face showing today's burpee goal (22) as a complication, alongside a Fatebook prediction "YOGA? (80%)" at the top

Gee, this seems like a lot.

Actually—I don't think it's enough.


Think about the other side of the ledger. Entire product teams, backed by billions in venture capital, spend their careers figuring out exactly how to get me to tap one more thing. The notification timing. The color of the button. The streak I'd lose if I stop. The variable-ratio reinforcement schedule disguised as a feed. They are extremely good at this. They have PhDs and A/B testing infrastructure and literally more money than God.

And what do I have fighting for the things I actually care about? A vague sense of guilt? A notes app reminder I'll swipe away?

No. If I'm going to take myself seriously, the things that matter need at least as much investment in engagement as the things that don't. I need to run an ad campaign. The product is burpees. The audience is me.


Why burpees

I used to spread myself across a dozen habits—which meant I was always behind on something and nothing got enough attention to actually work. Now I have one keystone metric: VO₂ max, one of the strongest predictors of how long and how well you live. High-intensity interval training is the highest-leverage way to move it. Burpees are HIIT you can do in your living room with no equipment.

But there's a yin-yang problem. Burpees are explosive—pure yang. Do them cold and you get hurt. I need sun salutations first to warm up. But historically the yin blocks the yang: if I have to do 20 minutes of yoga before I even start, that's friction, and friction kills habits.

So I made the system eat its own prerequisite. Five sun salutations count toward the burpee goal. The warm-up is subsumed by the goal itself. Yin and yang, one number.


The model that earns its number

The goal isn't arbitrary and it isn't fixed. A logistic regression model trains fresh each morning on all my history—31 features including streak direction, rolling success rates, day-of-week cyclicality, effort ratios, how close I got on days I missed. It sweeps goals 1–50, computes P(success) × goal for each, and picks the peak expected value.

Burpees val UI showing goal 22 for Sat 2026-03-07, with 28.4% predicted success and EV 6.26

The model is sometimes annoyingly right about bad days. When it gives me a lower number than I expected, I've learned to pay attention.

Two things make this different from a fixed-number goal app. First, when I miss, the model already has an opinion about tomorrow. The goal drops. The increment adjusts. There's no guilt spiral and no broken streak—just a new number that accounts for what happened. The system is never surprised by failure.

Second—and this is the piece I'm most excited about—I can argue back.

https://dcm31--22eabcfe1a4311f1953c42dde27851f2.web.val.run

Negotiating with yourself

When the model proposes a goal, I submit my own prediction: "I think there's a 75% chance I hit this." That prediction gets stored as a feature. The model re-trains with it. And the goal can actually shift.

https://dcm31--9cc8f2ac1b2911f18fb042dde27851f2.web.val.run

If I'm more confident than the model—slept well, have time, feeling strong—the goal nudges up. If I'm doubtful, it pulls back. Each round creates a row in a predictions table: date, round, goal shown, model probability, my probability. Those columns become features for future training. The model literally learns from how I felt about its suggestions—and whether my feelings were accurate.

This makes the goal a negotiation. Not between me and an app I can always dismiss, but between me and a model that has seen every day I've ever tracked, including the days I lied to myself about being motivated.

Both predictions—mine and the model's—then get posted to Fatebook as real forecasting questions: "If my goal is 32, will I complete 32 burpees on 2026-03-08?" They resolve YES or NO the next morning, automatically, from the database.

Fatebook questions list showing daily "Will I complete N burpees?" predictions, some resolved YES (green) and some NO (red)

Over time this builds two calibration tracks. Am I actually accurate when I say 70%? Is the model? Do I get overconfident on Saturdays? Does the model underestimate good weeks?

Fatebook calibration chart showing your forecast accuracy plotted against perfect calibration

Not enough data yet to draw conclusions. But the infrastructure is accumulating data whether I think about it or not.


The surface area of a goal

Here's the part most people skip. You can have the smartest model in the world, but if the goal only exists when you open an app, it loses to Instagram. The system needs surface area—for both knowing what the goal is, and for logging that you did it.

So I went wide.

Ambient awareness. Every morning at 7am a Telegram message drops with the number. It sits in my inbox all day.

Telegram message at 7:00 AM: "Today's burpee goal: 22 💪"

The Apple Watch shows it as a complication—every time I check the time, I see the goal. An iOS lock screen widget shows it too. And on my desk, an M5Stack Atom Matrix—a $15 ESP32 with a 5×5 LED grid—displays the goal as a Cistercian numeral. The bottom row shows my last 5 days as colored dots: green for hit, red for miss.

Atom Matrix in red — goal not yet done

It doesn't vibrate. It doesn't ping. It just glows. A quiet little billboard from me, to me, about what matters today.

Atom Matrix in green — goal completed, streak dots on the bottom row

Zero-friction logging. Finish a workout on Apple Watch → completion triggers an Apple Shortcut → one tap → done. The data flows: Val Town endpoint → SQLite → Beeminder → Fatebook resolution. If I did fewer than the goal, I can log the actual count. The model learns from effort ratios, not just binary pass/fail.

Real stakes. Beeminder puts money on the line. Every goal hit posts a datapoint on a chart with a required slope—a "yellow brick road." Fall below and you pay.

Beeminder cumulative burpee goals chart — a yellow brick road you have to stay above

Four surfaces for seeing the goal. One tap for logging it. Money for failing. That's the campaign.


The asymmetry

Look, I know how this reads. A logistic regression model for jumping jacks. Cistercian numerals on a microcontroller. Prediction markets against yourself. It's a lot.

But I keep coming back to the asymmetry. The corporations competing for my attention have compounding advantages: more data, more engineers, more psychological research, more dollars. They have made capturing my behavior their literal business model.

The only asymmetric response is to be more intentional about my own feedback loops. To fight back by making the one thing that matters as salient and frictionless and engaging as the things that don't.

One metric. Every surface it can reach.


Built on Val Town. Logistic regression from scratch—no libraries. Predictions on Fatebook. Commitment device: Beeminder. Display: M5Stack Atom Matrix (ESP32). Health data: Apple Watch → Shortcuts → Val Town.

FeaturesVersion controlCode intelligenceCLIMCP
Use cases
TeamsAI agentsSlackGTM
DocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
AboutAlternativesPricingBlogNewsletterCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Open Source Pledge
Terms of usePrivacy policyAbuse contact
© 2026 Val Town, Inc.