# hzxon/emobilize architecture

> Architecture diagram of the GitHub repository hzxon/emobilize, 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/hzxon/emobilize
- Repository: https://github.com/hzxon/emobilize

## Overview

Emobilize is an Android student app centered on viewing a class schedule and browsing notes. Users enter through the activity, navigate between the schedule and notes, and see data supplied through presentation view models and domain repositories. The sampled schedule repository holds seeded events in an in-memory flow; the note repository returns seeded notes. The tree also shows schedule-add and note/schedule retrieval use cases. View-model, navigation, and use-case source was not sampled, so their internal call wiring is left unspecified.

Main entry points: [`app/src/main/java/ayodong/emobilize/di/AppModule.kt`](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/di/AppModule.kt) (Dependency wiring), [`app/src/main/java/ayodong/emobilize/MainActivity.kt`](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/MainActivity.kt) (Main activity), [`app/src/main/java/ayodong/emobilize/data/repository/ScheduleRepositoryImpl.kt`](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/data/repository/ScheduleRepositoryImpl.kt) (In-memory schedule), [`app/src/main/java/ayodong/emobilize/data/repository/NoteRepositoryImpl.kt`](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/data/repository/NoteRepositoryImpl.kt) (Seeded notes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["App entry"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
  node_navigation["App navigation<br/>[AppNavigation.kt]"]
  node_routes["Screen routes<br/>[Routes.kt]"]
end

subgraph group_presentation["Presentation"]
  node_schedule_screen["Schedule screen<br/>[ScheduleScreen.kt]"]
  node_schedule_vm["Schedule view model"]
  node_note_screen["Notes screen<br/>[NoteScreen.kt]"]
  node_note_vm["Notes view model<br/>[NoteViewModel.kt]"]
end

subgraph group_domain["Domain"]
  node_schedule_usecases["Schedule use cases"]
  node_add_event["Add schedule event"]
  node_note_usecase["Get notes use case<br/>[GetNoteUseCase.kt]"]
  node_schedule_contract["Schedule contract"]
  node_note_contract["Notes contract<br/>[NoteRepository.kt]"]
end

subgraph group_data["Data"]
  node_schedule_data["In-memory schedule"]
  node_note_data["Seeded notes"]
  node_di["Dependency wiring<br/>[AppModule.kt]"]
end

node_student(("Student"))

node_student -->|"opens app"| node_activity
node_activity -->|"starts navigation"| node_navigation
node_schedule_screen -->|"reads state"| node_schedule_vm
node_note_screen -->|"reads state"| node_note_vm
node_schedule_data -->|"implements"| node_schedule_contract
node_note_data -->|"implements"| node_note_contract
node_di -->|"provides"| node_schedule_data
node_di -->|"provides"| node_note_data
node_di -->|"provides"| node_schedule_usecases
node_di -->|"provides"| node_add_event
node_di -->|"provides"| node_note_usecase

click node_activity "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/MainActivity.kt"
click node_navigation "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/presentation/navigation/AppNavigation.kt"
click node_routes "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/presentation/navigation/Routes.kt"
click node_schedule_screen "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/presentation/schedule/ScheduleScreen.kt"
click node_schedule_vm "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/presentation/schedule/ScheduleViewModel.kt"
click node_note_screen "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/presentation/note/NoteScreen.kt"
click node_note_vm "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/presentation/note/NoteViewModel.kt"
click node_schedule_usecases "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/domain/usecase/GetScheduleUseCase.kt"
click node_add_event "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/domain/usecase/AddScheduleEventUseCase.kt"
click node_note_usecase "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/domain/usecase/GetNoteUseCase.kt"
click node_schedule_contract "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/domain/repository/ScheduleRepository.kt"
click node_note_contract "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/domain/repository/NoteRepository.kt"
click node_schedule_data "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/data/repository/ScheduleRepositoryImpl.kt"
click node_note_data "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/data/repository/NoteRepositoryImpl.kt"
click node_di "https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/di/AppModule.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_activity,node_navigation,node_routes toneBlue
class node_schedule_screen,node_schedule_vm,node_note_screen,node_note_vm toneAmber
class node_schedule_usecases,node_add_event,node_note_usecase,node_schedule_contract,node_note_contract toneMint
class node_schedule_data,node_note_data,node_di toneRose
class node_student toneIndigo
```

## Components

### App entry

- [Main activity](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/MainActivity.kt): `app/src/main/java/ayodong/emobilize/MainActivity.kt`
- [App navigation](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/presentation/navigation/AppNavigation.kt): `app/src/main/java/ayodong/emobilize/presentation/navigation/AppNavigation.kt`
- [Screen routes](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/presentation/navigation/Routes.kt): `app/src/main/java/ayodong/emobilize/presentation/navigation/Routes.kt`

### Presentation

- [Schedule screen](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/presentation/schedule/ScheduleScreen.kt): `app/src/main/java/ayodong/emobilize/presentation/schedule/ScheduleScreen.kt`
- [Schedule view model](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/presentation/schedule/ScheduleViewModel.kt): `app/src/main/java/ayodong/emobilize/presentation/schedule/ScheduleViewModel.kt`
- [Notes screen](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/presentation/note/NoteScreen.kt): `app/src/main/java/ayodong/emobilize/presentation/note/NoteScreen.kt`
- [Notes view model](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/presentation/note/NoteViewModel.kt): `app/src/main/java/ayodong/emobilize/presentation/note/NoteViewModel.kt`

### Domain

- [Schedule use cases](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/domain/usecase/GetScheduleUseCase.kt): `app/src/main/java/ayodong/emobilize/domain/usecase/GetScheduleUseCase.kt`
- [Add schedule event](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/domain/usecase/AddScheduleEventUseCase.kt): `app/src/main/java/ayodong/emobilize/domain/usecase/AddScheduleEventUseCase.kt`
- [Get notes use case](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/domain/usecase/GetNoteUseCase.kt): `app/src/main/java/ayodong/emobilize/domain/usecase/GetNoteUseCase.kt`
- [Schedule contract](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/domain/repository/ScheduleRepository.kt): `app/src/main/java/ayodong/emobilize/domain/repository/ScheduleRepository.kt`
- [Notes contract](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/domain/repository/NoteRepository.kt): `app/src/main/java/ayodong/emobilize/domain/repository/NoteRepository.kt`

### Data

- [In-memory schedule](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/data/repository/ScheduleRepositoryImpl.kt): `app/src/main/java/ayodong/emobilize/data/repository/ScheduleRepositoryImpl.kt`
- [Seeded notes](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/data/repository/NoteRepositoryImpl.kt): `app/src/main/java/ayodong/emobilize/data/repository/NoteRepositoryImpl.kt`
- [Dependency wiring](https://github.com/hzxon/emobilize/blob/main/app/src/main/java/ayodong/emobilize/di/AppModule.kt): `app/src/main/java/ayodong/emobilize/di/AppModule.kt`

### Other components

- **Student**

## Connections

- Student → Main activity: opens app
- Main activity → App navigation: starts navigation
- Schedule screen → Schedule view model: reads state
- Notes screen → Notes view model: reads state
- In-memory schedule → Schedule contract: implements
- Seeded notes → Notes contract: implements
- Dependency wiring → In-memory schedule: provides
- Dependency wiring → Seeded notes: provides
- Dependency wiring → Schedule use cases: provides
- Dependency wiring → Add schedule event: provides
- Dependency wiring → Get notes use case: provides
