Ground-up rewrite of the Freeshard web-terminal as a no-build, no-framework SPA: vanilla HTML/CSS/JS, native ES modules + import maps, light-DOM custom elements with scoped styles, WebSockets for live data, and the "Daylight Instrument" design system. The files in this repo are the files the browser runs — there is no bundler and no transpile step.
The product is still the web-terminal; Sundial is the codename of this codebase (an instrument that reads true state by daylight).
just serve # dev server on :8021 — mock shard_core API + websocket
just serve-anon # same, but unpaired (welcome/pair flows)
just serve-proxy https://<shard-domain> # real shard as backendThe dev server also serves the app at http://localhost:8021/sundial/ to
exercise subpath mode. Any static file server works for the app itself; only
/core (REST + WS) must reach a shard.
index.html— single entry; injects the base path, import map, theme.js/—store.js(tiny pub/sub store),router.js(History API),keynav.js(arrows + Alt shortcuts),metrics.js(resource-monitor poller),views/(one custom element per route),components/.js/api/client.js— generated fromjs/api/openapi.jsonbytools/gen_client.py; do not edit by hand.css/—tokens.css(design tokens, verbatim from the design system), component and view styles.vendor/— no-build ESM dependencies (marked, lean-qr), committed.tools/— dev server, client generator, CDP driver (drive.py).deploy/— alongside-install on a shard (/sundial/subpath), seedeploy/README.md.docs/— app-store metadata extension proposal.agents.md— conventions, parity inventory, API surface (read first).
~/knowledge_base/freeshard/ui-style/ is canonical (design-guide.md,
DECISIONS.md, tokens). Rules that shape everything here: flat surfaces, no
shadows, hairline borders, amber marks exactly one forward action per view,
dark mode glows only on live data, and every rendered number must be honest.