Add 4 new dimension queries (concurrent with existing 4, total 8) to
the dashboard: countries, devices, browsers, and operating systems.
All reuse the existing DimensionSection component with proportional
progress bars.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix Plausible API v2 compatibility: move `limit` into `pagination`
object, add `expectSuccess = true` to Ktor client so API errors are
surfaced instead of "Illegal input" serialization errors, configure
`explicitNulls = false` to avoid sending null fields
- Add smart start destination: app checks DataStore on launch and
navigates directly to dashboard if an instance/site was previously
selected, skipping the setup screen
- Add settings and sites icons to dashboard top bar for navigating
back to instance management and site list
- Add site editing (inline rename) to site list screen
- Fix DateRangeSelector crash caused by sealed class data object
initialization issue in Compose lambda captures
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Working Android dashboard app for self-hosted Plausible Analytics CE.
Connects to Plausible API v2 (POST /api/v2/query), displays top stats,
visitor chart, top sources, and top pages with date range selection.
Architecture: Kotlin + Jetpack Compose + Material 3 + Hilt + Ktor +
SQLDelight + EncryptedSharedPreferences. Single :app module, four-layer
unidirectional data flow (UI → ViewModel → Repository → Data).
Includes: instance management, site list, caching with TTL per date
range, encrypted API key storage, custom Canvas visitor chart,
pull-to-refresh, and unit tests for API, cache, repository, and
domain model layers.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>