>>107070969
vanilla JS has proxies now. easiest way to do reactivity is:
        function reactive(obj) {
            const listeners = new Set();
            const proxy = new Proxy(obj, {
                get(target, property, receiver) {
                    if (typeof target[property] === 'object' && target[property] !== null) {
                        return reactive(target[property]);
                    }
                    return Reflect.get(target, property, receiver);
                },
                set(target, property, value, receiver) {
                    const result = Reflect.set(target, property, value, receiver);
                    listeners.forEach(fn => fn());
                    return result;
                }
            });
            proxy.subscribe = function (fn) {
                listeners.add(fn);
            };
            proxy.unsubscribe = function (fn) {
                listeners.delete(fn);
            };
            return proxy;
        }