Svelte Chat is a small SvelteKit 2 / Svelte 5 room chat served at chat.loca.zone. This wiki separates what is deployed from what the 2026-09-04 research proved and from what was evaluated but not wired.
At a glance
| Surface | Value |
|---|---|
| App | chat.loca.zone — public, no login, self-declared display names |
| Rooms | append-only JSONL per room on the host; history over HTTP, live fan-out over SSE |
| Assistant | optional OpenAI-compatible upstream; unconfigured on this host and reported as such by /api/status |
| Rendering | streaming-safe block splitter + marked + isomorphic-dompurify behind a SvelteKit CSP |
| Runtime | adapter-node behind nginx, hardened systemd unit, loopback port from the loca.zone 51000–53000 convention |
| Research | [[research |
Guide
- Setup — clone, build, run locally, and the environment that enables the assistant.
- Architecture — routes, storage boundary, render pipeline, and the wired-versus-not table.
- Operations — service, ports, atomic build swap, rollback, status checks, and this wiki’s build.
- Research — the decision record distilled from the read-only research corpus.
Request path
flowchart LR B["browser · Svelte 5 page"] -->|"POST message"| K["SvelteKit adapter-node · chat.service"] B -->|"GET history"| K K -->|"SSE events"| B K --> J["room JSONL · DATA_DIR"] K -.->|"only when configured"| M["OpenAI-compatible model upstream"] N["nginx · TLS"] --> K
The dotted upstream is the only external dependency, and it is absent on the deployed instance. Nothing in the app fakes a model reply; see Backend boundary.