2026-08-19 09:47:14 -07:00
# riotpiao — Task Board (Next.js portfolio, mock-backed)
This repo is scoped to the Next.js portfolio frontend only. Anything requiring `kubectl` , a real cluster, a Go
2026-08-19 13:38:43 -07:00
backend, or infra-side config (Cloudflare, deployment pipelines, RBAC) has been moved to [REQUIREMENTS.md ](REQUIREMENTS.md ) —
2026-08-19 09:47:14 -07:00
a handoff spec for whoever builds the real `atlas` backend service. The four cluster-visualization surfaces
(topology, delivery, terminal, chat) run against mock `/api/*` Next.js route handlers backed by
[lib/clusterMock.ts ](../lib/clusterMock.ts ) fixture data.
2026-08-18 20:41:34 -07:00
Source of truth: [docs/PLAN-atlas.md ](../docs/PLAN-atlas.md ), [docs/adr/ADR-0001-atlas-cluster-visualization.md ](../docs/adr/ADR-0001-atlas-cluster-visualization.md )
2026-08-19 09:47:14 -07:00
Rules carried from the ADR (frontend-relevant subset):
- I2: browser never talks to an internal API directly — all cluster data flows through this app's own `/api/*` routes (mock today, real atlas later)
- I3: redaction is allowlist-only — the mock fixture already excludes denied fields, keep it that way when replacing with real data
2026-08-18 20:41:34 -07:00
- TDD: RED (tests named before code) -> GREEN (minimal code) -> REFACTOR, per phase
- Playwright e2e is a hard requirement for every UI-shipping phase (2, 3, 4, 5) — no surface merges without a passing spec
2026-08-19 09:47:14 -07:00
## 0 — Setup
2026-08-18 20:41:34 -07:00
| Task | Description |
|---|---|
| [0.6 ](0.6-vitest-setup.md ) | Add Vitest + Testing Library + msw |
| [0.6a ](0.6a-playwright-setup.md ) | Add Playwright (hard requirement) |
## 2 — Topology (Surface B)
| Task | Description |
|---|---|
| [2.2 ](2.2-topology-component-test.md ) | topology.test.tsx (RED) |
| [2.3 ](2.3-topology-e2e.md ) | topology.e2e.ts (RED, Playwright — hard requirement) |
2026-08-19 09:47:14 -07:00
| [2.4 ](2.4-api-topology.md ) | GET /api/topology (mock, GREEN) — done |
| [2.5 ](2.5-api-stream.md ) | GET /api/stream (mock, GREEN) — done |
2026-08-18 20:41:34 -07:00
| [2.6 ](2.6-frontend-react-flow.md ) | Frontend: React Flow topology graph (GREEN) |
| [2.7 ](2.7-security-headers.md ) | Security headers (GREEN) |
| [2.9 ](2.9-simplify-pass.md ) | simplify skill pass (REFACTOR) |
## 3 — Delivery Tree (Surface E)
| Task | Description |
|---|---|
| [3.2 ](3.2-delivery-component-test.md ) | delivery.test.tsx (RED) |
| [3.3 ](3.3-delivery-e2e.md ) | delivery.e2e.ts (RED, Playwright — hard requirement) |
2026-08-19 09:47:14 -07:00
| [3.4 ](3.4-api-delivery.md ) | GET /api/delivery (mock, GREEN) — done |
| [3.5 ](3.5-api-delivery-resources.md ) | GET /api/delivery/{app}/resources (mock, GREEN) — done |
2026-08-18 20:41:34 -07:00
| [3.6 ](3.6-frontend-wave-columns.md ) | Frontend: wave columns + resource tree (GREEN) |
2026-08-19 13:38:43 -07:00
| [3.7 ](3.7-live-sync-animation.md ) | Live deploy-status animation (mock, GREEN) |
2026-08-18 20:41:34 -07:00
| [3.9 ](3.9-simplify-pass.md ) | simplify skill pass (REFACTOR) |
| [3.10 ](3.10-landing-page-cleanup.md ) | Landing page: remove fabricated stats and dead links (GREEN) |
## 4 — Terminal (Surface C)
| Task | Description |
|---|---|
| [4.3 ](4.3-terminal-e2e.md ) | terminal.e2e.ts (RED, Playwright — hard requirement) |
2026-08-19 09:47:14 -07:00
| [4.4 ](4.4-api-exec.md ) | POST /api/exec (mock, GREEN) — done |
2026-08-18 20:41:34 -07:00
| [4.5 ](4.5-command-set.md ) | Command set (GREEN) |
2026-08-19 09:47:14 -07:00
| [4.6 ](4.6-namespace-validation.md ) | Namespace/resource-name validation by fixture membership (GREEN) — done |
| [4.8 ](4.8-frontend-terminal-wiring.md ) | Frontend: wire terminal page to /api/exec (GREEN) |
| [4.9 ](4.9-structured-logging.md ) | Log rejected /api/exec input (GREEN) — done |
2026-08-18 20:41:34 -07:00
| [4.10 ](4.10-simplify-pass.md ) | simplify skill pass (REFACTOR) |
## 5 — Chat + Rate Limiter (Surface D)
| Task | Description |
|---|---|
| [5.6 ](5.6-chat-e2e.md ) | chat.e2e.ts (RED, Playwright — hard requirement) |
2026-08-19 09:47:14 -07:00
| [5.7 ](5.7-api-chat.md ) | POST /api/chat (mock, GREEN) — done |
| [5.9 ](5.9-queue-position-sse.md ) | Queue position streamed as SSE (mock, GREEN) — done |
| [5.12 ](5.12-chat-sse-events.md ) | Chat SSE event types (mock, GREEN) — done |
| [5.13 ](5.13-frontend-chat-component.md ) | Frontend: wire chat page to /api/chat (GREEN) |
| [5.16 ](5.16-audit-ci-gate.md ) | pnpm audit CI gate (GREEN) |
2026-08-18 20:41:34 -07:00
| [5.17 ](5.17-simplify-pass.md ) | simplify skill pass (REFACTOR) |
## Progress
2026-08-19 09:47:14 -07:00
Status as of 2026-08-19: mock API layer implemented (`app/api/topology` , `/api/stream` , `/api/delivery` ,
`/api/delivery/[app]/resources` , `/api/exec` , `/api/chat` ) — all `[x]` -marked GREEN tasks above are done.
Remaining work is wiring the four page components to fetch from these routes instead of importing
`clusterMock` directly (2.6, 3.6, 4.8, 5.13), plus the RED (Playwright/Vitest) specs and REFACTOR passes.
2026-08-18 20:41:34 -07:00
2026-08-19 09:47:14 -07:00
Everything cluster/backend/infra-related that used to block this board now lives in
[REQUIREMENTS.md ](REQUIREMENTS.md ) and does not gate any task here.