archy/neode-ui/docs/GAMEPAD-NAV-MAP.md
Dorian aada19754d feat: gamepad navigation rewrite, focus styling, container grid system
- Rewrite useControllerNav.ts with clean console-style navigation:
  Sidebar (up/down wrap, right→containers, left→nothing),
  Container tile grid (spatial nav, no wrap at edges),
  Nav bar support (up from containers, down to grid),
  Inner controls (enter drills in, escape exits, trapped arrows)
- Add data-controller-container to Mesh, Fleet, Settings pages
- Fix Home.vue fragment (modals outside root div) causing Vue warnings
- Remove skip-to-content link (handled by controller nav)
- Orange ambient glow focus styling matching glass aesthetic
- Disable PWA service worker in dev mode (fixes HMR caching)
- Add gamepad-nav skill and GAMEPAD-NAV-MAP.md spec document
- 39 tests covering all navigation patterns

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 17:01:17 +00:00

9.4 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 App4 Sidebar App2 Launch app
App2 (row 1) [N] bar App5 App1 App3 Launch app
App3 (row 1) [N] bar 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. Simple form.

Position Up/Down Enter
Password Login button Submit
Login Password Submit

ONBOARDING /onboarding/*

No sidebar, no grid. Sequential screens. Button auto-focused. Enter advances.


Rules

  1. Sidebar: Up/Down wrap. Right → first [C]. Left → nothing.
  2. Grid: arrows move between [C] spatially. No wrap at edges.
  3. Left from leftmost [C] → Sidebar active tab.
  4. Up from top-row [C] → [N] nav bar (if page has one), else nothing.
  5. Enter on [C]: has link → navigate. No link → drill into [Y].
  6. Inside [Y]: arrows move between inner controls. Escape → back to [C].
  7. Escape from [C] → Sidebar.
  8. No dead ends.