Jede Woche ein Update. Von der Matching-Engine bis zum Design-System — ich zeig dir den Code, die Entscheidungen, die Fehler. Bauen im Offenen.
Milestone~4 min
Module 22: Matching-Engine geht live.
Nach 3 Wochen Implementierung und 2 Rewrites läuft die Genre-Vektor-Matching-Engine in der Codebase. Cosine-Similarity auf 11 Dimensionen.
Die Kernfrage: Wie matched man zwei Anime-Fans sinnvoll? Nicht nur "mag gleiche Genres", sondern wie sehr überschneidet sich ihr Taste-Profil.
Jeder User bekommt einen 11-dimensionalen Vektor aus seiner Watchlist. Jede Dimension = ein Genre-Cluster (Action, Romance, Slice-of-Life, Psychological, Fantasy, Sci-Fi, Comedy, Thriller, Horror, Sports, Music). Der Score ist die Cosine-Similarity zwischen zwei Vektoren.
Woche 1: Basis-Vektor aus completed-Liste + weighted scores
Woche 2: Recency-Weight — was du letzte Woche geschaut hast zählt 3× mehr
Woche 3: Edge-Case-Handling + Performance-Tuning (Sub-50ms auf Mittelwert)
Design System v2: DTCG-konforme Token-Architektur.
Alle Farben, Abstände, Typografie und Shadows laufen jetzt durch einheitliche Token. Exportierbar nach Kotlin, Swift und CSS.
V1 hatte Hardcoded-Werte in Compose-Theme.ons. Das war wartbar beim Start, aber bei 20+ Modulen wurde es chaotisch. V2 mapped alles auf DTCG-Design-Token (Design Tokens Community Group Standard).
Das System hat drei Ebenen:
Core Tokens: raw values (#050D1F Navy, 8px spacing, Inter Tight Font)
Alias Tokens: semantic mapping (color.surface.primary → #050D1F)
Der Token-Editor im Dashboard erlaubt Live-Export als Kotlin-Object, Swift-Enum und CSS-Custom-Properties. Preview aktualisiert in Echtzeit.
Sicherheit~5 min
E2E Encryption: Warum X25519 + ChaCha20-Poly1305.
Warum nicht einfach Signal-Protokoll? Weil der Use-Case ein anderer ist. Wir bauen für Pair-Chats, nicht für Gruppen-Messenger.
Jeder Chat zwischen zwei Usern bekommt ein eigenes Schlüsselpaar. Der Public Key wird über Firestore geteilt (signiert vom Server). Der Private Key liegt nur auf dem Device — inklusive Key-Persistance über App-Neustarts via Android KeyStore / iOS Secure Enclave.
Cipher-Suite:
Key Exchange: X25519 (Curve25519) — schnell, sicher, moderne ECC
Symmetric Encryption: ChaCha20-Poly1305 — AES-Alternative, kein HW-Accelerator nötig, constant-time
Key Derivation: HKDF-SHA256 aus dem Shared-Secret
Warum nicht Signal? Signal ist für asynchrone Gruppen-Kommunikation und Forward-Secrecy auf Server-Ebene optimiert. Unser Use-Case ist 1:1-Chat mit synchrone Zustellung. Der Overhead von Signal (Pre-Key-Bundles, Ratchets) wäre nicht gerechtfertigt. X25519 + ChaCha20-Poly1305 ist auditiert, leichtgewichtig und erfüllt unsere Threat-Model-Anforderungen.
Performance~4 min
KMP: Compose Performance auf iOS optimiert.
Von 8 FPS Ruckeln auf 60 FPS flüssig — was wir gelernt haben beim ersten iOS-Test der Rankings-Sheet.
Der erste iOS-Build zeigte ein massives Problem: das Rankings-Sheet ruckelte bei 200 Einträgen auf 8-12 FPS. Der gleiche Code auf Android lief butterweich. iOS hat eine andere Rendering-Pipeline.
Ursachen und Fixes:
LazyColumn ohne Key: Compose iOS braucht stabile Keys sonst rerendert alles — fixed
Image Loading: Coil/AsyncImage auf iOS hat keinen Disk-Cache — custom cache layer
Overdraw: Jede Karte hatte 3 verschachtelte Surfaces — auf 1 reduziert
Scroll Performance: 8px corner-radius auf iOS teurer als auf Android — reduced to min
Nach den Optimierungen: 60 FPS stabil auf iPhone 12 Mini (A14). Nächster Schritt: Benchmarking auf iPad + Captured-Effect-Check bei Transitions.