Skip to content
·

3D Printer Fleet Monitoring: What We Built and Why — Old Girl

The technical stack behind real-time printer monitoring — Supabase realtime subscriptions, Vercel edge functions, and a cooperative network of 50+ printers across Atlantic Canada.

Blog · 2026-03-16

3D Printer Fleet Monitoring: What We Built and Why

Ken · 3D3D Atlantic Cooperative

Running a distributed network of 50+ 3D printers across Atlantic Canada requires knowing what each one is doing at any given moment. Not for micromanagement — for routing. When an order comes in for a PLA print in Fredericton, you need to know which maker in Fredericton has PLA loaded and isn't mid-print.

That's the fleet monitoring problem. Here's how we approached it.

The Stack

The monitoring backbone runs on Supabase — specifically its realtime subscriptions, which use PostgreSQL logical replication under the hood. Each printer status is a single row in a printer_status table. When the row updates, Supabase broadcasts the change to all connected clients within ~200ms.

On the client side, we subscribe to these changes with a simple React hook. No polling, no WebSocket management, no custom server infrastructure. Supabase handles the multiplexing.

The Data Model

The printer_status table is intentionally minimal:

  • status (idle | printing | paused | error | offline)
  • current_job (text | null)
  • progress (0–100)
  • eta_minutes (int | null)
  • material (text)
  • temperature_nozzle (float)
  • temperature_bed (float)
  • updated_at (timestamp)

That's it. The client infers everything else from these fields. Status badges, progress bars, ETA displays — all derived, not stored.

The Old Girl Specifically

The Old Girl is a proof-of-concept for this monitoring infrastructure — a single public printer where the monitoring UI is exposed to everyone, not just cooperative staff. When Stage Two launches, the status bar, print progress, and material temperature will all update in real time as the printer runs jobs.

The same infrastructure powers the private maker dashboard, where cooperative staff can see all 50+ printers and route orders accordingly. The difference is access level — the Old Girl page is public; the fleet dashboard is internal.

What We Learned

The hardest part wasn't the realtime infrastructure — Supabase handles that well. The hard part was designing for graceful degradation. When a printer goes offline (power cut, network drop, maker stepped away), the UI needs to clearly indicate "last seen X minutes ago" rather than showing stale data as if it were live. Every status field has a updated_at timestamp for exactly this reason.

We also learned to never trust client-side state for anything that writes to the queue. Server actions with null-checks on every required environment variable, closed by default. Preview mode as a first-class concept, not an afterthought.

The fleet monitoring stack will be open-sourced when Stage Two stabilizes. Follow the Old Girl project at oldgirl.3d3d.ca.