# arifbil/campus-guide-copilot architecture

> Architecture diagram of the GitHub repository arifbil/campus-guide-copilot, 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/arifbil/campus-guide-copilot
- Repository: https://github.com/arifbil/campus-guide-copilot

## Overview

Campus Guide Copilot is a student-facing campus information app, with chat-based assistance, campus navigation, academic information, and student services. Its principal runtime path is the chat API: it sends requests to Gemini, can query PostgreSQL for campus and student data, and returns a response. Separate API routes expose room, location, service, schedule, and student data. The navigation page uses a map component. UI-to-API wiring is not shown in the available evidence, so those links are omitted; some route internals were not sampled.

Main entry points: [`lib/db.js`](https://github.com/arifbil/campus-guide-copilot/blob/main/lib/db.js) (PostgreSQL), [`app/api/chat/route.js`](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/chat/route.js) (Chat endpoint), [`app/navigasi/page.js`](https://github.com/arifbil/campus-guide-copilot/blob/main/app/navigasi/page.js) (Navigation page), [`app/api/locations/route.js`](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/locations/route.js) (Location API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Student experience"]
  node_home["Home page<br/>[page.js]"]
  node_academic["Academic page<br/>[page.js]"]
  node_services_ui["Services page<br/>[page.js]"]
  node_navigation["Navigation page<br/>[page.js]"]
  node_map["Campus map<br/>[Map.jsx]"]
end

subgraph group_assistant["AI assistant"]
  node_chat["Chat endpoint<br/>[route.js]"]
  node_gemini["Google Gemini"]
end

subgraph group_campus["Campus information"]
  node_locations_api["Location API<br/>[route.js]"]
  node_rooms_api["Rooms API<br/>[route.js]"]
  node_room_schedule["Room schedule API<br/>[route.js]"]
  node_room_status["Room status API<br/>[route.js]"]
  node_schedule_tool["Schedule lookup<br/>[route.js]"]
  node_find_location["Location lookup<br/>[route.js]"]
  node_find_room["Room lookup<br/>[route.js]"]
  node_room_status_tool["Room status lookup<br/>[route.js]"]
end

subgraph group_student["Student services"]
  node_services_api["Services API<br/>[route.js]"]
  node_find_service["Service lookup<br/>[route.js]"]
  node_student_api["Student API<br/>[route.js]"]
  node_student_info["Student info lookup<br/>[route.js]"]
  node_advisor["Advisor lookup<br/>[route.js]"]
  node_krs["KRS status lookup<br/>[route.js]"]
  node_letter["Letter draft<br/>[route.js]"]
end

subgraph group_data["Data access"]
  node_db[("PostgreSQL<br/>[db.js]")]
end

node_visitor(("Student"))

node_navigation -->|"renders"| node_map
node_chat -->|"requests generation"| node_gemini
node_chat -->|"queries and saves"| node_db
node_locations_api -->|"queries"| node_db
node_rooms_api -->|"queries"| node_db
node_room_schedule -->|"queries"| node_db
node_room_status -->|"queries"| node_db
node_schedule_tool -->|"queries"| node_db
node_find_location -->|"queries"| node_db
node_find_room -->|"queries"| node_db
node_room_status_tool -->|"queries"| node_db
node_services_api -->|"queries"| node_db
node_find_service -->|"queries"| node_db
node_student_api -->|"queries"| node_db
node_student_info -->|"queries"| node_db
node_advisor -->|"queries"| node_db
node_krs -->|"queries"| node_db
node_letter -->|"queries and saves"| node_db

click node_home "https://github.com/arifbil/campus-guide-copilot/blob/main/app/page.js"
click node_academic "https://github.com/arifbil/campus-guide-copilot/blob/main/app/akademik/page.js"
click node_services_ui "https://github.com/arifbil/campus-guide-copilot/blob/main/app/layanan/page.js"
click node_navigation "https://github.com/arifbil/campus-guide-copilot/blob/main/app/navigasi/page.js"
click node_map "https://github.com/arifbil/campus-guide-copilot/blob/main/app/navigasi/Map.jsx"
click node_chat "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/chat/route.js"
click node_locations_api "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/locations/route.js"
click node_rooms_api "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/rooms/route.js"
click node_room_schedule "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/rooms/%5Bid%5D/schedule/route.js"
click node_room_status "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/rooms/%5Bid%5D/status/route.js"
click node_schedule_tool "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/get-schedule/route.js"
click node_find_location "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/find-location/route.js"
click node_find_room "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/find-room/route.js"
click node_room_status_tool "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/get-room-status/route.js"
click node_services_api "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/services/route.js"
click node_find_service "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/find-service/route.js"
click node_student_api "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/student/route.js"
click node_student_info "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/get-student-info/route.js"
click node_advisor "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/get-advisor/route.js"
click node_krs "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/check-krs-status/route.js"
click node_letter "https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/create-letter/route.js"
click node_db "https://github.com/arifbil/campus-guide-copilot/blob/main/lib/db.js"

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_academic,node_services_ui,node_navigation,node_map toneBlue
class node_chat,node_gemini toneAmber
class node_locations_api,node_rooms_api,node_room_schedule,node_room_status,node_schedule_tool,node_find_location,node_find_room,node_room_status_tool toneMint
class node_services_api,node_find_service,node_student_api,node_student_info,node_advisor,node_krs,node_letter toneRose
class node_db,node_visitor toneIndigo
```

## Components

### Student experience

- [Home page](https://github.com/arifbil/campus-guide-copilot/blob/main/app/page.js): `app/page.js`
- [Academic page](https://github.com/arifbil/campus-guide-copilot/blob/main/app/akademik/page.js): `app/akademik/page.js`
- [Services page](https://github.com/arifbil/campus-guide-copilot/blob/main/app/layanan/page.js): `app/layanan/page.js`
- [Navigation page](https://github.com/arifbil/campus-guide-copilot/blob/main/app/navigasi/page.js): `app/navigasi/page.js`
- [Campus map](https://github.com/arifbil/campus-guide-copilot/blob/main/app/navigasi/Map.jsx): `app/navigasi/Map.jsx`

### AI assistant

- [Chat endpoint](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/chat/route.js): `app/api/chat/route.js`
- **Google Gemini**

### Campus information

- [Location API](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/locations/route.js): `app/api/locations/route.js`
- [Rooms API](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/rooms/route.js): `app/api/rooms/route.js`
- [Room schedule API](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/rooms/%5Bid%5D/schedule/route.js): `app/api/rooms/[id]/schedule/route.js`
- [Room status API](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/rooms/%5Bid%5D/status/route.js): `app/api/rooms/[id]/status/route.js`
- [Schedule lookup](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/get-schedule/route.js): `app/api/tools/get-schedule/route.js`
- [Location lookup](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/find-location/route.js): `app/api/tools/find-location/route.js`
- [Room lookup](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/find-room/route.js): `app/api/tools/find-room/route.js`
- [Room status lookup](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/get-room-status/route.js): `app/api/tools/get-room-status/route.js`

### Student services

- [Services API](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/services/route.js): `app/api/services/route.js`
- [Service lookup](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/find-service/route.js): `app/api/tools/find-service/route.js`
- [Student API](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/student/route.js): `app/api/student/route.js`
- [Student info lookup](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/get-student-info/route.js): `app/api/tools/get-student-info/route.js`
- [Advisor lookup](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/get-advisor/route.js): `app/api/tools/get-advisor/route.js`
- [KRS status lookup](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/check-krs-status/route.js): `app/api/tools/check-krs-status/route.js`
- [Letter draft](https://github.com/arifbil/campus-guide-copilot/blob/main/app/api/tools/create-letter/route.js): `app/api/tools/create-letter/route.js`

### Data access

- [PostgreSQL](https://github.com/arifbil/campus-guide-copilot/blob/main/lib/db.js): `lib/db.js`

### Other components

- **Student**

## Connections

- Navigation page → Campus map: renders (evidence: `app/navigasi/page.js`)
- Chat endpoint → Google Gemini: requests generation (evidence: `app/api/chat/route.js`)
- Chat endpoint → PostgreSQL: queries and saves (evidence: `app/api/chat/route.js`)
- Location API → PostgreSQL: queries (evidence: `app/api/locations/route.js`)
- Rooms API → PostgreSQL: queries (evidence: `app/api/rooms/route.js`)
- Room schedule API → PostgreSQL: queries (evidence: `app/api/rooms/[id]/schedule/route.js`)
- Room status API → PostgreSQL: queries (evidence: `app/api/rooms/[id]/status/route.js`)
- Schedule lookup → PostgreSQL: queries (evidence: `app/api/tools/get-schedule/route.js`)
- Location lookup → PostgreSQL: queries (evidence: `app/api/tools/find-location/route.js`)
- Room lookup → PostgreSQL: queries (evidence: `app/api/tools/find-room/route.js`)
- Room status lookup → PostgreSQL: queries (evidence: `app/api/tools/get-room-status/route.js`)
- Services API → PostgreSQL: queries (evidence: `app/api/services/route.js`)
- Service lookup → PostgreSQL: queries (evidence: `app/api/tools/find-service/route.js`)
- Student API → PostgreSQL: queries (evidence: `app/api/student/route.js`)
- Student info lookup → PostgreSQL: queries (evidence: `app/api/tools/get-student-info/route.js`)
- Advisor lookup → PostgreSQL: queries (evidence: `app/api/tools/get-advisor/route.js`)
- KRS status lookup → PostgreSQL: queries (evidence: `app/api/tools/check-krs-status/route.js`)
- Letter draft → PostgreSQL: queries and saves (evidence: `app/api/tools/create-letter/route.js`)
