A distributed chat application demonstrating a modern microservice architecture with WebAuthn authentication,
a BFF exposing REST and WebSocket APIs, and federated GraphQL services for user profiles, messaging history, and analytics.
- Architecture: docs/ARCHITECTURE.md
- JDK 25+
- Docker Engine / Desktop
- Minikube
- Clone project
- Build services and deploy to k8s cluster:
./scripts/deploy-minikube.sh- Port forward BFF (and optional services):
| What | URL |
|---|---|
| Chat SPA / BFF | http://localhost:8080 — needs minikube kubectl -- port-forward svc/bff 8080:8080 |
| Apollo Sandbox (optional) | http://localhost:4000 — needs port-forward svc/graphql-router 4000:4000 |
| Kafka UI (optional) | http://localhost:8089 — needs minikube kubectl -- port-forward svc/kafka-ui 8089:8080 |
- Register two users (two browsers) and complete the passkey flow.
- Invite by UUID: both tabs must show WebSocket Connected.
- Accept invite → conversation sidebar loads history via federated GraphQL through the BFF.
The SPA calls POST /api/v1/graphql: the BFF proxies to Apollo Router with the user’s JWT.
| BFF runs in | APP_FEDERATED_GRAPH_URL |
|---|---|
| Minikube | http://graphql-router:4000/graphql |
Local JVM (bff/) |
http://localhost:4000/graphql — requires host router (see below) |
Use when running subgraphs on localhost:8082–8084 via port-forward and Router on your laptop:
./federated-graph/scripts/port-forward-subgraphs.sh # terminal 1
./federated-graph/scripts/run-router.sh # terminal 2