Management UI (eskitui — Datastar-powered admin dashboard) #117

Open
opened 2026-02-23 09:30:56 +00:00 by ash · 0 comments
Owner

Summary

Standalone web UI for inspecting and managing eskit event stores. Think EventStoreDB Admin UI, but for eskit — built with our stack (Templ + Datastar + Open Props).

EventStoreDB's Admin UI is one of their killer features. We bring the same (and better) to the Go ecosystem.

Features

Stream Explorer

  • Browse all streams with event counts, last modified
  • Search/filter streams by name pattern
  • Click into any stream to see its events
  • Paginated event list

Event Inspector

  • Click any event → see decoded payload (auto-detects codec: JSON/CBOR/Protobuf)
  • Full metadata display (correlation ID, causation ID, timestamp, position)
  • Raw vs decoded toggle

Correlation Tracer

  • Enter a correlation ID → see the FULL command→event chain across all streams
  • Timeline visualization of the entire flow
  • Links between causing command and resulting events
  • This is the killer feature nobody else has

Command Log (requires #114)

  • Browse persisted commands
  • Filter by status (accepted/rejected/failed)
  • See command → events mapping
  • Error details for failed commands

Projection Dashboard

  • All projections with their checkpoint positions
  • Lag indicator (how far behind global position)
  • Rebuild button (trigger rebuild from UI)
  • Live position updates via SSE

Store Stats

  • Event count, stream count, storage size
  • Throughput metrics
  • Connection info

Live Tail

  • Real-time event stream via SSE (Datastar is PERFECT for this)
  • Filter by stream, event type, or correlation ID
  • Pause/resume

Architecture

  • Standalone single binary: eskitui --store sqlite://app.db --addr :8090
  • Embeds all assets (Go embed)
  • Connects to any eskit store via DSN
  • Separate repo: ash/eskitui (own dependencies: Templ, Datastar, Open Props)
  • Separate go module to avoid pulling UI deps into eskit core

Stack

  • Go + Templ + Datastar + Open Props (dogfooding our own stack)
  • SSE for real-time updates (flush_interval -1)
  • No custom JS — pure Datastar

Testing Requirements

  • HTTP handler tests for every endpoint (streams, events, projections, commands, stats)
  • SSE live tail tests (connection, filtering, reconnection)
  • Codec auto-detection tests across all formats
  • Correlation tracer end-to-end test (command → events chain rendering)
  • Templ component render tests (golden file snapshots)
  • Browser integration tests via Pinchtab (stream explorer, event inspector, correlation tracer)
  • Error handling: unreachable store, malformed events, unknown codec
  • Concurrent SSE client tests (100+ simultaneous connections)

Benchmark Requirements

  • Benchmark stream list page with 1K, 10K, 100K streams
  • Benchmark event page rendering with large payloads
  • Benchmark SSE throughput (events/sec to connected clients)
  • Benchmark concurrent client handling (100, 500, 1000 connections)
  • Memory profiling under sustained SSE load
  • Templ render benchmarks vs html/template baseline

Dependencies

  • #114 (command persistence) for command log views
  • #115 (CLI) for shared store connection logic
## Summary Standalone web UI for inspecting and managing eskit event stores. Think EventStoreDB Admin UI, but for eskit — built with our stack (Templ + Datastar + Open Props). EventStoreDB's Admin UI is one of their killer features. We bring the same (and better) to the Go ecosystem. ## Features ### Stream Explorer - Browse all streams with event counts, last modified - Search/filter streams by name pattern - Click into any stream to see its events - Paginated event list ### Event Inspector - Click any event → see decoded payload (auto-detects codec: JSON/CBOR/Protobuf) - Full metadata display (correlation ID, causation ID, timestamp, position) - Raw vs decoded toggle ### Correlation Tracer ⭐ - Enter a correlation ID → see the FULL command→event chain across all streams - Timeline visualization of the entire flow - Links between causing command and resulting events - This is the killer feature nobody else has ### Command Log (requires #114) - Browse persisted commands - Filter by status (accepted/rejected/failed) - See command → events mapping - Error details for failed commands ### Projection Dashboard - All projections with their checkpoint positions - Lag indicator (how far behind global position) - Rebuild button (trigger rebuild from UI) - Live position updates via SSE ### Store Stats - Event count, stream count, storage size - Throughput metrics - Connection info ### Live Tail - Real-time event stream via SSE (Datastar is PERFECT for this) - Filter by stream, event type, or correlation ID - Pause/resume ## Architecture - Standalone single binary: `eskitui --store sqlite://app.db --addr :8090` - Embeds all assets (Go embed) - Connects to any eskit store via DSN - Separate repo: `ash/eskitui` (own dependencies: Templ, Datastar, Open Props) - Separate go module to avoid pulling UI deps into eskit core ## Stack - Go + Templ + Datastar + Open Props (dogfooding our own stack) - SSE for real-time updates (flush_interval -1) - No custom JS — pure Datastar ## Testing Requirements - HTTP handler tests for every endpoint (streams, events, projections, commands, stats) - SSE live tail tests (connection, filtering, reconnection) - Codec auto-detection tests across all formats - Correlation tracer end-to-end test (command → events chain rendering) - Templ component render tests (golden file snapshots) - Browser integration tests via Pinchtab (stream explorer, event inspector, correlation tracer) - Error handling: unreachable store, malformed events, unknown codec - Concurrent SSE client tests (100+ simultaneous connections) ## Benchmark Requirements - Benchmark stream list page with 1K, 10K, 100K streams - Benchmark event page rendering with large payloads - Benchmark SSE throughput (events/sec to connected clients) - Benchmark concurrent client handling (100, 500, 1000 connections) - Memory profiling under sustained SSE load - Templ render benchmarks vs html/template baseline ## Dependencies - #114 (command persistence) for command log views - #115 (CLI) for shared store connection logic
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ash/eskit#117
No description provided.