PulseStack
Ein Echtzeit-Workspace, der Live-Chat mit automatisierten Trend-Feeds aus mehreren Quellen kombiniert — als Microservice-Architektur mit Spring Boot, Kafka, Redis und WebSockets.
Was es ist
PulseStack sammelt automatisch News und Trends aus mehreren Quellen (YouTube, GitHub, NewsAPI) für frei wählbare Themen-Channels (z. B. „Java", „AI & ML", „DevOps") und kombiniert sie mit einem klassischen, Discord-ähnlichen Echtzeit-Chat pro Channel. Zusätzlich läuft eine eigene React-Native-App, mit der sich Feed, Chat und der angebundene Stock-Predictor auch mobil nutzen lassen.
Architektur — 4 unabhängige Microservices
- auth-service: zentrale Registrierung/Login, gibt JWTs aus, die von allen anderen Services (inkl. Stock-Predictor) akzeptiert werden
- ingestion-service: pollt periodisch YouTube-, GitHub- und NewsAPI-Adapter pro Channel, erkennt Duplikate und publisht neue Items über Kafka (Adapter sind über ein gemeinsames Port-Interface austauschbar, jeder einzeln per Feature-Flag zuschaltbar)
- processing-service: konsumiert Kafka-Events, persistiert News-Items und broadcastet sie live per STOMP/WebSocket an alle verbundenen Clients
- chat-service: STOMP-WebSocket-Chat pro Channel inkl. Presence-Tracking (wer ist online) über Redis, mit Typing-Indikatoren und Heartbeats
Die Services kommunizieren asynchron über Kafka und teilen sich ein gemeinsames shared-domain-Modul für Domain-Objekte (Maven Multi-Module-Projekt).
Frontend
- Web: React + TypeScript, eigene SVG-Charts für die Analytics-Dashboards (bewusst ohne Recharts, da es auf manchen Build-Targets zu Hoisting-Crashes führte), Skeleton-Loader & Error-Boundaries
- Mobile: React Native mit Expo SDK 57 — eigenständige Android-App mit Feed, Live-Chat und Stock-Predictor-Integration, AsyncStorage-basierter Session und STOMP über native WebSockets. Die APK kann direkt über den Button oben installiert werden; Android fragt dabei gegebenenfalls nach der Erlaubnis für Apps aus dieser Quelle.
Cross-Service Single Sign-On
Ein JWT-Secret wird zwischen PulseStack und dem Stock-Predictor geteilt. Meldet sich ein Nutzer in PulseStack an, wird beim ersten Request gegen den Stock-Predictor automatisch (Just-in-Time) ein passender User dort angelegt — ohne zweite Registrierung. Ergebnisse aus dem Stock-Predictor (neue Vorhersagen, aufgelöste Scores) laufen als eigener News-Channel direkt in den PulseStack-Feed.
Qualitätssicherung
- CI/CD-Pipeline über GitHub Actions für das komplette Backend (Maven Multi-Module): Build, Tests und Coverage-Report bei jedem Push, automatisches Deployment auf Render
- 29 Unit-Tests (JUnit 5 + Mockito + MockWebServer) — u. a. für die Ingestion-Pipeline (Duplikat-Erkennung, Fehlertoleranz bei ausfallenden Adaptern), das Adapter-Query-Mapping, Auth-Flows (Register/Login/JWT) und Presence-Tracking
- JaCoCo Code-Coverage mit automatischem PR-Kommentar
- Strukturiertes JSON-Logging, OpenAPI/Swagger-Doku pro Service, Spring Profiles für local/prod