# lawcunanan/agalog2.0-internship-goal-tracker architecture

> Architecture diagram of the GitHub repository lawcunanan/agalog2.0-internship-goal-tracker, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/lawcunanan/agalog2.0-internship-goal-tracker
- Repository: https://github.com/lawcunanan/agalog2.0-internship-goal-tracker

## Overview

Agalog is a role-based internship goal tracker. Students select an assigned goal, record work sessions, and review weekly hours and progress; admins monitor logs and student summaries and manage goals, while super admins oversee users and registered goals. Next.js page routes load initial data and hand it to client dashboards; client actions refresh or change that data through service modules and Supabase. The README documents Google/Supabase authentication and Excel exports. Some service implementations and integrations were not sampled, so their finer control flow is not inferred here.

Main entry points: [`lib/supabase/server.ts`](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/lib/supabase/server.ts) (Supabase server client), [`components/pages/student/page.tsx`](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/pages/student/page.tsx) (Student dashboard), [`services/ssr`](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/tree/main/services/ssr) (Initial data queries), [`services/ssr/auth/get-user.ts`](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/services/ssr/auth/get-user.ts) (Server identity lookup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_auth["Access and identity"]
  node_home["Home and login<br/>[page.tsx]"]
  node_auth_callback["Auth callback<br/>[route.ts]"]
  node_auth_state["Auth state<br/>[auth-provider.tsx]"]
  node_supabase_auth["Supabase Auth"]
end

subgraph group_student["Student tracking"]
  node_student_route["Student route<br/>[page.tsx]"]
  node_student_dash["Student dashboard<br/>[page.tsx]"]
  node_log_form["Work session form<br/>[log-form.tsx]"]
  node_weekly_logs["Weekly logs<br/>[weekly-log.tsx]"]
  node_progress["Goal progress<br/>[log-progress.tsx]"]
  node_record_route["Student record route<br/>[page.tsx]"]
  node_record_view["Record and export view<br/>[page.tsx]"]
  node_export["Excel export<br/>[export-log.ts]"]
end

subgraph group_admin["Administration"]
  node_admin_route["Admin route<br/>[page.tsx]"]
  node_admin_dash["Admin dashboard<br/>[page.tsx]"]
  node_goal_management["Goal management<br/>[manage-dialog.tsx]"]
  node_live_logs["Today log monitoring<br/>[today-logs.tsx]"]
  node_super_route["Super admin route<br/>[page.tsx]"]
  node_super_dash["Super admin dashboard<br/>[page.tsx]"]
end

subgraph group_data["Data and services"]
  node_ssr_auth["Server identity lookup<br/>[get-user.ts]"]
  node_ssr_data["Initial data queries"]
  node_csr_data["Client data services"]
  node_server_client["Supabase server client<br/>[server.ts]"]
  node_database[("Supabase database")]
  node_ai_route["AI endpoint<br/>[route.ts]"]
  node_ai_prompts["AI prompts<br/>[prompts.ts]"]
end

node_visitor(("Intern or staff"))

node_visitor -->|"opens"| node_home
node_home -->|"uses auth state"| node_auth_state
node_home -->|"starts Google login"| node_supabase_auth
node_supabase_auth -->|"returns to"| node_auth_callback
node_auth_callback -->|"creates server session"| node_server_client
node_auth_callback -->|"checks role"| node_ssr_auth
node_auth_state -->|"subscribes to auth"| node_supabase_auth
node_student_route -->|"loads user"| node_ssr_auth
node_student_route -->|"creates data client"| node_server_client
node_student_route -->|"loads goal and logs"| node_ssr_data
node_student_route -->|"renders"| node_student_dash
node_student_dash -->|"renders"| node_log_form
node_student_dash -->|"renders"| node_weekly_logs
node_student_dash -->|"renders"| node_progress
node_log_form -->|"upserts session"| node_csr_data
node_student_dash -->|"refreshes logs"| node_csr_data
node_record_route -->|"loads user"| node_ssr_auth
node_record_route -->|"creates data client"| node_server_client
node_record_route -->|"loads student record"| node_ssr_data
node_record_route -->|"renders"| node_record_view
node_record_view -->|"exports logs"| node_export
node_admin_route -->|"loads user"| node_ssr_auth
node_admin_route -->|"creates data client"| node_server_client
node_admin_route -->|"loads dashboard data"| node_ssr_data
node_admin_route -->|"renders"| node_admin_dash
node_admin_dash -->|"renders"| node_live_logs
node_admin_dash -->|"offers goal management"| node_goal_management
node_admin_dash -->|"refreshes stats and filters"| node_csr_data
node_super_route -->|"loads user"| node_ssr_auth
node_super_route -->|"creates data client"| node_server_client
node_super_route -->|"loads oversight data"| node_ssr_data
node_super_route -->|"renders"| node_super_dash
node_server_client -.->|"queries"| node_database
node_ssr_data -.->|"reads records"| node_database
node_csr_data -.->|"reads and writes"| node_database
node_ai_route -->|"uses prompts"| node_ai_prompts

click node_home "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/page.tsx"
click node_auth_callback "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/auth/callback/route.ts"
click node_auth_state "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/providers/auth-provider.tsx"
click node_student_route "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/student/page.tsx"
click node_student_dash "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/pages/student/page.tsx"
click node_log_form "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/logs/log-form.tsx"
click node_weekly_logs "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/logs/weekly-log.tsx"
click node_progress "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/logs/log-progress.tsx"
click node_record_route "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/record/%5BgoalId%5D/%5BstudentId%5D/page.tsx"
click node_record_view "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/pages/record/page.tsx"
click node_export "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/lib/utils/export-log.ts"
click node_admin_route "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/admin/page.tsx"
click node_admin_dash "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/pages/admin/page.tsx"
click node_goal_management "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/dialogs/goals/manage-dialog.tsx"
click node_live_logs "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/tables/today-logs.tsx"
click node_super_route "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/superadmin/page.tsx"
click node_super_dash "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/pages/superadmin/page.tsx"
click node_ssr_auth "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/services/ssr/auth/get-user.ts"
click node_ssr_data "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/tree/main/services/ssr"
click node_csr_data "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/tree/main/services/csr"
click node_server_client "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/lib/supabase/server.ts"
click node_ai_route "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/api/ai/route.ts"
click node_ai_prompts "https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/lib/ai/prompts.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_home,node_auth_callback,node_auth_state,node_supabase_auth toneBlue
class node_student_route,node_student_dash,node_log_form,node_weekly_logs,node_progress,node_record_route,node_record_view,node_export toneAmber
class node_admin_route,node_admin_dash,node_goal_management,node_live_logs,node_super_route,node_super_dash toneMint
class node_ssr_auth,node_ssr_data,node_csr_data,node_server_client,node_database,node_ai_route,node_ai_prompts toneRose
class node_visitor toneIndigo
```

## Components

### Access and identity

- [Home and login](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/page.tsx): `app/page.tsx`
- [Auth callback](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/auth/callback/route.ts): `app/auth/callback/route.ts`
- [Auth state](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/providers/auth-provider.tsx): `providers/auth-provider.tsx`
- **Supabase Auth**

### Student tracking

- [Student route](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/student/page.tsx): `app/student/page.tsx`
- [Student dashboard](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/pages/student/page.tsx): `components/pages/student/page.tsx`
- [Work session form](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/logs/log-form.tsx): `components/logs/log-form.tsx`
- [Weekly logs](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/logs/weekly-log.tsx): `components/logs/weekly-log.tsx`
- [Goal progress](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/logs/log-progress.tsx): `components/logs/log-progress.tsx`
- [Student record route](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/record/%5BgoalId%5D/%5BstudentId%5D/page.tsx): `app/record/[goalId]/[studentId]/page.tsx`
- [Record and export view](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/pages/record/page.tsx): `components/pages/record/page.tsx`
- [Excel export](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/lib/utils/export-log.ts): `lib/utils/export-log.ts`

### Administration

- [Admin route](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/admin/page.tsx): `app/admin/page.tsx`
- [Admin dashboard](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/pages/admin/page.tsx): `components/pages/admin/page.tsx`
- [Goal management](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/dialogs/goals/manage-dialog.tsx): `components/dialogs/goals/manage-dialog.tsx`
- [Today log monitoring](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/tables/today-logs.tsx): `components/tables/today-logs.tsx`
- [Super admin route](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/superadmin/page.tsx): `app/superadmin/page.tsx`
- [Super admin dashboard](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/components/pages/superadmin/page.tsx): `components/pages/superadmin/page.tsx`

### Data and services

- [Server identity lookup](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/services/ssr/auth/get-user.ts): `services/ssr/auth/get-user.ts`
- [Initial data queries](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/tree/main/services/ssr): `services/ssr`
- [Client data services](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/tree/main/services/csr): `services/csr`
- [Supabase server client](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/lib/supabase/server.ts): `lib/supabase/server.ts`
- **Supabase database**
- [AI endpoint](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/app/api/ai/route.ts): `app/api/ai/route.ts`
- [AI prompts](https://github.com/lawcunanan/agalog2.0-internship-goal-tracker/blob/main/lib/ai/prompts.ts): `lib/ai/prompts.ts`

### Other components

- **Intern or staff**

## Connections

- Intern or staff → Home and login: opens (evidence: `README.md`)
- Home and login → Auth state: uses auth state (evidence: `app/page.tsx`)
- Home and login → Supabase Auth: starts Google login (evidence: `README.md`)
- Supabase Auth → Auth callback: returns to (evidence: `README.md`)
- Auth callback → Supabase server client: creates server session (evidence: `app/auth/callback/route.ts`)
- Auth callback → Server identity lookup: checks role (evidence: `app/auth/callback/route.ts`)
- Auth state → Supabase Auth: subscribes to auth (evidence: `providers/auth-provider.tsx`)
- Student route → Server identity lookup: loads user (evidence: `app/student/page.tsx`)
- Student route → Supabase server client: creates data client (evidence: `app/student/page.tsx`)
- Student route → Initial data queries: loads goal and logs (evidence: `app/student/page.tsx`)
- Student route → Student dashboard: renders (evidence: `app/student/page.tsx`)
- Student dashboard → Work session form: renders (evidence: `components/pages/student/page.tsx`)
- Student dashboard → Weekly logs: renders (evidence: `components/pages/student/page.tsx`)
- Student dashboard → Goal progress: renders (evidence: `components/pages/student/page.tsx`)
- Work session form → Client data services: upserts session (evidence: `components/logs/log-form.tsx`)
- Student dashboard → Client data services: refreshes logs (evidence: `components/pages/student/page.tsx`)
- Student record route → Server identity lookup: loads user (evidence: `app/record/[goalId]/[studentId]/page.tsx`)
- Student record route → Supabase server client: creates data client (evidence: `app/record/[goalId]/[studentId]/page.tsx`)
- Student record route → Initial data queries: loads student record (evidence: `app/record/[goalId]/[studentId]/page.tsx`)
- Student record route → Record and export view: renders (evidence: `app/record/[goalId]/[studentId]/page.tsx`)
- Record and export view → Excel export: exports logs (evidence: `components/pages/record/page.tsx`)
- Admin route → Server identity lookup: loads user (evidence: `app/admin/page.tsx`)
- Admin route → Supabase server client: creates data client (evidence: `app/admin/page.tsx`)
- Admin route → Initial data queries: loads dashboard data (evidence: `app/admin/page.tsx`)
- Admin route → Admin dashboard: renders (evidence: `app/admin/page.tsx`)
- Admin dashboard → Today log monitoring: renders (evidence: `components/pages/admin/page.tsx`)
- Admin dashboard → Goal management: offers goal management
- Admin dashboard → Client data services: refreshes stats and filters (evidence: `components/pages/admin/page.tsx`)
- Super admin route → Server identity lookup: loads user (evidence: `app/superadmin/page.tsx`)
- Super admin route → Supabase server client: creates data client (evidence: `app/superadmin/page.tsx`)
- Super admin route → Initial data queries: loads oversight data (evidence: `app/superadmin/page.tsx`)
- Super admin route → Super admin dashboard: renders (evidence: `app/superadmin/page.tsx`)
- Supabase server client → Supabase database: queries
- Initial data queries → Supabase database: reads records
- Client data services → Supabase database: reads and writes
- AI endpoint → AI prompts: uses prompts (evidence: `app/api/ai/route.ts`)
