u/MrZoshii

I’m running a persistent public pixel canvas on a Raspberry Pi 3B, with live telemetry

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:

https://place.storix.dev

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.

u/MrZoshii — 7 days ago