commit b54c89c9c47e74afd91329c431cfbfa54fcfc5d2 Author: Brian Kirkpatrick Date: Wed Mar 4 11:13:15 2026 -0800 first draft but not working yet diff --git a/README.md b/README.md new file mode 100644 index 0000000..f97c3b8 --- /dev/null +++ b/README.md @@ -0,0 +1,43 @@ +## Architecture + +* Lit-based web components + +* No-build tooling (importmap only) + +* Zustand-moderated state management with IndexedDB storage mechanism + +## Layout + +``` +src/ + store/ + index.js ← zustand store definition + middleware/ + persistence.js ← idb-keyval persist adapter + sync.js ← optional cross-tab broadcast + components/ + app-root.js + feature-a/ + feature-a.js ← Lit component + feature-a.css ← adopted stylesheet or constructable + controllers/ + fetch.js ← ReactiveController for API calls + 3d.js ← optional Three/WebGPU controller + lib/ + idb.js ← thin idb-keyval wrapper/schema +index.html +importmap.json ← extracted importmap (referenced via + + + + + + + \ No newline at end of file diff --git a/store/index.js b/store/index.js new file mode 100644 index 0000000..b9a71ea --- /dev/null +++ b/store/index.js @@ -0,0 +1,18 @@ +import { createStore } from 'zustand/vanilla' +import { persist } from 'zustand/middleware' +import { idbStorage } from './middleware/persistence.js' + +export const store = createStore( + persist( + (set, get) => ({ + user: null, + items: [], + setUser: (user) => set({ user }), + addItem: (item) => set(s => ({ items: [...s.items, item] })), + }), + { + name: 'app-store', + storage: idbStorage, // custom adapter (see below) + } + ) +) \ No newline at end of file diff --git a/store/middleware/persistance.js b/store/middleware/persistance.js new file mode 100644 index 0000000..ab68ec4 --- /dev/null +++ b/store/middleware/persistance.js @@ -0,0 +1,8 @@ +import { get, set, del } from 'idb-keyval' +import { createJSONStorage } from 'zustand/middleware' + +export const idbStorage = createJSONStorage(() => ({ + getItem: (name) => get(name), + setItem: (name, value) => set(name, value), + removeItem: (name) => del(name), +})) \ No newline at end of file