Modern Android time tracking client for Solidtime
A native Kotlin/Jetpack Compose Android application that connects to Solidtime for secure, OAuth2-based time tracking on mobile devices.
- Start/stop time entries with a live elapsed timer
- Select projects and tasks from searchable dropdowns
- Add descriptions
- Edit or delete past time entries
- View history grouped by date, with identical entries collapsed into expandable groups
- Pull-to-refresh to sync with the server
- Quick Settings tile - Start/stop tracking without opening the app, with project selection dialog
- Persistent notification - Shows elapsed time with a chronometer and a stop button; optionally stays visible when idle
- Boot persistence - Restores notification state after reboot
- OAuth2 with PKCE (no API keys needed)
- Automatic token refresh
- Custom server endpoints and OAuth client IDs
- Encrypted token storage
- Material 3 with Material You dynamic colors (Android 12+)
- Dark and light themes follow system settings
- Edge-to-edge display with predictive back gesture support (Android 13+)
- Available in English, Dutch, and Japanese + any language you want if you create a pull request
- The Quick Settings tile state won't sync with changes made on the web or desktop unless the app is open. Not a problem if you only use the tile and app.
Login Screen • Time Tracking • Configuration
- Language: Kotlin
- UI Framework: Jetpack Compose with Material 3
- Architecture: MVVM with Clean Architecture
- Dependency Injection: Hilt
- Networking: Retrofit + OkHttp
- Serialization: Kotlinx Serialization
- Async: Kotlin Coroutines + Flow
- Storage: DataStore Preferences
- Jetpack Compose - Declarative UI framework
- Hilt - Dependency injection
- Retrofit - Type-safe HTTP client
- OkHttp - HTTP interceptors and authentication
- Kotlinx Serialization - JSON serialization
- DataStore - Encrypted preference storage
- Custom Tabs - Secure OAuth browser flow
- Timber - Logging
By default, SolidVerdant connects to the official Solidtime instance at https://app.solidtime.io. To configure a custom server:
- Launch the app
- On the login screen, tap the settings icon (⚙️) in the top bar
- Enter your custom server endpoint and OAuth client ID
- Tap "Save"
Default Configuration:
- Server Endpoint:
https://app.solidtime.io - Client ID:
9c994748-c593-4a6d-951b-6849c829bc4e
run docker exec solidtime-scheduler php artisan passport:client --name=desktop --redirect_uri=solidtime://oauth/callback --public -n
Goal of this application is to have a easy to use tile to start and stop tracking, this application does everything i need it to but pullrequests for other features are welcome, forking is fine too
- Login: Tap "Login with OAuth2" to authenticate via your Solidtime account
- View Tracking: See your current time entry with live elapsed time
- Refresh: Pull to refresh or tap the refresh button to update tracking state
- Logout: Tap logout to clear all data and return to login screen
./gradlew assembleDebug- Debug (
app-debug.apk) - Includes logging, no minification, package suffix.dev - Release (
app-release.apk) - ProGuard enabled, resources shrunk, signed for distribution
Run unit tests:
./gradlew testRun instrumentation tests:
./gradlew connectedAndroidTest- Solidtime Website: https://www.solidtime.io/
- Solidtime Web App: https://app.solidtime.io
- Built with Jetpack Compose
- Architecture patterns from Android Architecture Samples
Made with ❤️ (and almost entirely Claude) for the Solidtime community




