diff --git a/.agents/phases/todo/01_keyboard_kiosk_control/00_phase.md b/.agents/phases/todo/01_keyboard_kiosk_control/00_phase.md new file mode 100644 index 0000000..318306e --- /dev/null +++ b/.agents/phases/todo/01_keyboard_kiosk_control/00_phase.md @@ -0,0 +1,89 @@ +# Phase 01 — Keyboard-only control of the wall + +**Source:** `TODO.md` L3 — "Need keyboard shortcuts. This will be deployed on a kiosk mode linux client that won't have a mouse. Need to be able to fullscreen a mirror, switch between them easily, etc." +**Story:** n/a +**Context:** `.agents/PLAN.md` §2 A9 (hand-written ES modules, no framework), A10 (nothing from outside the origin), A13 (Playwright, `channel="chromium"`); `docs/kiosk-silverblue.md` (the target box: GNOME Kiosk + Firefox `--kiosk` pointed at `/watch`, set up over SSH with **no keyboard, no monitor, no console**); `src/mirror/static/watch.js`, `watch.html`, `share.js`, `mirror.html`, `app.css` + +## Objective + +Operate the whole product from a keyboard. On `/watch`: select a mirror, take it +fullscreen over the wall, step to the next/previous, jump by number, mute, and get +an on-screen list of the keys. On `/mirror`: start and stop a share without a +pointer. + +Just as important: **remove the pointer-only affordances**. `.tile .actions` is +`opacity: 0` until `:hover` (`app.css` L351–352) and the staged caption fades to +`0.28` (L396–409) — on a kiosk with no mouse those controls do not exist, so a +mirror can currently be neither un-muted nor exited once it is on stage. + +## Dependencies + +— (none). This is the first phase of the roadmap. + +## Tasks + +1. `01_keyboard_command_router.md` — one focus-aware keydown router on `/watch` + plus a keyboard "cursor" over the tiles (`j`/`k`/`↑`/`↓`). +2. `02_wall_navigation_commands.md` — `Enter`/`f`, `g`, `n`/`p`, `1`–`9`, `m` + wired to the existing `stage()`/`unstage()` plumbing. +3. `03_keyboard_reachable_tile_controls.md` — focus-visible affordances: every + hover-only control becomes reachable and legible without a mouse. +4. `04_help_overlay_and_keyboard_e2e.md` — `?` help overlay, `/mirror` `s`/`x`, + a mouse-free Playwright suite, and the kiosk/README keyboard docs. + +## Key map (locked by the user for this phase) + +| Key | Scope | Action | +|---|---|---| +| `j` `k` `↓` `↑` | `/watch` | move the selection to next / previous tile (wraps) | +| `Enter` `f` | `/watch` | stage the selected mirror fullscreen (`f` re-enters fullscreen when already staged) | +| `g` | `/watch` | back to the wall (unstage) | +| `n` `p` | `/watch` | stage next / previous mirror | +| `1`–`9` | `/watch` | stage the Nth mirror in grid order | +| `m` | `/watch` | mute / unmute the staged mirror | +| `?` | `/watch` | toggle the help overlay | +| `Esc` | both | `/watch` unstages (already exists); `/mirror` stops sharing (already exists) | +| `s` `x` | `/mirror` | start / stop sharing | + +Never intercepted: any chord containing `Ctrl`/`Cmd`/`Alt`, and every key while an +``, `