# utsapoddar/sift-work-timer architecture

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

- Interactive diagram: https://gitdiagram.com/utsapoddar/sift-work-timer
- Repository: https://github.com/utsapoddar/sift-work-timer

## Overview

Sift is a cross-platform work-session timer: users configure a session, follow automatically scheduled work and break phases, and receive alarms at phase boundaries. The README also documents streak tracking and a minimal dark UI. The supplied tree omits the Flutter/Dart application sources, so those core components are represented without invented paths or implementation-level wiring. Native excerpts support the Android alarm-service flow and iOS Live Activity integration; other platform runners are omitted because they mainly launch Flutter.

Main entry points: [`work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/TimerService.kt`](https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/TimerService.kt) (Timer service), [`work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/MainActivity.kt`](https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/MainActivity.kt) (Android bridge), [`work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/AlarmReceiver.kt`](https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/AlarmReceiver.kt) (Alarm receiver), [`work_timer/ios/Runner/AppDelegate.swift`](https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/ios/Runner/AppDelegate.swift) (iOS app bridge)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Timer experience"]
  node_flutter["Flutter app"]
  node_phases["Work-break phases"]
  node_preferences[("Session preferences")]
  node_streaks["Streak tracking"]
  node_audio["Alarm audio"]
end

subgraph group_android["Android alarms"]
  node_mainactivity["Android bridge<br/>[MainActivity.kt]"]
  node_timerservice["Timer service<br/>[TimerService.kt]"]
  node_alarmreceiver["Alarm receiver<br/>[AlarmReceiver.kt]"]
  node_bootreceiver["Boot receiver<br/>[BootReceiver.kt]"]
end

subgraph group_ios["iOS activity"]
  node_appdelegate["iOS app bridge<br/>[AppDelegate.swift]"]
  node_activitywidget["Live Activity UI"]
end

node_user(("User"))
node_alarmmanager["Android alarms"]
node_activitykit["ActivityKit"]

node_user -->|"configures and starts"| node_flutter
node_flutter -->|"runs schedule"| node_phases
node_flutter -->|"persists settings"| node_preferences
node_flutter -->|"tracks habit"| node_streaks
node_flutter -->|"plays alarm"| node_audio
node_flutter -->|"calls platform channel"| node_mainactivity
node_mainactivity -->|"starts and controls"| node_timerservice
node_timerservice -->|"schedules alarms"| node_alarmmanager
node_alarmmanager -->|"delivers alarm"| node_alarmreceiver
node_alarmreceiver -->|"notifies service"| node_timerservice
node_bootreceiver -->|"restores timer"| node_timerservice
node_flutter -->|"calls platform channel"| node_appdelegate
node_appdelegate -->|"starts and updates"| node_activitykit
node_activitykit -->|"provides activity state"| node_activitywidget

click node_mainactivity "https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/MainActivity.kt"
click node_timerservice "https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/TimerService.kt"
click node_alarmreceiver "https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/AlarmReceiver.kt"
click node_bootreceiver "https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/BootReceiver.kt"
click node_appdelegate "https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/ios/Runner/AppDelegate.swift"
click node_activitywidget "https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/ios/SiftWidget/SiftWidgetLiveActivity.swift"

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_flutter,node_phases,node_preferences,node_streaks,node_audio,node_user toneBlue
class node_mainactivity,node_timerservice,node_alarmreceiver,node_bootreceiver toneAmber
class node_appdelegate,node_activitywidget toneMint
class node_alarmmanager,node_activitykit toneIndigo
```

## Components

### Timer experience

- **Flutter app**
- **Work-break phases**
- **Session preferences**
- **Streak tracking**
- **Alarm audio**

### Android alarms

- [Android bridge](https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/MainActivity.kt): `work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/MainActivity.kt`
- [Timer service](https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/TimerService.kt): `work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/TimerService.kt`
- [Alarm receiver](https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/AlarmReceiver.kt): `work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/AlarmReceiver.kt`
- [Boot receiver](https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/BootReceiver.kt): `work_timer/android/app/src/main/kotlin/com/utsapoddar/sift/BootReceiver.kt`

### iOS activity

- [iOS app bridge](https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/ios/Runner/AppDelegate.swift): `work_timer/ios/Runner/AppDelegate.swift`
- [Live Activity UI](https://github.com/utsapoddar/sift-work-timer/blob/main/work_timer/ios/SiftWidget/SiftWidgetLiveActivity.swift): `work_timer/ios/SiftWidget/SiftWidgetLiveActivity.swift`

### Other components

- **User**
- **Android alarms**
- **ActivityKit**

## Connections

- User → Flutter app: configures and starts
- Flutter app → Work-break phases: runs schedule
- Flutter app → Session preferences: persists settings
- Flutter app → Streak tracking: tracks habit
- Flutter app → Alarm audio: plays alarm
- Flutter app → Android bridge: calls platform channel
- Android bridge → Timer service: starts and controls
- Timer service → Android alarms: schedules alarms
- Android alarms → Alarm receiver: delivers alarm
- Alarm receiver → Timer service: notifies service
- Boot receiver → Timer service: restores timer
- Flutter app → iOS app bridge: calls platform channel
- iOS app bridge → ActivityKit: starts and updates
- ActivityKit → Live Activity UI: provides activity state
