I do something similar with LIFX bulbs. (https://github.com/adamjacobmuller/lifx/)
I specifically have them configured to follow a f.lux-like curve for brightness and color temperature.
The only major thing I want to add is some kind of local control/override for the brightness. The curves work great 99% of the time but sometimes you do want BRIGHT even at 11pm. The dash buttons are a cool idea, but I don't like the look of them in a wall. Haven't found a great solution for that yet.
If you the room is near a server you have in the house (like a Pi running Pihole), then Bluetooth buttons (like Puck.js) unlock a lot of potential for you too.
It does require any cloud besides ntp and just uses a local web interface. You can define relative events, like 15 minutes before bed is tv time, 5 minutes before is snack time, bed time is 8. If one night the kids are extra cranky and need sleep, simply adjust bed time and the others adjust too.
I've used em for years with my kids!
I'm sorry I didn't see your product sooner. More parents should know about your this - I'll make sure to spread the word whenever possible (:
https://github.com/mekane/Node-API-for-Raspberry-Pi-GPIO
I made some bash scripts that call the API to do certain things (like light up green when it's time to get up for school) and I set cron tasks to call these at certain times.
The Node service also serves a very simple web page that can be used to control the light color and brightness.
Working in collectivities with young children, we'd have a sheet of paper with a sun/moon on each side, and every morning at 7 one of us would go in every room and turn the piece of paper around to let them know they could get out of bed and come to the common areas if they were awake.
I'm going to work on it a little bit more.
What I love about the ESP8266 + NeoPixel style setup is that it gives you control over the form factor. For example: https://www.instructables.com/id/How-to-make-a-BAT-signal/
cout in C++ is not any smaller.
This is on top of the many hundreds to thousands of lines that need to be ran to actually make that text show up someplace.
Uhh what now? It's just one line `console.log("hello")`