{ "schemaVersion": "1.0", "id": "admin-app-shell", "title": "Admin and Tenant App Shell", "classification": "core", "status": "proposed", "owner": "core-pruning", "description": "Authenticated tenant shell, admin shell, dashboards, settings layout, and core sidebar structure.", "rationale": [ "The boilerplate needs stable authenticated shells even after product-specific modules are removed.", "Admin settings are required for operations, users, pricing configuration, and diagnostics." ], "codeAreas": [ "apps/web/app/routes/app.$tenant.tsx", "apps/web/app/routes/app.$tenant/dashboard.tsx", "apps/web/app/routes/app.$tenant/settings*", "apps/web/app/routes/admin.tsx", "apps/web/app/routes/admin/dashboard.tsx", "apps/web/app/routes/admin/settings*", "apps/web/app/application/sidebar/AppSidebar.tsx", "apps/web/app/application/sidebar/AdminSidebar.tsx", "apps/web/app/components/layouts/sidebars/*" ], "dependencies": [ "auth-tenancy", "billing", "rows-entities-runtime" ], "consumers": [ "core", "plugin-candidates" ], "integration": { "ownership": "hybrid", "surfaces": { "adminRoutes": [ "apps/web/app/routes/admin.tsx", "apps/web/app/routes/admin/dashboard.tsx", "apps/web/app/routes/admin/settings*" ], "tenantRoutes": [ "apps/web/app/routes/app.$tenant.tsx", "apps/web/app/routes/app.$tenant/dashboard.tsx", "apps/web/app/routes/app.$tenant/settings*" ], "publicRoutes": [], "apiRoutes": [] }, "configuration": { "admin": [ "Admin shell settings and operational defaults" ], "tenant": [ "Tenant shell navigation and tenant settings" ], "environment": [], "secrets": [] }, "workers": { "required": false, "queues": [], "jobs": [], "notes": [ "Shell features should not introduce background jobs by default." ] }, "externalProviders": [], "permissions": [ "admin.*", "app.settings.*" ], "auditEvents": [ "admin.settings.updated", "tenant.settings.updated" ], "billingImpacts": [ "Shell may expose subscription status but should not own billing logic." ], "uat": [ "Admin can reach dashboard/settings.", "Tenant can reach dashboard/settings.", "Navigation only shows permitted surfaces." ] }, "boundaries": { "mustKeep": [ "Tenant app layout", "Admin layout", "Dashboard entry points", "Core settings navigation", "System settings needed for operations" ], "mayMoveToPlugin": [ "Sidebar entries for optional product modules", "Admin pages that only manage plugin features", "Demo or playground shell entries" ], "mustNotTouch": [ "Route files during manifest Phase 1", "Sidebar and navigation code owned by parallel workers" ] }, "pruning": { "phase": "1", "action": "keep", "notes": [ "Use plugin/remove manifests to decide which shell entries become optional later." ] }, "validation": { "source": [ "docs/feature-inventory.md" ], "lastReviewed": "2026-05-05" } }