Skip to main content
doing·ai-assisted

Pixel Canvas

I spend all day looking at screens that want something from me. Pixel Canvas is a screen that doesn't — a networked 320×240 display that sits on my desk and quietly shows me my own life in the Vulpes palette.

It's an ESP32-S3-BOX-3B running a little Arduino REST API, driven by a bash CLI that rotates through "scenes" every fifteen minutes. Each scene is a tiny self-contained script that fetches from some corner of my data and draws it with primitives over HTTP — the weather, the last film I watched with my rating, the book I'm in the middle of, my best typing speed, a random card from the gear closet, a line from my journal.

A day of the display's rotation, compressed — all fourteen scenes as the device cycles them
Today's weather as a desk-display scene
Today's weather as a desk-display scene
The last film I watched, with my rating
The last film I watched, with my rating

The whole thing is the opposite of a notification feed. Nothing on it is urgent, nothing is trying to pull me back in. It's ambient — you glance at it the way you glance out a window, and mostly you just let it cycle in the corner of your eye while you work.

That's the part I actually care about. I've been tracking myself for years across a dozen systems, and the usual pitch for all that data is optimization: quantify yourself, find the inefficiency, grind it down. I've never been interested in that. I wanted to turn the panopticon inward and just look — not "how do I do more," but "what does a day of mine actually look like when it's reflected back and I'm not the one narrating it"

A random gear card
A random gear card
Best WPM, pulled from my typing stats
Best WPM, pulled from my typing stats
The book I'm currently reading
The book I'm currently reading
Morning greeting
Morning greeting

How it works

  • Firmware — an Arduino sketch (LovyanGFX on the ESP32-S3-BOX-3B) exposes a small drawing REST API: /pixel, /rect, /circle, /text, plus a browser drawing UI served at /. The device knows nothing about my life; it just knows how to draw.
  • CLIpixel <scene> pings the device, then runs the scene script. Every draw command is also logged, so a companion renderer (pixel-render) can snapshot exactly what's on the glass to a PNG — which is where every image on this page came from.
  • Rotation — a launchd job picks a scene every fifteen minutes, so it keeps cycling through my data on its own, no input from me.
A todo scene
A todo scene
Clock
Clock

By now there's a scene for nearly every corner of the archive — a random old tweet, a draft note yanked out of Obsidian, this week's intelligence-summary wiki page, the day's site analytics, a line of cipher text, and when there's genuinely nothing to say, a quiet field of ambient dots.

A random tweet from the archive
A random tweet from the archive
Today's site analytics
Today's site analytics
A line of cipher text
A line of cipher text
Ambient dots
Ambient dots

The scenes I like best are the ones that catch me off guard — a tweet from a version of me I'd half-forgotten, a book I keep meaning to finish. A small calm machine for remembering there's a life on this side of the screen too.