# victor-lee-123/smart-attendance-verification-app architecture

> Architecture diagram of the GitHub repository victor-lee-123/smart-attendance-verification-app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/victor-lee-123/smart-attendance-verification-app
- Repository: https://github.com/victor-lee-123/smart-attendance-verification-app

## Overview

CheckIn@DP is an offline-first Android attendance app. The documented workflow gathers a session QR, location and selfie, validates the QR, time window and optional geofence, then saves an attendance record locally for reactive UI updates and deferred sync. Sampled code implements a demo Compose screen, ViewModel, repository, Room access and WorkManager/Firebase upload path. Authentication, leave requests and production camera/QR wiring are documented or represented in the tree but not demonstrated in the sampled runtime calls; those connections are therefore omitted or marked unverified.

Main entry points: [`app/src/main/java/sg/edu/sit/attendance/MainActivity.kt`](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/MainActivity.kt) (Compose screen), [`app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt`](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt) (Attendance repository), [`app/src/main/java/sg/edu/sit/attendance/work/AttendanceSyncWorker.kt`](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/work/AttendanceSyncWorker.kt) (Sync worker), [`app/src/main/java/sg/edu/sit/attendance/data/DbProvider.kt`](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/data/DbProvider.kt) (Database provider)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Check-in experience"]
  node_screen["Compose screen<br/>[MainActivity.kt]"]
  node_viewmodel["Main ViewModel<br/>[MainViewModel.kt]"]
end

subgraph group_verification["Attendance verification"]
  node_qr["QR analyzer<br/>[QrAnalyzer.kt]"]
  node_fence["Geofence check<br/>[LocationFence.kt]"]
  node_photo["Photo saver<br/>[PhotoSaver.kt]"]
  node_repository["Attendance repository"]
end

subgraph group_persistence["Local persistence"]
  node_entities["Attendance entities<br/>[Entities.kt]"]
  node_dao["Attendance DAO<br/>[Dao.kt]"]
  node_database[("Room database<br/>[AppDatabase.kt]")]
  node_provider["Database provider<br/>[DbProvider.kt]"]
end

subgraph group_sync["Background sync"]
  node_enqueue["Sync enqueue<br/>[WorkEnqueue.kt]"]
  node_worker["Sync worker"]
  node_firebase["Firebase uploader<br/>[FirebaseSync.kt]"]
end

node_student(("Student"))
node_firestore[("Firestore")]

node_student -->|"uses"| node_screen
node_screen -->|"collects state"| node_viewmodel
node_screen -->|"seeds session"| node_provider
node_viewmodel -->|"delegates check-in"| node_repository
node_repository -->|"checks proximity"| node_fence
node_repository -->|"gets DAO"| node_provider
node_provider -->|"creates"| node_database
node_database -->|"exposes"| node_dao
node_repository -->|"writes attendance"| node_dao
node_repository -->|"schedules sync"| node_enqueue
node_enqueue -->|"queues work"| node_worker
node_worker -->|"gets DAO"| node_provider
node_worker -->|"loads pending"| node_dao
node_worker -->|"uploads records"| node_firebase
node_firebase -->|"writes documents"| node_firestore
node_screen -.->|"scan integration"| node_qr
node_screen -.->|"capture integration"| node_photo

click node_screen "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/MainActivity.kt"
click node_viewmodel "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/MainViewModel.kt"
click node_qr "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/qr/QrAnalyzer.kt"
click node_fence "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/location/LocationFence.kt"
click node_photo "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/camera/PhotoSaver.kt"
click node_repository "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt"
click node_entities "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/data/Entities.kt"
click node_dao "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/data/Dao.kt"
click node_database "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/data/AppDatabase.kt"
click node_provider "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/data/DbProvider.kt"
click node_enqueue "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/work/WorkEnqueue.kt"
click node_worker "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/work/AttendanceSyncWorker.kt"
click node_firebase "https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/sync/FirebaseSync.kt"

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_screen,node_viewmodel toneBlue
class node_qr,node_fence,node_photo,node_repository,node_firestore toneAmber
class node_entities,node_dao,node_database,node_provider toneMint
class node_enqueue,node_worker,node_firebase toneRose
class node_student toneIndigo
```

## Components

### Check-in experience

- [Compose screen](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/MainActivity.kt): `app/src/main/java/sg/edu/sit/attendance/MainActivity.kt`
- [Main ViewModel](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/MainViewModel.kt): `app/src/main/java/sg/edu/sit/attendance/MainViewModel.kt`

### Attendance verification

- [QR analyzer](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/qr/QrAnalyzer.kt): `app/src/main/java/sg/edu/sit/attendance/qr/QrAnalyzer.kt`
- [Geofence check](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/location/LocationFence.kt): `app/src/main/java/sg/edu/sit/attendance/location/LocationFence.kt`
- [Photo saver](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/camera/PhotoSaver.kt): `app/src/main/java/sg/edu/sit/attendance/camera/PhotoSaver.kt`
- [Attendance repository](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt): `app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt`

### Local persistence

- [Attendance entities](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/data/Entities.kt): `app/src/main/java/sg/edu/sit/attendance/data/Entities.kt`
- [Attendance DAO](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/data/Dao.kt): `app/src/main/java/sg/edu/sit/attendance/data/Dao.kt`
- [Room database](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/data/AppDatabase.kt): `app/src/main/java/sg/edu/sit/attendance/data/AppDatabase.kt`
- [Database provider](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/data/DbProvider.kt): `app/src/main/java/sg/edu/sit/attendance/data/DbProvider.kt`

### Background sync

- [Sync enqueue](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/work/WorkEnqueue.kt): `app/src/main/java/sg/edu/sit/attendance/work/WorkEnqueue.kt`
- [Sync worker](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/work/AttendanceSyncWorker.kt): `app/src/main/java/sg/edu/sit/attendance/work/AttendanceSyncWorker.kt`
- [Firebase uploader](https://github.com/victor-lee-123/smart-attendance-verification-app/blob/main/app/src/main/java/sg/edu/sit/attendance/sync/FirebaseSync.kt): `app/src/main/java/sg/edu/sit/attendance/sync/FirebaseSync.kt`

### Other components

- **Student**
- **Firestore**

## Connections

- Student → Compose screen: uses (evidence: `app/src/main/java/sg/edu/sit/attendance/MainActivity.kt`)
- Compose screen → Main ViewModel: collects state (evidence: `app/src/main/java/sg/edu/sit/attendance/MainActivity.kt`)
- Compose screen → Database provider: seeds session (evidence: `app/src/main/java/sg/edu/sit/attendance/MainActivity.kt`)
- Main ViewModel → Attendance repository: delegates check-in (evidence: `app/src/main/java/sg/edu/sit/attendance/MainViewModel.kt`)
- Attendance repository → Geofence check: checks proximity (evidence: `app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt`)
- Attendance repository → Database provider: gets DAO (evidence: `app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt`)
- Database provider → Room database: creates (evidence: `app/src/main/java/sg/edu/sit/attendance/data/DbProvider.kt`)
- Room database → Attendance DAO: exposes (evidence: `app/src/main/java/sg/edu/sit/attendance/data/AppDatabase.kt`)
- Attendance repository → Attendance DAO: writes attendance (evidence: `app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt`)
- Attendance repository → Sync enqueue: schedules sync (evidence: `app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt`)
- Sync enqueue → Sync worker: queues work (evidence: `app/src/main/java/sg/edu/sit/attendance/work/WorkEnqueue.kt`)
- Sync worker → Database provider: gets DAO (evidence: `app/src/main/java/sg/edu/sit/attendance/work/AttendanceSyncWorker.kt`)
- Sync worker → Attendance DAO: loads pending (evidence: `app/src/main/java/sg/edu/sit/attendance/work/AttendanceSyncWorker.kt`)
- Sync worker → Firebase uploader: uploads records (evidence: `app/src/main/java/sg/edu/sit/attendance/work/AttendanceSyncWorker.kt`)
- Firebase uploader → Firestore: writes documents (evidence: `app/src/main/java/sg/edu/sit/attendance/sync/FirebaseSync.kt`)
- Compose screen → QR analyzer: scan integration
- Compose screen → Photo saver: capture integration
