- Nav-tab-active now uses orange glass (bg, border, glow, gradient) - Sidebar focus-visible uses matching orange tint - Enter on containers skips uninstall button, finds primary action - Down/Right from grid edges falls back to all focusable elements - Global fallback for standalone buttons in empty/error states - Full gamepad nav map for all onboarding screens + login modes Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
21 KiB
Gamepad Navigation Map
Every arrow key, every position, every page.
[C] = Container (red tile, D-pad grid)
[N] = Nav bar item (secondary, reached via Up from top row)
[Y] = Inner control (entered via Enter on container, exited via Escape)
[S] = Sidebar item
Sidebar (all pages)
Vertical list. Up/Down wrap. Right enters page. Left does nothing.
| Position | Up | Down | Right | Left |
|---|---|---|---|---|
| Home | Logout | Apps | First [C] | nothing |
| Apps | Home | Cloud | First [C] | nothing |
| Cloud | Apps | Mesh | First [C] | nothing |
| Mesh | Cloud | Network | First [C] | nothing |
| Network | Mesh | Web5 | First [C] | nothing |
| Web5 | Network | Fleet | First [C] | nothing |
| Fleet | Web5 | Settings | First [C] | nothing |
| Settings | Fleet | AIUI | First [C] | nothing |
| AIUI | Settings | Logout | First [C] | nothing |
| Logout | AIUI | Home | First [C] | nothing |
HOME /dashboard
Nav bar [N]
[N] Dashboard [N] Setup
Grid [C]
Row 1: [C] My Apps [C] Cloud
Row 2: [C] Network [C] Wallet
Row 3: [C] System
Row 4: [C] Quick Start (full-width, if visible)
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [N] Dashboard | nothing | My Apps | nothing | Setup | Switch tab |
| [N] Setup | nothing | My Apps | Dashboard | nothing | Switch tab |
| My Apps | [N] bar | Network | Sidebar | Cloud | /dashboard/apps |
| Cloud | [N] bar | Wallet | My Apps | nothing | /dashboard/cloud |
| Network | My Apps | System | Sidebar | Wallet | /dashboard/server |
| Wallet | Cloud | nothing | Network | nothing | /dashboard/web5 |
| System | Network | Quick Start | Sidebar | nothing | /dashboard/settings |
| Quick Start | System | nothing | Sidebar | nothing | Drill into [Y] |
Quick Start [Y] inner controls
[Y] Open a Shop [Y] Accept Payments [Y] File Browser
| Position | Left | Right | Escape |
|---|---|---|---|
| Open a Shop | nothing | Accept Payments | Back to [C] |
| Accept Payments | Open a Shop | File Browser | Back to [C] |
| File Browser | Accept Payments | nothing | Back to [C] |
APPS /dashboard/apps
Nav bar [N]
[N] My Apps [N] App Store [N] Services | [N] All [N] Bitcoin [N] Social (etc) | [N] Search
Three groups: page tabs, category filters (dynamic), search input.
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [N] My Apps | nothing | App1 | nothing | App Store | Switch tab |
| [N] App Store | nothing | App1 | My Apps | Services | /dashboard/discover |
| [N] Services | nothing | App1 | App Store | All filter | Switch tab |
| [N] All | nothing | App1 | Services | Bitcoin (etc) | Filter |
| [N] Search | nothing | App1 | last filter | nothing | Type text |
Grid [C] (3-col)
Row 1: [C] App1 [C] App2 [C] App3
Row 2: [C] App4 [C] App5 [C] App6
(etc)
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| App1 (row 1) | [N] bar My Apps | App4 | Sidebar | App2 | Launch app |
| App2 (row 1) | [N] bar My Apps | App5 | App1 | App3 | Launch app |
| App3 (row 1) | [N] bar My Apps | App6 | App2 | nothing | Launch app |
| App4 (row 2) | App1 | App7 | Sidebar | App5 | Launch app |
| App5 (row 2) | App2 | App8 | App4 | App6 | Launch app |
| App6 (row 2) | App3 | App9 | App5 | nothing | Launch app |
| (etc) | above | below | left/side | right | Launch app |
App [Y] inner controls (if no launch action)
[Y] Stop [Y] Restart [Y] Uninstall
Escape exits back to [C] app card.
CLOUD /dashboard/cloud
No nav bar.
Grid [C] (3-col)
Row 1: [C] Photos [C] Music [C] Documents
Row 2: [C] Files [C] Peer1 [C] Peer2 (etc)
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| Photos | nothing | Files | Sidebar | Music | Open section |
| Music | nothing | Peer1 | Photos | Documents | Open section |
| Documents | nothing | Peer2 | Music | nothing | Open section |
| Files | Photos | nothing | Sidebar | Peer1 | Open section |
| Peer1 | Music | nothing | Files | Peer2 | Open peer files |
| Peer2 | Documents | nothing | Peer1 | nothing | Open peer files |
NETWORK /dashboard/server
No nav bar.
Grid [C] (2-col)
Row 1: [C] Local Network [C] Web3
Row 2: [C] Quick Actions (etc)
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| Local Network | nothing | Quick Actions | Sidebar | Web3 | Drill into [Y] |
| Web3 | nothing | Quick Actions | Local Net | nothing | Drill into [Y] |
| Quick Actions | Local Net | nothing | Sidebar | nothing | Drill into [Y] |
WEB5 /dashboard/web5
No nav bar. Containers from child components stacked vertically + side-by-side.
Grid [C]
Row 1: [C] Action1 [C] Action2 [C] Action3 [C] Action4 [C] Action5 [C] Action6
Row 2: [C] Wallet [C] Domains
Row 3: [C] Nostr Relays [C] Node Visibility
Row 4: [C] Connected Nodes
Standard spatial grid nav. Left from leftmost = Sidebar. Enter = drill into [Y] controls.
DISCOVER /dashboard/discover
Nav bar [N]
[N] My Apps [N] App Store [N] Services | [N] Category filters (etc)
Grid [C] (3-col)
Row 0: [C] Featured1 [C] Featured2 [C] Featured3
Row 1: [C] App1 [C] App2 [C] App3
(etc)
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [N] tabs | nothing | Featured1 | left tab | right tab | Switch/filter |
| Featured1 | [N] bar | App1 | Sidebar | Featured2 | View details |
| App1 | Featured1 | App4 | Sidebar | App2 | Install |
| (etc) | above | below | left/side | right | Install |
MESH /dashboard/mesh
Grid [C]
Row 1: [C] Device Status [C] Chat Panel
Row 2: [C] Peers List [C] Tab Panel (Bitcoin/Dead Man/Map)
Spatial grid nav. Enter = drill into controls.
FLEET /dashboard/fleet
Grid [C]
Row 1: [C] Nodes [C] Online [C] Offline [C] Health
Row 2: [C] Node1 [C] Node2 [C] Node3 (etc)
Spatial grid nav. Enter = view node details.
SETTINGS /dashboard/settings
Grid [C] (vertical stack)
Row 1: [C] Account Info
Row 2: [C] Change Password
Row 3: [C] Two-Factor Auth
Row 4: [C] System Info
Row 5: [C] Danger Zone
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| Account Info | nothing | Change Password | Sidebar | nothing | Drill into [Y] |
| Change Password | Account Info | Two-Factor | Sidebar | nothing | Drill into [Y] |
| Two-Factor | Change Password | System Info | Sidebar | nothing | Drill into [Y] |
| System Info | Two-Factor | Danger Zone | Sidebar | nothing | Drill into [Y] |
| Danger Zone | System Info | nothing | Sidebar | nothing | Drill into [Y] |
LOGIN /login
No sidebar, no grid. Three modes on the same route.
[B] = Button [I] = Input field [L] = Link
Set Password (first visit after onboarding)
Auto-focus: [I] Password
[I] Password
[I] Confirm Password
[B] Set Password
[L] Replay Intro [L] Restart Onboarding
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [I] Password | nothing | [I] Confirm | nothing | nothing | Type / Down |
| [I] Confirm | [I] Password | [B] Set Password | nothing | nothing | Type / Down |
| [B] Set Password | [I] Confirm | [L] Replay Intro | nothing | nothing | Submit |
| [L] Replay Intro | [B] Set Password | nothing | nothing | [L] Restart | Replay intro |
| [L] Restart | [B] Set Password | nothing | [L] Replay Intro | nothing | Restart onboarding |
Normal Login
Auto-focus: [I] Password
[I] Password
[B] Login
[L] Replay Intro [L] Restart Onboarding
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [I] Password | nothing | [B] Login | nothing | nothing | Type / Down |
| [B] Login | [I] Password | [L] Replay Intro | nothing | nothing | Submit |
| [L] Replay Intro | [B] Login | nothing | nothing | [L] Restart | Replay intro |
| [L] Restart | [B] Login | nothing | [L] Replay Intro | nothing | Restart |
TOTP Verification (after password accepted)
Auto-focus: [I] TOTP Code
[I] TOTP Code
[B] Verify
[L] Use Backup Code
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [I] TOTP Code | nothing | [B] Verify | nothing | nothing | Type / Down |
| [B] Verify | [I] TOTP Code | [L] Backup Code | nothing | nothing | Submit |
| [L] Use Backup Code | [B] Verify | nothing | nothing | nothing | Toggle backup mode |
ONBOARDING /onboarding/*
No sidebar, no grid. Sequential wizard screens.
[B] = Button [I] = Input field [C] = Selectable card [L] = Link
Global onboarding rules:
- No sidebar or nav bar on any onboarding screen.
- First interactive element auto-focused on each screen (inputs when present, otherwise primary button).
- B button (Escape) = go back to previous onboarding step (where applicable).
- D-pad Up/Down always moves between focusable elements — inputs are never trapping. Up/Down exits a focused input to the adjacent element.
- Enter on an input = submit if it's the last field, otherwise move to next field.
- Enter activates the focused element.
INTRO /onboarding/intro
Default focus: [B] Unlock
[B] Unlock your sovereignty
[L] Restore from backup
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [B] Unlock | nothing | [L] Restore | nothing | nothing | → /onboarding/path |
| [L] Restore | [B] Unlock | nothing | nothing | nothing | Show restore panel |
Restore Panel [Y] (shown after activating Restore link)
[I] File picker
[I] Passphrase
[B] Cancel [B] Restore
| Position | Up | Down | Left | Right | Enter | Escape |
|---|---|---|---|---|---|---|
| [I] File picker | nothing | [I] Passphrase | nothing | nothing | Open file dialog | Close panel |
| [I] Passphrase | [I] File picker | [B] Cancel | nothing | nothing | Type / Down | Close panel |
| [B] Cancel | [I] Passphrase | nothing | nothing | [B] Restore | Close panel | Close panel |
| [B] Restore | [I] Passphrase | nothing | [B] Cancel | nothing | Submit restore | Close panel |
PATH /onboarding/path
Default focus: [C] Fresh Start
[C] Fresh Start [C] Restore (disabled) [C] Connect (disabled)
[B] Continue
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [C] Fresh Start | nothing | [B] Continue | nothing | [C] Restore | Select option |
| [C] Restore | nothing | [B] Continue | [C] Fresh Start | [C] Connect | nothing (disabled) |
| [C] Connect | nothing | [B] Continue | [C] Restore | nothing | nothing (disabled) |
| [B] Continue | [C] Fresh Start | nothing | nothing | nothing | → /login (complete) |
OPTIONS /onboarding/options
Default focus: [C] Sovereignty
Row 1: [C] Sovereignty [C] Commerce [C] Projects
Row 2: [C] Transmitter [C] Hoster [C] AI
[B] Continue
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [C] Sovereignty | nothing | [C] Transmitter | nothing | [C] Commerce | nothing (display) |
| [C] Commerce | nothing | [C] Hoster | [C] Sovereignty | [C] Projects | nothing (display) |
| [C] Projects | nothing | [C] AI | [C] Commerce | nothing | nothing (display) |
| [C] Transmitter | [C] Sovereignty | [B] Continue | nothing | [C] Hoster | nothing (display) |
| [C] Hoster | [C] Commerce | [B] Continue | [C] Transmitter | [C] AI | nothing (display) |
| [C] AI | [C] Projects | [B] Continue | [C] Hoster | nothing | nothing (display) |
| [B] Continue | [C] Transmitter | nothing | nothing | nothing | → /onboarding/did |
DID /onboarding/did
Loading state: No interactive elements. Auto-advances when generation completes.
After generation:
Default focus: [B] Continue
[B] Copy DID
[B] Copy Nostr (if available)
[B] Continue
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [B] Copy DID | nothing | [B] Copy Nostr | nothing | nothing | Copy to clipboard |
| [B] Copy Nostr | [B] Copy DID | [B] Continue | nothing | nothing | Copy to clipboard |
| [B] Continue | [B] Copy Nostr | nothing | nothing | nothing | → /onboarding/identity |
If no Nostr ID: [B] Copy DID → Down → [B] Continue directly.
IDENTITY /onboarding/identity
Auto-focus: [I] Name
[I] Identity Name
[C] Personal [C] Business [C] Anonymous
[B] Continue
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [I] Name | nothing | [C] Personal | nothing | nothing | Type / Down |
| [C] Personal | [I] Name | [B] Continue | nothing | [C] Business | Select purpose |
| [C] Business | [I] Name | [B] Continue | [C] Personal | [C] Anonymous | Select purpose |
| [C] Anonymous | [I] Name | [B] Continue | [C] Business | nothing | Select purpose |
| [B] Continue | [C] Personal | nothing | nothing | nothing | → /onboarding/backup |
BACKUP /onboarding/backup
Auto-focus: [I] Passphrase
[I] Passphrase
[B] Download Backup
[B] Continue (disabled until downloaded)
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [I] Passphrase | nothing | [B] Download | nothing | nothing | Type / Down |
| [B] Download | [I] Passphrase | [B] Continue | nothing | nothing | Create & download backup |
| [B] Continue | [B] Download | nothing | nothing | nothing | → /onboarding/verify |
[B] Continue disabled (skip focus) until backup downloaded.
VERIFY /onboarding/verify
Phase 1 — Signing:
Default focus: [B] Sign Challenge
[B] Sign Challenge
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [B] Sign Challenge | nothing | nothing | nothing | nothing | Sign crypto challenge |
Phase 2 — After verification:
Default focus: [B] Finish
[B] Finish
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [B] Finish | nothing | nothing | nothing | nothing | → /onboarding/done |
DONE /onboarding/done
Default focus: [B] Set Password
[C] Identity [C] Backup [C] Ready
[B] Set Password
| Position | Up | Down | Left | Right | Enter |
|---|---|---|---|---|---|
| [C] Identity | nothing | [B] Set Password | nothing | [C] Backup | nothing (display) |
| [C] Backup | nothing | [B] Set Password | [C] Identity | [C] Ready | nothing (display) |
| [C] Ready | nothing | [B] Set Password | [C] Backup | nothing | nothing (display) |
| [B] Set Password | [C] Identity | nothing | nothing | nothing | → /login |
Onboarding & Login Rules
- No sidebar or nav bar — linear wizard flow.
- First interactive element auto-focused (input fields when present, otherwise primary button).
- D-pad Up/Down always moves between focusable elements — inputs are never trapping. You can always D-pad out of a focused field.
- Left/Right for horizontal card rows only.
- Disabled elements are skipped in focus order.
- B button (Escape) navigates back one onboarding step.
- Enter on input: submits if last field, otherwise advances to next field.
- No wrap — edges are dead stops.
- No dead ends — every screen has a forward action.
Rules
- Sidebar: Up/Down wrap. Right → first [C]. Left → nothing.
- Grid: arrows move between [C] spatially. No wrap at edges.
- Left from leftmost [C] → Sidebar active tab.
- Up from top-row [C] → [N] nav bar (if page has one), else nothing.
- Enter on [C]: has link → navigate. No link → drill into [Y].
- Inside [Y]: arrows move between inner controls. Escape → back to [C].
- Escape from [C] → Sidebar.
- No dead ends.