# leoz3r0/smart_campus_fyp architecture

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

- Interactive diagram: https://gitdiagram.com/leoz3r0/smart_campus_fyp
- Repository: https://github.com/leoz3r0/smart_campus_fyp

## Overview

Smart Campus is a Flutter/Supabase app for student, staff, administrator, and stall-chef workflows. Users enter through sign-in and role-aware screens, then use campus services such as attendance, NFC access, navigation, events, food ordering, lost-and-found, and chat; staff and administrators also manage operational data. The README documents these capabilities and module responsibilities, while sampled implementation confirms the navigation-route and NFC-verification functions’ database reads and writes. Most Dart call wiring was not sampled, so those links reflect documented responsibility rather than inspected call sites.

Main entry points: [`lib/screens/home_screen.dart`](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/home_screen.dart) (Role dashboards), [`lib/screens/map_screen.dart`](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/map_screen.dart) (Campus map), [`lib/screens/sign_in_screen.dart`](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/sign_in_screen.dart) (Sign in), [`lib/services/nfc_card_service.dart`](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/nfc_card_service.dart) (NFC card handling)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and identity"]
  node_entry["App entry<br/>[main.dart]"]
  node_signin["Sign in"]
  node_auth["Authentication<br/>[auth_service.dart]"]
  node_profiles["Profiles and roles<br/>[user_service.dart]"]
  node_home["Role dashboards<br/>[home_screen.dart]"]
end

subgraph group_access["Attendance and access"]
  node_attendance["Attendance marking"]
  node_nfc["NFC card handling"]
  node_nfcsecurity["NFC verification<br/>[index.ts]"]
  node_biometric["Biometric check"]
  node_idcard["Digital student ID<br/>[student_card.dart]"]
end

subgraph group_campus["Campus discovery"]
  node_map["Campus map<br/>[map_screen.dart]"]
  node_buildings["Building data"]
  node_navigation["Route calculation<br/>[index.ts]"]
  node_gps(("GPS location"))
  node_osm(("OpenStreetMap"))
end

subgraph group_services["Campus services"]
  node_events["Events and news<br/>[events.dart]"]
  node_food["Food ordering<br/>[restaurant.dart]"]
  node_cart["Cart and payment<br/>[cart_page.dart]"]
  node_order["Order tracking"]
  node_lost["Lost and found<br/>[lost_n_found.dart]"]
  node_lostchat["Item messaging"]
  node_chat["Campus assistant<br/>[chat_screen.dart]"]
end

subgraph group_operations["Role operations"]
  node_admin["Admin management"]
  node_staff["Staff tools"]
  node_chef["Kitchen operations"]
end

node_user(("Campus user"))
node_botpress(("Botpress Cloud"))
node_supabase[("Supabase data")]
node_nfcdb[("NFC and access records")]

node_user -->|"opens app"| node_entry
node_entry -->|"starts at"| node_signin
node_signin -->|"authenticates"| node_auth
node_auth -->|"checks credentials"| node_supabase
node_signin -->|"loads role"| node_profiles
node_profiles -->|"reads profile"| node_supabase
node_user -->|"uses dashboard"| node_home
node_home -->|"marks attendance"| node_attendance
node_home -->|"scans card"| node_nfc
node_nfc -->|"requires check"| node_biometric
node_nfc -->|"verifies card"| node_nfcsecurity
node_nfcsecurity -->|"reads cards"| node_nfcdb
node_nfcsecurity -->|"logs access"| node_nfcdb
node_home -->|"opens ID"| node_idcard
node_home -->|"opens map"| node_map
node_map -->|"loads buildings"| node_buildings
node_buildings -->|"reads locations"| node_supabase
node_map -->|"gets position"| node_gps
node_map -.->|"shows map tiles"| node_osm
node_map -->|"requests route"| node_navigation
node_navigation -->|"reads buildings"| node_supabase
node_home -->|"browses events"| node_events
node_events -->|"loads events"| node_supabase
node_home -->|"browses food"| node_food
node_food -->|"loads menus"| node_supabase
node_food -->|"adds items"| node_cart
node_cart -->|"records order"| node_supabase
node_cart -->|"views status"| node_order
node_home -->|"browses items"| node_lost
node_lost -->|"stores listings"| node_supabase
node_lost -->|"opens conversation"| node_lostchat
node_lostchat -->|"stores messages"| node_supabase
node_home -->|"asks assistant"| node_chat
node_chat -.->|"sends queries"| node_botpress
node_user -->|"administers campus"| node_admin
node_user -->|"runs attendance"| node_staff
node_user -->|"handles orders"| node_chef
node_admin -->|"manages records"| node_supabase
node_staff -->|"creates sessions"| node_attendance
node_chef -->|"updates operations"| node_supabase

click node_entry "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/main.dart"
click node_signin "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/sign_in_screen.dart"
click node_auth "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/auth_service.dart"
click node_profiles "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/user_service.dart"
click node_home "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/home_screen.dart"
click node_attendance "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/attendance_service.dart"
click node_nfc "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/nfc_card_service.dart"
click node_nfcsecurity "https://github.com/leoz3r0/smart_campus_fyp/blob/main/supabase/functions/nfc-verify/index.ts"
click node_biometric "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/biometric_service.dart"
click node_idcard "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/student_card.dart"
click node_map "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/map_screen.dart"
click node_buildings "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/building_service.dart"
click node_navigation "https://github.com/leoz3r0/smart_campus_fyp/blob/main/supabase/functions/navigation-route/index.ts"
click node_events "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/events.dart"
click node_food "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/restaurant.dart"
click node_cart "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/cart_page.dart"
click node_order "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/order_tracking_page.dart"
click node_lost "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/lost_n_found.dart"
click node_lostchat "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/lost_item_chat_screen.dart"
click node_chat "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/chat_screen.dart"
click node_admin "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/admin/admin_main_screen.dart"
click node_staff "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/staff/staff_main_screen.dart"
click node_chef "https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/stall_chef/stall_chef_main_screen.dart"
click node_nfcdb "https://github.com/leoz3r0/smart_campus_fyp/blob/main/sql/nfc_security_schema.sql"

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_signin,node_auth,node_profiles,node_home,node_user toneBlue
class node_attendance,node_nfc,node_nfcsecurity,node_biometric,node_idcard,node_supabase,node_nfcdb toneAmber
class node_map,node_buildings,node_navigation,node_gps,node_osm toneMint
class node_events,node_food,node_cart,node_order,node_lost,node_lostchat,node_chat toneRose
class node_admin,node_staff,node_chef,node_botpress toneIndigo
```

## Components

### App and identity

- [App entry](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/main.dart): `lib/main.dart`
- [Sign in](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/sign_in_screen.dart): `lib/screens/sign_in_screen.dart`
- [Authentication](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/auth_service.dart): `lib/services/auth_service.dart`
- [Profiles and roles](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/user_service.dart): `lib/services/user_service.dart`
- [Role dashboards](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/home_screen.dart): `lib/screens/home_screen.dart`

### Attendance and access

- [Attendance marking](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/attendance_service.dart): `lib/services/attendance_service.dart`
- [NFC card handling](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/nfc_card_service.dart): `lib/services/nfc_card_service.dart`
- [NFC verification](https://github.com/leoz3r0/smart_campus_fyp/blob/main/supabase/functions/nfc-verify/index.ts): `supabase/functions/nfc-verify/index.ts`
- [Biometric check](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/biometric_service.dart): `lib/services/biometric_service.dart`
- [Digital student ID](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/student_card.dart): `lib/jy/student_card.dart`

### Campus discovery

- [Campus map](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/map_screen.dart): `lib/screens/map_screen.dart`
- [Building data](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/services/building_service.dart): `lib/services/building_service.dart`
- [Route calculation](https://github.com/leoz3r0/smart_campus_fyp/blob/main/supabase/functions/navigation-route/index.ts): `supabase/functions/navigation-route/index.ts`
- **GPS location**
- **OpenStreetMap**

### Campus services

- [Events and news](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/events.dart): `lib/jy/events.dart`
- [Food ordering](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/restaurant.dart): `lib/jy/restaurant.dart`
- [Cart and payment](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/cart_page.dart): `lib/jy/cart_page.dart`
- [Order tracking](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/order_tracking_page.dart): `lib/jy/order_tracking_page.dart`
- [Lost and found](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/lost_n_found.dart): `lib/jy/lost_n_found.dart`
- [Item messaging](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/jy/lost_item_chat_screen.dart): `lib/jy/lost_item_chat_screen.dart`
- [Campus assistant](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/chat_screen.dart): `lib/screens/chat_screen.dart`

### Role operations

- [Admin management](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/admin/admin_main_screen.dart): `lib/screens/admin/admin_main_screen.dart`
- [Staff tools](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/staff/staff_main_screen.dart): `lib/screens/staff/staff_main_screen.dart`
- [Kitchen operations](https://github.com/leoz3r0/smart_campus_fyp/blob/main/lib/screens/stall_chef/stall_chef_main_screen.dart): `lib/screens/stall_chef/stall_chef_main_screen.dart`

### Other components

- **Campus user**
- **Botpress Cloud**
- **Supabase data**
- [NFC and access records](https://github.com/leoz3r0/smart_campus_fyp/blob/main/sql/nfc_security_schema.sql): `sql/nfc_security_schema.sql`

## Connections

- Campus user → App entry: opens app
- App entry → Sign in: starts at
- Sign in → Authentication: authenticates
- Authentication → Supabase data: checks credentials
- Sign in → Profiles and roles: loads role
- Profiles and roles → Supabase data: reads profile
- Campus user → Role dashboards: uses dashboard
- Role dashboards → Attendance marking: marks attendance
- Role dashboards → NFC card handling: scans card
- NFC card handling → Biometric check: requires check
- NFC card handling → NFC verification: verifies card
- NFC verification → NFC and access records: reads cards
- NFC verification → NFC and access records: logs access
- Role dashboards → Digital student ID: opens ID
- Role dashboards → Campus map: opens map
- Campus map → Building data: loads buildings
- Building data → Supabase data: reads locations
- Campus map → GPS location: gets position
- Campus map → OpenStreetMap: shows map tiles
- Campus map → Route calculation: requests route
- Route calculation → Supabase data: reads buildings
- Role dashboards → Events and news: browses events
- Events and news → Supabase data: loads events
- Role dashboards → Food ordering: browses food
- Food ordering → Supabase data: loads menus
- Food ordering → Cart and payment: adds items
- Cart and payment → Supabase data: records order
- Cart and payment → Order tracking: views status
- Role dashboards → Lost and found: browses items
- Lost and found → Supabase data: stores listings
- Lost and found → Item messaging: opens conversation
- Item messaging → Supabase data: stores messages
- Role dashboards → Campus assistant: asks assistant
- Campus assistant → Botpress Cloud: sends queries
- Campus user → Admin management: administers campus
- Campus user → Staff tools: runs attendance
- Campus user → Kitchen operations: handles orders
- Admin management → Supabase data: manages records
- Staff tools → Attendance marking: creates sessions
- Kitchen operations → Supabase data: updates operations
