I spent three weekends and $180 building a mirror that tells me the weather while I brush my teeth. Was it worth it? Absolutely. Here's the guide I wish existed when I started — no fluff, no abandoned GitHub repos, just a working smart mirror by Sunday night.
What You'll Need
| Component | Spec | Approx Cost |
|---|---|---|
| Raspberry Pi | Pi 4 Model B (4GB+) | $55 |
| Monitor | 24" 1080p, HDMI, thin bezel | $90 |
| Two-way mirror | 12x24" acrylic or glass | $35 |
| Frame wood | 1x2 pine, paint, brackets | $20 |
| MicroSD | 32GB Class 10 | $8 |
| Power | Official Pi USB-C supply | $12 |
Install MagicMirror² in 10 Minutes
Skip the manual Node.js dance. Use the official installer. Boot your Pi with Raspberry Pi OS Lite (64-bit), enable SSH, then run:
Answer 'Y' to auto-start on boot. The script handles Node.js, Electron, and PM2 process management. Grab coffee — it takes 8-12 minutes on a Pi 4.
Configure Your Dashboard
Edit ~/MagicMirror/config/config.js. Start with these essentials:
Rotate the Display
Most mirrors mount vertically. Edit /boot/firmware/config.txt (or /boot/config.txt on older OS):
If using Wayland (default on Pi OS Bookworm), also set WAYLAND_DISPLAY=wayland-0 in your PM2 startup script.
Build the Frame
Cut a rabbet (groove) in 1x2 pine to hold the mirror and monitor. Depth = mirror thickness + monitor bezel. Paint matte black inside to kill reflections. Mount the Pi with Velcro for easy access. Run power cable through a drilled hole in the bottom rail.
"The frame hides the tech. The mirror reveals it. That tension is the whole aesthetic.
— Me, after sanding pine for two hours
Modules Worth Adding
| Module | Purpose | Install Command |
|---|---|---|
| MMM-NowPlayingOnSpotify | Current track + controls | npm install @spotify/web-api-node |
| MMM-Traffic | Commute time with map | npm install @googlemaps/google-maps-services-js |
| MMM-Hue | Philips Hue light control | npm install node-hue-api |
| MMM-GooglePhotos | Photo slideshow | See repo for OAuth setup |
Troubleshooting Quick Hits
Black screen on boot: PM2 didn't start. Run pm2 status and pm2 logs. Fix: pm2 startup then pm2 save.
Weather not loading: Check API key in config.js and verify curl "api.openweathermap.org/data/2.5/weather?q=London&appid=KEY" returns JSON.
Mirror flickers: Undervoltage. Use the official Pi power supply. No phone chargers.
✦
Your Mirror, Your Data
This isn't a product you buy — it's a system you own. No cloud dependency, no subscription, no data harvesting. Want your mirror to show Home Assistant sensor data? Write a 20-line module. Want it to trigger a relay when you say "mirror, lights"? Add MMM-Hotword and MMM-AssistantMk2. The Pi sits on your network, under your control.
Next step: pick one module from the table above and install it tonight. Commit the config to git. In a month, you'll have a dashboard that knows your life better than any app store widget.










