This page is a log for my personal project — a running record of my thought process and progress as I learn to build things with AI.
Philips Hue just really didn’t have a desktop widget — there was no quick way to change my smart lights from my computer. The Mac apps that existed were either poorly designed and didn’t work well, or they cost money. And that made it a perfect experiment: an excuse to try vibe-coding a custom solution for a very specific problem I understood end to end, for a product I use every single day.
I align with my agent on two principles before starting anything.
Glanceable, not configurable. The widget answers “what are my rooms doing” at a glance — settings live somewhere else entirely.
The 90% action first. Brightness and the daily toggle own the surface.
We started with a PRD to align on what the desired outcome and functionality were, then moved into the build.
The intuitive choice for brightness is a slider — drag it, the lights follow. Mac widgets don’t allow that: sliding interactions simply aren’t supported. Taps only, no drag to track.
I ended up solving it with a notched slider — five brightness levels, each tap snapping the knob to the next notch. To keep it feeling like a slider anyway, a white layer under the knob reveals as brightness climbs: the track itself brightens as you tap. The gesture I couldn’t have became a rhythm of taps that reads almost the same.
Clicking the widget itself would open the pairing app — exactly the experience the widget existed to avoid. An accidental tap launching a full app for a two-second light change defeats the whole point.
I ended up designing tap-to-open out entirely: every element on the widget became its own explicit, tappable control with a generous hit target — the slider, the moon and sun shortcuts, each scene slot. Bigger targets also meant a lower chance of misfires: a tap always does exactly what you meant, and never launches anything.
The widget shipped to my desktop and replaced the app entirely — lights get touched dozens of times a day now, in two seconds, without opening anything. It went from an idea to a working, deployed widget in about fourteen hours, then three weeks of night-and-weekend refinement.
And it did the thing I originally hoped for: it taught me to code, on a project I cared about enough to finish.