--- id: TASK-5 title: 'Standardize AppSwitcher, EcosystemFooter, and Header across all rApps' status: Done assignee: [] created_date: '2026-02-25 07:15' updated_date: '2026-02-25 07:15' labels: - ecosystem - ui - consistency dependencies: [] priority: high --- ## Description Ensure every r*App has the same header (AppSwitcher / SpaceSwitcher / actions / UserMenu), the same AppSwitcher dropdown with all 26 apps in 8 categories, and the same EcosystemFooter with full app links. ## Acceptance Criteria - [x] #1 All 26 r*Apps listed in AppSwitcher with 8 categories - [x] #2 EcosystemFooter component created and deployed to all 16 Next.js repos + 4 static HTML sites - [x] #3 Header component (Header.tsx + SpaceSwitcher.tsx + UserMenu.tsx) standardized across 15 Next.js repos - [x] #4 EncryptID allowedOrigins updated with all 26 domains - [x] #5 UserMenu nests Sign Out under username dropdown - [x] #6 All repos committed and pushed to Gitea ## Final Summary ## What was done ### AppSwitcher (26 apps, 8 categories) Updated the canonical `AppSwitcher.tsx` with all r*Apps organized into: Creating, Planning, Communicating, Deciding, Funding & Commerce, Social & Media, Work & Productivity, Identity & Infrastructure. Rolled out to 15 Next.js repos + rswag + 4 static HTML sites. ### EcosystemFooter Created `EcosystemFooter.tsx` component with all 26 app links and `current` prop for highlighting. Replaced inline footers in all 15 Next.js repos. Updated static HTML footers in rstack-online, rwallet-online, rphotos-online, ridentity-online. ### Header standardization Created 3 portable, SDK-free shared components: - **Header.tsx** — nav bar with `current` prop and `actions` slot - **SpaceSwitcher.tsx** — community/space dropdown (uses `/api/spaces` fetch) - **UserMenu.tsx** — Sign In link or avatar dropdown with nested Sign Out Replaced all inline `