How chr1st1ank/context-switch works
context-switch is a single-user, multi-device time tracker with a shared synchronized logbook. The main workflow is to start, stop, or switch a timer; organize spans by project and tag; then review history and derived reports from the CLI or Android app. Both clients use the shared Rust domain and storage core, with local-filesystem and S3-compatible storage options. The graph preserves documented sync and offline behavior, but sampled source does not expose all Android binding and synchronization paths, so those links are documented or left unconnected rather than inferred.
Main entry points: LogbookStore.kt Android logbook store · cli.py CLI commands · MainActivity.kt Android app shell · storage.rs Conditional storage
Components 26
User clients
- CLI commands
cli/cosw/cli.py - CLI transactions
cli/cosw/core.py - Project and tag management
cli/cosw/manage.py - Span history
cli/cosw/history.py - Reports
cli/cosw/reporting.py - CLI configuration
cli/cosw/config.py - Android app shell
android/app/src/main/java/dev/contextswitch/MainActivity.kt - Timer screen
android/app/src/main/java/dev/contextswitch/ui/TimerScreen.kt - Log screen
android/app/src/main/java/dev/contextswitch/ui/LogScreen.kt - Management screen
android/app/src/main/java/dev/contextswitch/ui/ManageScreen.kt - Settings screen
android/app/src/main/java/dev/contextswitch/ui/SettingsScreen.kt - Android logbook store
android/app/src/main/java/dev/contextswitch/LogbookStore.kt - Foreground timer service
android/app/src/main/java/dev/contextswitch/TimerService.kt
Domain and sync
- Logbook domain
libs/contextswitch-core/src/domain.rs - Sync coordination
libs/contextswitch-core/src/sync.rs - Portable config
libs/contextswitch-core/src/portable_config.rs
Storage backends
- Provider abstraction
libs/contextswitch-core/src/provider.rs - Conditional storage
libs/contextswitch-core/src/storage.rs - Blob stores
libs/contextswitch-core/src/blob.rs - S3-compatible backend
libs/contextswitch-core/src/s3.rs - Envelope encryption
libs/contextswitch-core/src/crypto.rs
Language bindings
- Python bindings
libs/contextswitch-core/python/contextswitch_core/__init__.py - UniFFI interface
libs/contextswitch-uniffi/src/lib.rs
Other components
- User
- Local filesystem
- S3 storage service
Connections 38
- User → CLI commands: runs commands
README.md - User → Android app shell: uses app
README.md - CLI commands → CLI transactions: transacts
cli/cosw/cli.py - CLI commands → Project and tag management: dispatches
cli/cosw/cli.py - CLI commands → Span history: dispatches
cli/cosw/cli.py - CLI commands → CLI configuration: loads config
cli/cosw/cli.py - Span history → CLI transactions: reads and mutates
cli/cosw/history.py - Project and tag management → CLI transactions: uses transactions
cli/cosw/manage.py - Span history → Reports: uses reporting
cli/cosw/history.py - Reports → Python bindings: queries logbook
cli/cosw/reporting.py - CLI transactions → Python bindings: opens providers
cli/cosw/core.py - CLI commands → Python bindings: mutates logbook
cli/cosw/cli.py - Android app shell → Timer screen: shows
android/app/src/main/java/dev/contextswitch/MainActivity.kt - Android app shell → Log screen: shows
android/app/src/main/java/dev/contextswitch/MainActivity.kt - Android app shell → Management screen: shows
android/app/src/main/java/dev/contextswitch/MainActivity.kt - Android app shell → Settings screen: shows
android/app/src/main/java/dev/contextswitch/MainActivity.kt - Android app shell → Android logbook store: uses store
android/app/src/main/java/dev/contextswitch/MainActivity.kt - Android app shell → Foreground timer service: starts or stops
android/app/src/main/java/dev/contextswitch/MainActivity.kt - Timer screen → Android logbook store: uses logbook
android/app/src/main/java/dev/contextswitch/ui/TimerScreen.kt - Log screen → Android logbook store: reads logbook
android/app/src/main/java/dev/contextswitch/ui/LogScreen.kt - Management screen → Android logbook store: manages records
android/app/src/main/java/dev/contextswitch/ui/ManageScreen.kt - Settings screen → Android logbook store: uses logbook
android/app/src/main/java/dev/contextswitch/ui/SettingsScreen.kt - Foreground timer service → Android logbook store: restores snapshot
android/app/src/main/java/dev/contextswitch/TimerService.kt - CLI commands → Logbook domain: applies timer rules
README.md - Android logbook store → UniFFI interface: uses shared core
README.md - UniFFI interface → Logbook domain: exposes domain
README.md - Python bindings → Logbook domain: exposes domain
README.md - CLI transactions → Provider abstraction: opens configured provider
- Provider abstraction → Conditional storage: uses storage contract
libs/contextswitch-core/src/provider.rs - Conditional storage → Blob stores: reads and writes blobs
libs/contextswitch-core/src/storage.rs - Conditional storage → Logbook domain: validates logbook
libs/contextswitch-core/src/domain.rs - S3-compatible backend → Blob stores: implements blob store
libs/contextswitch-core/src/s3.rs - S3-compatible backend → S3 storage service: sends storage requests
libs/contextswitch-core/src/s3.rs - Conditional storage → Local filesystem: stores local data
libs/contextswitch-core/src/storage.rs - Provider abstraction → Envelope encryption: configures encryption
libs/contextswitch-core/src/provider.rs - Provider abstraction → S3-compatible backend: supports remote backend
libs/contextswitch-core/src/provider.rs - Android logbook store → Sync coordination: syncs cached logbook
README.md - Sync coordination → Conditional storage: uses versioned storage
libs/contextswitch-core/src/sync.rs