
I’m running a persistent public pixel canvas on a Raspberry Pi 3B, with live telemetry
I had a Raspberry Pi 3 Model B sitting around and wanted to see how viable it still is for running an actual public interactive service.
PI//PLACE
The result is PI//PLACE:
It is a persistent collaborative pixel canvas where everyone sees and modifies the same board similar in concept to r/place.
The basic idea
- No accounts
- No seasons
- No intentional resets
- One persistent shared canvas
- Placement cooldown
- Live Raspberry Pi telemetry
Hardware
- Raspberry Pi 3 Model B
- 4× Cortex-A53 @ 1.2 GHz
- ~1 GB RAM
- 100 Mbit Ethernet
The canvas backend itself runs on the Pi using Node.js, Express and WebSockets.
The public TLS/reverse proxy is hosted separately, so the Pi is not directly exposed to the internet.
Live telemetry
I also built a small telemetry service that records a sample every 30 seconds into SQLite.
The website shows live:
- CPU usage
- RAM usage
- Temperature
- System load
- Uptime
- Connected users
- Total pixel placements
There is also a "Pi Suffering Archive" where the historical telemetry can be viewed and zoomed over time.
One thing I specifically wanted was proper failure handling: if the Pi stops responding, the homepage telemetry turns red and displays:
>THE PI HAS FALLEN
Instead of continuing to show stale data.
Things I ran into while building it
- WebSocket proxying through nginx/HAProxy
- Keeping the canvas state persistent
- Preventing telemetry polling from unnecessarily hammering the Pi
- Storing long-term telemetry without throwing away the raw data
- Placement cooldown handling
- Keeping the frontend usable on very limited hardware
- Cleaning up vulnerable Node.js dependencies before exposing it publicly
The underlying canvas software is based on the open-source PixiBunny project, which I modified and integrated with the rest of the setup.
At the moment, the Pi is handling it surprisingly well.
Now I mostly want to find out what happens when actual internet traffic starts hitting a Pi 3B with less than 1 GB of usable RAM :D
Feedback on the architecture, telemetry, or additional things worth measuring on the Pi is welcome.
AI disclosure
I used AI assistance during development.