superseded by the full set from 09-23, #17–#37
description:
Review set for lichen.page.review, 0b92cb61 (reviewed) → eb5a1653 (stack). PR 14 of 16. 56 files, +3085/−847. One commit, 3de197b45a13, which sets these files to their content at eb5a1653. Targets #13 (oct/13-site-core). #15 stacks on this one. Tests and generated files are not in any PR; they are in main.
The frontends' source: the new React dashboard, a shared UI package, the built-in editor's changes, and lichen-ts.
frontends/dashboard/, the React dashboard (DASHBOARD-REACT). It replaces the Tera pages one for one: the sites list (create, delete behind a typed confirmation, live updates from the dashboard's event stream, the background auto-pull), the user's settings (atproto, deploy key, limits, compact all, the API token shown once), each site's settings page with every admin act (publishing target and DNS, standard.site, deploy key, git remote and sync, compact/force pull/force push/revert, sharing, collaborators and peers), and the sign-in pages, drawn on the server and hydrated in the browser. It reaches lichen only throughlichen-ts/dashboard, and imports nothing from the built-in or hugo-cms.frontends/ui/, the shared look (unit 2):ui.css, the typed confirmation, settings boxes and forms, the header, themes;modal.tsandssrshims.tsmoved here from the built-in. Each frontend's build copiesui.cssbeside its own CSS.- The built-in editor loses its settings page's admin acts (−541 in
settings.tsx): where a dashboard keeps the site, the editor links to it (info.site.settings_url,info.dashboard_url), and the history rewrites and share password are done there (ADMIN-EDIT-HOST-SPLIT H1b, DASHBOARD-REACT U3g). - lichen-ts (FRONTENDS-THROUGH-LICHEN-TS): one
Transportfor every request, live document and socket, with defaults that send exactly what lichen-ts sent before; a newlichen-ts/dashboardmodule for the dashboard's/apiroutes;info.dashboard_url; a newunauthenticatederror code. The built-in's last directfetchandWebSocketcalls (the paint and layout-editor captures among them) now go through it.
info:
Plans: DASHBOARD-REACT-2026-10-07.md (units 2–4, U3g), notes DASHBOARD-REACT-U3-DESIGN-2026-10-17.md and -U4-DESIGN-2026-10-17.md; FRONTENDS-THROUGH-LICHEN-TS-2026-10-07.md (L1–L4; note FRONTENDS-THROUGH-LICHEN-TS-L1-DESIGN-2026-10-16.md); ADMIN-EDIT-HOST-SPLIT-2026-10-13.md (H1b).
Files
The dashboard (frontends/dashboard/):
src/main.tsx,src/route.ts,src/brand.ts— the app, its three pages, the desktop's branding.src/sites.tsx,src/account.tsx,src/site-sections.tsx(739 lines) — the three pages.site-sections.tsxis the biggest review.src/sign-in.tsx,src/no-script-sites.tsx,src/server.tsx— what the server draws in its render child.index.html,app.css,tsconfig.json,scripts/build.sh(with--check),README.md.
Shared (frontends/ui/): ui.css, src/confirm.tsx, forms.tsx, header.tsx, theme.ts, modal.ts and ssrshims.ts (moved), tsconfig.json, README.md.
The built-in (frontends/builtin/):
app/src/settings.tsx(+32/−541),panels.tsx,origin.ts(new: is a URL on another origin) — the admin acts go to the dashboard.app/src/app.tsx,editor.ts,files.ts,server.tsx;plugins/*/src/capture.ts,Stage.tsx,PaintView.tsx— through lichen-ts.app/index.html,app/scripts/build.sh— link and copyui.css;app/app.css(−48) andapp/git.css(−76) lose the styles that moved to it.DESIGN-10.md,README.md;frontends/no-javascript/README.md.
lichen-ts:
src/transport.ts(new),src/http.ts,src/site.ts,src/text.ts,src/map.ts,src/events.ts,src/media/index.ts,src/errors.ts,src/index.ts— the transport and its uses.src/dashboard/index.ts(new),src/dashboard/README.md,package.json—lichen-ts/dashboard.scripts/throwaway-lichen.mjs,lichen-pin— the test helper (a single site's settings are now in its state beside the site) and the lichen commit lichen-ts's tests run against.README.md— "a frontend reaches lichen only through lichen-ts".
Moved in: the frontends' own READMEs (frontends/*/README.md, lichen-ts/README.md, lichen-ts/src/dashboard/README.md). The operator's proposal put READMEs in Docs; a component's README is read with its code, so they are here, and #16 keeps the top-level documents.
Lives elsewhere
- Built bundles are not here.
frontends/*/app.js,ssr/*.js, the plugin bundles, hugo-cms'sapp.js, the copiedui.cssfiles andlichen-ts/dist/are esbuild output, checked by eachbuild.sh --check; they are inmain. - The server side of the dashboard (pages, render child, custom dashboards): #12. The API it calls and its contract: #11.
- Frontend and lichen-ts tests (
frontends/*/tests/,lichen-ts/tests/,feature_inventory.json) are inmain.