Backend Overview
Aura’s backends form a polyglot microservices stack — Node/Express where I/O dominates,
Python/FastAPI where ML libraries live. Everything is orchestrated by a single
docker-compose.yml.
docker compose up| Service | Stack | Port | Role |
|---|---|---|---|
| API Proxy | Express | 3005 | Key isolation, rate limiting, metering |
| Vector Search | FastAPI + ChromaDB | 3001 | Semantic search |
| Media Pipeline | Express + FFmpeg | 3002 / 3003 (WS) | Frame extraction, transcription |
| Graph Knowledge | Express + SQLite | 3004 | Concept graph, learning paths |
| CLIP Embeddings | FastAPI + CLIP ViT-B/32 | 3006 | Visual embeddings |
Every service is optional. The frontend detects availability via /health endpoints and
falls back to browser-local alternatives — local embeddings, in-browser frame extraction,
IndexedDB persistence. Start only what you need.
Environment wiring
VITE_VECTOR_BACKEND_URL=http://localhost:3001
VITE_MEDIA_BACKEND_URL=http://localhost:3002
VITE_GRAPH_BACKEND_URL=http://localhost:3004Volumes
docker-compose.yml declares persistent volumes for vector-data (ChromaDB), media-temp
(FFmpeg scratch), and clip-data (model cache), so indexes and models survive restarts.
Health convention
Every service exposes GET /health; most expose GET /stats for operational counters. The
frontend’s graceful-degradation logic and the compose healthchecks both rely on these.