Florianópolis, Brazil · UTC−3 · Remote
I design instruments for work that a person has to look at for hours without getting it wrong.
From 2025 to 2026 my day job was classifying vehicles out of recorded traffic video to Brazil's federal standard, lane by lane, in fifteen-minute intervals. It is the kind of work that punishes a bad interface immediately: look away to read a label and you lose the vehicle. So I built the interface, and then I built a second system to check my own accuracy against it.
This is the real thing, rebuilt here at its true size — 360 × 400, sitting at 90% opacity over a video player so the road stays visible underneath. Every colour below is the colour it actually is in the tool, and every element answers an error I actually made in production, not a feature idea.
At accelerated playback it is easy to lose track of which movement you are counting. Putting it on the panel turns that from something you remember into something you glance at — and a glance costs far less than a recount.
When you rewind thirty seconds to check whether a vehicle was registered, the recount and the history have to line up immediately. Four vehicle families, four fixed hues: once the hue is learned the operator stops reading words. Reading costs a fixation; recognising a colour does not.
Identical vehicles arrive in runs, and re-deciding a class you just decided is wasted work. Showing the last entry removes the redundant reclassification.
Mode is the only thing that changes what a key means, so it is the only thing allowed to be yellow. Nothing decorative was permitted in the warning line, so when red appears the eye goes straight to it — an always-on status bar would have made errors invisible.
AutoHotkey v2 over Excel. Always-on-top, click-through, repositionable by hotkey. A second build replaces the keyboard with an Xbox controller, so the hands never leave a resting position across a full shift.
A counting tool that is fast and wrong is worse than a slow one. So the second system is a detector — Python, YOLO, ByteTrack, CUDA — that watches the same footage and disagrees with me on purpose. Every disagreement surfaces in a web review tool as a cropped frame and one decision for a human to make.
Behind it sits the part I am most attached to, because nobody asks for it and it is what makes any accuracy claim survive an audit: a reference set of 50,374 vehicles verified by hand across 456 lane-hours. It is what turns "about 95% accurate" into a number broken out by lane, by hour of day, and by vehicle class — which is where it stops being flattering. The error is not spread evenly. It concentrates in one class, and in the hours of low sun.
Twelve lane-hours at one counting point, each one measured against a hand count. Pool them and the detector's mean error is −2% — a number I could put in a brochure. Split them by how the road was configured and the −2% turns out to describe neither half.
The two jobs cover the same counting point and overlap in time. At 15:30 the single-carriageway job reads +16% and the dual-carriageway job reads −53% — same half hour, same road. Whatever is wrong is not the light. It is the geometry: a dual carriageway needs one counting line per carriageway, and a line that misses one of them loses a whole direction of traffic.
Splitting is still not enough. The dual-carriageway job's own median is +16% — three of its five lane-hours are fine, and the median never notices the other two. Only the individual lane-hours show them. That is why the reference set is stored per lane-hour and never rolled up: an average at any level above that is somewhere for a failure to hide.
| lane-hours | mean error | median | |
|---|---|---|---|
| Pooled | 12 | −2% | +13% |
| Single carriageway | 7 | +11% | +10% |
| Dual carriageway | 5 | −20% | +16% |
The textbook chart for comparing an automated method against a reference is a Bland–Altman plot. With twelve pairs it would be theatre — the convention is forty or more before limits of agreement carry any meaning. Twelve measurements get shown as twelve measurements.