Inspiration
77% of workers experience burnout, but nobody catches it until they're already breaking. The World Health Organization only recognized burnout as a medical condition in 2019, and yet we still have no passive, early-warning system for it.
We kept asking: what if you didn't have to wait until you crashed to know you were heading there?
Burnout doesn't appear overnight. It whispers through your patterns for weeks before you feel it. Reply times slow down. Your social circle quietly contracts. Your sleep drifts. Your words carry less energy. The signals are all there. Nobody was reading them.
Ember reads them.
What it does
Ember is a real-time burnout detection system that monitors the shape of your behavior, not the content. Six independent sensors run silently in the background, tracking:
- Timing - sleep schedule drift and activity clock shifts
- Frequency - drops in your daily activity level
- Latency - how fast you reply and social withdrawal patterns
- Social Graph - whether your circle is contracting
- Volume - declining communication energy
- Sentiment - tone shifts in the text you choose to share
These signals fuse into a single risk score (0-100), updated in real time via WebSocket. The moment your patterns shift, Ember flags it. Then an AI wellness companion helps you understand what your data is telling you and what to do next.
No message content is ever stored. No journals. No self-reporting. Just your behavior, quietly telling the truth before your mind catches up.
How we built it
Backend: Python + FastAPI with async processing. An event store architecture streams behavioral data into six parallel sensor analyzers using asyncio.gather. Signals are fused via sentence-transformers (MiniLM-L6-v2) with cosine similarity consensus, then passed through an anomaly filter to remove statistical noise. SQLite handles persistence via aiosqlite. AI responses run on Groq (free tier).
Frontend: Next.js + TypeScript + Tailwind CSS 4. Framer Motion handles animations, Recharts powers the live risk dashboard, and MediaPipe + Face API enable optional facial emotion analysis. WebSockets push live updates from the backend directly to the UI.
Signal Fusion: Rather than a simple average, we use embedding-space consensus. Each sensor produces a reading; MiniLM-L6-v2 encodes them into a shared semantic space; cosine similarity determines how aligned the signals are before they contribute to the final score. Outliers are filtered before fusion to prevent a single noisy sensor from skewing the result.
Challenges we ran into
- Fusing six heterogeneous signals (timing, NLP, facial, behavioral) into a single coherent risk score without overfitting to any one source took significant iteration.
- Keeping everything on-device and privacy-preserving while still delivering meaningful insight required careful architecture decisions from the start.
- Building a real-time WebSocket pipeline that stayed stable under concurrent sensor updates without dropping frames or causing race conditions.
- Calibrating what counts as a meaningful behavioral shift versus normal day-to-day variance without labeled training data.
What we learned
Burnout is not a moment. It is a gradient. The hardest part of this project was learning to treat it that way, building a system that tracks drift over time rather than looking for threshold crossings.
We also learned that the most powerful mental health tool might not be one that asks you how you feel. It might be one that already knows.
What's next
- Longitudinal baselines: personalized risk thresholds calibrated to each user's normal
- Calendar and workload integration to correlate behavioral drift with schedule density
- Team-level insights for managers, with full individual privacy preserved
- Mobile sensor expansion: accelerometer, screen-on time, app usage patterns
Built With
- css
- fastapi
- framer
- groq
- mediapipe
- motion
- next.js
- python
- recharts
- scikit-learn
- sentence-transformers
- sqlite
- tailwind
- typescript
- vader
- websockets
Log in or sign up for Devpost to join the conversation.