# j-goyal/google-oauth-nextjs architecture

> Architecture diagram of the GitHub repository j-goyal/google-oauth-nextjs, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/j-goyal/google-oauth-nextjs
- Repository: https://github.com/j-goyal/google-oauth-nextjs

## Overview

1. This is a Next.js App Router frontend, not a standalone backend. The repository is organized around route-based UI screens under `src/app`, with shared layout, guards, and feature components supporting auth-protected pages.

2. The primary routes suggest an authentication and admin portal:
   - public/entry paths: `/`, `/sign-in`, `/callback`
   - protected app paths: `/dashboard`, `/sessions`
   - admin-only paths: `/admin/users`
   - access control/error paths: `/403` and `not-found`

3. The top-level UI shell lives in `src/app/layout.tsx` and `src/app/globals.css`. Shared chrome is split into reusable pieces like `Header`, `Footer`, `ProfileDropdown`, and `GlobalLoader`, indicating the app uses a consistent app frame with loading and user-state awareness.

4. Authentication is a first-class subsystem. `ClientAuthProvider`, `AuthLayout`, `SignInButton`, and `ManageAuth.module.ts` point to a login/session bootstrap flow. The presence of `src/app/callback/page.tsx` and `types/auth/GoogleAuthRequest.ts` suggests an OAuth-style sign-in callback, likely Google-based, with frontend handling of the redirect completion step.

5. Authorization is enforced in the client UI via guard components rather than only by route structure. `RoleGuard`, `AdminOnly`, and `SuperAdminOnly` indicate role-based access control, while `403` is the explicit access-denied destination. `utils/roleUtils.ts` and `constants/userRoles.ts` centralize role logic so multiple screens can share the same rules.

6. The app has a clear admin management subsystem under `src/components/admin` and `src/app/admin/users`. This includes:
   - listing users (`AdminGetAllUsersContent`)
   - changing roles (`UserRoleDropdown`)
   - inspecting user sessions (`UserSessionsModal`)
   This is the main operational/admin surface of the product.

7. Session visibility is a separate domain, not just part of login. `src/app/sessions/page.tsx`, `constants/userSessions.ts`, `types/sessions/*`, `utils/sessionUtils.ts`, and `ManageMe.module.ts` suggest the UI can fetch and render current or historical sessions for the signed-in user, and admins can inspect sessions per user.

8. Data access is centralized in a service layer rather than being scattered through components. `src/services/ManageAuth.module.ts`, `ManageMe.module.ts`, and `ManageUsers.module.ts` are the feature-specific API boundaries. These likely wrap calls to an external identity/user management backend through a shared HTTP client.

9. The HTTP layer is abstracted in `src/lib/axios.ts` and `src/lib/AxiosMethods.ts`. This is the core integration point between the frontend and the backend API, and it likely handles request configuration, interceptors, and method helpers consistently across auth, user, and session endpoints.

10. State management is split into small global stores:
   - `useAuthStore` for authenticated user/session state
   - `useGlobalLoader` for app-wide loading state
   This implies the UI reacts to auth transitions and network activity globally, not just within individual pages.

11. Shared UI primitives live in `src/components/ui` and appear to be a local design system layer. Components such as `button`, `input`, `select`, `table`, `pagination`, and `data-table` are reused by higher-level features. `components.json` suggests these primitives may be generated or styled via a component system like shadcn/ui.

12. Loading and skeleton states are intentionally separated from the main content. `GlobalLoader` handles app-level waiting states, while `src/components/shimmer/*` contains page-specific skeletons for the dashboard, header, access-denied view, and grid layouts. This indicates asynchronous data fetching is expected across multiple screens.

13. Error handling is normalized through utilities like `getErrorMessage` and `isGloballyHandledError`. That suggests the service layer and UI share a common pattern for translating API failures into user-facing messages, with some errors suppressed from duplicate handling.

14. Types and constants are split into domain-focused folders (`types/auth`, `types/users`, `types/sessions`, `constants/*`). This keeps user, auth, and session data contracts explicit and helps the architecture stay aligned with the backend API shape.

15. At a high level, the data flow is: route page mounts -> auth/client provider establishes current user -> guards decide access -> feature page calls a service module -> service uses the axios layer -> response populates stores/components -> UI renders tables, dropdowns, modals, or redirects to sign-in/403 as needed. The architecture is a client-heavy, role-aware admin portal with clear separation between routing, authorization, service access, and shared presentation.

Main entry points: [`src/services/ManageMe.module.ts`](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/services/ManageMe.module.ts) (Me Service), [`src/components/RoleGuard.tsx`](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/RoleGuard.tsx) (Role Guard), [`src/app/layout.tsx`](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/layout.tsx) (App Shell), [`src/lib/axios.ts`](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/lib/axios.ts) (HTTP Client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_grp_app["App Router"]
  node_app_root["Home<br/>route<br/>[page.tsx]"]
  node_app_layout["App Shell<br/>layout<br/>[layout.tsx]"]
  node_app_dashboard["Dashboard<br/>protected route<br/>[page.tsx]"]
  node_app_sessions["Sessions<br/>protected route<br/>[page.tsx]"]
  node_app_signin["Sign In<br/>entry route<br/>[page.tsx]"]
  node_app_callback["Callback<br/>oauth route<br/>[page.tsx]"]
  node_app_admin_users["Admin Users<br/>admin route<br/>[page.tsx]"]
  node_app_403["Forbidden<br/>error route<br/>[page.tsx]"]
  node_app_notfound["Not Found<br/>error route<br/>[not-found.tsx]"]
end

subgraph group_grp_auth["Auth & Access"]
  node_auth_provider["Auth Provider<br/>client provider"]
  node_auth_layout["Auth Layout<br/>auth shell<br/>[AuthLayout.tsx]"]
  node_sign_in_button["Sign In Button<br/>auth trigger<br/>[SignInButton.tsx]"]
  node_role_guard["Role Guard<br/>access guard<br/>[RoleGuard.tsx]"]
  node_admin_only["Admin Only<br/>access guard<br/>[AdminOnly.tsx]"]
  node_super_admin_only["Super Admin Only<br/>access guard<br/>[SuperAdminOnly.tsx]"]
end

subgraph group_grp_admin["Admin Surface"]
  node_admin_list["User List<br/>admin view"]
  node_user_role_dropdown["Role Picker<br/>admin control"]
  node_user_sessions_modal["Sessions Modal<br/>admin inspector"]
end

subgraph group_grp_data["Data Layer"]
  node_auth_store[("Auth Store<br/>state store<br/>[useAuthStore.ts]")]
  node_http_client[("HTTP Client<br/>axios layer<br/>[axios.ts]")]
  node_axios_methods["Method Helpers<br/>request helpers<br/>[AxiosMethods.ts]"]
  node_manage_auth["Auth Service<br/>service module"]
  node_manage_me["Me Service<br/>service module<br/>[ManageMe.module.ts]"]
  node_manage_users["Users Service<br/>service module"]
  node_session_utils["Session Utils<br/>domain utils<br/>[sessionUtils.ts]"]
  node_role_utils["Role Utils<br/>domain utils<br/>[roleUtils.ts]"]
  node_error_utils["Error Utils<br/>error handling<br/>[getErrorMessage.ts]"]
  node_handled_error["Handled Error Check<br/>error handling"]
  node_user_roles["User Roles<br/>constants<br/>[userRoles.ts]"]
  node_user_sessions["Session Constants<br/>[userSessions.ts]"]
end

subgraph group_grp_ui["Shared UI"]
  node_global_loader(("Global Loader<br/>ui state<br/>[GlobalLoader.tsx]"))
  node_header["Header<br/>chrome<br/>[Header.tsx]"]
  node_footer["Footer<br/>chrome<br/>[Footer.tsx]"]
  node_profile_dropdown["Profile Menu<br/>user menu"]
end

node_app_layout -->|"wraps"| node_auth_provider
node_app_layout -->|"uses"| node_header
node_app_layout -->|"uses"| node_footer
node_app_layout -->|"coordinates"| node_global_loader
node_app_root -->|"enters"| node_auth_layout
node_app_signin -->|"renders"| node_sign_in_button
node_app_callback -->|"completes via"| node_manage_auth
node_app_dashboard -->|"protected by"| node_role_guard
node_app_sessions -->|"protected by"| node_role_guard
node_app_admin_users -->|"protected by"| node_admin_only
node_app_admin_users -->|"protected by"| node_super_admin_only
node_app_403 -->|"targeted by"| node_role_guard
node_auth_provider -->|"hydrates"| node_auth_store
node_auth_layout -->|"reads"| node_auth_store
node_role_guard -->|"checks"| node_role_utils
node_role_guard -->|"compares"| node_user_roles
node_admin_only -->|"checks"| node_role_utils
node_super_admin_only -->|"checks"| node_role_utils
node_header -->|"includes"| node_profile_dropdown
node_admin_list -->|"uses"| node_user_role_dropdown
node_admin_list -->|"opens"| node_user_sessions_modal
node_admin_list -->|"loads via"| node_manage_users
node_user_sessions_modal -->|"loads via"| node_manage_me
node_app_sessions -->|"loads via"| node_manage_me
node_manage_auth -->|"uses"| node_http_client
node_manage_me -->|"uses"| node_http_client
node_manage_users -->|"uses"| node_http_client
node_http_client -->|"delegates to"| node_axios_methods
node_manage_me -->|"formats"| node_session_utils
node_manage_me -->|"uses"| node_user_sessions
node_manage_users -->|"handles"| node_error_utils
node_manage_auth -->|"handles"| node_error_utils
node_error_utils -->|"filters"| node_handled_error
node_app_dashboard -.->|"shows"| node_global_loader
node_app_sessions -.->|"shows"| node_global_loader
node_app_admin_users -.->|"shows"| node_global_loader

click node_app_root "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/page.tsx"
click node_app_layout "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/layout.tsx"
click node_app_dashboard "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/dashboard/page.tsx"
click node_app_sessions "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/sessions/page.tsx"
click node_app_signin "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/sign-in/page.tsx"
click node_app_callback "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/callback/page.tsx"
click node_app_admin_users "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/admin/users/page.tsx"
click node_app_403 "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/403/page.tsx"
click node_app_notfound "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/not-found.tsx"
click node_auth_provider "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/ClientAuthProvider.tsx"
click node_auth_layout "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/AuthLayout.tsx"
click node_sign_in_button "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/SignInButton.tsx"
click node_role_guard "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/RoleGuard.tsx"
click node_admin_only "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/AdminOnly.tsx"
click node_super_admin_only "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/SuperAdminOnly.tsx"
click node_auth_store "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/store/useAuthStore.ts"
click node_global_loader "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/GlobalLoader.tsx"
click node_header "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/Header.tsx"
click node_footer "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/Footer.tsx"
click node_profile_dropdown "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/ProfileDropdown.tsx"
click node_admin_list "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/admin/AdminGetAllUsersContent.tsx"
click node_user_role_dropdown "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/admin/UserRoleDropdown.tsx"
click node_user_sessions_modal "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/admin/UserSessionsModal.tsx"
click node_http_client "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/lib/axios.ts"
click node_axios_methods "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/lib/AxiosMethods.ts"
click node_manage_auth "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/services/ManageAuth.module.ts"
click node_manage_me "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/services/ManageMe.module.ts"
click node_manage_users "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/services/ManageUsers.module.ts"
click node_session_utils "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/utils/sessionUtils.ts"
click node_role_utils "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/utils/roleUtils.ts"
click node_error_utils "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/utils/getErrorMessage.ts"
click node_handled_error "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/utils/isGloballyHandledError.ts"
click node_user_roles "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/constants/userRoles.ts"
click node_user_sessions "https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/constants/userSessions.ts"

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_app_root,node_app_layout,node_app_dashboard,node_app_sessions,node_app_signin,node_app_callback,node_app_admin_users,node_app_403,node_app_notfound toneBlue
class node_auth_provider,node_auth_layout,node_sign_in_button,node_role_guard,node_admin_only,node_super_admin_only toneAmber
class node_admin_list,node_user_role_dropdown,node_user_sessions_modal toneMint
class node_auth_store,node_http_client,node_axios_methods,node_manage_auth,node_manage_me,node_manage_users,node_session_utils,node_role_utils,node_error_utils,node_handled_error,node_user_roles,node_user_sessions toneRose
class node_global_loader,node_header,node_footer,node_profile_dropdown toneIndigo
```

## Components

### App Router

Route-based screens and the root shell.

- [Home](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/page.tsx): route · Landing entry route at /. · `src/app/page.tsx`
- [App Shell](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/layout.tsx): layout · Root app layout and global styles. · `src/app/layout.tsx`
- [Dashboard](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/dashboard/page.tsx): protected route · Authenticated dashboard page. · `src/app/dashboard/page.tsx`
- [Sessions](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/sessions/page.tsx): protected route · Signed-in user session view. · `src/app/sessions/page.tsx`
- [Sign In](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/sign-in/page.tsx): entry route · Public sign-in page. · `src/app/sign-in/page.tsx`
- [Callback](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/callback/page.tsx): oauth route · Redirect completion for authentication. · `src/app/callback/page.tsx`
- [Admin Users](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/admin/users/page.tsx): admin route · Admin-only user management page. · `src/app/admin/users/page.tsx`
- [Forbidden](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/403/page.tsx): error route · Access-denied screen. · `src/app/403/page.tsx`
- [Not Found](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/app/not-found.tsx): error route · Next.js not-found boundary. · `src/app/not-found.tsx`

### Auth & Access

Login bootstrap, providers, and guards.

- [Auth Provider](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/ClientAuthProvider.tsx): client provider · Bootstraps authenticated client state. · `src/components/ClientAuthProvider.tsx`
- [Auth Layout](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/AuthLayout.tsx): auth shell · Wraps auth-sensitive UI and routing. · `src/components/AuthLayout.tsx`
- [Sign In Button](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/SignInButton.tsx): auth trigger · Starts the sign-in flow. · `src/components/SignInButton.tsx`
- [Role Guard](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/RoleGuard.tsx): access guard · Shared role-based route guard. · `src/components/RoleGuard.tsx`
- [Admin Only](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/AdminOnly.tsx): access guard · Restricts content to admins. · `src/components/AdminOnly.tsx`
- [Super Admin Only](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/SuperAdminOnly.tsx): access guard · Restricts content to super admins. · `src/components/SuperAdminOnly.tsx`

### Admin Surface

User management and admin session inspection.

- [User List](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/admin/AdminGetAllUsersContent.tsx): admin view · Admin user listing and actions. · `src/components/admin/AdminGetAllUsersContent.tsx`
- [Role Picker](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/admin/UserRoleDropdown.tsx): admin control · Changes a user's role. · `src/components/admin/UserRoleDropdown.tsx`
- [Sessions Modal](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/admin/UserSessionsModal.tsx): admin inspector · Shows sessions for a selected user. · `src/components/admin/UserSessionsModal.tsx`

### Data Layer

HTTP client, feature services, stores, and domain contracts.

- [Auth Store](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/store/useAuthStore.ts): state store · Authenticated user and session state. · `src/store/useAuthStore.ts`
- [HTTP Client](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/lib/axios.ts): axios layer · Shared request client and method helpers. · `src/lib/axios.ts`
- [Method Helpers](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/lib/AxiosMethods.ts): request helpers · Reusable HTTP method wrappers. · `src/lib/AxiosMethods.ts`
- [Auth Service](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/services/ManageAuth.module.ts): service module · Auth and callback-related API boundary. · `src/services/ManageAuth.module.ts`
- [Me Service](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/services/ManageMe.module.ts): service module · Current-user and session API boundary. · `src/services/ManageMe.module.ts`
- [Users Service](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/services/ManageUsers.module.ts): service module · Admin user-management API boundary. · `src/services/ManageUsers.module.ts`
- [Session Utils](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/utils/sessionUtils.ts): domain utils · Transforms and formats session data. · `src/utils/sessionUtils.ts`
- [Role Utils](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/utils/roleUtils.ts): domain utils · Centralized role checks and mapping. · `src/utils/roleUtils.ts`
- [Error Utils](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/utils/getErrorMessage.ts): error handling · Normalizes and suppresses handled errors. · `src/utils/getErrorMessage.ts`
- [Handled Error Check](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/utils/isGloballyHandledError.ts): error handling · Marks errors already handled globally. · `src/utils/isGloballyHandledError.ts`
- [User Roles](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/constants/userRoles.ts): constants · Role names and access tiers. · `src/constants/userRoles.ts`
- [Session Constants](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/constants/userSessions.ts): constants · Session-related labels and settings. · `src/constants/userSessions.ts`

### Shared UI

Reusable chrome, primitives, loaders, and shimmers.

- [Global Loader](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/GlobalLoader.tsx): ui state · App-wide loading state coordination. · `src/components/GlobalLoader.tsx`
- [Header](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/Header.tsx): chrome · Top-level app navigation and status area. · `src/components/Header.tsx`
- [Footer](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/Footer.tsx): chrome · Bottom app chrome. · `src/components/Footer.tsx`
- [Profile Menu](https://github.com/j-goyal/google-oauth-nextjs/blob/Main/src/components/ProfileDropdown.tsx): user menu · Signed-in user actions and account menu. · `src/components/ProfileDropdown.tsx`

## Connections

- App Shell → Auth Provider: wraps · Root shell initializes client auth state.
- App Shell → Header: uses · Shared app chrome rendered in the shell.
- App Shell → Footer: uses · Shared app chrome rendered in the shell.
- App Shell → Global Loader: coordinates · Global loading feedback is mounted at the top level.
- Home → Auth Layout: enters · Landing route is mediated by auth-aware layout.
- Sign In → Sign In Button: renders · Public entry point exposes sign-in action.
- Callback → Auth Service: completes via · OAuth callback flow hands off to auth service.
- Dashboard → Role Guard: protected by · Dashboard requires authenticated access.
- Sessions → Role Guard: protected by · Session page requires authenticated access.
- Admin Users → Admin Only: protected by · Admin user page is admin-restricted.
- Admin Users → Super Admin Only: protected by · Some actions require super-admin access.
- Forbidden → Role Guard: targeted by · Guard failures redirect here.
- Auth Provider → Auth Store: hydrates · Authenticated state is stored globally.
- Auth Layout → Auth Store: reads · Layout adapts to current auth state.
- Role Guard → Role Utils: checks · Shared role logic powers guards.
- Role Guard → User Roles: compares · Role constants define the access tiers.
- Admin Only → Role Utils: checks · Admin gating uses shared role logic.
- Super Admin Only → Role Utils: checks · Super-admin gating uses shared role logic.
- Header → Profile Menu: includes · User menu lives in the header.
- User List → Role Picker: uses · Admin table includes role-changing control.
- User List → Sessions Modal: opens · Admin table can inspect a user's sessions.
- User List → Users Service: loads via · Admin list is populated from the users service.
- Sessions Modal → Me Service: loads via · Session details are fetched from the me/session service.
- Sessions → Me Service: loads via · Signed-in user session page fetches session data.
- Auth Service → HTTP Client: uses · Feature service calls share the HTTP client.
- Me Service → HTTP Client: uses · Feature service calls share the HTTP client.
- Users Service → HTTP Client: uses · Feature service calls share the HTTP client.
- HTTP Client → Method Helpers: delegates to · Method wrappers sit beneath the client config.
- Me Service → Session Utils: formats · Session payloads are normalized for UI use.
- Me Service → Session Constants: uses · Session module shares constants and labels.
- Users Service → Error Utils: handles · Service errors are normalized for display.
- Auth Service → Error Utils: handles · Auth errors are normalized for display.
- Error Utils → Handled Error Check: filters · Global error suppression avoids duplicate handling.
- Dashboard → Global Loader: shows · Dashboard can surface loading state.
- Sessions → Global Loader: shows · Session page can surface loading state.
- Admin Users → Global Loader: shows · Admin page can surface loading state.
