Mr. Grummel Get the app
← All notes
PRODUCT 5 MIN READ DRAFT — AUGUST 2026

The mascot that notices when you're skimming

He doesn't know what you're reading. He knows how fast the page moved under your thumb, and that turns out to say more than you'd think.

Every post on this blog has a small figure of Mr. Grummel sitting in the margin. Scroll steadily and he nods along. Stop scrolling for half a minute and he dozes off, snoring letters drifting up beside him. Scroll fast enough, for long enough, and he stops nodding and looks annoyed instead. None of that is decoration bolted on afterward — it's one scroll listener doing arithmetic on your scroll position and the clock, and mapping four plain outcomes onto a mood class.

The only two numbers it actually has

Every scroll event hands the listener two things: how far the page moved since the last event, and how much time passed. Divide one by the other and you get a speed, in pixels per second. That's the entire sensor. It doesn't know where your eyes are, whether you're on this paragraph or three ahead of it, or whether you're reading at all versus holding the page still while you think about something else — it only knows how fast the document scrolled under a fixed viewport, which is a proxy for attention and nothing more.

From that one number, three behaviours fall out. Scroll normally and he nods for a moment after each event, settling back to still after nine-tenths of a second of no further scrolling — enough to read as "following along" without twitching on every pixel. Stop scrolling entirely and, after thirty seconds of silence, he falls asleep; scroll again and he startles awake, mood flipping briefly to surprised before settling back to his usual stern. Push the speed past roughly 1500 pixels a second and hold it there for over half a second, and he reads that as skimming rather than reading — the nodding stops, he goes annoyed, and that verdict holds for two and a half seconds before it's willing to reconsider, so one twitchy scroll gesture can't flip him back and forth every frame.

He isn't tracking your eyes. He's tracking one derivative — distance over time — and treating a large enough value as a confession.

The one reward built on top of it

There's a second, simpler piece riding on the same element: an intersection observer watching the post's closing call-to-action, the one right under the last paragraph. The moment forty percent of that block scrolls into view, for the first time, he delivers a small approving beat — not for finishing the post, exactly, since the sensor can't confirm that, but for the page having scrolled far enough that the ending is now on screen. It's a proxy standing in for a proxy, and we think that's an honest way to describe it rather than a knock against it.

What we're still unsure about

Scroll speed is a genuinely weak signal for "skimming" versus "reading." Someone flicking a trackpad out of habit while thinking hard about the previous paragraph will get flagged exactly like someone actually skimming past it, and there's no way for a speed-only sensor to tell those two apart. We built this as a small, honest bit of character, not as an engagement metric anyone should trust — if this page ever starts making decisions based on what the reading buddy "thinks" a visitor did, that would be a much bigger claim than the sensor can actually support.

None of this is curriculum — it's a note about how this blog page is built, not something the app quizzes on. If distance-over-time and event listeners are the kind of thing you'd rather be quizzed on than read about, the app's Computer Science subject covers the plainer building blocks underneath them, starting with Programming.

Draft — not published yet.
Try the pop quiz