# rakib-cloud/car-allocation architecture

> Architecture diagram of the GitHub repository rakib-cloud/car-allocation, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rakib-cloud/car-allocation
- Repository: https://github.com/rakib-cloud/car-allocation

## Overview

1. **Overall shape**
   - This is a **Next.js 16 App Router admin panel** for car allocation.
   - The app is split into two top-level route groups: **authenticated admin pages** under `src/app/(root)` and a **public sign-in flow** under `src/app/(auth)`.
   - A separate `maintenance` route and a `middleware.js` boundary indicate some requests can be short-circuited before reaching the normal shell.

2. **Route and layout boundaries**
   - `src/app/layout.jsx` is the global root layout.
   - `src/app/(root)/layout.jsx` wraps the authenticated area and likely provides the admin shell structure.
   - `src/components/ui/layouts/admin-layout.jsx`, `header.jsx`, `sidebar.jsx`, and `mobile-footer-nav.jsx` form the main navigation shell for desktop/mobile.
   - `src/app/(auth)/sign-in/page.jsx` intentionally sits outside the admin shell, so login has a separate UI and no sidebar/header.

3. **Authentication model**
   - Authentication is JWT-based with **httpOnly cookies**, which means the browser does not manage tokens directly in client state.
   - `src/lib/auth/manual-auth.js` and the actions under `src/lib/actions/auth-actions/` imply a server-centered auth flow.
   - `sign-in-action.js` handles login, `token-refresh-action.js` handles session renewal, and `authorized-request-action.js` likely wraps authenticated backend calls.
   - `src/app/(root)/AuthContext.jsx` suggests the authenticated UI still keeps a lightweight client-side auth/session context for downstream components.

4. **Request and API layer**
   - The repo avoids axios and uses a **central native fetch wrapper** in `src/lib/httpClient.js`.
   - `src/constant/api-url.js` provides API endpoint definitions, while `src/lib/api-envelope.js` normalizes response shape across backend calls.
   - Error handling is centralized in `src/lib/helpers/handle-api-errors.js`, so API failures are standardized before reaching UI components.
   - `src/lib/actions/allocation-actions.js` indicates feature-specific server actions for allocation-related backend operations.

5. **Server Actions as the primary mutation boundary**
   - Business mutations appear to happen through **Next.js Server Actions** rather than direct client API calls.
   - This places sensitive work like token handling, refresh logic, and authenticated requests on the server side.
   - The architecture therefore separates:
     - **client UI components** for interaction,
     - **server actions** for secure data access and mutations,
     - **backend API** as the source of truth.

6. **UI composition and shared components**
   - `src/components/ui/` contains reusable shell primitives and navigation pieces.
   - `src/components/common/loader.jsx` and `src/app/loading.jsx` provide loading states at different levels of the app.
   - `src/components/wrappers/page-wrapper.jsx` is likely the main page-level gate for access checks and layout consistency.
   - `src/components/ui/user-role-permission.jsx` suggests role-aware rendering is embedded into the UI layer, not just route protection.

7. **Access control and route protection**
   - `middleware.js` is the first-line boundary for routing/auth decisions and likely enforces redirects or maintenance behavior.
   - `src/components/wrappers/page-wrapper.jsx` and `user-role-permission.jsx` suggest an additional RBAC layer after navigation, controlling what authenticated users can see.
   - This creates a two-step model: **request-level gating** in middleware and **UI-level authorization** inside the admin shell.

8. **Maintenance mode path**
   - `src/app/maintenance/page.jsx` and `src/constants/maintenanceMode.js` show a dedicated maintenance state.
   - The existence of this route plus middleware support implies the app can be globally diverted away from the main admin experience when the environment flag is enabled.
   - This is an operational boundary separate from authentication.

9. **Theming and providers**
   - `src/providers/antd-provider.jsx` and `src/providers/theme-provider.jsx` establish cross-app UI infrastructure.
   - The stack combines **Ant Design 6** with **Tailwind CSS 4**, so component styling is split between design-system widgets and utility classes.
   - The README notes the theme is stored in `localStorage` under `car-allocation-theme`, so theme preference is client persisted.

10. **Data shaping and helper layer**
   - `src/lib/utils/normalize-detail-response.js`, `src/lib/utils/utils.js`, and `src/lib/helpers/toaster-helper.js` are shared utilities for response normalization, generic helpers, and user notifications.
   - `src/hooks/useDetailFetch.js` indicates at least one reusable data-fetching hook for detail views.
   - These helpers reduce duplication around fetching, formatting, and error display.

11. **Branding and configuration**
   - `src/constant/branding.js` and the theme note in the README indicate the UI is branded and color-coded centrally.
   - `env.example` shows key runtime flags: `NEXT_PUBLIC_API_BASE_URL`, `MAINTENANCE_MODE`, and `AUTH_COOKIE_SECURE`.
   - That means the deployment environment directly influences routing, auth cookie behavior, and backend target selection.

12. **How data flows through the app**
   - User hits middleware first.
   - If not authenticated, they are routed to `/sign-in`.
   - Sign-in triggers a server action that calls the backend API through the centralized fetch layer, then stores session state in httpOnly cookies.
   - Authenticated pages render inside the root layout/admin shell, use shared providers, and fetch/mutate data via server actions and the HTTP wrapper.
   - Responses are normalized before reaching components, and role-based wrappers decide what portions of the UI are exposed.

Main entry points: [`src/lib/httpClient.js`](https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/httpClient.js) (HTTP client), [`src/components/ui/layouts/admin-layout.jsx`](https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/layouts/admin-layout.jsx) (Admin shell), [`src/app/layout.jsx`](https://github.com/rakib-cloud/car-allocation/blob/main/src/app/layout.jsx) (Root layout), [`src/app/(root)/layout.jsx`](https://github.com/rakib-cloud/car-allocation/blob/main/src/app/(root)/layout.jsx) (Admin layout)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_group_app["App routes"]
  node_node_root_layout["Root layout<br/>next layout<br/>[layout.jsx]"]
  node_node_auth_route["Sign in<br/>public route<br/>[page.jsx]"]
  node_node_admin_layout["Admin layout<br/>auth layout<br/>[layout.jsx]"]
  node_node_root_page["Admin home<br/>dashboard page<br/>[page.jsx]"]
  node_node_maintenance_page["Maintenance<br/>operational route<br/>[page.jsx]"]
end

subgraph group_group_shell["Admin shell"]
  node_node_admin_shell["Admin shell<br/>layout component<br/>[admin-layout.jsx]"]
  node_node_header["Header<br/>navigation ui<br/>[header.jsx]"]
  node_node_sidebar["Sidebar<br/>navigation ui<br/>[sidebar.jsx]"]
  node_node_mobile_nav["Mobile nav<br/>navigation ui"]
end

subgraph group_group_auth["Auth and access"]
  node_node_middleware{{"Middleware<br/>request gate<br/>[middleware.js]"}}
  node_node_auth_context(("Auth context<br/>client session<br/>[AuthContext.jsx]"))
  node_node_manual_auth["Manual auth<br/>jwt session<br/>[manual-auth.js]"]
  node_node_maintenance_flag["Maintenance flag<br/>env flag<br/>[maintenanceMode.js]"]
end

subgraph group_group_data["Data layer"]
  node_node_signin_action["Sign-in action<br/>server action<br/>[sign-in-action.js]"]
  node_node_refresh_action["Refresh action<br/>server action"]
  node_node_auth_request_action["Authorized request<br/>server action"]
  node_node_allocation_actions["Allocation actions<br/>feature actions"]
  node_node_http_client["HTTP client<br/>fetch wrapper<br/>[httpClient.js]"]
  node_node_api_envelope["API envelope<br/>response shape<br/>[api-envelope.js]"]
  node_node_api_urls["API URLs<br/>endpoint config<br/>[api-url.js]"]
  node_node_error_helpers["Error helpers<br/>api errors"]
  node_node_normalize["Normalize detail<br/>data util"]
end

subgraph group_group_ui["Shared UI"]
  node_node_page_wrapper["Page wrapper<br/>ui gate<br/>[page-wrapper.jsx]"]
  node_node_role_perm["Role guard<br/>rbac ui"]
  node_node_theme_provider(("Theme provider<br/>[theme-provider.jsx]"))
  node_node_antd_provider(("Antd provider<br/>[antd-provider.jsx]"))
  node_node_loader(("Loader<br/>loading ui<br/>[loader.jsx]"))
  node_node_toaster(("Toaster<br/>notification ui<br/>[sonner.jsx]"))
  node_node_detail_hook(("Detail fetch<br/>data hook<br/>[useDetailFetch.js]"))
  node_node_utils["Utilities<br/>shared utils<br/>[utils.js]"]
  node_node_branding["Branding<br/>[branding.js]"]
end

node_node_middleware -->|"redirects unauthenticated"| node_node_auth_route
node_node_middleware -->|"short-circuits"| node_node_maintenance_page
node_node_root_layout -->|"wraps"| node_node_theme_provider
node_node_root_layout -->|"wraps"| node_node_antd_provider
node_node_root_layout -->|"uses"| node_node_loader
node_node_root_layout -->|"mounts"| node_node_toaster
node_node_admin_layout -->|"renders"| node_node_admin_shell
node_node_admin_shell -->|"contains"| node_node_header
node_node_admin_shell -->|"contains"| node_node_sidebar
node_node_admin_shell -->|"contains"| node_node_mobile_nav
node_node_admin_layout -->|"provides"| node_node_auth_context
node_node_admin_layout -->|"wraps"| node_node_page_wrapper
node_node_page_wrapper -->|"enforces"| node_node_role_perm
node_node_signin_action -->|"uses"| node_node_manual_auth
node_node_signin_action -->|"calls"| node_node_http_client
node_node_refresh_action -->|"uses"| node_node_manual_auth
node_node_auth_request_action -->|"uses"| node_node_manual_auth
node_node_auth_request_action -->|"calls"| node_node_http_client
node_node_allocation_actions -->|"calls"| node_node_http_client
node_node_http_client -->|"targets"| node_node_api_urls
node_node_http_client -->|"normalizes"| node_node_api_envelope
node_node_http_client -->|"handles"| node_node_error_helpers
node_node_detail_hook -->|"fetches via"| node_node_http_client
node_node_detail_hook -->|"transforms"| node_node_normalize
node_node_utils -->|"supports"| node_node_normalize
node_node_root_page -->|"uses"| node_node_page_wrapper
node_node_root_page -->|"mutates via"| node_node_allocation_actions
node_node_auth_route -->|"submits to"| node_node_signin_action
node_node_maintenance_page -->|"driven by"| node_node_maintenance_flag
node_node_branding -->|"styles"| node_node_admin_shell

click node_node_root_layout "https://github.com/rakib-cloud/car-allocation/blob/main/src/app/layout.jsx"
click node_node_auth_route "https://github.com/rakib-cloud/car-allocation/blob/main/src/app/(auth)/sign-in/page.jsx"
click node_node_admin_layout "https://github.com/rakib-cloud/car-allocation/blob/main/src/app/(root)/layout.jsx"
click node_node_root_page "https://github.com/rakib-cloud/car-allocation/blob/main/src/app/(root)/page.jsx"
click node_node_maintenance_page "https://github.com/rakib-cloud/car-allocation/blob/main/src/app/maintenance/page.jsx"
click node_node_middleware "https://github.com/rakib-cloud/car-allocation/blob/main/middleware.js"
click node_node_auth_context "https://github.com/rakib-cloud/car-allocation/blob/main/src/app/(root)/AuthContext.jsx"
click node_node_manual_auth "https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/auth/manual-auth.js"
click node_node_signin_action "https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/actions/auth-actions/sign-in-action.js"
click node_node_refresh_action "https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/actions/auth-actions/token-refresh-action.js"
click node_node_auth_request_action "https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/actions/auth-actions/authorized-request-action.js"
click node_node_allocation_actions "https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/actions/allocation-actions.js"
click node_node_http_client "https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/httpClient.js"
click node_node_api_envelope "https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/api-envelope.js"
click node_node_api_urls "https://github.com/rakib-cloud/car-allocation/blob/main/src/constant/api-url.js"
click node_node_error_helpers "https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/helpers/handle-api-errors.js"
click node_node_page_wrapper "https://github.com/rakib-cloud/car-allocation/blob/main/src/components/wrappers/page-wrapper.jsx"
click node_node_role_perm "https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/user-role-permission.jsx"
click node_node_admin_shell "https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/layouts/admin-layout.jsx"
click node_node_header "https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/header.jsx"
click node_node_sidebar "https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/sidebar.jsx"
click node_node_mobile_nav "https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/mobile-footer-nav.jsx"
click node_node_theme_provider "https://github.com/rakib-cloud/car-allocation/blob/main/src/providers/theme-provider.jsx"
click node_node_antd_provider "https://github.com/rakib-cloud/car-allocation/blob/main/src/providers/antd-provider.jsx"
click node_node_loader "https://github.com/rakib-cloud/car-allocation/blob/main/src/components/common/loader.jsx"
click node_node_toaster "https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/sonner.jsx"
click node_node_detail_hook "https://github.com/rakib-cloud/car-allocation/blob/main/src/hooks/useDetailFetch.js"
click node_node_normalize "https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/utils/normalize-detail-response.js"
click node_node_utils "https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/utils/utils.js"
click node_node_branding "https://github.com/rakib-cloud/car-allocation/blob/main/src/constant/branding.js"
click node_node_maintenance_flag "https://github.com/rakib-cloud/car-allocation/blob/main/src/constants/maintenanceMode.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_node_root_layout,node_node_auth_route,node_node_admin_layout,node_node_root_page,node_node_maintenance_page toneBlue
class node_node_admin_shell,node_node_header,node_node_sidebar,node_node_mobile_nav toneAmber
class node_node_middleware,node_node_auth_context,node_node_manual_auth,node_node_maintenance_flag toneMint
class node_node_signin_action,node_node_refresh_action,node_node_auth_request_action,node_node_allocation_actions,node_node_http_client,node_node_api_envelope,node_node_api_urls,node_node_error_helpers,node_node_normalize toneRose
class node_node_page_wrapper,node_node_role_perm,node_node_theme_provider,node_node_antd_provider,node_node_loader,node_node_toaster,node_node_detail_hook,node_node_utils,node_node_branding toneIndigo
```

## Components

### App routes

Next.js route boundaries and layouts

- [Root layout](https://github.com/rakib-cloud/car-allocation/blob/main/src/app/layout.jsx): next layout · Global app root layout · `src/app/layout.jsx`
- [Sign in](https://github.com/rakib-cloud/car-allocation/blob/main/src/app/(auth)/sign-in/page.jsx): public route · Public login page outside the admin shell · `src/app/(auth)/sign-in/page.jsx`
- [Admin layout](https://github.com/rakib-cloud/car-allocation/blob/main/src/app/(root)/layout.jsx): auth layout · Authenticated route-group layout · `src/app/(root)/layout.jsx`
- [Admin home](https://github.com/rakib-cloud/car-allocation/blob/main/src/app/(root)/page.jsx): dashboard page · Main authenticated landing page · `src/app/(root)/page.jsx`
- [Maintenance](https://github.com/rakib-cloud/car-allocation/blob/main/src/app/maintenance/page.jsx): operational route · Dedicated maintenance-mode page · `src/app/maintenance/page.jsx`

### Admin shell

Authenticated UI structure and navigation

- [Admin shell](https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/layouts/admin-layout.jsx): layout component · Main authenticated shell container · `src/components/ui/layouts/admin-layout.jsx`
- [Header](https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/header.jsx): navigation ui · Top navigation for authenticated pages · `src/components/ui/header.jsx`
- [Sidebar](https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/sidebar.jsx): navigation ui · Desktop navigation rail · `src/components/ui/sidebar.jsx`
- [Mobile nav](https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/mobile-footer-nav.jsx): navigation ui · Mobile footer navigation · `src/components/ui/mobile-footer-nav.jsx`

### Auth and access

Session, protection, and maintenance boundaries

- [Middleware](https://github.com/rakib-cloud/car-allocation/blob/main/middleware.js): request gate · First-line routing and access boundary · `middleware.js`
- [Auth context](https://github.com/rakib-cloud/car-allocation/blob/main/src/app/(root)/AuthContext.jsx): client session · Client-side session state for authenticated UI · `src/app/(root)/AuthContext.jsx`
- [Manual auth](https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/auth/manual-auth.js): jwt session · Server-centered cookie/session auth logic · `src/lib/auth/manual-auth.js`
- [Maintenance flag](https://github.com/rakib-cloud/car-allocation/blob/main/src/constants/maintenanceMode.js): env flag · Maintenance-mode configuration · `src/constants/maintenanceMode.js`

### Data layer

Server actions, HTTP access, and response shaping

- [Sign-in action](https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/actions/auth-actions/sign-in-action.js): server action · Handles login exchange · `src/lib/actions/auth-actions/sign-in-action.js`
- [Refresh action](https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/actions/auth-actions/token-refresh-action.js): server action · Renews session tokens · `src/lib/actions/auth-actions/token-refresh-action.js`
- [Authorized request](https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/actions/auth-actions/authorized-request-action.js): server action · Authenticated backend request wrapper · `src/lib/actions/auth-actions/authorized-request-action.js`
- [Allocation actions](https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/actions/allocation-actions.js): feature actions · Allocation-specific server mutations · `src/lib/actions/allocation-actions.js`
- [HTTP client](https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/httpClient.js): fetch wrapper · Central native fetch layer · `src/lib/httpClient.js`
- [API envelope](https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/api-envelope.js): response shape · Normalizes backend response structure · `src/lib/api-envelope.js`
- [API URLs](https://github.com/rakib-cloud/car-allocation/blob/main/src/constant/api-url.js): endpoint config · Backend endpoint definitions · `src/constant/api-url.js`
- [Error helpers](https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/helpers/handle-api-errors.js): api errors · Centralized API error handling · `src/lib/helpers/handle-api-errors.js`
- [Normalize detail](https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/utils/normalize-detail-response.js): data util · Response normalization helper · `src/lib/utils/normalize-detail-response.js`

### Shared UI

Providers, shared components, and helpers

- [Page wrapper](https://github.com/rakib-cloud/car-allocation/blob/main/src/components/wrappers/page-wrapper.jsx): ui gate · Page-level consistency and access wrapper · `src/components/wrappers/page-wrapper.jsx`
- [Role guard](https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/user-role-permission.jsx): rbac ui · Role-aware rendering in the UI layer · `src/components/ui/user-role-permission.jsx`
- [Theme provider](https://github.com/rakib-cloud/car-allocation/blob/main/src/providers/theme-provider.jsx): provider · Client theme state and persistence · `src/providers/theme-provider.jsx`
- [Antd provider](https://github.com/rakib-cloud/car-allocation/blob/main/src/providers/antd-provider.jsx): provider · Ant Design app-wide provider · `src/providers/antd-provider.jsx`
- [Loader](https://github.com/rakib-cloud/car-allocation/blob/main/src/components/common/loader.jsx): loading ui · Shared loading state component · `src/components/common/loader.jsx`
- [Toaster](https://github.com/rakib-cloud/car-allocation/blob/main/src/components/ui/sonner.jsx): notification ui · Global toast notifications · `src/components/ui/sonner.jsx`
- [Detail fetch](https://github.com/rakib-cloud/car-allocation/blob/main/src/hooks/useDetailFetch.js): data hook · Reusable detail-view fetch hook · `src/hooks/useDetailFetch.js`
- [Utilities](https://github.com/rakib-cloud/car-allocation/blob/main/src/lib/utils/utils.js): shared utils · Generic helper utilities · `src/lib/utils/utils.js`
- [Branding](https://github.com/rakib-cloud/car-allocation/blob/main/src/constant/branding.js): branding config · Central brand colors and labels · `src/constant/branding.js`

## Connections

- Middleware → Sign in: redirects unauthenticated · Routes public users to sign-in when needed
- Middleware → Maintenance: short-circuits · Diverts requests during maintenance mode
- Root layout → Theme provider: wraps · Global layout installs theme state
- Root layout → Antd provider: wraps · Global layout installs UI provider
- Root layout → Loader: uses · Shared app-level loading state
- Root layout → Toaster: mounts · Global notification surface
- Admin layout → Admin shell: renders · Authenticated layout composes the shell
- Admin shell → Header: contains · Desktop top navigation
- Admin shell → Sidebar: contains · Primary desktop navigation
- Admin shell → Mobile nav: contains · Mobile navigation layer
- Admin layout → Auth context: provides · Supplies session context to admin UI
- Admin layout → Page wrapper: wraps · Page-level access and layout consistency
- Page wrapper → Role guard: enforces · Controls role-based visibility
- Sign-in action → Manual auth: uses · Login flow relies on server auth logic
- Sign-in action → HTTP client: calls · Uses central HTTP transport
- Refresh action → Manual auth: uses · Refresh flow updates cookie-backed session
- Authorized request → Manual auth: uses · Authenticated wrapper depends on session state
- Authorized request → HTTP client: calls · Performs backend requests through fetch wrapper
- Allocation actions → HTTP client: calls · Feature mutations use the shared HTTP layer
- HTTP client → API URLs: targets · Resolves backend endpoints
- HTTP client → API envelope: normalizes · Aligns response shape
- HTTP client → Error helpers: handles · Routes failures through centralized error handling
- Detail fetch → HTTP client: fetches via · Reusable detail fetching depends on HTTP client
- Detail fetch → Normalize detail: transforms · Normalizes detail responses for consumers
- Utilities → Normalize detail: supports · Shared helper layer underpins response shaping
- Admin home → Page wrapper: uses · Admin page sits behind the wrapper
- Admin home → Allocation actions: mutates via · Feature page triggers server actions
- Sign in → Sign-in action: submits to · Login page initiates sign-in action
- Maintenance → Maintenance flag: driven by · Maintenance route is controlled by config
- Branding → Admin shell: styles · Branding influences shell presentation
