# arraniri46/sso-auth architecture

> Architecture diagram of the GitHub repository arraniri46/sso-auth, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/arraniri46/sso-auth
- Repository: https://github.com/arraniri46/sso-auth

## Overview

This repository is a Next.js app presenting an SSO-branded login screen and an admin dashboard for centralized access control. The visible user flow is to open the login page, enter credentials, and—separately in the implemented dashboard layout—navigate admin dashboard, absence, employee, department, application, and role-management pages. The README describes JWT authentication, HTTP-only cookies, route guarding, and integrated APIs, but those backend capabilities are not verifiable in the supplied tree or excerpts; the backend auth service is present, while runtime authentication wiring is unclear.

Main entry points: [`src/app/(frontend)/(dashboard)/layout.tsx`](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/layout.tsx) (Dashboard layout), [`src/components/layouts/admin-layouts/sidebar.tsx`](https://github.com/arraniri46/sso-auth/blob/wbbm/src/components/layouts/admin-layouts/sidebar.tsx) (Admin sidebar), [`src/app/(frontend)/(auth)/auth/_components/login-form.tsx`](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(auth)/auth/_components/login-form.tsx) (Login form), [`src/app/(frontend)/(auth)/auth/login/page.tsx`](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(auth)/auth/login/page.tsx) (Login page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_auth["Authentication UI"]
  node_login["Login form<br/>[login-form.tsx]"]
  node_loginpage["Login page<br/>[page.tsx]"]
  node_authservice["Auth service<br/>[index.ts]"]
end

subgraph group_admin["Admin workspace"]
  node_dashboardlayout["Dashboard layout<br/>[layout.tsx]"]
  node_dashboard["Admin dashboard<br/>[page.tsx]"]
  node_absenceadmin["Absence admin<br/>[page.tsx]"]
  node_absenceuser["Absence page<br/>[page.tsx]"]
  node_employees["Employee management<br/>[page.tsx]"]
  node_departments["Department management<br/>[page.tsx]"]
  node_applications["Application management<br/>[page.tsx]"]
  node_roles["Role settings<br/>[page.tsx]"]
end

subgraph group_shell["Shared UI state"]
  node_sidebar["Admin sidebar<br/>[sidebar.tsx]"]
  node_navbar["Admin navbar<br/>[navbar.tsx]"]
  node_siteconfig["Navigation config<br/>[site-config.tsx]"]
  node_globalstore["UI state store<br/>[global-store.tsx]"]
  node_loading["Loading view<br/>[loading-view.tsx]"]
  node_logo["Brand logo<br/>[logo.tsx]"]
  node_root["Root layout<br/>[layout.tsx]"]
end

node_visitor(("User"))

node_visitor -->|"opens login"| node_loginpage
node_loginpage -->|"renders"| node_login
node_visitor -.->|"opens workspace"| node_dashboardlayout
node_dashboardlayout -->|"renders"| node_sidebar
node_dashboardlayout -->|"renders"| node_navbar
node_dashboardlayout -->|"uses fallback"| node_loading
node_dashboardlayout -.->|"hosts page"| node_dashboard
node_dashboardlayout -.->|"hosts page"| node_absenceadmin
node_dashboardlayout -.->|"hosts page"| node_employees
node_dashboardlayout -.->|"hosts page"| node_departments
node_dashboardlayout -.->|"hosts page"| node_applications
node_dashboardlayout -.->|"hosts page"| node_roles
node_sidebar -->|"reads links"| node_siteconfig
node_sidebar -->|"reads state"| node_globalstore
node_sidebar -->|"renders"| node_logo
node_navbar -->|"reads state"| node_globalstore
node_root -.->|"wraps app"| node_dashboardlayout
node_login -.->|"submits credentials"| node_authservice

click node_login "https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(auth)/auth/_components/login-form.tsx"
click node_loginpage "https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(auth)/auth/login/page.tsx"
click node_authservice "https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(backend)/services/auth/index.ts"
click node_dashboardlayout "https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/layout.tsx"
click node_dashboard "https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/admin/dashboard/page.tsx"
click node_absenceadmin "https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/admin/absence/page.tsx"
click node_absenceuser "https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/absence/page.tsx"
click node_employees "https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/admin/management/employees/page.tsx"
click node_departments "https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/admin/management/departments/page.tsx"
click node_applications "https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/admin/management/applications/page.tsx"
click node_roles "https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/admin/setting/roles/page.tsx"
click node_sidebar "https://github.com/arraniri46/sso-auth/blob/wbbm/src/components/layouts/admin-layouts/sidebar.tsx"
click node_navbar "https://github.com/arraniri46/sso-auth/blob/wbbm/src/components/layouts/admin-layouts/navbar.tsx"
click node_siteconfig "https://github.com/arraniri46/sso-auth/blob/wbbm/src/config/site-config.tsx"
click node_globalstore "https://github.com/arraniri46/sso-auth/blob/wbbm/src/store/global-store.tsx"
click node_loading "https://github.com/arraniri46/sso-auth/blob/wbbm/src/components/partials/loading-view.tsx"
click node_logo "https://github.com/arraniri46/sso-auth/blob/wbbm/src/components/partials/logo.tsx"
click node_root "https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/layout.tsx"

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_login,node_loginpage,node_authservice,node_visitor toneBlue
class node_dashboardlayout,node_dashboard,node_absenceadmin,node_absenceuser,node_employees,node_departments,node_applications,node_roles toneAmber
class node_sidebar,node_navbar,node_siteconfig,node_globalstore,node_loading,node_logo,node_root toneMint
```

## Components

### Authentication UI

- [Login form](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(auth)/auth/_components/login-form.tsx): `src/app/(frontend)/(auth)/auth/_components/login-form.tsx`
- [Login page](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(auth)/auth/login/page.tsx): `src/app/(frontend)/(auth)/auth/login/page.tsx`
- [Auth service](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(backend)/services/auth/index.ts): `src/app/(backend)/services/auth/index.ts`

### Admin workspace

- [Dashboard layout](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/layout.tsx): `src/app/(frontend)/(dashboard)/layout.tsx`
- [Admin dashboard](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/admin/dashboard/page.tsx): `src/app/(frontend)/(dashboard)/admin/dashboard/page.tsx`
- [Absence admin](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/admin/absence/page.tsx): `src/app/(frontend)/(dashboard)/admin/absence/page.tsx`
- [Absence page](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/absence/page.tsx): `src/app/(frontend)/absence/page.tsx`
- [Employee management](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/admin/management/employees/page.tsx): `src/app/(frontend)/(dashboard)/admin/management/employees/page.tsx`
- [Department management](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/admin/management/departments/page.tsx): `src/app/(frontend)/(dashboard)/admin/management/departments/page.tsx`
- [Application management](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/admin/management/applications/page.tsx): `src/app/(frontend)/(dashboard)/admin/management/applications/page.tsx`
- [Role settings](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/(frontend)/(dashboard)/admin/setting/roles/page.tsx): `src/app/(frontend)/(dashboard)/admin/setting/roles/page.tsx`

### Shared UI state

- [Admin sidebar](https://github.com/arraniri46/sso-auth/blob/wbbm/src/components/layouts/admin-layouts/sidebar.tsx): `src/components/layouts/admin-layouts/sidebar.tsx`
- [Admin navbar](https://github.com/arraniri46/sso-auth/blob/wbbm/src/components/layouts/admin-layouts/navbar.tsx): `src/components/layouts/admin-layouts/navbar.tsx`
- [Navigation config](https://github.com/arraniri46/sso-auth/blob/wbbm/src/config/site-config.tsx): `src/config/site-config.tsx`
- [UI state store](https://github.com/arraniri46/sso-auth/blob/wbbm/src/store/global-store.tsx): `src/store/global-store.tsx`
- [Loading view](https://github.com/arraniri46/sso-auth/blob/wbbm/src/components/partials/loading-view.tsx): `src/components/partials/loading-view.tsx`
- [Brand logo](https://github.com/arraniri46/sso-auth/blob/wbbm/src/components/partials/logo.tsx): `src/components/partials/logo.tsx`
- [Root layout](https://github.com/arraniri46/sso-auth/blob/wbbm/src/app/layout.tsx): `src/app/layout.tsx`

### Other components

- **User**

## Connections

- User → Login page: opens login (evidence: `src/app/(frontend)/(auth)/auth/login/page.tsx`)
- Login page → Login form: renders (evidence: `src/app/(frontend)/(auth)/auth/login/page.tsx`)
- User → Dashboard layout: opens workspace
- Dashboard layout → Admin sidebar: renders (evidence: `src/app/(frontend)/(dashboard)/layout.tsx`)
- Dashboard layout → Admin navbar: renders (evidence: `src/app/(frontend)/(dashboard)/layout.tsx`)
- Dashboard layout → Loading view: uses fallback (evidence: `src/app/(frontend)/(dashboard)/layout.tsx`)
- Dashboard layout → Admin dashboard: hosts page
- Dashboard layout → Absence admin: hosts page
- Dashboard layout → Employee management: hosts page
- Dashboard layout → Department management: hosts page
- Dashboard layout → Application management: hosts page
- Dashboard layout → Role settings: hosts page
- Admin sidebar → Navigation config: reads links (evidence: `src/components/layouts/admin-layouts/sidebar.tsx`)
- Admin sidebar → UI state store: reads state (evidence: `src/components/layouts/admin-layouts/sidebar.tsx`)
- Admin sidebar → Brand logo: renders (evidence: `src/components/layouts/admin-layouts/sidebar.tsx`)
- Admin navbar → UI state store: reads state (evidence: `src/components/layouts/admin-layouts/navbar.tsx`)
- Root layout → Dashboard layout: wraps app
- Login form → Auth service: submits credentials
