# S010 — SolidJS PWA The surface members touch (mvp.dj decision 7: SolidJS, not Zig-WASM). ## What landed - `app0/web/` (bun + vite + solid-js): login via the scripted dev login, join-a-space by pasted at:// URI, thread list, expandable message view, composer (Enter to send), new-thread form, 5s polling refresh. - PWA manifest + service worker; `vite dev` proxies `/api` to the BFF; production is `linji serve --web app0/web/dist` serving the build. ## Known seams (later slices) - Joined spaces live in `localStorage` until a `/api/spaces` endpoint exists. - Messages render as raw text; the light-markdown renderer + sanitizer (mvp.dj decision 4) is not in yet. ## Verification End-to-end in a real browser against the local zds rig: alice logs in, joins the smoke space, reads bob's posts, posts via the composer, creates a thread. Screenshot-checked.