# saxenasunny/campus-portal architecture

> Architecture diagram of the GitHub repository saxenasunny/campus-portal, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/saxenasunny/campus-portal
- Repository: https://github.com/saxenasunny/campus-portal

## Overview

Campus Portal is a multi-tenant university ERP and learning portal, with role-specific dashboards and routes for students, faculty, administrators, employers, and other campus roles. The main user journey is tenant-scoped sign-in, role resolution, dashboard selection, and navigation into academic, student-service, accreditation, and campus-operations areas. The sampled source confirms routing, authentication, tenant lookup, and some dashboard capabilities; most page implementations were not sampled, so their internal data flow and integrations are not inferred. The README describes only a Vite template, not additional product capabilities.

Main entry points: [`src/App.tsx`](https://github.com/saxenasunny/campus-portal/blob/main/src/App.tsx) (Tenant routes), [`src/pages/DashboardRouter.tsx`](https://github.com/saxenasunny/campus-portal/blob/main/src/pages/DashboardRouter.tsx) (Role dashboard), [`src/contexts/AuthContext.tsx`](https://github.com/saxenasunny/campus-portal/blob/main/src/contexts/AuthContext.tsx) (Authentication), [`src/lib/supabase.ts`](https://github.com/saxenasunny/campus-portal/blob/main/src/lib/supabase.ts) (Supabase client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application shell"]
  node_entry["React entry<br/>[main.tsx]"]
  node_app_routes["Tenant routes<br/>[App.tsx]"]
  node_role_router["Role dashboard"]
  node_app_shell["Application shell<br/>[AppShell.tsx]"]
  node_sidebar["Role navigation<br/>[Sidebar.tsx]"]
end

subgraph group_identity["Identity and tenancy"]
  node_auth["Authentication<br/>[AuthContext.tsx]"]
  node_tenant["Tenant context<br/>[TenantContext.tsx]"]
  node_login["Tenant sign-in"]
  node_supabase_client["Supabase client<br/>[supabase.ts]"]
end

subgraph group_academics["Academic operations"]
  node_faculty_area["Faculty teaching"]
  node_hod_area["Department oversight"]
  node_registrar_area["Academic registry"]
end

subgraph group_student["Student services"]
  node_student_area["Student portal"]
end

subgraph group_accreditation["Accreditation"]
  node_accreditation_area["Outcome and accreditation"]
end

subgraph group_operations["Campus operations"]
  node_admin_area["Administration"]
  node_placement_area["Placement and employers"]
  node_erp_area["Campus ERP services"]
  node_common_area["Profile and settings"]
end

node_campus_user(("Campus user"))
node_supabase_service[("Supabase")]

node_campus_user -->|"opens portal"| node_entry
node_entry -->|"renders"| node_app_routes
node_app_routes -->|"provides auth"| node_auth
node_app_routes -->|"provides tenant"| node_tenant
node_app_routes -->|"routes sign-in"| node_login
node_login -->|"requests sign-in"| node_auth
node_auth -->|"uses"| node_supabase_client
node_tenant -->|"queries tenant"| node_supabase_client
node_supabase_client -->|"auth and data requests"| node_supabase_service
node_app_routes -->|"routes dashboard"| node_role_router
node_role_router -->|"reads role"| node_auth
node_role_router -->|"dispatches student"| node_student_area
node_role_router -->|"dispatches faculty"| node_faculty_area
node_role_router -->|"dispatches HOD"| node_hod_area
node_role_router -->|"dispatches registrar"| node_registrar_area
node_role_router -->|"dispatches admin"| node_admin_area
node_role_router -->|"dispatches placement"| node_placement_area
node_app_routes -->|"wraps protected routes"| node_app_shell
node_app_shell -->|"renders navigation"| node_sidebar
node_sidebar -->|"reads user role"| node_auth
node_app_routes -->|"routes accreditation"| node_accreditation_area
node_app_routes -->|"routes ERP"| node_erp_area
node_app_routes -->|"routes profile"| node_common_area

click node_entry "https://github.com/saxenasunny/campus-portal/blob/main/src/main.tsx"
click node_app_routes "https://github.com/saxenasunny/campus-portal/blob/main/src/App.tsx"
click node_role_router "https://github.com/saxenasunny/campus-portal/blob/main/src/pages/DashboardRouter.tsx"
click node_app_shell "https://github.com/saxenasunny/campus-portal/blob/main/src/components/layout/AppShell.tsx"
click node_sidebar "https://github.com/saxenasunny/campus-portal/blob/main/src/components/layout/Sidebar.tsx"
click node_auth "https://github.com/saxenasunny/campus-portal/blob/main/src/contexts/AuthContext.tsx"
click node_tenant "https://github.com/saxenasunny/campus-portal/blob/main/src/contexts/TenantContext.tsx"
click node_login "https://github.com/saxenasunny/campus-portal/blob/main/src/pages/auth/TenantLoginPage.tsx"
click node_supabase_client "https://github.com/saxenasunny/campus-portal/blob/main/src/lib/supabase.ts"
click node_student_area "https://github.com/saxenasunny/campus-portal/tree/main/src/pages/student"
click node_faculty_area "https://github.com/saxenasunny/campus-portal/tree/main/src/pages/faculty"
click node_hod_area "https://github.com/saxenasunny/campus-portal/tree/main/src/pages/hod"
click node_registrar_area "https://github.com/saxenasunny/campus-portal/tree/main/src/pages/registrar"
click node_accreditation_area "https://github.com/saxenasunny/campus-portal/tree/main/src/pages/accreditation"
click node_admin_area "https://github.com/saxenasunny/campus-portal/tree/main/src/pages/admin"
click node_placement_area "https://github.com/saxenasunny/campus-portal/tree/main/src/pages/placement"
click node_erp_area "https://github.com/saxenasunny/campus-portal/tree/main/src/pages/erp"
click node_common_area "https://github.com/saxenasunny/campus-portal/tree/main/src/pages/common"

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_entry,node_app_routes,node_role_router,node_app_shell,node_sidebar,node_campus_user toneBlue
class node_auth,node_tenant,node_login,node_supabase_client,node_supabase_service toneAmber
class node_faculty_area,node_hod_area,node_registrar_area toneMint
class node_student_area toneRose
class node_accreditation_area toneIndigo
class node_admin_area,node_placement_area,node_erp_area,node_common_area toneTeal
```

## Components

### Application shell

- [React entry](https://github.com/saxenasunny/campus-portal/blob/main/src/main.tsx): `src/main.tsx`
- [Tenant routes](https://github.com/saxenasunny/campus-portal/blob/main/src/App.tsx): `src/App.tsx`
- [Role dashboard](https://github.com/saxenasunny/campus-portal/blob/main/src/pages/DashboardRouter.tsx): `src/pages/DashboardRouter.tsx`
- [Application shell](https://github.com/saxenasunny/campus-portal/blob/main/src/components/layout/AppShell.tsx): `src/components/layout/AppShell.tsx`
- [Role navigation](https://github.com/saxenasunny/campus-portal/blob/main/src/components/layout/Sidebar.tsx): `src/components/layout/Sidebar.tsx`

### Identity and tenancy

- [Authentication](https://github.com/saxenasunny/campus-portal/blob/main/src/contexts/AuthContext.tsx): `src/contexts/AuthContext.tsx`
- [Tenant context](https://github.com/saxenasunny/campus-portal/blob/main/src/contexts/TenantContext.tsx): `src/contexts/TenantContext.tsx`
- [Tenant sign-in](https://github.com/saxenasunny/campus-portal/blob/main/src/pages/auth/TenantLoginPage.tsx): `src/pages/auth/TenantLoginPage.tsx`
- [Supabase client](https://github.com/saxenasunny/campus-portal/blob/main/src/lib/supabase.ts): `src/lib/supabase.ts`

### Academic operations

- [Faculty teaching](https://github.com/saxenasunny/campus-portal/tree/main/src/pages/faculty): `src/pages/faculty`
- [Department oversight](https://github.com/saxenasunny/campus-portal/tree/main/src/pages/hod): `src/pages/hod`
- [Academic registry](https://github.com/saxenasunny/campus-portal/tree/main/src/pages/registrar): `src/pages/registrar`

### Student services

- [Student portal](https://github.com/saxenasunny/campus-portal/tree/main/src/pages/student): `src/pages/student`

### Accreditation

- [Outcome and accreditation](https://github.com/saxenasunny/campus-portal/tree/main/src/pages/accreditation): `src/pages/accreditation`

### Campus operations

- [Administration](https://github.com/saxenasunny/campus-portal/tree/main/src/pages/admin): `src/pages/admin`
- [Placement and employers](https://github.com/saxenasunny/campus-portal/tree/main/src/pages/placement): `src/pages/placement`
- [Campus ERP services](https://github.com/saxenasunny/campus-portal/tree/main/src/pages/erp): `src/pages/erp`
- [Profile and settings](https://github.com/saxenasunny/campus-portal/tree/main/src/pages/common): `src/pages/common`

### Other components

- **Campus user**
- **Supabase**

## Connections

- Campus user → React entry: opens portal
- React entry → Tenant routes: renders
- Tenant routes → Authentication: provides auth
- Tenant routes → Tenant context: provides tenant
- Tenant routes → Tenant sign-in: routes sign-in
- Tenant sign-in → Authentication: requests sign-in
- Authentication → Supabase client: uses
- Tenant context → Supabase client: queries tenant
- Supabase client → Supabase: auth and data requests
- Tenant routes → Role dashboard: routes dashboard
- Role dashboard → Authentication: reads role
- Role dashboard → Student portal: dispatches student
- Role dashboard → Faculty teaching: dispatches faculty
- Role dashboard → Department oversight: dispatches HOD
- Role dashboard → Academic registry: dispatches registrar
- Role dashboard → Administration: dispatches admin
- Role dashboard → Placement and employers: dispatches placement
- Tenant routes → Application shell: wraps protected routes
- Application shell → Role navigation: renders navigation
- Role navigation → Authentication: reads user role
- Tenant routes → Outcome and accreditation: routes accreditation
- Tenant routes → Campus ERP services: routes ERP
- Tenant routes → Profile and settings: routes profile
