Remember this old thing? As a final group project, we rebuilt my botched attempt at a smart mirror, with actual test-driven development this time round.

The idea is that the mirror is a self-contained product, capable of running a server on itself and displaying an interface with widgets. A user would connect the mirror to their wifi network and configure the widgets externally from a phone or computer on the same network, similar to the configuration of a router.

Left mirror interface — Right personalisation dashboard

The personalisation dashboard has a grid that represents the available positions of a widget on the interface. In the example below, the clock widget would appear in the top left corner of the mirror interface. The widget blocks can be toggled on/off and moved around by dragging and dropping into position on the grid.

One of the challenges was to somehow get the mirror interface to update itself when a user changed the dashboard settings, as there aren’t any touch-screen capabilities (but think of the smudges if there were, shudder). As the settings were saved to disk in a json file, I used BrowserSync to listen to changes on that particular file, then force a refresh of the mirror interface without user intervention. Voilá, a self-updating smart mirror.

We also experimented with using a LeapMotion sensor to put the mirror to sleep and wake it up with a swipe gesture, as well as some more advanced widgets like radio alarms that could be snoozed with a different gesture.

Watch the video of the project in progress. Just a warning, there’s a cringeworthy amount of my face in it. I did not make the video