# Portal — Current State Verified against local Portal repo `jester/zpack-portal` commit `69a4c3c` on 2026-04-16, plus local working-tree updates for code-server controls. This file records what is implemented now. ## Readiness / operation UI - Portal consumes API-normalized state. - Portal understands: - `ready` - `operationInProgress` - `operationType` - `maintenance` - `operationStartedAt` - `operationMessage` - targeted `409` and `503` UX messaging exists for operation conflicts and not-ready states. ## Backup UI - game backup UI exists for: - list - create - restore - delete - Portal uses API routes, not direct agent calls. - backup metadata is normalized and displayed when the API includes metadata fields. ## Console / action gating - console command transport uses POST JSON through API. - previous blanket `ready === false` gating bug for game actions was fixed. - Start is not blocked merely because a stopped server is not ready. - backup actions are not blocked purely by `ready === false`; backend validity decides. ## Billing / auth / onboarding - billing UI alignment exists with the newer billing state model. - forgot/reset password flow exists. - first-login onboarding flow exists. ## Hosted IDE - console and server-list "Open IDE" actions request `/api/dev/{serverId}/ide-token`. - Portal opens the hosted URL returned by the API, falling back to the configured API base for relative URLs. - DEV server console and server-list rows show code-server `start`, `restart`, and `stop` controls directly under the `Open IDE` button. - code-server service actions call `/api/dev/{serverId}/codeserver/start`, `/api/dev/{serverId}/codeserver/restart`, and `/api/dev/{serverId}/codeserver/stop`. ## Dashboard / IA - spotlight server card/dashboard refresh landed.