A simple and elegant mobile application that provides essential information about the sun's position and path.
- Clean, Intuitive UI: A modern interface built with Jetpack Compose and Material 3 Expressive.
- Solar Panel Optimization: Use the phone sensors to orient your solar panels for maximum energy output.
- Adaptive Layout: Staggered grid UI that adapts to both phone and tablet screen widths.
State lives in a ViewModel and is exposed as a single StateFlow, so the composables stay stateless. Event tracking goes through the AnalyticsTracker interface rather than a Firebase call site, which is what makes it testable. The staggered grid picks its column count from the available window width.
- API documentation - Dokka reference for every module
- ARCHITECTURE.md - module layout and data flow
- TESTING.md - test strategy and current coverage
- PERFORMANCE.md - what to measure and how
- SECURITY.md - data handling and permissions
- RELEASE.md - versioning and the release workflow
- ROADMAP.md - what is unfinished and what is planned
- CONTRIBUTING.md - how to work on this
You need Android Studio and a JDK. CI builds on JDK 25; JDK 21 also works.
git clone https://github.com/mobilemobilellc/solpan.git# Assemble a debug APK
./gradlew :app:assembleDebug
# Format every module
./gradlew spotlessApply
# Static analysis, every module
./gradlew detekt
# Unit tests, every module (30 tests)
./gradlew testDebugUnitTest
# Coverage report, written to app/build/reports/jacoco/
./gradlew app:jacocoTestReport
# Fail if coverage drops below the floor
./gradlew app:jacocoCoverageVerification
# Regenerate screenshot reference images after an intentional UI change
./gradlew :app:updateDebugScreenshotTest
# Build the API documentation into build/dokka/html
./gradlew :dokkaGenerate| Category | Library / Tool |
|---|---|
| Language | Kotlin 2.4.20 |
| Build | AGP 9.4.1 on Gradle 9.7.1, convention plugins in build-logic/ |
| UI | Jetpack Compose (BOM 2026.09.00) + Material 3 Expressive 1.5.0-alpha28 |
| Navigation | Navigation 3 1.2.0-rc01 |
| State | Lifecycle ViewModel + StateFlow 2.11.0 |
| Async | Coroutines and Flow |
| Permissions | Accompanist Permissions |
| Persistence | DataStore Preferences |
| Analytics | Firebase Analytics behind AnalyticsTracker, and Crashlytics |
| Solar maths | Commons Suncalc |
| Screenshot tests | Compose Screenshot Testing |
| Code quality | Detekt 1.23.8, Spotless 8.10.2 with ktlint 1.8.0 |
| API docs | Dokka 2.2.0, published to GitHub Pages |
Exact versions live in gradle/libs.versions.toml; the table above will drift.
Contributions are welcome. See CONTRIBUTING.md, and ROADMAP.md for work that is already known to need doing.
- Website: mobilemobile.app
- Support Us: Buy Me a Coffee

