A smart mirror that reads you a morning briefing, written by its own AI
A mirror on the wall that shows the time, your calendar and the weather, then at seven o'clock says good morning, tells you to take an umbrella, runs through your day and reminds you about the bins. The briefing is written by an AI model running on the Raspberry Pi behind the glass and spoken in a British voice, with nothing sent to the cloud. You'll have the whole thing running on your PC before you cut any wood.
- A real mirror: two-way acrylic over a monitor in a vented frame, starting at boot
- A kit: the briefing module, a ready config, a Pi setup script, a systemd service, a frame guide and parts list
- A Raspberry Pi 5 8GB (£168) to run the model on the mirror, or a Pi 5 4GB (£105.60) with a smaller model or Ollama on another PC
- A 21.5 to 24 inch HDMI monitor, see-through acrylic cut to size (around £30 to £60) and a deep frame
- A USB speaker or speakerphone for the voice
- Node.js and Python on your PC for the dry run. Never used Ollama? Start with Run AI on your PC
- Comfortable with SSH and editing text files: Terminal survival kit
Run the mirror on your PC first
See your own MagicMirror in a browser window before buying anything.
How a smart mirror worksA two-way mirror reflects the room but lets bright light through from behind. Put a monitor behind it showing white text on a pure black background: the black stays a mirror and the text floats in the glass. [MagicMirror²](https://magicmirror.builders) is the open-source app that draws that screen, with hundreds of community modules.
Install itMagicMirror 2.38 needs Node.js 22.22.2 or newer (24 is fine). On your PC:
Windows, Mac or Linuxgit clone --depth 1 --branch v2.38.0 https://github.com/MagicMirrorOrg/MagicMirror.git cd MagicMirror node --run install-mmThe kitDownload the kit or open kit.md. Copy the kit's config.js to
MagicMirror/config/config.jsand itsMMM-MorningBriefingfolder intoMagicMirror/modules/. Change the latitude and longitude in both weather blocks and the briefing block to yours. Then check it and start it in server mode, which serves the mirror to a browser:Terminalnode --run config:check node --run serverOutputYour configuration file doesn't contain syntax errors :) Your modules structure configuration doesn't contain errors :) ... Module helper loaded: MMM-MorningBriefing Starting server on port 8080 ... Server started ...Open http://localhost:8080. The clock, UK bank holidays, Open-Meteo weather (no API key) and the BBC science feed appear on black. The briefing area says it can't reach Ollama yet; that's the next step.
If it breaksconfig:check fails with an unexpected token + 1 more
config:check fails with an unexpected token
{ ... }, and the file ends with the module.exports line exactly as in the kit.The weather says Loading forever
lat and lon are numbers (no quotes) and that the PC can reach api.open-meteo.com. Open-Meteo needs no key for personal use.