# Web Session Manager Plan ## Stack - http-kit (HTTP server + SSE) - reitit (routing) + Ring middleware - Hiccup for HTML templating - Datastar Clojure SDK (dev.data-star.clojure/sdk) for SSE-driven reactivity - No ClojureScript — server-rendered with Datastar enhancement ## Responsibilities - Web session manager: manages live browser connections - Serves Hiccup-rendered pages - Holds Datastar SSE connections, pushes HTML fragments on events - Subscribes to NATS for real-time events — no direct PG connection - Publishes ephemeral events (typing indicators) to NATS — no API round-trip - Fetches full data from API (internal HTTP calls), not directly from DB - Sits behind auth gateway (all requests pre-authenticated) ## TODO - [ ] http-kit server setup with Datastar SDK (http-kit adapter) - [ ] Design page layout / Hiccup components - [ ] Integrate Datastar (CDN or vendor the JS) - [ ] Chat view: channel list, message list, input - [ ] NATS subscription for chat events - [ ] NATS publish for typing indicators - [x] Internal API client for data fetches — `ajet.chat.shared.api-client` in shared/ - [ ] SSE endpoint: push Datastar fragments on events - [ ] Connection tracking (atom of connected SSE clients) - [ ] ~~Login page~~ — Auth GW owns the login page; Web SM never sees unauthenticated users