[ BACKEND / SYSTEMS ] Working
Chrono Real-time status monitor for external APIs, with automatic incident detection
Problem When an external API your product depends on starts failing or degrading, you usually find out from user complaints, not your own monitoring — and by the time you notice, you've already lost valuable diagnostic time.
Solution An asyncio worker checks the status of every monitored service in parallel every 30 seconds and reports results to the backend over HTTP — it never touches the database directly. The backend automatically detects status transitions (healthy → degraded → down, and back), opens and closes incident records with their exact duration, and broadcasts every change live to all connected browsers via WebSocket, no refresh needed. Latency charts use adaptive downsampling instead of fixed hourly buckets, so a newly added service never shows an empty chart during its first hour.
Architecture Three independent processes that never share a database connection: the worker has zero Postgres credentials, it only knows the backend's URL. FastAPI is the sole owner of the schema, exposing both internal ingestion and public queries (including embeddable per-service status SVG badges). Vue 3 + Pinia on the frontend, updated in real time via WebSocket with no polling. PostgreSQL in a Podman container.
Stack FastAPI Python asynciohttpx PostgreSQL SQLAlchemyWebSockets Vue 3 Piniavue-i18n Podman