feat: implement Phase 1 MVP of Implausibly
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>
This commit is contained in:
commit
aa66172d58
69 changed files with 4778 additions and 0 deletions
19
app/src/main/sqldelight/no/naiv/implausibly/StoredSite.sq
Normal file
19
app/src/main/sqldelight/no/naiv/implausibly/StoredSite.sq
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
-- SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
CREATE TABLE stored_sites (
|
||||
site_id TEXT NOT NULL,
|
||||
instance_id TEXT NOT NULL,
|
||||
PRIMARY KEY (site_id, instance_id)
|
||||
);
|
||||
|
||||
selectByInstance:
|
||||
SELECT * FROM stored_sites WHERE instance_id = ? ORDER BY site_id ASC;
|
||||
|
||||
insert:
|
||||
INSERT OR IGNORE INTO stored_sites VALUES (?, ?);
|
||||
|
||||
delete:
|
||||
DELETE FROM stored_sites WHERE site_id = ? AND instance_id = ?;
|
||||
|
||||
deleteByInstance:
|
||||
DELETE FROM stored_sites WHERE instance_id = ?;
|
||||
Loading…
Add table
Add a link
Reference in a new issue