Inspiration
"We are what we repeatedly do. Excellence, then, is not an act, but a habit." — Aristotle
I started with a simple observation: 92% of New Year's resolutions fail. Why? Because most habit tracking apps are passive. They are essentially just digital spreadsheets that require you to do all the heavy lifting—planning, scheduling, and remembering.
I wanted to build something that wasn't just a tool, but a Butler. A true butler doesn't just hand you a to-do list; they organize your day, remind you discretely, and adapt to your needs. That was the spark for Jarvis: an agentic application that moves from "Passive Tracking" to "Active Coaching."
What it does
Jarvis is an AI-powered habit tracking and coaching app that serves as your personal digital butler for self-improvement. Unlike generic habit trackers, Jarvis:
🎯 Learns Your Goals - During onboarding, Jarvis understands your personal improvement goals and creates a customized habit plan.
📅 Schedules Intelligently - Based on your wake time, sleep time, and daily availability, Jarvis auto-generates an optimal daily schedule.
📚 Tracks Reading - Log books, track pages, monitor reading streaks, and (coming soon) take AI-generated comprehension quizzes.
💪 Monitors Fitness - Log workouts, upload progress photos, and get personalized workout suggestions.
🤖 Acts Autonomously - Don't just chat—command. Tell Jarvis to "Add a morning run" or "Change my reading time", and he modifies your database automatically using Agentic Tool Calling.
📊 Visualizes Progress - Beautiful dashboards with progress rings, streak indicators, and achievement badges.
How I built it
Jarvis is a showcase of the power of Flutter + Serverpod working in harmony. By using Dart across the entire stack, I achieved a level of type safety and developer velocity that felt like magic.
The core architecture relies on a specialized Agentic Loop:
$$ Action*{agent} = f(Goal*{user}, Context*{time}, History*{habits}) $$
- The Brain (Serverpod + Gemini): I implemented a provider-agnostic AI service that processes user goals and availability.
- The Body (Flutter): A beautiful, glassmorphic UI that uses Riverpod to react instantly to state changes.
- The Nervous System (Serverpod Client): The auto-generated client ensured that my frontend and backend were always speaking the exact same language.
Frontend (Flutter)
- Riverpod for reactive state management
- Firebase Auth for user authentication
- Firebase Storage for image uploads
- Custom design system with dark mode
- Feature-first architecture
Backend (Serverpod)
- Type-safe API endpoints
- PostgreSQL database with auto-generated migrations
- Modular AI service abstraction
- Docker-based development environment
AI (Google Gemini)
- Habit recommendations based on user goals
- Daily motivation messages
- Function Calling (Tools) for autonomous database actions
- Voice-enabled chat coaching
Challenges I ran into
The journey wasn't without its hurdles. My biggest challenge was Conquering the Serverpod 3 Migration.
Adapting to the new relation syntax and ensuring my database queries were optimized took significant trial and error. Specifically, mastering the explicit relation handling for our complex Habit $\leftrightarrow$ HabitLog relationships required a deep dive into the new ORM capabilities.
Another challenge was Real-time Synchronization. I wanted the dashboard to feel alive. When a user completes a habit via voice command, the UI needs to update instantly. Solving this required a robust state management strategy with Riverpod to ensure data consistency across the app.
Serverpod 3.x Migration - Adapting to new relation syntax and enum handling in Serverpod 3.
State Management Complexity - Designing Riverpod providers that efficiently handle loading, error, and data states while staying reactive.
AI Integration Architecture - Building a flexible AI service that can swap providers (Gemini, OpenAI, etc.) without changing business logic.
Real-time Updates - Ensuring the dashboard reflects habit completions immediately across all widgets.
Accomplishments that I'm proud of
✅ Complete Flutter + Serverpod Stack - Full working app with backend, frontend, and AI integration.
✅ Flexible AI Architecture - Provider-agnostic AI service that supports multiple AI models.
✅ Beautiful UI - Dark mode design with smooth animations and glassmorphism effects.
✅ Comprehensive Features - Reading tracker, exercise tracker, schedule generator, and AI chat.
✅ Clean Architecture - Feature-first Flutter structure with proper separation of concerns.
What I learned
The most profound realization was the power of End-to-End Type Safety. In a traditional stack, modifying an API endpoint is a scary refactor. With Serverpod, it became my favorite feature. I could rename a database column in the backend, run the generator, and instantly see where the frontend code needed updates.
I also learned that AI Agents are the future of app interaction. By giving Jarvis "Tools" (function calling) instead of just text responses, I turned a chatbot into a powerful operator that can actually do things for the user.
Serverpod's Power - The auto-generated client and type-safe APIs dramatically reduce boilerplate.
Riverpod Patterns - StateNotifier with FutureProvider provides excellent async state management.
AI Prompt Engineering - Crafting prompts that return structured JSON for programmatic use.
Full-Stack Dart - The productivity of using Dart on both frontend and backend.
What's next for Jarvis
🔔 Push Notifications - Habit reminders at scheduled times
📱 Widgets - iOS/Android home screen widgets
⌚ Wearables - Apple Watch and Wear OS companion apps
👥 Social Features - Share habits, compete with friends
🧠 Advanced AI - Conversation memory and predictive insights
🌐 Offline Mode - Local-first with background sync
Built With
- dart
- flutter
- gemini
- postgresql
- serverpod


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