Skip to main content
Back to Projects

BastionWeb - The Cockpit for an Agentic Stack

Web operator console for a fleet of autonomous agents — a cross-repo status board, an SDLC run control room, and semantic search over the company brain.

Next.jsReactTypeScriptAgent ObservabilityPlaywrightTailwind CSS

Overview

BastionWeb is where the whole system becomes visible. Nineteen repositories, dozens of planning blocks, agent runs executing in parallel — none of that is legible from a terminal, and a spreadsheet of statuses goes stale the moment it is written. The cockpit reads live state and renders it: a cross-repo board showing what is open, blocked and ready to start; a control room for driving SDLC runs and watching them stream; a markdown reader for the planning corpus; and a brain surface for semantic search over everything written. It is deliberately a thin client. All state lives behind `bastion serve`, the Rust console API, and the web app holds no authoritative copy of anything. That decision is what lets the phone client, the terminal UI and this cockpit disagree about presentation while agreeing about facts — and it means the web app can be rebuilt without migrating any data. The surfaces degrade independently, which matters more than it sounds. The brain search needs the Python retrieval layer to be up; the board, control room and reader need only the console. When retrieval is down, the brain surface renders an honest error state and the rest of the cockpit keeps working, rather than the whole app failing because one dependency is unavailable. The end-to-end suite is the part that earned its keep. It had been silently unrunnable for weeks — two dev-server entries competing for one directory lock meant no subset of tests could start, so forty spec files reported nothing while appearing green. Fixing the harness so the suite actually executes brought 255 tests back into play, and immediately surfaced defects that had been shipping unnoticed.

Technical Stack

Frontend

  • ▸Next.js 16
  • ▸React 19
  • ▸TypeScript 5
  • ▸Tailwind CSS 4

Data

  • ▸bastion serve (Rust API)
  • ▸Server Components
  • ▸Streaming run updates

Surfaces

  • ▸Cross-repo status board
  • ▸SDLC control room
  • ▸Markdown reader
  • ▸Brain search

Testing

  • ▸Playwright end-to-end
  • ▸Production-build test server
  • ▸Isolated build directory

Key Features

✓

Cross-repo status board renders what is open, blocked and startable from live state rather than a hand-maintained list

✓

Control room drives SDLC runs and streams their progress as they execute

✓

Semantic search over the company brain, backed by the Python retrieval layer

✓

Markdown reader for the planning corpus, so specs are readable without a checkout

✓

Thin client by design — all authoritative state stays behind the console API

✓

Surfaces degrade independently: brain search failing does not take the board down with it

✓

End-to-end suite runs against a production build on its own port and build directory, so it cannot race the dev server

Technical Challenges

▪

Rendering a dependency graph across nineteen repositories so that 'what can I start right now' is answerable at a glance

▪

Keeping the client authoritative about nothing while still feeling responsive

▪

Designing per-surface degradation so one unavailable backend does not cascade into a broken app

▪

Repairing an end-to-end suite that had been reporting success while executing zero tests

Project Outcomes

4 — status board, SDLC control room, markdown reader, brain search
Surfaces
255 executing, after repairing a suite that had run zero
End-to-end tests
Thin client — no authoritative state outside the console API
Architecture