I've written something close to this called Solarite... that uses web components. There's no build step and no signals, but unlike your example, each instance is bundled together in a class, and you need to manually call render() when it's time to redraw. But I actually prefer having that control.