Build a Smart Mirror with Raspberry Pi: Step-by-Step Guide

DIY Hardware
Date:July 15, 2026
Topic:
Build a Smart Mirror with Raspberry Pi: Step-by-Step Guide
3 min read

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

ComponentSpecApprox Cost
Raspberry PiPi 4 Model B (4GB+)$55
Monitor24" 1080p, HDMI, thin bezel$90
Two-way mirror12x24" acrylic or glass$35
Frame wood1x2 pine, paint, brackets$20
MicroSD32GB Class 10$8
PowerOfficial Pi USB-C supply$12
💡
TipAcrylic two-way mirror is lighter and safer than glass. Order cut-to-size from a plastics supplier — saves hours of cutting.

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:

bash
bash -c "$(curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installers/raspberry.sh)"

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:

javascript
modules: [
  { module: 'clock', position: 'top_left' },
  { module: 'calendar', position: 'top_left',
    config: { calendars: [{ symbol: 'calendar', url: 'YOUR_ICAL_URL' }] }},
  { module: 'weather', position: 'top_right',
    config: { weatherProvider: 'openweathermap', apiKey: 'YOUR_KEY', location: 'City,US' }},
  { module: 'newsfeed', position: 'bottom_bar',
    config: { feeds: [{ title: 'BBC', url: 'http://feeds.bbci.co.uk/news/rss.xml' }] }}
]
ℹ️
NoteGet a free OpenWeatherMap API key. One call per 10 minutes keeps you well under the free tier limit.

Rotate the Display

Most mirrors mount vertically. Edit /boot/firmware/config.txt (or /boot/config.txt on older OS):

bash
display_rotate=1
# Add to end of file, then reboot

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

ModulePurposeInstall Command
MMM-NowPlayingOnSpotifyCurrent track + controlsnpm install @spotify/web-api-node
MMM-TrafficCommute time with mapnpm install @googlemaps/google-maps-services-js
MMM-HuePhilips Hue light controlnpm install node-hue-api
MMM-GooglePhotosPhoto slideshowSee repo for OAuth setup
⚠️
WarningEach module adds RAM usage. Pi 4 4GB handles 8-10 modules comfortably. Monitor with <code>htop</code>.

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.

Share𝕏 Twitterin LinkedInin Whatsapp