--- id: TASK-118.1 title: Build shared folk-applet-catalog.ts component status: Done assignee: [] created_date: '2026-03-16 00:05' updated_date: '2026-03-16 00:21' labels: - multiplayer - ui - shared milestone: Multiplayer Everything dependencies: [] parent_task_id: TASK-118 priority: high --- ## Description Create a reusable web component that renders the "Pull rApplet to rSpace" catalog modal. ## Component: `lib/folk-applet-catalog.ts` - Fetches module list from `GET /:space/modules` API - Renders cards grid: icon, name, description, enabled toggle, scope badge - Toggle calls `PATCH /:space/modules` with updated `enabledModules` array - Accessible from space settings and a "+" button in the app switcher - Shows sync status indicator (multiplayer/local-only/external) - Requires space owner authentication to toggle; read-only for members ## Shell integration: `server/shell.ts` - Add "+" button to app switcher nav that opens the catalog modal - Only visible to space owners (check `ownerDID` from space meta) ## Files to create/modify: - `lib/folk-applet-catalog.ts` (new) - `server/shell.ts` (add catalog trigger button) - `server/index.ts` (register the new component JS) ## Acceptance Criteria - [x] #1 Catalog modal shows all registered modules with icon, name, description - [x] #2 Space owners can toggle modules on/off with immediate effect - [x] #3 Non-owners see read-only view of enabled modules - [x] #4 App switcher updates when modules are toggled - [x] #5 Works in demo mode with local-only toggle (no API call) ## Final Summary Built "Manage rApps" panel into the existing app switcher sidebar. Extends `rstack-app-switcher` with expandable catalog showing all modules (enabled + disabled). Space owners can toggle modules via + / − buttons calling `PATCH /api/spaces/:slug/modules`. Shell passes full module list via `setAllModules()`. Demo mode has local-only fallback.