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 connectedAndroidTestYou can verify the authenticity of SolidVerdant APKs using the signing certificate hash below. This works with AppVerifier or Obtainium's built-in verification.
| Field | Value |
|---|---|
| Package ID | dev.tricked.solidverdant |
| SHA-256 Signing Certificate | 7A:38:2F:E9:14:1B:D3:DC:A4:C4:82:20:7F:FF:12:5A:82:8D:66:92:C4:0E:5A:BC:30:61:6C:33:15:C7:F3:64 |
You can also view this information in-app via Settings > About > Verification Info.
- 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




