Inspiration
We've all experienced it - lying awake at 3 AM with our minds racing through tomorrow's tasks, last week's worries, and random ideas. The more we try to organize these thoughts, the more overwhelming it becomes. Traditional to-do apps demand structure when our minds are anything but structured.
What if you could just... speak?
That's where Unwind was born. We wanted to build something that meets people where they are - in the chaos - and transforms mental noise into clarity without forcing them to context-switch into "productivity mode."
What it does
Unwind is an AI-powered voice-first mental health and productivity app that:
- Listens Without Judgment: Speak freely to an empathetic AI agent powered by ElevenLabs - no interruptions, no structure required
- Understands Context: AI recognizes not just what you said, but how much you care about it through emotional weight analysis
- Auto-Organizes Everything: Transcripts are processed by Claude 3.5 Sonnet to extract tasks, ideas, worries, and errands
- Smart Categorization: Items are automatically sorted into vaults (Tasks, Ideas, Worries, Health, Relationships, Errands, Recurring)
- Intelligent Prioritization: Uses a custom scoring algorithm combining urgency, importance, and emotional weight:
$$\text{Priority Score} = 0.4 \times \text{Urgency} + 0.3 \times \text{Importance} + 0.3 \times \text{Emotional Weight}$$
- Production-Ready Monitoring: Full observability with Sentry tracking AI performance, token costs, and user sessions
How we built it
Tech Stack
- Frontend: Next.js 16 + React 19 with server components
- Voice AI: ElevenLabs conversational agent with custom prompts
- AI Processing: OpenRouter + Claude 3.5 Sonnet for task extraction
- Database: Supabase (PostgreSQL + Auth + Real-time subscriptions)
- Monitoring: Sentry with AI span monitoring and Session Replay
- Deployment: Vercel with edge functions
Architecture Flow
User Voice → ElevenLabs AI Agent → Webhook → Supabase
↓
Claude 3.5 (via OpenRouter)
↓
Extract & Categorize Items
↓
Calculate Priority Scores
↓
Store in Database + Real-time Updates
Key Features Implemented
- Real-time voice conversation with animated Orb visualizer
- Webhook-based transcript processing
- AI-powered item extraction with emotional weight scoring
- Automatic categorization into 7 vaults
- Interactive calendar and scheduling
- Session replay and AI performance monitoring
- Row-level security for user data
Challenges we ran into
1. Webhook Timing Issues
Problem: ElevenLabs sends transcripts via webhook after the call ends, but arrival time is unpredictable.
Solution: Implemented a frontend refresh mechanism that polls after 30 seconds, assuming webhook processing completes. Added comprehensive error handling for webhook failures.
2. Timezone Conversion Nightmare
Problem: Supabase stores UTC timestamps, but JavaScript parseISO() was interpreting them as local time, causing voice dumps to show 5 hours ahead.
Solution: Force UTC interpretation by appending 'Z' to timestamp strings:
const utcDateStr = dateStr.includes('Z') ? dateStr : dateStr.replace(' ', 'T') + 'Z'
3. AI Extraction Consistency
Problem: Claude would sometimes return invalid JSON or miss tasks hidden in emotional rambling.
Solution:
- Implemented explicit JSON schema validation with Zod
- Added retry logic with exponential backoff
- Increased temperature for better categorization creativity
- Fine-tuned prompts to handle emotional context
4. Sentry Session Replay Configuration
Problem: Sentry wizard installed SDK but Session Replay wasn't capturing sessions.
Solution: Manually added DSN to sentry.client.config.ts and boosted sampling rate to 100% for hackathon demo. Discovered the wizard only configured server-side monitoring by default.
Accomplishments that we're proud of
What we learned
What's next for Unwind
Built With
- ai
- elevenlabs
- gemini
- javascript
- llm
- nextjs
- openai
- sentry
- superbase
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.