Dashboard Architecture
Purpose
Decide the admin dashboard's placement and boundaries before any dashboard work: whether it lives inside the customer web app, as an isolated route group, as a separate application, or in a separate repository — with the trade-offs recorded. The dashboard is its own application decision (../../application-selection); this skill decides its shape.
When to Use
- As soon as
../../application-selection confirms an admin dashboard is needed.
- When an existing embedded dashboard shows strain (security concerns, release coupling, team friction).
- Not for dashboard features (tables/reports/bulk ops) — those follow this decision.
Inputs
- Selected applications and audiences (
../../application-selection).
- Access model: who are the admins, and do they overlap with customers (
web-authorization)?
- Team/ownership structure and release expectations.
- Repository layout options (
../../repository-architecture).
Discovery Questions
- User roles: are admins a small internal group, a customer-facing role, or both? Do people hold both customer and admin identities?
- Deployment boundaries: must the dashboard deploy/scale/restrict (VPN, IP allowlist) independently of the customer app?
- Security boundaries: what's the blast radius if the customer app is compromised — and should admin code even ship in the public bundle?
- Team ownership: does one team own both surfaces, or do separate teams need independent velocity?
- UI system sharing: must the dashboard share the design system/components with the customer app (
web-design-system)?
- Release cadence: do the surfaces release together or on different rhythms?
Responsibilities
- Evaluate the four placements honestly — inside the customer web app (shared chrome, same audience mix), a route group (same app, isolated layout/layer boundaries), a separate application (own build/deploy, possibly own framework via
web-stack-selection, typically in the same repo/monorepo), a separate repository (full independence: code, CI, release, ownership).
- Score each against the six factors above for this project.
- Recommend one placement with justification and consequences (repo layout, stack choice scope, auth session sharing, UI sharing mechanism).
- Feed the decision to
../../repository-architecture, web-stack-selection (separate app gets its own framework decision), and web-routing (embedded gets a route group plan).
- Document the unit as it is built —
docs/<app>/README.md and one file per page under docs/<app>/pages/ (../../application-documentation).
Required Workflow
- Gather the six factors (roles, deployment, security, ownership, UI sharing, cadence).
- Evaluate all four placements against them; note disqualifiers first.
- Recommend one, with trade-offs of the runners-up.
- Record consequences: repo/stack/auth/UI-sharing follow-ups.
- Submit for Gate 2 approval before any dashboard implementation.
Decision Rules
- Placement is a decision, not a default — do not silently bolt an
/admin route onto the customer app.
- Strong pull toward separation (app or repo): hard security/deployment boundaries (admin must not ship to public clients, network-restricted access), distinct teams, or clashing release cadences.
- Strong pull toward embedding (in-app or route group): heavy UI/session/data sharing, one small team, admins who are also product users, low security differential.
- A separate repository needs justification beyond a separate application — it trades sharing costs for ownership independence; monorepo-with-separate-app covers most separation needs.
- If embedded, prefer a route group with its own layout, permission gate, and code-splitting over admin logic woven through customer code.
Rules
- The recommendation names all six factors explicitly — silent factors become surprise constraints later.
- Whatever the placement, admin access is enforced server-side (
web-authorization, dashboard-permissions).
- Revisit the decision if audience, team, or security facts change materially — placement is migratable, not sacred.
Anti-Patterns
- Defaulting to "just add /admin" without evaluating boundaries.
- A separate repo for a dashboard one team releases in lockstep with the app.
- Embedding an admin surface that regulation/network policy says must be isolated.
- Sharing a session cookie across customer/admin surfaces that were separated for security.
Validation Checklist
Definition of Done
A recorded, justified dashboard-placement decision — one of in-app / route group / separate application / separate repository — with the six factors weighed, consequences assigned to follow-up skills, and approval pending.
Related Skills
../../application-selection, ../../repository-architecture, web-stack-selection, web-routing, web-authorization, dashboard-permissions, web-design-system, web-deployment, ../../application-documentation.
Related Knowledge
../../../knowledge/ (team structure, security policy, release model).
Related References
../../../references/web/dashboard/ (placement notes — when populated).
Context Loading Guidance
- Requires: application decisions, access model, team/release facts.
- Does not require: dashboard feature detail, UI specifics, table/report skills.
- May load:
../../repository-architecture for repo consequences; web-stack-selection if a separate app results.
- Stop when: the placement decision is recorded for Gate 2.
Token Efficiency Guidance
Decide from a six-factor summary table. Keep the evaluation to disqualifiers and deciding factors — not an essay per option.
1---2name: dashboard-architecture3description: Use to decide where an admin dashboard lives — inside the customer web app, as a route group, as a separate application, or in a separate repository — weighing user roles, deployment boundaries, security boundaries, team ownership, UI system sharing, and release cadence. Placement is a decision, not a default.4---56# Dashboard Architecture78## Purpose910Decide the admin dashboard's placement and boundaries **before** any dashboard work: whether it lives inside the customer web app, as an isolated route group, as a separate application, or in a separate repository — with the trade-offs recorded. The dashboard is its own application decision (`../../application-selection`); this skill decides its shape.1112## When to Use1314- As soon as `../../application-selection` confirms an admin dashboard is needed.15- When an existing embedded dashboard shows strain (security concerns, release coupling, team friction).16- **Not** for dashboard features (tables/reports/bulk ops) — those follow this decision.1718## Inputs1920- Selected applications and audiences (`../../application-selection`).21- Access model: who are the admins, and do they overlap with customers (`web-authorization`)?22- Team/ownership structure and release expectations.23- Repository layout options (`../../repository-architecture`).2425## Discovery Questions2627- **User roles:** are admins a small internal group, a customer-facing role, or both? Do people hold both customer and admin identities?28- **Deployment boundaries:** must the dashboard deploy/scale/restrict (VPN, IP allowlist) independently of the customer app?29- **Security boundaries:** what's the blast radius if the customer app is compromised — and should admin code even ship in the public bundle?30- **Team ownership:** does one team own both surfaces, or do separate teams need independent velocity?31- **UI system sharing:** must the dashboard share the design system/components with the customer app (`web-design-system`)?32- **Release cadence:** do the surfaces release together or on different rhythms?3334## Responsibilities3536- Evaluate the four placements honestly — **inside the customer web app** (shared chrome, same audience mix), **a route group** (same app, isolated layout/layer boundaries), **a separate application** (own build/deploy, possibly own framework via `web-stack-selection`, typically in the same repo/monorepo), **a separate repository** (full independence: code, CI, release, ownership).37- Score each against the six factors above for **this** project.38- Recommend one placement with justification and consequences (repo layout, stack choice scope, auth session sharing, UI sharing mechanism).39- Feed the decision to `../../repository-architecture`, `web-stack-selection` (separate app gets its own framework decision), and `web-routing` (embedded gets a route group plan).40- Document the unit as it is built — `docs/<app>/README.md` and one file per page under `docs/<app>/pages/` (`../../application-documentation`).4142## Required Workflow43441. Gather the six factors (roles, deployment, security, ownership, UI sharing, cadence).452. Evaluate all four placements against them; note disqualifiers first.463. Recommend one, with trade-offs of the runners-up.474. Record consequences: repo/stack/auth/UI-sharing follow-ups.485. Submit for Gate 2 approval before any dashboard implementation.4950## Decision Rules5152- Placement is a decision, not a default — do not silently bolt an `/admin` route onto the customer app.53- Strong pull toward **separation** (app or repo): hard security/deployment boundaries (admin must not ship to public clients, network-restricted access), distinct teams, or clashing release cadences.54- Strong pull toward **embedding** (in-app or route group): heavy UI/session/data sharing, one small team, admins who are also product users, low security differential.55- A separate **repository** needs justification beyond a separate **application** — it trades sharing costs for ownership independence; monorepo-with-separate-app covers most separation needs.56- If embedded, prefer a **route group** with its own layout, permission gate, and code-splitting over admin logic woven through customer code.5758## Rules5960- The recommendation names all six factors explicitly — silent factors become surprise constraints later.61- Whatever the placement, admin access is enforced server-side (`web-authorization`, `dashboard-permissions`).62- Revisit the decision if audience, team, or security facts change materially — placement is migratable, not sacred.6364## Anti-Patterns6566- Defaulting to "just add /admin" without evaluating boundaries.67- A separate repo for a dashboard one team releases in lockstep with the app.68- Embedding an admin surface that regulation/network policy says must be isolated.69- Sharing a session cookie across customer/admin surfaces that were separated *for* security.7071## Validation Checklist7273- [ ] All four placements evaluated against the six factors.74- [ ] One placement recommended with justification + runner-up trade-offs.75- [ ] Consequences recorded (repo layout, stack scope, auth/session, UI sharing).76- [ ] Server-side admin enforcement noted regardless of placement.77- [ ] Recorded for Gate 2 approval.7879## Definition of Done8081A recorded, justified dashboard-placement decision — one of in-app / route group / separate application / separate repository — with the six factors weighed, consequences assigned to follow-up skills, and approval pending.8283## Related Skills8485`../../application-selection`, `../../repository-architecture`, `web-stack-selection`, `web-routing`, `web-authorization`, `dashboard-permissions`, `web-design-system`, `web-deployment`, `../../application-documentation`.8687## Related Knowledge8889`../../../knowledge/` (team structure, security policy, release model).9091## Related References9293`../../../references/web/dashboard/` (placement notes — when populated).9495## Context Loading Guidance9697- **Requires:** application decisions, access model, team/release facts.98- **Does not require:** dashboard feature detail, UI specifics, table/report skills.99- **May load:** `../../repository-architecture` for repo consequences; `web-stack-selection` if a separate app results.100- **Stop when:** the placement decision is recorded for Gate 2.101102## Token Efficiency Guidance103104Decide from a six-factor summary table. Keep the evaluation to disqualifiers and deciding factors — not an essay per option.