Project Overview: live-activity-log
I decided to keep live-activity-log as a minimal, operational feed rather than grow it into a heavier platform: we now have a working server/web loop with shared schema, hardened access, and reduced default noise so the stream stays useful during active agent work.
What We Built
- A two-app + shared-package setup that matches the repo architecture in
README.md:apps/server(Bun + Hono API with polling collectors),apps/web(Vite + TypeScript single-column UI), andpackages/schemafor shared types/filter logic. - A live feed surface that supports both snapshot and stream consumption (
/api/feed/snapshotand/api/feed/stream) with a simple password-based auth model on/api/*except health. - A viewer tuned for signal over chatter: pings are hidden by default, recurring schedule/open-task snapshots are hidden by default, and query params allow opt-in visibility.
- Operational scripts that keep the workflow straightforward:
dev:server,dev:web, andtypecheckacross server and web packages.
Why We Built It
- The main decision was to optimize for fast operator comprehension, not feature breadth. The README intent is explicit: a “minimal, terminal-style live activity stream” combining Kimaki activity with
tiny-todo. - Recent commit direction confirms that priority:
c3d5dd3hardened feed access and reduced noise,9cbd749added live context summary lines by project, andb0254b1stabilized Kimaki polling/worker behavior. - Session cadence on Mar 30 shows repeated iteration in short loops, which is exactly where a low-friction, always-readable activity stream is most valuable.
- Keeping defaults strict (auth required, noisy events hidden) reduces accidental exposure and cognitive load without blocking deeper inspection when needed.
How It Works
- The server runs on Bun with polling collectors and maintains a bounded in-memory feed (documented defaults include poll interval and ring size), then exposes authenticated API endpoints for snapshot + stream.
- The web app consumes that feed from
VITE_API_BASE, supports credential passing via query param, and intentionally renders an access-denied state when credentials are missing/invalid. - Shared schema logic in
packages/schemakeeps event/filter behavior consistent between producer and consumer, avoiding drift in how feed kinds are interpreted. - The latest implementation focus is visible in changed files:
apps/server/src/collectors/kimaki.tsandapps/server/src/run-command.ts, aligning with the recent stability and polling improvements.