arrow_backAll work

Thuis

My own remote for the multi-room speakers and smart lights at home.

Context
Personal project
Year
2026
Role
Concept, design & development
Stack
Vanilla JSNode.jsServer-Sent EventsCapacitorAndroid

scienceTap a room tile to open the full controls, drag the group volume and watch both speakers follow, or apply a scene. Switch to Light, open the disco ball top right and start a rave. Everything in this demo is dummy data.

open_in_fullFull screen

Thuis (Dutch for "home") is the remote I use every day for the Bluesound speakers and IKEA smart lights in my flat. It runs as a web app on any device in the house and as a native Android app, and replaces the official apps for the things they do badly: grouping rooms, volume that doesn't fight back, and scenes.

The problem

The official speaker app made grouping rooms slow and volume sliders jumpy: drag one and it snapped back while the player caught up. The lights lived in yet another app. I wanted one fast remote for the whole flat: tap a scene and the right rooms play together at the right volumes, with the matching light.

The approach

The players only send CORS headers on two endpoints and a browser allows six connections per host, so a small Node server on the home network long-polls every player itself and pushes changes over a single SSE stream; commands go through a thin proxy. The UI keeps its own value while you hold a slider and only redraws what changed, so nothing jumps under your thumb. The Android build (Capacitor) talks to the speakers directly with native HTTP and to the light hub through a small native plugin with a pinned certificate, so it works without the PC.

Highlights

  • checkGroup volume moves every speaker relative to its own level, and you see the members follow live
  • checkSpeaker scenes remember who plays with whom and at what volume; one tap regroups the flat
  • checkLight scenes per room plus house scenes that set every room in one tap
  • checkDisco mode: the phone microphone finds the beat and the lamps follow it, slowdance or rave
  • checkTiles grow into their full view with View Transitions, like an app icon opening
  • checkAlso speaks Google Cast directly for a smart speaker that can't join the multi-room groups