$ cat ./projects/sentinel/README.md
SENTINEL
9
microservices (TS, Go, Python)
<1ms
spatial lookups via Redis GEOSEARCH
3D
CesiumJS real-time map
## context
Tracking entities — vessels, aircraft, vehicles, persons, facilities — in real time requires ingesting high-throughput feeds, answering spatial queries fast, and pushing live updates to analysts. SENTINEL is a ground-up build of that pipeline: an Nx monorepo with NestJS microservices, a Go ingest service, Python analytics, and an Angular 19 frontend on CesiumJS.
## approach
- Event-driven core: all entity state changes flow through Kafka topics, each service maintaining its own read model
- Redis GEOSEARCH geospatial cache for sub-millisecond bounding-box queries, with PostgreSQL/PostGIS fallback and automatic cache re-warming
- TimescaleDB hypertables for track history, OpenSearch for full-text and geospatial search
- Keycloak OIDC with role- and classification-based access control (UNCLASSIFIED → TOP_SECRET)
- Protobuf contracts shared across TypeScript, Go, and Python via generated libraries
## outcome
A fully containerized platform — Docker Compose for local dev, Kubernetes manifests for deployment — where live entity positions stream to a 3D map over WebSocket, with link-analysis graphs, geofence alerting, and pattern analytics running as independent services.