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

SurfaceValue
Appchat.loca.zone — public, no login, self-declared display names
Roomsappend-only JSONL per room on the host; history over HTTP, live fan-out over SSE
Assistantoptional OpenAI-compatible upstream; unconfigured on this host and reported as such by /api/status
Renderingstreaming-safe block splitter + marked + isomorphic-dompurify behind a SvelteKit CSP
Runtimeadapter-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.