Table of contents
In-Store Signage on a Raspberry Pi
Agustín Lucentini · May 10, 2025 · 2024 → 2025
The core challenge in finishing someone else’s project is deciding what “done” actually means. I got handed one of those projects: a Ruby singleton meant to drive the in-store screens.
The job was to push it to delivery. Refactor the monolith into modules, rebuild the screens on Raspberry Pis, and add a backoffice section where marketing could manage banners themselves.
The Problem
The original system was a single Ruby script, a singleton holding everything together. Half the features were missing, and the rest was fragile.
Nobody was using it yet. The project sat between an idea and a product: an unfinished prototype that needed to become something that could be handed off and shipped.
The Plan
The plan split the work into three pieces. Refactor the Ruby into modules instead of one singleton. Run the screens on Raspberry Pis with Raspberry Pi OS, i3 wm, and mpv. And add a section to the Rails (Spree) backoffice where marketing could manage banners themselves.
The Screens
Each store screen is a Raspberry Pi running i3 with mpv for display.
Say a screen boots for the first time. It shows a QR code. Scanning that QR pairs the screen with the backoffice. What does this mean, though? From that point on, the Pi knows where to pull its banners from, and it keeps pulling them on a schedule. Nobody needs to touch the screen in the store again.
The Backoffice
The last piece was giving marketing the controls. I added a section to the Rails backoffice, built on Spree, where they can upload banners, schedule them for specific dates, and choose which screen shows what.
The Result
The end result was a ready-to-ship system: screens that pair with the backoffice and sync themselves, and a section where marketing can schedule banners without touching code.
We started testing it in a real location, running a store screen that pulled real banners from the backoffice.