# riotpiao — Task Breakdown Next.js portfolio frontend. Cluster-visualization surfaces (topology, delivery, terminal, chat) run against mock `/api/*` route handlers backed by [lib/clusterMock.ts](../lib/clusterMock.ts) — no real cluster, no Go backend, no `kubectl` in this repo. 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) Supersedes: [PLAN.md](../PLAN.md), [IMPLEMENTATION.md](../IMPLEMENTATION.md) (Homarr + Terraform — abandoned) ## Status Mock API layer implemented. Remaining: wire page components to fetch from it, RED specs, REFACTOR passes — see [INDEX.md](INDEX.md). ## Task board Task board lives in [INDEX.md](INDEX.md) — one row per task, one file per task (`-.md`), agent-harness format. That file is the source of truth for execution order; this README is a human overview only. Everything cluster/backend/infra (deployment pipelines, DNS, RBAC, the real `atlas` Go service, rate-limiting tiers 1-3, observability) is out of scope for this repo — see [REQUIREMENTS.md](REQUIREMENTS.md), a handoff spec for whoever builds that separately. | Phase | Description | |---|---| | 0 — setup | Vitest, Playwright | | 2 — Surface B: cluster topology | mock-backed | | 3 — Surface E: delivery tree | mock-backed | | 4 — Surface C: terminal | mock-backed | | 5 — Surface D: chat | mock-backed | ## Rules carried from the ADR - I2: browser never talks to an internal API directly — all cluster data flows through this app's own `/api/*` routes - I3: redaction is allowlist-only — the mock fixture already excludes denied fields, keep it that way - 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