# pupbtfocus/pup-bataan-focus architecture

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

- Interactive diagram: https://gitdiagram.com/pupbtfocus/pup-bataan-focus
- Repository: https://github.com/pupbtfocus/pup-bataan-focus

## Overview

PUP FOCUS is a role-based university faculty compliance and document-submission system. Faculty submit required documents and track status; staff and administrators manage accounts, submission windows, academic terms, reviews, and records. The tree also shows notifications, audit/transaction logs, backups, and reporting capabilities. The excerpts confirm several API-to-service and API-to-database interactions; most page-to-API wiring and unsampled feature internals are not shown, so those relationships are omitted or marked unverified.

Main entry points: [`pup-focus/app/api/faculty/submissions/create/route.ts`](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/faculty/submissions/create/route.ts) (Submission intake), [`pup-focus/lib/supabase/server.ts`](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/lib/supabase/server.ts) (Server database client), [`pup-focus/app/api/staff/submission-window/route.ts`](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/staff/submission-window/route.ts) (Window administration), [`pup-focus/app/api/staff/academic-terms/route.ts`](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/staff/academic-terms/route.ts) (Academic term management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and roles"]
  node_auth_ui["Sign-in and invites<br/>[login-form.tsx]"]
  node_auth_api["Authentication API<br/>[route.ts]"]
  node_role_policy["Role policy<br/>[roles.ts]"]
end

subgraph group_faculty["Faculty submissions"]
  node_faculty_portal["Faculty portal<br/>[page.tsx]"]
  node_submission_api["Submission intake<br/>[route.ts]"]
  node_window_rules["Window and term rules"]
  node_compliance["Compliance progress"]
  node_faculty_data["Submission history and data"]
end

subgraph group_operations["Staff operations"]
  node_document_review["Submission review"]
  node_staff_portal["Staff operations portal"]
  node_academic_terms["Academic term management<br/>[route.ts]"]
  node_window_admin["Window administration<br/>[route.ts]"]
  node_account_admin["Account management<br/>[route.ts]"]
  node_backup_archive["Backup and archive<br/>[route.ts]"]
  node_reports["Report export<br/>[route.ts]"]
end

subgraph group_platform["Shared services"]
  node_notifications["Notifications"]
  node_audit_logs["Audit logging"]
  node_supabase_server["Server database client<br/>[server.ts]"]
end

node_faculty_actor(("Faculty user"))
node_staff_actor(("Staff and admin"))
node_supabase[("Supabase data and storage")]
node_email["Email delivery"]

node_faculty_actor -.->|"signs in"| node_auth_ui
node_staff_actor -.->|"signs in"| node_auth_ui
node_auth_ui -.->|"authenticates"| node_auth_api
node_auth_api -.->|"creates session"| node_supabase_server
node_faculty_actor -.->|"uses portal"| node_faculty_portal
node_staff_actor -.->|"uses portal"| node_staff_portal
node_faculty_portal -.->|"submits documents"| node_submission_api
node_submission_api -->|"authenticates"| node_supabase_server
node_submission_api -->|"checks window"| node_window_rules
node_submission_api -->|"creates alert"| node_notifications
node_submission_api -->|"logs event"| node_audit_logs
node_submission_api -->|"stores submission"| node_supabase
node_window_admin -->|"authenticates"| node_supabase_server
node_window_admin -->|"evaluates schedule"| node_window_rules
node_window_admin -->|"updates window"| node_supabase
node_window_admin -->|"sends reminders"| node_email
node_academic_terms -->|"authenticates"| node_supabase_server
node_academic_terms -->|"normalizes term"| node_window_rules
node_academic_terms -->|"reads term data"| node_supabase
node_account_admin -->|"authenticates"| node_supabase_server
node_account_admin -->|"sends invitations"| node_email
node_account_admin -->|"manages accounts"| node_supabase
node_document_review -.->|"reviews records"| node_supabase
node_faculty_data -.->|"reads submissions"| node_supabase
node_compliance -.->|"shows progress"| node_faculty_portal
node_backup_archive -.->|"archives data"| node_supabase
node_reports -.->|"exports records"| node_supabase
node_role_policy -.->|"defines roles"| node_staff_portal

click node_auth_ui "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/components/auth/login-form.tsx"
click node_auth_api "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/auth/login/route.ts"
click node_role_policy "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/config/roles.ts"
click node_faculty_portal "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/(faculty)/faculty/submit/page.tsx"
click node_submission_api "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/faculty/submissions/create/route.ts"
click node_window_rules "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/submissions/services/submission-window.service.ts"
click node_compliance "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/compliance-management/services/compliance-engine.service.ts"
click node_faculty_data "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/submissions/services/faculty-data.service.ts"
click node_document_review "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/document-review/actions/review-submission.action.ts"
click node_staff_portal "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/faculty-management/components/staff-dashboard.tsx"
click node_academic_terms "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/staff/academic-terms/route.ts"
click node_window_admin "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/staff/submission-window/route.ts"
click node_account_admin "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/staff/user-registration-logs/route.ts"
click node_backup_archive "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/staff/backups/route.ts"
click node_reports "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/reports/export/route.ts"
click node_notifications "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/notifications/services/notification.service.ts"
click node_audit_logs "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/audit-logs/services/audit-log.service.ts"
click node_supabase_server "https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/lib/supabase/server.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_auth_ui,node_auth_api,node_role_policy,node_faculty_actor toneBlue
class node_faculty_portal,node_submission_api,node_window_rules,node_compliance,node_faculty_data,node_supabase toneAmber
class node_document_review,node_staff_portal,node_academic_terms,node_window_admin,node_account_admin,node_backup_archive,node_reports toneMint
class node_notifications,node_audit_logs,node_supabase_server toneRose
class node_staff_actor,node_email toneIndigo
```

## Components

### Access and roles

- [Sign-in and invites](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/components/auth/login-form.tsx): `pup-focus/components/auth/login-form.tsx`
- [Authentication API](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/auth/login/route.ts): `pup-focus/app/api/auth/login/route.ts`
- [Role policy](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/config/roles.ts): `pup-focus/config/roles.ts`

### Faculty submissions

- [Faculty portal](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/(faculty)/faculty/submit/page.tsx): `pup-focus/app/(faculty)/faculty/submit/page.tsx`
- [Submission intake](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/faculty/submissions/create/route.ts): `pup-focus/app/api/faculty/submissions/create/route.ts`
- [Window and term rules](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/submissions/services/submission-window.service.ts): `pup-focus/features/submissions/services/submission-window.service.ts`
- [Compliance progress](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/compliance-management/services/compliance-engine.service.ts): `pup-focus/features/compliance-management/services/compliance-engine.service.ts`
- [Submission history and data](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/submissions/services/faculty-data.service.ts): `pup-focus/features/submissions/services/faculty-data.service.ts`

### Staff operations

- [Submission review](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/document-review/actions/review-submission.action.ts): `pup-focus/features/document-review/actions/review-submission.action.ts`
- [Staff operations portal](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/faculty-management/components/staff-dashboard.tsx): `pup-focus/features/faculty-management/components/staff-dashboard.tsx`
- [Academic term management](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/staff/academic-terms/route.ts): `pup-focus/app/api/staff/academic-terms/route.ts`
- [Window administration](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/staff/submission-window/route.ts): `pup-focus/app/api/staff/submission-window/route.ts`
- [Account management](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/staff/user-registration-logs/route.ts): `pup-focus/app/api/staff/user-registration-logs/route.ts`
- [Backup and archive](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/staff/backups/route.ts): `pup-focus/app/api/staff/backups/route.ts`
- [Report export](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/app/api/reports/export/route.ts): `pup-focus/app/api/reports/export/route.ts`

### Shared services

- [Notifications](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/notifications/services/notification.service.ts): `pup-focus/features/notifications/services/notification.service.ts`
- [Audit logging](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/features/audit-logs/services/audit-log.service.ts): `pup-focus/features/audit-logs/services/audit-log.service.ts`
- [Server database client](https://github.com/pupbtfocus/pup-bataan-focus/blob/main/pup-focus/lib/supabase/server.ts): `pup-focus/lib/supabase/server.ts`

### Other components

- **Faculty user**
- **Staff and admin**
- **Supabase data and storage**
- **Email delivery**

## Connections

- Faculty user → Sign-in and invites: signs in
- Staff and admin → Sign-in and invites: signs in
- Sign-in and invites → Authentication API: authenticates
- Authentication API → Server database client: creates session
- Faculty user → Faculty portal: uses portal
- Staff and admin → Staff operations portal: uses portal
- Faculty portal → Submission intake: submits documents
- Submission intake → Server database client: authenticates (evidence: `pup-focus/app/api/faculty/submissions/create/route.ts`)
- Submission intake → Window and term rules: checks window (evidence: `pup-focus/app/api/faculty/submissions/create/route.ts`)
- Submission intake → Notifications: creates alert (evidence: `pup-focus/app/api/faculty/submissions/create/route.ts`)
- Submission intake → Audit logging: logs event (evidence: `pup-focus/app/api/faculty/submissions/create/route.ts`)
- Submission intake → Supabase data and storage: stores submission (evidence: `pup-focus/app/api/faculty/submissions/create/route.ts`)
- Window administration → Server database client: authenticates (evidence: `pup-focus/app/api/staff/submission-window/route.ts`)
- Window administration → Window and term rules: evaluates schedule (evidence: `pup-focus/app/api/staff/submission-window/route.ts`)
- Window administration → Supabase data and storage: updates window (evidence: `pup-focus/app/api/staff/submission-window/route.ts`)
- Window administration → Email delivery: sends reminders (evidence: `pup-focus/app/api/staff/submission-window/route.ts`)
- Academic term management → Server database client: authenticates (evidence: `pup-focus/app/api/staff/academic-terms/route.ts`)
- Academic term management → Window and term rules: normalizes term (evidence: `pup-focus/app/api/staff/academic-terms/route.ts`)
- Academic term management → Supabase data and storage: reads term data (evidence: `pup-focus/app/api/staff/academic-terms/route.ts`)
- Account management → Server database client: authenticates (evidence: `pup-focus/app/api/staff/user-registration-logs/route.ts`)
- Account management → Email delivery: sends invitations (evidence: `pup-focus/app/api/staff/user-registration-logs/route.ts`)
- Account management → Supabase data and storage: manages accounts (evidence: `pup-focus/app/api/staff/user-registration-logs/route.ts`)
- Submission review → Supabase data and storage: reviews records
- Submission history and data → Supabase data and storage: reads submissions
- Compliance progress → Faculty portal: shows progress
- Backup and archive → Supabase data and storage: archives data
- Report export → Supabase data and storage: exports records
- Role policy → Staff operations portal: defines roles
