Texte
Das Transparenz-Dashboard für die Hosentasche
Die Transparency Query API hatte schon länger ein Web-Dashboard. Was ihr fehlte, war ein Symbol auf dem Startbildschirm. Der Datenexplorer ist nun also eine native App — sie läuft auf Android und auf dem Desktop, aus einer einzigen Kotlin-Multiplatform-Codebasis, und sie spricht mit genau derselben öffentlichen API wie die Website.
Sie können den Android-Build herunterladen und ihn schon heute per Sideload installieren.
Warum überhaupt eine App
Die meisten dieser Daten schaut man nach, statt sich hinzusetzen und sie zu studieren — ein Löschtrend, wie sich die Zahlen einer Plattform mit denen einer anderen vergleichen, wie die Anfragen eines bestimmten Landes in diesem Zeitraum aussehen. Das ist eine Interaktion fürs Smartphone, nicht für den Desktop. Ein Dashboard, das einen breiten Bildschirm und eine Maus voraussetzt, macht den schnellen Blick schwerer, als er sein müsste. Die App ist andersherum gebaut: das Smartphone zuerst, und die breiten Layouts sind das, was sich von dort aus erweitert, nicht umgekehrt.
Eine Codebasis, zwei Plattformen
Alles Wesentliche liegt in einem gemeinsamen Source-Set: die DTOs, der Ktor-Client, der /api/overview und /api/explore aufruft, das Repository, das jede Abfrage zusammenbaut, sowie jeder Screen und jedes Diagramm. Compose Multiplatform rendert genau diese Oberfläche auf Android und in einem Desktop-Fenster. Nur zwei Dinge sind plattformspezifisch — der Einstiegspunkt (eine Activity auf Android, ein Fenster auf dem Desktop) und die HTTP-Engine, über Kotlins expect/actual verdrahtet, sodass Android OkHttp und der Desktop CIO bekommt. Es gibt keine zweite Implementierung der App, die man synchron halten müsste, weil es keine zweite Implementierung gibt.
Dieselbe Disziplin, die die API ehrlich hält, setzt sich im Client fort: Er sendet niemals SQL. Eine Abfrage ist ein strukturierter ExploreRequest — ein Tabellenname plus typisierte Filter, Gruppierungen und Aggregate —, den der Server validiert und kompiliert. Die App baut diese Anfragen zusammen; sie baut keine Zeichenketten. Eine neue Datensatzansicht hinzuzufügen ist eine Repository-Methode, keine handgeschriebene Abfrage.
Mobile-first, und das ernst gemeint
Das Layout misst seine eigene Breite und passt sich an. Unterhalb eines Breakpoints ist es ein Smartphone: Navigation am unteren Rand, eine einzelne Spalte und ein Explore-Ablauf, der von der Liste zum Detail führt, wie man es auf einem kleinen Bildschirm erwartet. Oberhalb davon erweitern sich dieselben Screens zu einer Navigationsleiste und einer Master-Detail-Ansicht. Weil die Screens zustandslos sind — der Zustand ist in ein einziges View-Model ausgelagert, das einen unveränderlichen UI-Zustand als StateFlow bereitstellt —, rendern die identischen Composables auf einem Smartphone, in einem Desktop-Fenster und im Screenshot-Harness, das die Bilder oben erzeugt hat.
Diagramme werden auf dem Compose-Canvas gezeichnet, statt von einem Bilddienst geladen zu werden, sodass sie bei jeder Pixeldichte gestochen scharf und ehrlich in dem sind, was sie zeigen — Bänder bleiben Bänder, Raten werden nie summiert, und ein Zeitraum ohne Daten liest sich als keine Daten statt als Null.
Die Android-Details, die sich lohnen
Eine native App sollte sich nativ anfühlen, und das sind viele kleine Dinge: ein adaptives Launcher-Symbol mit einer monochromen Ebene für Themed Icons, Launcher-Verknüpfungen, die direkt zur Löschanfragen-Ansicht oder zum Datensatz-Browser springen, Predictive Back, damit die Zurück-Geste des Systems eine Vorschau zeigt, wohin es geht, und app-spezifische Spracheinstellungen, die in Androids eigener Liste auftauchen — die App ist bereits in acht Sprachen übersetzt, also berücksichtigt sie, welche Sprache Sie dort wählen. Der Release-Build läuft durch R8 mit Ressourcen-Shrinking, und so landet eine vollständige Compose-App bei rund 1,5 MB.
Holen Sie es sich
Das Android-APK ist ein direkter Download — erlauben Sie Installationen aus Ihrem Browser und öffnen Sie es. Es sind dieselben Daten, dasselbe Abfragemodell und dieselben Vorbehalte wie beim Web-Dashboard; es lebt jetzt nur auf Ihrem Startbildschirm. Der Desktop-Build läuft aus derselben Codebasis, falls Sie es lieber in einem Fenster hätten.