--- id: PLN-0064 ticket: prometeu-hub-ui-direction title: Retro Hub Home and Fake Shell UI status: done created: 2026-05-15 ref_decisions: [DEC-0028] tags: [hub, ui, shell, system-apps, lifecycle, design-system] --- ## Briefing Implement the visible Hub/Home and fake Shell app surfaces required by `DEC-0028`: a retro/minimalist 270p Hub with two manual buttons, plus green `ShellA` and blue `ShellB` native fake app/window views. Source decision: `DEC-0028`. ## Objective Replace the current debug-style window surface with the first Prometeu OS visual identity slice while keeping all UI primitives local and avoiding a reusable toolkit. ## Dependencies - `PLN-0062` should provide the launch/close/lifecycle wiring. - `PLN-0063` should provide click routing. - `PLN-0065` may provide pixel font rendering; this plan must still remain executable with current text rendering if font integration is deferred. ## Scope - Full 270p Hub/Home composition. - Retro/minimalist palette, borders, panels, and two clickable launch buttons. - Local drawing primitives for panel/frame/button/highlight only when needed. - `ShellA` fake app view as green. - `ShellB` fake app view as blue. - App/window chrome with close affordance. - Clear visual separation between Hub/Home and Shell app state. ## Non-Goals - No full UI toolkit. - No generic app catalog. - No Tabs/List/Status bar/Footer/help bar. - No controller focus UI. - No production app plugin model. - No game cartridge visual changes. ## Execution Method 1. Define the 270p layout constants. - What changes: establish local coordinates for Hub background, title area, two buttons, and optional simple panel/frame. - How: use fixed 480x270 logical viewport coordinates consistent with the runtime viewport. - Files: `crates/console/prometeu-system/src/programs/prometeu_hub/prometeu_hub.rs` or local Hub UI submodule. 2. Add local retro drawing primitives. - What changes: add small helper functions for panel/frame, button, highlight, and simple text placement. - How: keep them private/local to the Hub slice; do not expose as a toolkit. - Files: Hub module or `crates/console/prometeu-system/src/programs/prometeu_hub/` submodules. 3. Render Hub/Home. - What changes: draw a consistent retro/minimalist Home surface with exactly two launch buttons. - How: use low-resolution composition, strong outlines, limited color use, and button labels `ShellA` and `ShellB`. - Files: Hub render path. 4. Render native fake Shell app views. - What changes: draw `ShellA` as a green app/window and `ShellB` as a blue app/window, with a visible close command. - How: use the task-owned window information and app identity established by `PLN-0062`. - Files: Hub render path and any local fake-app state/mapping. 5. Keep visual state separate from lifecycle state. - What changes: UI code may know the current view/app identity but must not mutate lifecycle directly. - How: return actions to the boundary defined by `PLN-0062`. - Files: Hub update/render code. 6. Add lightweight tests for layout/action coupling. - What changes: ensure visible button rects match clickable rects from `PLN-0063`. - How: put button definitions in a shared local data structure used by render and hit testing. - Files: Hub module tests. ## Acceptance Criteria - [x] Hub/Home renders full-screen in the 270p viewport. - [x] Hub/Home shows exactly two manual launch buttons: `ShellA` and `ShellB`. - [x] The visual style is retro/minimalist with strong borders and limited palette. - [x] `ShellA` renders as a simple green native fake Shell app/window. - [x] `ShellB` renders as a simple blue native fake Shell app/window. - [x] Each Shell app view exposes a visible close command. - [x] Local primitives are not exported as a general toolkit. - [x] No Tabs/List/Status bar/Footer/help bar are added in this wave. ## Tests - Unit tests for shared local layout/button definitions. - Compile and runtime tests from `PLN-0062` and `PLN-0063`. - Manual desktop verification of the full flow: Hub -> ShellA -> close -> Hub -> ShellB -> close -> Hub. - Screenshot/manual visual check at 480x270 internal composition if repository tooling supports it. ## Affected Artifacts - `crates/console/prometeu-system/src/programs/prometeu_hub/prometeu_hub.rs` - Possible local modules under `crates/console/prometeu-system/src/programs/prometeu_hub/` - Tests colocated with Hub module