--- type: Reference status: ACTIVE owner: Lead Architect date: 2026-03-07 --- # Meldestelle — Tech-Stack Zusammenfassung > **Zweck:** Vollständige Referenz des eingesetzten Tech-Stacks im Projekt "Meldestelle". > Dient als Basis für Recherchen zu Self-Hosted AI (Codegenerierung, RAG, Agenten). > **Stand:** 07. März 2026 --- ## 1. Überblick Das Projekt "Meldestelle" ist eine **Kotlin-first, Cloud-native Microservices-Plattform** für die Verwaltung von Reitsport-Meldungen (FEI / ÖTO). Es kombiniert ein **Kotlin Multiplatform (KMP) Frontend** mit einem **Spring Boot Microservices Backend** auf einer vollständig self-hosted Infrastruktur. ``` ┌─────────────────────────────────────────────────────────────────┐ │ Frontend (KMP) │ Backend (Spring Boot / Kotlin JVM) │ │ Kotlin 2.3 / Compose │ Java 25 / Spring Boot 3.5.9 │ │ JS + WASM (geplant) │ Microservices + API-Gateway │ ├─────────────────────────────────────────────────────────────────┤ │ Infrastruktur (Self-Hosted auf Zora / Proxmox) │ │ Keycloak · Consul · Valkey · PostgreSQL · Zipkin │ │ Prometheus · Grafana · Caddy · Pangolin-Tunnel │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## 2. Sprachen & Laufzeiten | Komponente | Sprache / Runtime | Version | |:------------------|:-------------------------|:------------| | Backend | Kotlin (JVM) | 2.3.0 | | Frontend | Kotlin (KMP / JS) | 2.3.0 | | JVM | Java (Eclipse Temurin) | 25 (EA) | | Build | Gradle (Kotlin DSL) | 9.3.1 | | Plattform | ARM64 (AArch64) | Linux | --- ## 3. Frontend — Kotlin Multiplatform (KMP) ### 3.1 Core-Framework | Bibliothek | Version | Zweck | |:------------------------------|:----------|:-----------------------------------| | Kotlin Multiplatform | 2.3.0 | Cross-Platform-Basis (JS + WASM) | | Compose Multiplatform | 1.10.0 | UI-Framework (Deklarativ) | | Compose Hot Reload | 1.0.0 | Live-Reload im Dev-Modus | | Koin (DI) | 4.1.1 | Dependency Injection | | Koin Compose | 4.1.1 | DI-Integration für Compose | | Ktor Client | 3.4.0 | HTTP-Client (Multiplatform) | | Kotlin Serialization | 2.3.0 | JSON-Serialisierung | ### 3.2 Persistenz (Offline-First) | Bibliothek | Version | Zweck | |:------------------------------|:----------|:-----------------------------------| | SQLDelight | 2.2.1 | Cross-Platform SQL-Datenbank | | SQLite (WASM) | 3.51.1 | SQLite für Browser/WASM | | SQLite (Native) | 2.6.2 | SQLite für JVM/Desktop | ### 3.3 Build-Targets | Target | Status | Anmerkung | |:--------------|:------------|:-----------------------------------| | KotlinJS | ✅ Aktiv | Primäres Build-Target | | WASM | ⏳ Geplant | Warten auf Alpha-Version | | Desktop (JVM) | ⚙️ Möglich | uiDesktop 1.7.0 vorhanden | ### 3.4 Modul-Struktur ``` frontend/ ├── core/ │ ├── core-network/ # Ktor HTTP-Client, Auth-Interceptor │ ├── core-ui/ # Design-System, Tokens, Komponenten │ ├── core-domain/ # Shared Domain-Models │ └── core-data/ # Repository-Interfaces ├── features/ │ ├── ping-feature/ # ✅ Blueprint: MVVM + Repository + DI + Tests │ └── members-feature/ # ⏳ Auskommentiert (nächste Phase) └── shells/ └── meldestelle-portal/ # Web-App Shell (Caddy-served) ``` --- ## 4. Backend — Spring Boot Microservices ### 4.1 Core-Framework | Bibliothek | Version | Zweck | |:------------------------------|:----------|:-----------------------------------| | Spring Boot | 3.5.9 | Microservices-Framework | | Spring Cloud | 2025.0.1 | Service Discovery, Config | | Spring Security (OAuth2) | (Boot) | JWT-Validierung, Resource Server | | Spring Data JPA | (Boot) | ORM-Layer | | Spring Data Valkey | 0.2.0 | Cache-Integration (Valkey/Redis) | | Spring WebFlux | (Boot) | Reaktive API (Gateway) | | Kotlin Coroutines | 2.3.0 | Async/Non-blocking | ### 4.2 Persistenz | Bibliothek | Version | Zweck | |:------------------------------|:----------|:-----------------------------------| | PostgreSQL Driver | 42.7.8 | JDBC-Treiber | | Exposed (JetBrains) | 1.0.0 | Kotlin-native SQL DSL | | Flyway | 11.19.1 | Datenbank-Migrationen | | HikariCP | 7.0.2 | Connection Pool | > **Strategie (ADR-001):** Hybrid — JPA für einfache CRUD-Entities, Exposed für komplexe Queries und Domain-Logik. ### 4.3 Caching & Messaging | Bibliothek | Version | Zweck | |:------------------------------|:----------|:-----------------------------------| | Lettuce | 6.6.0 | Valkey/Redis-Client (reaktiv) | | Redisson | 4.0.0 | Distributed Locks, Pub/Sub | | Caffeine | 3.2.3 | In-Memory Cache (L1) | | Reactor Kafka | 1.3.23 | Kafka-Client (Phase 3 / Outbox) | ### 4.4 Observability & Tracing | Bibliothek | Version | Zweck | |:------------------------------|:----------|:-----------------------------------| | Micrometer | 1.16.1 | Metriken (Prometheus-Export) | | Micrometer Tracing | 1.6.1 | Distributed Tracing | | Zipkin Reporter | 3.5.1 | Trace-Export zu Zipkin | | Logback | 1.5.25 | Logging | ### 4.5 Security | Bibliothek | Version | Zweck | |:------------------------------|:----------|:-----------------------------------| | Keycloak Admin Client | 26.0.7 | Keycloak-API-Integration | | Spring Security OAuth2 | (Boot) | JWT Resource Server | | Jackson (Kotlin) | 3.0.3 | JSON-Serialisierung | ### 4.6 API & Dokumentation | Bibliothek | Version | Zweck | |:------------------------------|:----------|:-----------------------------------| | Springdoc OpenAPI | 3.0.0 | Swagger / OpenAPI 3.1 | | Jakarta Annotation | 3.0.0 | Jakarta EE Annotations | ### 4.7 Modul-Struktur ``` backend/ ├── infrastructure/ │ ├── gateway/ # ✅ API-Gateway (Spring Cloud Gateway) │ ├── security/ # ✅ Zentrales OAuth2/JWT-Modul (DRY) │ ├── cache/ │ │ ├── cache-api/ # Interface-Abstraktion │ │ └── valkey-impl/ # Valkey-Implementierung │ ├── event-store/ │ │ ├── event-store-api/ # Interface-Abstraktion │ │ └── valkey-impl/ # Valkey-Implementierung │ ├── persistence/ # Hybrid JPA + Exposed │ └── messaging/ # Kafka (Phase 3 / Outbox-Pattern) └── services/ ├── ping/ # ✅ Deployed — Test/Blueprint-Service ├── entries/ # ⚙️ Registriert, noch nicht deployed ├── events/ # 👻 Ghost Service (nicht registriert) ├── horses/ # 👻 Ghost Service (nicht registriert) ├── masterdata/ # 👻 Ghost Service (nicht registriert) ├── registry/ # 👻 Ghost Service (nicht registriert) ├── results/ # 👻 Ghost Service (nicht registriert) └── scheduling/ # 👻 Ghost Service (nicht registriert) ``` --- ## 5. Infrastruktur-Services (Docker) ### 5.1 Laufende Services | Service | Image / Version | Port(s) | Zweck | |:---------------|:--------------------------|:--------------|:-----------------------------| | PostgreSQL | postgres:16-alpine | 5432 | Primäre Datenbank | | Keycloak | keycloak:26.4 (custom) | 8180, 9000 | IAM / OAuth2 / OIDC | | Valkey | valkey:8-alpine | 6379 | Cache + Event-Store | | Consul | consul:1.21 | 8500, 8600 | Service Discovery + Config | | Zipkin | openzipkin/zipkin:3.5 | 9411 | Distributed Tracing | | Prometheus | prom/prometheus:v3.4 | 9090 | Metriken-Sammlung | | Grafana | grafana/grafana:11.6 | 3000 | Dashboards / Visualisierung | | Caddy | caddy:2.10-alpine | 4000 | Web-App Serving (Frontend) | | API-Gateway | (custom Spring Boot) | 8081 | Zentraler Eintrittspunkt | | Ping-Service | (custom Spring Boot) | 8082 | Test/Blueprint-Service | ### 5.2 CI/CD & DevOps | Tool | Version / Details | Zweck | |:----------------|:--------------------------|:-----------------------------| | Gitea | Self-Hosted (CT 101) | Git-Repository + Registry | | Gitea Actions | (Runner VM 102) | CI/CD-Pipeline | | Docker Buildx | ARM64 (linux/arm64) | Multi-Arch Image Build | | Pangolin | Self-Hosted Tunnel | Reverse Proxy / Extern-Zugang| ### 5.3 Netzwerk & Routing | Subdomain | Intern (Zora) | Zweck | |:-----------------------|:--------------------|:-------------------------| | `git.mo-code.at` | `10.0.0.22:3000` | Gitea | | `api.mo-code.at` | `10.0.0.50:8081` | API-Gateway | | `auth.mo-code.at` | `10.0.0.50:8180` | Keycloak | | `app.mo-code.at` | `10.0.0.50:4000` | Web-App | | `photos.mo-code.at` | `10.0.0.24:2283` | Immich (Fotos) | --- ## 6. Code-Qualität & Build-Tools | Tool | Version | Zweck | |:------------------|:----------|:-----------------------------------| | Detekt | 1.23.6 | Kotlin Static Analysis | | ktlint | 12.1.1 | Kotlin Code Formatter | | ArchUnit | 1.4.1 | Architektur-Tests (Layer-Regeln) | | Dokka | 2.1.0 | API-Dokumentation (KDoc) | | Ben-Manes Versions| 0.51.0 | Dependency-Update-Check | | KSP | 2.3.4 | Kotlin Symbol Processing | ### Build-Konfiguration ```properties # gradle.properties org.gradle.parallel=true org.gradle.caching=true org.gradle.workers.max=8 org.gradle.configuration-cache=false # wegen JS-Test Serialisierungsproblem org.gradle.dependency.verification=strict ``` --- ## 7. Test-Stack | Bibliothek | Version | Zweck | |:------------------------------|:----------|:-----------------------------------| | JUnit Jupiter | 5.11.3 | Unit-Tests | | JUnit Platform | 1.11.3 | Test-Runner | | MockK | 1.14.7 | Kotlin Mocking | | AssertJ | 3.27.7 | Fluent Assertions | | Testcontainers | 2.0.3 | Integration-Tests (Docker) | | Testcontainers Keycloak | 4.0.1 | Keycloak-Integration-Tests | | Testcontainers PostgreSQL | 1.21.4 | DB-Integration-Tests | | Testcontainers Kafka | 1.21.4 | Kafka-Integration-Tests | | ArchUnit | 1.4.1 | Architektur-Compliance-Tests | --- ## 8. Architektur-Prinzipien (ADRs) | ADR | Entscheidung | Status | |:------|:--------------------------------------------------|:---------| | 0001 | Modulare Architektur (DDD, Clean Architecture) | ✅ Aktiv | | 0003 | Microservices-Architektur | ✅ Aktiv | | 0004 | Event-Driven Communication (Kafka Phase 3) | ✅ Aktiv | | 001 | Backend-Infrastruktur: Hybrid JPA+Exposed, Valkey | ✅ Aktiv | | 0013 | Tech-Stack-Stabilisierung 2026 (Versionen) | ✅ Aktiv | **Kern-Prinzipien:** - **Offline-First:** SQLDelight als Cross-Platform-DB, Sync-Mechanismus - **Docs-as-Code:** `/docs` als Single Source of Truth - **DRY-Infrastruktur:** Shared Security/Cache/EventStore-Module - **ARM64-Native:** Alle Images für `linux/arm64` gebaut --- ## 9. Relevanz für Self-Hosted AI ### 9.1 Welche AI-Aufgaben entstehen im Projekt? | Aufgabe | Häufigkeit | Komplexität | |:---------------------------------|:-----------|:------------| | Kotlin/Spring Boot Code-Completion| Täglich | Mittel | | Compose Multiplatform UI-Code | Täglich | Mittel | | SQL / Exposed DSL Queries | Häufig | Mittel | | Gradle Kotlin DSL Build-Skripte | Gelegentlich| Niedrig | | Docker / YAML Konfigurationen | Gelegentlich| Niedrig | | Architektur-Entscheidungen (ADR) | Selten | Hoch | | Fachlogik FEI/ÖTO Regelwerk | Selten | Sehr hoch | ### 9.2 Anforderungen an das AI-Modell ``` MUSS: ✅ Kotlin (JVM + Multiplatform) — sehr gute Unterstützung ✅ Spring Boot / Spring Cloud — sehr gute Unterstützung ✅ Compose Multiplatform — gute Unterstützung (neuere Modelle) ✅ SQL / PostgreSQL — sehr gute Unterstützung ✅ Docker / YAML — sehr gute Unterstützung ✅ Deutsch (Fachsprache Reitsport) — für RAG-Dokumente NICE-TO-HAVE: ⭐ Gradle Kotlin DSL ⭐ Keycloak / OAuth2 / OIDC ⭐ Microservices-Architektur-Patterns ``` ### 9.3 Empfohlene Modelle für diesen Stack | Modell | Größe | Stärke | RAM-Bedarf | |:------------------------|:-------|:------------------------------------|:-----------| | `qwen2.5-coder:14b` | 14B | Code (Kotlin, Java, SQL) — Top | ~10 GB | | `deepseek-coder-v2:16b` | 16B | Code-Completion, Refactoring | ~12 GB | | `llama3.1:8b` | 8B | Allgemein + Deutsch, schnell | ~6 GB | | `qwen2.5:32b` | 32B | Architektur, Planung, Fachlogik | ~22 GB | | `codellama:13b` | 13B | Code-Completion (IntelliJ-Plugin) | ~9 GB | > **Empfehlung für Zora (64 GB RAM):** > - **Primär:** `qwen2.5-coder:14b` — bester Kotlin/Spring-Support > - **Sekundär:** `qwen2.5:32b` — für Architektur und Fachlogik > - **IntelliJ-Integration:** `codellama:13b` oder `qwen2.5-coder:14b` ### 9.4 RAG-Dokumente (Priorität) Folgende Projekt-Dokumente sind besonders wertvoll als RAG-Kontext: ``` Hohe Priorität: ├── docs/01_Architecture/MASTER_ROADMAP_2026_Q1.md ├── docs/01_Architecture/adr/ (alle ADRs) ├── docs/04_Agents/Playbooks/ (Agenten-Rollen) ├── gradle/libs.versions.toml (Versions-SSoT) └── docs/07_Infrastructure/ (Infrastruktur-Referenz) Mittlere Priorität: ├── docs/05_Backend/ (Backend-Guides) ├── docs/06_Frontend/ (Frontend-Guides) └── docs/03_Domain/ (Fachlogik-Konzepte) ``` --- ## 10. Zusammenfassung ``` TECH-STACK KOMPLEXITÄT ────────────────────────────────────────────────────── Sprachen: Kotlin (JVM + KMP/JS) Build: Gradle 9.3.1 + Kotlin DSL + libs.versions.toml Frontend: Compose Multiplatform 1.10 + SQLDelight 2.2 + Koin 4.1 Backend: Spring Boot 3.5.9 + Spring Cloud 2025.0.1 Persistenz: PostgreSQL 16 + Exposed 1.0 + Flyway 11 + HikariCP 7 Cache: Valkey 8 + Lettuce 6.6 + Caffeine 3.2 Security: Keycloak 26.4 + Spring Security OAuth2 + JWT Observability: Micrometer 1.16 + Zipkin 3.5 + Prometheus + Grafana 11.6 Service Mesh: Consul 1.21 + Spring Cloud Gateway Messaging: Kafka (Phase 3) + Reactor Kafka 1.3 CI/CD: Gitea Actions + Docker Buildx (ARM64) Hosting: Proxmox VE 8.4 + Docker Compose + Pangolin-Tunnel ```