# salmanmalvasi/studentcc architecture

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

- Interactive diagram: https://gitdiagram.com/salmanmalvasi/studentcc
- Repository: https://github.com/salmanmalvasi/studentcc

## Overview

StudentCC is an offline-first Android academic companion for VIT students. Students use its dashboard and feature screens to review locally cached academic data, calculate attendance and performance, sync with VTOP, and access campus-life tools. The README documents Room-backed offline presentation and background refresh; the source index additionally confirms key service, freshness, database, and UI dependencies. Many feature implementations are not excerpted, so those branches reflect documented capabilities, not inspected call-by-call wiring.

Main entry points: [`app/src/main/java/com/salmanmalvasi/studentcc/activities/MainActivity.java`](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/activities/MainActivity.java) (Main dashboard), [`app/src/main/java/com/salmanmalvasi/studentcc/services/QuickSyncService.java`](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/services/QuickSyncService.java) (Quick sync), [`app/src/main/java/com/salmanmalvasi/studentcc/helpers/AppDatabase.java`](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/AppDatabase.java) (Room database), [`app/src/main/java/com/salmanmalvasi/studentcc/widgets`](https://github.com/salmanmalvasi/studentcc/tree/main/app/src/main/java/com/salmanmalvasi/studentcc/widgets) (Home widgets)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Student experience"]
  node_main["Main dashboard<br/>[MainActivity.java]"]
  node_screens["Feature screens"]
  node_widgets["Home widgets"]
end

subgraph group_academic["Academic features"]
  node_attendance["Attendance tools"]
  node_skip["Skip advisor"]
  node_analytics["Semester analytics"]
  node_calendar["Calendar sync"]
end

subgraph group_sync["Sync and persistence"]
  node_quick["Quick sync"]
  node_nightly["Scheduled sync"]
  node_scraper["VTOP data retrieval<br/>[VTOPService.java]"]
  node_auth["Portal authentication"]
  node_freshness["Freshness tracking"]
  node_database[("Room database<br/>[AppDatabase.java]")]
  node_settings[("Settings and secrets")]
end

subgraph group_campus["Campus and platform"]
  node_hostel["Hostel and mess"]
  node_events["Events and placements"]
  node_notifications["Push notifications"]
  node_messages["In-app messages"]
end

node_student(("Student"))
node_portal{{"VTOP portal"}}

node_student -->|"opens"| node_main
node_main -->|"presents features"| node_screens
node_student -->|"checks schedule"| node_widgets
node_screens -->|"offers attendance tools"| node_attendance
node_attendance -->|"uses projections"| node_skip
node_student -->|"reviews trends"| node_analytics
node_student -->|"exports dates"| node_calendar
node_student -->|"checks services"| node_hostel
node_student -->|"discovers events"| node_events
node_main -.->|"requests refresh"| node_quick
node_nightly -.->|"runs sync"| node_scraper
node_quick -->|"checks staleness"| node_freshness
node_quick -->|"updates cache"| node_database
node_quick -->|"reads preferences"| node_settings
node_scraper -->|"writes academic data"| node_database
node_auth -.->|"authenticates"| node_portal
node_auth -->|"activates staged data"| node_database
node_widgets -->|"reads schedule"| node_database
node_widgets -->|"reads preferences"| node_settings
node_notifications -->|"routes navigation"| node_main
node_main -->|"initializes messaging"| node_messages

click node_main "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/activities/MainActivity.java"
click node_screens "https://github.com/salmanmalvasi/studentcc/tree/main/app/src/main/java/com/salmanmalvasi/studentcc/fragments"
click node_widgets "https://github.com/salmanmalvasi/studentcc/tree/main/app/src/main/java/com/salmanmalvasi/studentcc/widgets"
click node_attendance "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/fragments/AttendanceCalculatorFragment.java"
click node_skip "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/SkipAdvisorEngine.java"
click node_analytics "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/activities/AllSemestersAnalyticsActivity.java"
click node_calendar "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/GoogleCalendarHelper.java"
click node_hostel "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/HostelDataHelper.java"
click node_events "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/fragments/EventsFragment.java"
click node_quick "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/services/QuickSyncService.java"
click node_nightly "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/workers/NightlySyncWorker.java"
click node_scraper "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/services/VTOPService.java"
click node_auth "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/sync/VTOPAuthClient.java"
click node_freshness "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/sync/DataFreshnessManager.java"
click node_database "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/AppDatabase.java"
click node_settings "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/SettingsRepository.java"
click node_notifications "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/services/VTOPFirebaseMessagingService.java"
click node_messages "https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/InAppMessageManager.java"

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_main,node_screens,node_widgets toneBlue
class node_attendance,node_skip,node_analytics,node_calendar toneAmber
class node_quick,node_nightly,node_scraper,node_auth,node_freshness,node_database,node_settings toneMint
class node_hostel,node_events,node_notifications,node_messages toneRose
class node_student,node_portal toneIndigo
```

## Components

### Student experience

- [Main dashboard](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/activities/MainActivity.java): `app/src/main/java/com/salmanmalvasi/studentcc/activities/MainActivity.java`
- [Feature screens](https://github.com/salmanmalvasi/studentcc/tree/main/app/src/main/java/com/salmanmalvasi/studentcc/fragments): `app/src/main/java/com/salmanmalvasi/studentcc/fragments`
- [Home widgets](https://github.com/salmanmalvasi/studentcc/tree/main/app/src/main/java/com/salmanmalvasi/studentcc/widgets): `app/src/main/java/com/salmanmalvasi/studentcc/widgets`

### Academic features

- [Attendance tools](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/fragments/AttendanceCalculatorFragment.java): `app/src/main/java/com/salmanmalvasi/studentcc/fragments/AttendanceCalculatorFragment.java`
- [Skip advisor](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/SkipAdvisorEngine.java): `app/src/main/java/com/salmanmalvasi/studentcc/helpers/SkipAdvisorEngine.java`
- [Semester analytics](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/activities/AllSemestersAnalyticsActivity.java): `app/src/main/java/com/salmanmalvasi/studentcc/activities/AllSemestersAnalyticsActivity.java`
- [Calendar sync](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/GoogleCalendarHelper.java): `app/src/main/java/com/salmanmalvasi/studentcc/helpers/GoogleCalendarHelper.java`

### Sync and persistence

- [Quick sync](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/services/QuickSyncService.java): `app/src/main/java/com/salmanmalvasi/studentcc/services/QuickSyncService.java`
- [Scheduled sync](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/workers/NightlySyncWorker.java): `app/src/main/java/com/salmanmalvasi/studentcc/workers/NightlySyncWorker.java`
- [VTOP data retrieval](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/services/VTOPService.java): `app/src/main/java/com/salmanmalvasi/studentcc/services/VTOPService.java`
- [Portal authentication](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/sync/VTOPAuthClient.java): `app/src/main/java/com/salmanmalvasi/studentcc/sync/VTOPAuthClient.java`
- [Freshness tracking](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/sync/DataFreshnessManager.java): `app/src/main/java/com/salmanmalvasi/studentcc/sync/DataFreshnessManager.java`
- [Room database](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/AppDatabase.java): `app/src/main/java/com/salmanmalvasi/studentcc/helpers/AppDatabase.java`
- [Settings and secrets](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/SettingsRepository.java): `app/src/main/java/com/salmanmalvasi/studentcc/helpers/SettingsRepository.java`

### Campus and platform

- [Hostel and mess](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/HostelDataHelper.java): `app/src/main/java/com/salmanmalvasi/studentcc/helpers/HostelDataHelper.java`
- [Events and placements](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/fragments/EventsFragment.java): `app/src/main/java/com/salmanmalvasi/studentcc/fragments/EventsFragment.java`
- [Push notifications](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/services/VTOPFirebaseMessagingService.java): `app/src/main/java/com/salmanmalvasi/studentcc/services/VTOPFirebaseMessagingService.java`
- [In-app messages](https://github.com/salmanmalvasi/studentcc/blob/main/app/src/main/java/com/salmanmalvasi/studentcc/helpers/InAppMessageManager.java): `app/src/main/java/com/salmanmalvasi/studentcc/helpers/InAppMessageManager.java`

### Other components

- **Student**
- **VTOP portal**

## Connections

- Student → Main dashboard: opens
- Main dashboard → Feature screens: presents features (evidence: `app/src/main/java/com/salmanmalvasi/studentcc/activities/MainActivity.java`)
- Student → Home widgets: checks schedule
- Feature screens → Attendance tools: offers attendance tools (evidence: `app/src/main/java/com/salmanmalvasi/studentcc/fragments/HomeFragment.java`)
- Attendance tools → Skip advisor: uses projections (evidence: `app/src/main/java/com/salmanmalvasi/studentcc/fragments/AttendanceCalculatorFragment.java`)
- Student → Semester analytics: reviews trends
- Student → Calendar sync: exports dates
- Student → Hostel and mess: checks services
- Student → Events and placements: discovers events
- Main dashboard → Quick sync: requests refresh (evidence: `app/src/main/java/com/salmanmalvasi/studentcc/services/QuickSyncService.java`)
- Scheduled sync → VTOP data retrieval: runs sync
- Quick sync → Freshness tracking: checks staleness (evidence: `app/src/main/java/com/salmanmalvasi/studentcc/services/QuickSyncService.java`)
- Quick sync → Room database: updates cache (evidence: `app/src/main/java/com/salmanmalvasi/studentcc/services/QuickSyncService.java`)
- Quick sync → Settings and secrets: reads preferences (evidence: `app/src/main/java/com/salmanmalvasi/studentcc/services/QuickSyncService.java`)
- VTOP data retrieval → Room database: writes academic data (evidence: `app/src/main/java/com/salmanmalvasi/studentcc/services/VTOPService.java`)
- Portal authentication → VTOP portal: authenticates
- Portal authentication → Room database: activates staged data (evidence: `app/src/main/java/com/salmanmalvasi/studentcc/sync/VTOPAuthClient.java`)
- Home widgets → Room database: reads schedule (evidence: `app/src/main/java/com/salmanmalvasi/studentcc/widgets/DayTimetableWidgetService.java`)
- Home widgets → Settings and secrets: reads preferences (evidence: `app/src/main/java/com/salmanmalvasi/studentcc/widgets/DayTimetableWidgetService.java`)
- Push notifications → Main dashboard: routes navigation
- Main dashboard → In-app messages: initializes messaging (evidence: `app/src/main/java/com/salmanmalvasi/studentcc/activities/MainActivity.java`)
