Architektur
Die Architektur von TreeQuest ist in vier logische Schichten unterteilt und nutzt moderne, bewährte Technologien, um Skalierbarkeit, Wartbarkeit und eine reibungslose Entwicklung zu gewährleisten.
1. Systemüberblick
TreeQuest nutzt eine typische Client-Server-Architektur, bei der die mobile App über eine REST-API mit dem Backend kommuniziert.
graph TD
subgraph Client
App[React Native / Expo App]
end
subgraph Backend
API[FastAPI Server]
ML[ML Model - Species ID]
end
subgraph Database
DB[(PostgreSQL + PostGIS)]
end
App -- "HTTP/REST & GeoJSON" --> API
API -- "In-process inference" --> ML
API -- "SQLAlchemy / GeoAlchemy2" --> DB
style App fill:#61dafb,stroke:#333,stroke-width:2px,color:#000
style API fill:#059669,stroke:#333,stroke-width:2px,color:#fff
style ML fill:#10b981,stroke:#333,stroke-width:2px,color:#fff
style DB fill:#336791,stroke:#333,stroke-width:2px,color:#fff
Kernkomponenten: - Mobile App: React Native + Expo (TypeScript) - Backend: FastAPI (Python 3.14) - Datenbank: PostgreSQL 18 + PostGIS 3.6 - Infrastruktur: Docker Compose, DigitalOcean Droplet, EAS Build für die App.
2. Mobile App (React Native + Expo)
Die mobile App ist mit React Native und dem Expo Managed Workflow gebaut. Dies ermöglicht eine schnelle Entwicklung ohne komplexe native Android/iOS-Konfigurationen.
Kerntechnologien
@maplibre/maplibre-react-native: Kartenrendering basierend auf OpenStreetMap (OGC-konform).expo-camera/expo-image-picker: Für die Fotoaufnahme zur Baumerkennung.zustand: Leichtgewichtiges State-Management mit dedizierten Stores (authStore,treeStore, etc.).axios: HTTP-Client mit Interceptoren für nahtlose JWT-Authentifizierung.@react-navigation/*: Tab- und Stack-Navigation.
Architekturkonzepte
Die App ist Online-First konzipiert, bietet aber durch gecachte Kartenelemente eine gewisse Offline-Fähigkeit. Alle permanenten Daten leben im Backend. Die Kommunikation mit dem Backend erfolgt über REST und standardisiertes GeoJSON für räumliche Daten.
3. Backend (FastAPI / Python 3.14)
FastAPI wurde als Backend-Framework gewählt, da das eingesetzte Machine-Learning-Modell für die Artenbestimmung Python-nativ (PyTorch) ist. Dies erspart einen separaten ML-Service.
Struktur (Layered Architecture)
Das Backend folgt einem sauberen Schichtenmodell, ähnlich dem Controller-Service-Repository Pattern:
- Router: Behandeln HTTP-Requests und rufen Services auf.
- Services: Enthalten die Business-Logik (z.B. Punktevergabe, Streak-Berechnung).
- Repositories: Kapseln Datenbankzugriffe (via SQLAlchemy).
- Models / Schemas: SQLAlchemy ORM Modelle und Pydantic v2 Schemas für Validierung.
Authentifizierung & Sicherheit
Die Anwendung nutzt zustandslose JWT-Tokens (Access & Refresh Tokens). Passwörter werden sicher mit bcrypt gehasht.
4. Machine Learning (Artenbestimmung)
Das Backend integriert ein Pre-Trained-Modell (z.B. aus dem iNaturalist-Ökosystem oder BioClip) direkt in den FastAPI-Prozess.
sequenceDiagram
participant User
participant App
participant API
participant ML as ML Model
User->>App: Fotografiert Baum
App->>API: POST /api/v1/identify (Bild)
API->>ML: Bild normalisieren & auswerten
ML-->>API: Top-5 Vorhersagen (Confidence)
API-->>App: Gemappte Baumarten (JSON)
App-->>User: Zeigt Vorschläge an
- Das Modell wird beim Startup in den RAM geladen.
- Bilder werden über die API empfangen, auf z.B. 224x224 normalisiert und durch das Modell geschickt.
- Die Latenz liegt bei < 5 Sekunden auf einer Standard-CPU.
5. Datenbankschicht (PostgreSQL + PostGIS)
Die Kombination aus PostgreSQL und der Geodaten-Erweiterung PostGIS ist der Industrie-Standard für räumliche Daten.
Highlights
- Geometrien: Baumstandorte werden als PostGIS
Point(SRID 4326) gespeichert. - Zonen: "Discovery Zones" sind als
Polygongespeichert. - Räumliche Abfragen: Komplexe Queries wie
ST_Contains(Befindet sich ein Punkt in einer Zone?) oderST_MakeEnvelope(Bäume in einem Kartenausschnitt) werden effizient auf Datenbankebene ausgeführt.
6. Gamification System
Die Architektur beinhaltet ein durchdachtes Gamification-Modul im Backend:
- Punkte: Werden automatisch für Aktionen wie das Markieren oder Verifizieren vergeben.
- Badges: JSON-basierte Kriterien, die nach jedem Punktezuwachs evaluiert werden (z.B. "Erster Baum markiert").
- Streaks: Tracking der täglichen Aktivität mit Feuer-Icons.
- Discovery Zones: Verdeckte Zonen ("Fog of war" auf der Karte), die durch GPS-Fix oder Aktionen aufgedeckt werden und Extrapunkte geben.