# the-jddev/shs-calendar architecture

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

- Interactive diagram: https://gitdiagram.com/the-jddev/shs-calendar
- Repository: https://github.com/the-jddev/shs-calendar
- Video tour (about a minute): https://gitdiagram.com/the-jddev/shs-calendar/video

## Overview

SHS Calendar is an offline-first Android calendar and personal-planning app. The main workflow starts in the calendar UI, resolves dates across Gregorian, Bengali and Hijri systems, and presents holidays and time-based details; users can also manage events, tasks and notes, search their data, set reminders, and exchange or sync calendars. Islamic tools, weather, widgets and appearance settings are distinct supporting capabilities. The graph uses documented capabilities and sampled implementation relationships; several UI and orchestration paths are represented at their existing directory paths because their source was not sampled.

Main entry points: [`app/src/main/java/com/shs/calendar/ui/MainActivity.kt`](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/ui/MainActivity.kt) (Calendar screen), [`app/src/main/java/com/shs/calendar/data/repository/Repositories.kt`](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/data/repository/Repositories.kt) (Data repositories), [`app/src/main/java/com/shs/calendar/calendar/ConversionEngine.kt`](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/calendar/ConversionEngine.kt) (Conversion hub), [`app/src/main/java/com/shs/calendar/ui`](https://github.com/the-jddev/shs-calendar/tree/main/app/src/main/java/com/shs/calendar/ui) (Islamic tools)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_calendar["Calendars and time"]
  node_conversion["Conversion hub"]
  node_bengali["Bengali calendar<br/>[BengaliEngine.kt]"]
  node_hijri["Hijri calendar<br/>[HijriEngine.kt]"]
  node_gregorian["Gregorian calendar<br/>[GregorianEngine.kt]"]
  node_holidays["Holiday resolver<br/>[HolidayEngine.kt]"]
  node_solar["Solar calculations<br/>[SolarEngine.kt]"]
  node_weather["Weather provider"]
end

subgraph group_planning["Planning and data"]
  node_repositories["Data repositories<br/>[Repositories.kt]"]
  node_database[("Room database")]
  node_search["Global search<br/>[SearchEngine.kt]"]
  node_conflicts["Conflict detection"]
  node_reminders["Reminder scheduler"]
end

subgraph group_islamic["Islamic and location tools"]
  node_prayer["Prayer times<br/>[PrayerEngine.kt]"]
  node_qibla["Qibla calculation<br/>[QiblaEngine.kt]"]
  node_dua["Dua collection<br/>[DuaCollection.kt]"]
end

subgraph group_exchange["Exchange and sync"]
  node_codecs["Import and export"]
  node_sync_coordinator["Sync coordinator<br/>[SyncCoordinator.kt]"]
  node_caldav["CalDAV engine<br/>[CalDavEngine.kt]"]
end

subgraph group_surfaces["App surfaces"]
  node_main["Calendar screen<br/>[MainActivity.kt]"]
  node_planning_ui["Planning screens"]
  node_task_ui["Task screen<br/>[TasksActivity.kt]"]
  node_notes_ui["Notes screen<br/>[NotesActivity.kt]"]
  node_islamic_ui["Islamic tools"]
  node_sync_ui["CalDAV accounts"]
  node_widgets["Home widgets<br/>[WidgetCore.kt]"]
  node_appearance["Appearance settings<br/>[ThemeManager.kt]"]
end

node_user(("Calendar user"))
node_weather_service["Open-Meteo"]
node_dav_server["Configured DAV server"]

node_user -->|"opens calendar"| node_main
node_main -->|"resolves dates"| node_conversion
node_conversion -->|"converts dates"| node_bengali
node_conversion -->|"converts dates"| node_hijri
node_conversion -->|"uses calendar"| node_gregorian
node_main -->|"shows holidays"| node_holidays
node_main -->|"shows astronomy"| node_solar
node_main -->|"opens agenda"| node_planning_ui
node_main -->|"opens tasks"| node_task_ui
node_main -->|"opens notes"| node_notes_ui
node_planning_ui -->|"reads and saves"| node_repositories
node_task_ui -->|"reads and saves"| node_repositories
node_notes_ui -->|"reads and saves"| node_repositories
node_repositories -->|"reads and writes"| node_database
node_main -->|"searches records"| node_search
node_main -->|"checks conflicts"| node_conflicts
node_planning_ui -->|"schedules reminders"| node_reminders
node_main -->|"opens toolkit"| node_islamic_ui
node_islamic_ui -->|"computes prayer times"| node_prayer
node_prayer -->|"uses solar events"| node_solar
node_islamic_ui -->|"computes direction"| node_qibla
node_islamic_ui -->|"shows duas"| node_dua
node_main -.->|"requests weather"| node_weather
node_weather -.->|"fetches forecasts"| node_weather_service
node_main -->|"imports and exports"| node_codecs
node_main -->|"configures sync"| node_sync_ui
node_sync_ui -->|"starts sync"| node_sync_coordinator
node_sync_coordinator -->|"coordinates exchange"| node_caldav
node_caldav -->|"pulls and pushes"| node_dav_server
node_caldav -->|"maps local events"| node_repositories
node_main -->|"provides calendar surface"| node_widgets
node_main -->|"applies appearance"| node_appearance

click node_main "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/ui/MainActivity.kt"
click node_conversion "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/calendar/ConversionEngine.kt"
click node_bengali "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/calendar/BengaliEngine.kt"
click node_hijri "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/calendar/HijriEngine.kt"
click node_gregorian "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/calendar/GregorianEngine.kt"
click node_holidays "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/holidays/HolidayEngine.kt"
click node_solar "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/astronomy/SolarEngine.kt"
click node_prayer "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/prayer/PrayerEngine.kt"
click node_planning_ui "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/ui/event/EventsAgendaActivity.kt"
click node_task_ui "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/ui/task/TasksActivity.kt"
click node_notes_ui "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/ui/note/NotesActivity.kt"
click node_repositories "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/data/repository/Repositories.kt"
click node_database "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/data/CalendarDatabase.kt"
click node_search "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/search/SearchEngine.kt"
click node_conflicts "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/conflict/ConflictDetector.kt"
click node_reminders "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/reminders/ReminderScheduler.kt"
click node_islamic_ui "https://github.com/the-jddev/shs-calendar/tree/main/app/src/main/java/com/shs/calendar/ui"
click node_qibla "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/qibla/QiblaEngine.kt"
click node_dua "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/dua/DuaCollection.kt"
click node_weather "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/weather/WeatherRepository.kt"
click node_codecs "https://github.com/the-jddev/shs-calendar/tree/main/app/src/main/java/com/shs/calendar/io"
click node_sync_ui "https://github.com/the-jddev/shs-calendar/tree/main/app/src/main/java/com/shs/calendar/ui/caldav"
click node_sync_coordinator "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/sync/SyncCoordinator.kt"
click node_caldav "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/sync/CalDavEngine.kt"
click node_widgets "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/widget/WidgetCore.kt"
click node_appearance "https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/ui/appearance/ThemeManager.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_conversion,node_bengali,node_hijri,node_gregorian,node_holidays,node_solar,node_weather,node_user toneBlue
class node_repositories,node_database,node_search,node_conflicts,node_reminders toneAmber
class node_prayer,node_qibla,node_dua,node_dav_server toneMint
class node_codecs,node_sync_coordinator,node_caldav toneRose
class node_main,node_planning_ui,node_task_ui,node_notes_ui,node_islamic_ui,node_sync_ui,node_widgets,node_appearance,node_weather_service toneIndigo
```

## Components

### Calendars and time

- [Conversion hub](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/calendar/ConversionEngine.kt): `app/src/main/java/com/shs/calendar/calendar/ConversionEngine.kt`
- [Bengali calendar](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/calendar/BengaliEngine.kt): `app/src/main/java/com/shs/calendar/calendar/BengaliEngine.kt`
- [Hijri calendar](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/calendar/HijriEngine.kt): `app/src/main/java/com/shs/calendar/calendar/HijriEngine.kt`
- [Gregorian calendar](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/calendar/GregorianEngine.kt): `app/src/main/java/com/shs/calendar/calendar/GregorianEngine.kt`
- [Holiday resolver](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/holidays/HolidayEngine.kt): `app/src/main/java/com/shs/calendar/holidays/HolidayEngine.kt`
- [Solar calculations](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/astronomy/SolarEngine.kt): `app/src/main/java/com/shs/calendar/astronomy/SolarEngine.kt`
- [Weather provider](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/weather/WeatherRepository.kt): `app/src/main/java/com/shs/calendar/weather/WeatherRepository.kt`

### Planning and data

- [Data repositories](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/data/repository/Repositories.kt): `app/src/main/java/com/shs/calendar/data/repository/Repositories.kt`
- [Room database](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/data/CalendarDatabase.kt): `app/src/main/java/com/shs/calendar/data/CalendarDatabase.kt`
- [Global search](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/search/SearchEngine.kt): `app/src/main/java/com/shs/calendar/search/SearchEngine.kt`
- [Conflict detection](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/conflict/ConflictDetector.kt): `app/src/main/java/com/shs/calendar/conflict/ConflictDetector.kt`
- [Reminder scheduler](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/reminders/ReminderScheduler.kt): `app/src/main/java/com/shs/calendar/reminders/ReminderScheduler.kt`

### Islamic and location tools

- [Prayer times](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/prayer/PrayerEngine.kt): `app/src/main/java/com/shs/calendar/prayer/PrayerEngine.kt`
- [Qibla calculation](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/qibla/QiblaEngine.kt): `app/src/main/java/com/shs/calendar/qibla/QiblaEngine.kt`
- [Dua collection](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/dua/DuaCollection.kt): `app/src/main/java/com/shs/calendar/dua/DuaCollection.kt`

### Exchange and sync

- [Import and export](https://github.com/the-jddev/shs-calendar/tree/main/app/src/main/java/com/shs/calendar/io): `app/src/main/java/com/shs/calendar/io`
- [Sync coordinator](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/sync/SyncCoordinator.kt): `app/src/main/java/com/shs/calendar/sync/SyncCoordinator.kt`
- [CalDAV engine](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/sync/CalDavEngine.kt): `app/src/main/java/com/shs/calendar/sync/CalDavEngine.kt`

### App surfaces

- [Calendar screen](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/ui/MainActivity.kt): `app/src/main/java/com/shs/calendar/ui/MainActivity.kt`
- [Planning screens](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/ui/event/EventsAgendaActivity.kt): `app/src/main/java/com/shs/calendar/ui/event/EventsAgendaActivity.kt`
- [Task screen](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/ui/task/TasksActivity.kt): `app/src/main/java/com/shs/calendar/ui/task/TasksActivity.kt`
- [Notes screen](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/ui/note/NotesActivity.kt): `app/src/main/java/com/shs/calendar/ui/note/NotesActivity.kt`
- [Islamic tools](https://github.com/the-jddev/shs-calendar/tree/main/app/src/main/java/com/shs/calendar/ui): `app/src/main/java/com/shs/calendar/ui`
- [CalDAV accounts](https://github.com/the-jddev/shs-calendar/tree/main/app/src/main/java/com/shs/calendar/ui/caldav): `app/src/main/java/com/shs/calendar/ui/caldav`
- [Home widgets](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/widget/WidgetCore.kt): `app/src/main/java/com/shs/calendar/widget/WidgetCore.kt`
- [Appearance settings](https://github.com/the-jddev/shs-calendar/blob/main/app/src/main/java/com/shs/calendar/ui/appearance/ThemeManager.kt): `app/src/main/java/com/shs/calendar/ui/appearance/ThemeManager.kt`

### Other components

- **Calendar user**
- **Open-Meteo**
- **Configured DAV server**

## Connections

- Calendar user → Calendar screen: opens calendar
- Calendar screen → Conversion hub: resolves dates
- Conversion hub → Bengali calendar: converts dates
- Conversion hub → Hijri calendar: converts dates
- Conversion hub → Gregorian calendar: uses calendar
- Calendar screen → Holiday resolver: shows holidays
- Calendar screen → Solar calculations: shows astronomy
- Calendar screen → Planning screens: opens agenda
- Calendar screen → Task screen: opens tasks
- Calendar screen → Notes screen: opens notes
- Planning screens → Data repositories: reads and saves
- Task screen → Data repositories: reads and saves
- Notes screen → Data repositories: reads and saves
- Data repositories → Room database: reads and writes
- Calendar screen → Global search: searches records
- Calendar screen → Conflict detection: checks conflicts
- Planning screens → Reminder scheduler: schedules reminders
- Calendar screen → Islamic tools: opens toolkit
- Islamic tools → Prayer times: computes prayer times
- Prayer times → Solar calculations: uses solar events
- Islamic tools → Qibla calculation: computes direction
- Islamic tools → Dua collection: shows duas
- Calendar screen → Weather provider: requests weather
- Weather provider → Open-Meteo: fetches forecasts
- Calendar screen → Import and export: imports and exports
- Calendar screen → CalDAV accounts: configures sync
- CalDAV accounts → Sync coordinator: starts sync
- Sync coordinator → CalDAV engine: coordinates exchange
- CalDAV engine → Configured DAV server: pulls and pushes
- CalDAV engine → Data repositories: maps local events
- Calendar screen → Home widgets: provides calendar surface
- Calendar screen → Appearance settings: applies appearance
