sunstead-web#
SvelteKit 5 UI for the Tangled trust scorer. Thin client over the FastAPI JSON
endpoints (trust-api, :8003) — it never touches DuckDB. Surfaces:
/— Triage queue: every open PR, searchable/sortable/filterable, each row expands to the full provenance (trust path, top factors, TreeSHAP model factors, Claude flags, content/slop risk, compliance block)./dashboard— fast-lane & false-approval rates, score histogram, decision donut, and a force-directed vouch graph (/graph)./leaderboard— contributors ranked by calibrated trust./backfill— live scrape progress (polls/backfill/status).
Run#
bun install
bun run dev # http://localhost:5173 ; assumes the scorer on :8003
API_BASE=http://host:port bun run dev # point at a different scorer
mprocs brings up the whole stack (scorer + this UI) from the repo root.
bun run build → node build for the adapter-node production server (set
API_BASE in its env).
Stack#
Svelte 5 runes · bits-ui · Lightning CSS (6-layer cascade in app.css) ·
unplugin-icons/lucide · svelte-sonner · zod (validates every API response) ·
better-result · adapter-node.
/api/* is a same-origin proxy (routes/api/[...path]) to the scorer, so there's
no CORS and dev/prod fetch the same way.
Skipped from the house stack — not needed by a read-only dashboard, add when warranted:
superforms/formsnap & sveltednd (no forms or DnD), paraglide (single locale),
tanstack/table-core ($derived sort/filter/paginate covers thousands of rows;
add table-core for column virtualization or faceting), layerchart (the published
1.x is Tailwind-coupled and renders axes invisible on dark — the two charts are
hand-rolled SVG; revisit if charts need axes/tooltips/zoom).