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}) $$

  1. The Brain (Serverpod + Gemini): I implemented a provider-agnostic AI service that processes user goals and availability.
  2. The Body (Flutter): A beautiful, glassmorphic UI that uses Riverpod to react instantly to state changes.
  3. 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.

  1. Serverpod 3.x Migration - Adapting to new relation syntax and enum handling in Serverpod 3.

  2. State Management Complexity - Designing Riverpod providers that efficiently handle loading, error, and data states while staying reactive.

  3. AI Integration Architecture - Building a flexible AI service that can swap providers (Gemini, OpenAI, etc.) without changing business logic.

  4. 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.

  1. Serverpod's Power - The auto-generated client and type-safe APIs dramatically reduce boilerplate.

  2. Riverpod Patterns - StateNotifier with FutureProvider provides excellent async state management.

  3. AI Prompt Engineering - Crafting prompts that return structured JSON for programmatic use.

  4. 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

Share this project:

Updates