117 lines
3.2 KiB
JSON
117 lines
3.2 KiB
JSON
{
|
|
"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"
|
|
}
|
|
}
|