An AI email-triage agent that classifies incoming mail with Google Gemini, stores only the alerts that matter, and streams them to a live dashboard over WebSockets — zero manual triage, zero polling.

Support and ops inboxes are flooded with mixed mail — billing failures, system crashes, sign-in alerts, newsletters, and spam — and the few messages that genuinely need action get buried.
This agent runs a background pipeline that reads each incoming email, classifies it with an LLM, and takes one of two paths: important mail is stored and instantly pushed to a real-time dashboard, while noise is dropped at the classification layer and never persisted.
I built it as a decoupled system — a Django + DRF backend with Django Channels for WebSockets, a Google Gemini classifier orchestrated through LangChain, and a React + Vite dashboard. The whole stack comes up with a single docker compose up.