Inspiration
Every day, we make approximately 35,000 decisions - from what to eat for breakfast to life-changing career moves. Yet, we rarely learn from them systematically. We forget what worked, repeat the same mistakes, and rely on generic advice that doesn't account for our unique circumstances.
The inspiration for Offload came from a simple question: What if AI could learn from YOUR decision history, not just the internet?
Generic AI assistants give generic advice. But what worked for someone else might not work for you. We wanted to build a "Personal Decision Butler" - an AI that knows your patterns, remembers your past choices, and predicts outcomes based on YOUR data.
The "Butler" theme of this hackathon was perfect - a butler knows their employer intimately, remembers their preferences, and provides personalized service. That's exactly what Offload does for decisions.
What it does
Offload is an AI-powered decision journal that creates a semantic memory of your choices:
- Journal Your Decisions - Write or speak about situations you're facing
- AI Analysis - Gemini extracts the decision, context, emotions, and category
- Semantic Search - Vector embeddings find similar past experiences, even with different words
- Personalized Predictions - "Based on 3 similar decisions you made, there's a 78% chance this works out well"
- Track Outcomes - Record what actually happened to make future predictions more accurate
- Ask Your Butler - Chat naturally about your patterns and get advice grounded in your history
Key differentiator: When you write "thinking about switching jobs for better pay," Offload finds your past entry "left company X for higher salary" (even though different words were used) and shows you: Outcome: 8/10 - "Best decision, growth was amazing"
How we built it
Architecture
Flutter App (Web/Mobile)
↓
Serverpod 3 Backend
↓
PostgreSQL + Gemini AI
Tech Stack
| Component | Technology |
|---|---|
| Frontend | Flutter 3.32+ |
| Backend | Serverpod 3.2.3 |
| AI Models | Gemini gemma-3-27b-it (analysis) + text-embedding-004 (vectors) |
| Database | PostgreSQL |
| Hosting | Serverpod Cloud |
| Charts | fl_chart |
| Voice | speech_to_text |
The Magic: Vector Embeddings
The core innovation is using Gemini's text-embedding-004 to convert journal entries into 768-dimensional vectors. This enables semantic search - finding related entries by meaning, not keywords.
$$\text{similarity}(A, B) = \frac{A \cdot B}{|A| |B|} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \sqrt{\sum_{i=1}^{n} B_i^2}}$$
When a new entry comes in:
- Generate its embedding vector
- Calculate cosine similarity against all stored embeddings
- Return entries with similarity > 0.2, sorted by score
- Feed these to Gemini for context-aware analysis
Serverpod Integration
Serverpod's type-safe code generation was crucial:
- Models defined once, generated for server + client
- Endpoints with full type safety
- Built-in PostgreSQL integration
- Serverpod Cloud for one-command deployment
Challenges we ran into
1. Authentication Complexity
Initially tried using Serverpod's built-in auth IDP with email verification. The verification codes were only logging to the server console - not useful for production!
Solution: Built a custom simple auth system with email/password, SHA-256 hashing, and JWT-like tokens. Sometimes simpler is better.
2. Web Routing on Serverpod Cloud
After deploying, the Flutter web app showed Serverpod's default "Built with Serverpod" page instead of our app.
Solution: Modified server.dart to serve the Flutter app at the root path instead of /app. Required understanding Serverpod's FlutterRoute and static file serving.
3. Secrets vs Passwords in Serverpod Cloud
Set the Gemini API key using scloud secret set but the AI features weren't working. Turns out session.passwords reads from a different source.
Solution: Use scloud password set geminiApiKey instead of scloud secret set. Small distinction, big impact!
4. Chart Rendering Issues
The fl_chart pie chart wasn't displaying properly - categories were all gray.
Solution: Case sensitivity mismatch. The color map used 'Career' but data came as 'career'. Fixed with .toLowerCase() normalization.
Accomplishments that we're proud of
Full-Stack Type Safety - From PostgreSQL to Flutter, everything is type-checked thanks to Serverpod's code generation
Semantic Search Actually Works - Vector embeddings find conceptually similar entries even with completely different wording
Production Deployment - Live at offload.serverpod.space with real AI analysis
Voice Input - Natural speech-to-text for journaling on the go
Beautiful Visualizations - Outcome trends, category pie charts, and decision timelines
Personalized AI - The Butler's advice references YOUR actual past decisions, not generic platitudes
What we learned
Technical Learnings
Serverpod 3 is incredibly powerful for full-stack Dart development. The code generation eliminates an entire class of bugs.
Vector embeddings open up possibilities beyond keyword search. Semantic similarity is the future of personal data retrieval.
Serverpod Cloud makes deployment trivial -
scloud deployand you're live. The password/secret management just needs proper documentation reading!
Product Learnings
Personal context beats generic AI - ChatGPT can give career advice, but it can't say "last time you changed jobs impulsively, you rated it 4/10"
Outcome tracking is crucial - Without recording what actually happened, the system can't learn and improve predictions
Voice input is essential - People want to talk through decisions, not type them
What's next for Offload
- Mobile Apps - iOS and Android builds (Flutter makes this easy)
- Push Notifications - Reminders for outcome check-ins
- Export/Import - Own your decision data
- Pattern Alerts - "You've made 3 impulsive career decisions this year, all rated below 5/10"
- Decision Templates - Structured frameworks for common decisions (job offers, purchases, relationships)
- Shared Decisions - Collaborate with partners on joint decisions
- Predictive Modeling - ML models trained on your personal data for better outcome predictions
- Life Dashboard - Aggregate insights across all decision categories
- API Access - Let other apps query your decision history (with permission)
The Vision
Imagine 5 years of decision data. Your Butler could say:
"You're considering another startup. Looking at your history: you've joined 3 startups. The two where you prioritized team culture over salary were rated 8+/10. The one where you chased money was 3/10. This opportunity has red flags similar to that third one."
That's the power of personal AI - intelligence built on YOUR life, not the internet's average.
Built With
- flutter
- gemini
- postgresql
- serverpod

Log in or sign up for Devpost to join the conversation.