DIY Meeting Room Display
It started, as most good projects do, with a problem that felt almost too simple to be interesting.
We needed a way to show the status of our meeting rooms at a glance — whether a room was free, occupied, or booked for the next hour. Something you could see from the hallway without pulling out your phone or checking a calendar. Nothing fancy. Just a screen on the wall that tells the truth.
There are commercial solutions for this. Expensive ones. We went a different route.
The Stack
After some research, I landed on a setup that felt right:
- Raspberry Pi as the brain — cheap, silent, always on
- 11-inch touch screen for the display
- Microsoft Graph API to pull real-time calendar data directly from our company’s Microsoft 365 environment
- A custom web interface running locally on the Pi, auto-launched on boot
The Graph API part was where most of the interesting work happened. Getting OAuth working in a headless, always-on context requires a bit of care — you need to use the right auth flow so the token refreshes automatically without any user interaction. Once that was sorted, pulling room availability data in real time became surprisingly clean.
The interface itself is minimal by design. Big text, clear colors. Green means free. Red means occupied. You read it in half a second from across the corridor. That’s the whole point.
The Part I Didn’t Build
Here’s where the project went from good to great.
My dad built the wall mount.
I gave him the dimensions and the general idea — something that could hold the screen flush against the wall, hide the cables, and look intentional rather than improvised. What came back was a proper piece of craftsmanship. Clean lines, solid construction, perfect fit. The kind of thing that makes people stop and ask “where did you get that?” instead of “did you stick a screen to the wall?”
It completed the whole thing. A custom software stack on custom hardware in a custom enclosure — nothing off the shelf, nothing compromised.
The Result
It works. Every day, reliably, without anyone thinking about it. Which is exactly what good infrastructure is supposed to do.
There’s something satisfying about solving a problem end to end — from the API call all the way to the screw in the wall. This one came together better than I expected, and honestly, it’s one of the things I’m most proud of from the past few months.
Sometimes the best solutions are the ones you build yourself.