# 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 backend, or infra-side config (Cloudflare, deployment pipelines, RBAC) has been moved to [REQUIREMENTS.md](REQUIREMENTS.md) — 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. 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) 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 - 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 ## 0 — Setup | 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) | | [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 | | [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) | | [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 | | [3.6](3.6-frontend-wave-columns.md) | Frontend: wave columns + resource tree (GREEN) | | [3.7](3.7-live-sync-animation.md) | Live deploy-status animation (mock, GREEN) | | [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) | | [4.4](4.4-api-exec.md) | POST /api/exec (mock, GREEN) — done | | [4.5](4.5-command-set.md) | Command set (GREEN) | | [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 | | [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) | | [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) | | [5.17](5.17-simplify-pass.md) | simplify skill pass (REFACTOR) | ## Progress 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. 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.