All side builds

macOS

Hue Sync

A macOS app for Philips Hue. Rooms, zones, scenes and automations in one window, plus a mode that samples what is on the display and streams those colors to the lights in the room. Talks straight to the bridge on the local network, with no account and no cloud in the middle.

Role
Design — interaction model, UI system, prototype
Platform
macOS · SwiftUI
Prototype
HTML, drawn against the macOS design system
Connection
Hue Bridge over CLIP v2, local network only
Timeline
Designed Sep 2026, SwiftUI build underway
Hue Sync on macOS: a sidebar of rooms and zones beside a dashboard of room cards, each tinted its current color with a brightness sliderHue Sync on macOS: a sidebar of rooms and zones beside a dashboard of room cards, each tinted its current color with a brightness slider

Overview

One window for the lights in the house

Hue Sync is a Philips Hue app for the Mac. Rooms and zones down the left, everything you can do to them on the right, and a mode that turns the lights into an extension of whatever is on the screen.

Philips already ships a desktop app. It does one of those things, and the design work here started with a fairly specific frustration about which one.

Starting point

A sync utility, not an app

The official desktop app is Hue Sync, and it syncs. That is the entire scope. Rooms, scenes, schedules and everything else live in the phone app, so the machine with the large screen and the keyboard is the one device that cannot control the lights.


The official Philips Hue Sync desktop app: a narrow portrait window with one entertainment area, four mode buttons, and a green Start button
The official desktop app — one entertainment area, four modes, and no rooms
The official app's settings window: preference categories on the left, one bridge listed on the right
Its settings — bridges and preferences, still nothing about the lights themselves

It only does sync

No rooms, no zones, no scene picker, no automations. To turn one lamp down you put the desktop app away and pick up your phone, which is a strange thing for the desktop app to ask.

A panel pretending to be a window

It is a fixed narrow portrait shape that does not resize, on artwork that fights the controls sitting on it. There is a lot of empty space under the buttons and no way to use it for anything.

It does not look like macOS

Custom buttons, custom toggles, its own idea of a settings window, and a green primary action that is not the system accent. Set it beside any Apple app and it reads as a port.

The bridge itself is not the limitation. Philips publishes the API, the bridge sits on the local network, and everything the phone app does is reachable from a Mac. The desktop app just never went after it.

The model

Sync is one thing the app does, not the whole app

So the structure inverts. The sidebar is the house: rooms, then zones, then Screen Sync, then automations. Sync is an item in that list rather than the thing the list is attached to.

The dashboard is the first thing you see and it is meant to be readable from across the room. Each room card takes the color the room is currently set to, so the window is a map of the house rather than a list of names. Underneath the name is the count of lights and the scene that is running, and a brightness slider sits on the card itself, because turning a room down is the single most common thing anyone does here and it should not need a click first.


A room in Hue Sync: a grid of scene orbs with a Capture scene tile, above the individual lights with their own sliders
Inside a room — scenes on top, the individual lights underneath

Opening a room gives you its scenes as colored orbs, with the running one outlined, and the lights themselves underneath as individual rows. Dynamic scenes, the ones that cycle rather than hold, are labeled as dynamic rather than looking identical to the static ones. Capture scene is the last tile in the grid: set the room by hand, then save what you arrived at, which is how people actually end up with a scene they like.

Screen Sync

The feature the other app is built around

Screen Sync samples the display and streams representative colors to a Hue entertainment area, so the lights behind the monitor track what is on it. This is the one thing the official app does, and the design here is mostly about making it a normal part of a larger app rather than the reason the app exists.


The Screen Sync screen: the source display and a Stop button on the left, intensity, brightness, and color range sliders on the right
Screen Sync running — source on the left, the three things worth adjusting on the right

The screen answers two questions and stops. What it is watching, on the left, with the source display named and its connection state under it, which matters the moment there is more than one monitor. How it should behave, on the right, as three sliders: intensity, brightness, and how far the color is allowed to travel from what is actually on screen.

Everything else is a toggle in a list underneath. Start when input is active, dim on pause, audio dynamics. They are worth having and they are not worth a control each on the main surface.

Automations

Six routines, grouped by what triggers them

The other half of what the phone app can do and the desktop app cannot. Six types, and the design decision was how to group them.


Wake up with light

Daily routines

Go to sleep

Daily routines

Timer

Timers and schedules

Lighting schedule

Timers and schedules

Coming home

Location

Leaving home

Location

Grouping them by what sets them off rather than listing six in a row is the whole of it. Daily routines happen because of the hour, timers and schedules because you asked for a span, and the location pair because of where your phone is. Those are three different kinds of trust to give an app, and they read better separated than mixed.


The Automations screen: cards grouped under Daily routines, Timers and schedules, and Location, each with its schedule in plain words
Automations grouped by trigger, each card carrying its own schedule in plain words

Every card says what it will actually do, in the words you would use out loud. Seven in the morning, weekdays, bedroom. Turns everything off. An automation you cannot read at a glance is one you end up deleting rather than editing.

The prototype

Try it

It runs. Open a room and pick a scene, take a brightness slider somewhere, or go into Screen Sync and change the mode. The lights it is controlling are imaginary. Everything else on screen behaves.


Appearance
Interactive — Open a room, then pick a scene

This one is interactive. It needs more room than this screen gives it, so it opens on its own.

Open the prototype

Where it stands

Designed, written, waiting on hardware

The design is finished and the interface above is the prototype it was finished in. The SwiftUI app is written against that prototype and has not been compiled or pointed at a real bridge yet.

As with the other builds here, the screens on this page are an HTML prototype drawing macOS controls. They are accurate about layout, behavior and every state the app can be in, including the empty ones. They are not photographs of a running app.

Two things are genuinely unproven and it would be dishonest to present them otherwise. The normal control surface talks to the bridge over its documented HTTP API, which is well-trodden ground. Screen Sync does not: it streams over a separate, low-latency channel that has to negotiate an encrypted UDP handshake first, and whether that negotiation works the way the documentation implies is a question only a real bridge can answer. The automation types are the same shape of unknown, written against published schemas that firmware is free to disagree with.

Neither of those is an interface problem, which is the part I was actually here to solve. But an app that cannot connect is not an app, so that is what comes next.