Files
ajet-chat/web-sm/plan.md
2026-02-17 00:23:25 -05:00

1.3 KiB

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
  • 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