About the Project

Inspiration

I wanted to build a habit app where suggestions are not "random AI vibes," but grounded in evidence. The core idea was: if we ask users to change behavior, we should be able to show why a habit is recommended and what research supports it. That led to Evida: a habit coach that can cite sources, explain tradeoffs, and turn advice into concrete actions.

What I Built

Evida combines three pieces:

  • Evidence-backed habits: habit recommendations are designed to be traceable to research (papers, summaries, curated documents), so users can verify claims.
    • A personalized chat agent: users can ask questions, get coaching, and receive explanations in plain language while referencing supporting sources.
    • Action-oriented automation: the agent can propose Action Cards (e.g., create a habit, schedule check-ins) that users can accept/decline with one tap, plus a server-generated Daily Brief delivered to a dedicated chat session at a user-selected time.

How I Built It

  • Frontend: Flutter (multi-platform) with Cubit for state management. The chat UI supports streaming assistant responses and renders Action Cards inline with messages (Accept/Decline).
  • Backend: Serverpod with typed endpoints and protocol generation, plus FutureCalls for scheduling:
    • Daily Brief generation and delivery
    • Automated check-ins that post into chat sessions
  • Auth & storage: Firebase authentication integrated with Serverpod sessions, and document/media uploads stored in Cloudflare R2-compatible storage.
  • Knowledge sources:
    • An admin document library that applies to all users (curated research and references)
    • Per-session user uploads that remain private to that chat session

The Daily Brief scheduling uses the user’s configured delivery time plus a stored timezone offset.

Challenges I Faced

  • Scheduling and server roles: making scheduled features work reliably required understanding how Serverpod executes maintenance tasks and ensuring the correct runtime mode for FutureCalls.
  • Time zones and testing: scheduling “daily” events is deceptively tricky. Offsets change, users travel, and it’s easy to schedule something “tomorrow” when you want to test it now. I added mechanisms to make the feature testable without waiting a day.
  • Turning AI output into safe actions: Action Cards needed a strict schema and validation so the app only executes a narrow, safe set of actions. This reduced risk and made the behavior predictable.
  • Balancing privacy with usefulness: supporting both global admin documents and per-session user uploads required clear separation so private data never leaks into other contexts.
  • Making evidence feel usable: it’s not enough to “have sources.” The hard part is surfacing research in a way that builds trust without overwhelming the user, while keeping the coaching experience fast and practical.

What I Learned

  • Typed APIs and generated protocols make it much easier to evolve features quickly without breaking clients.
  • “Butler” experiences are won by orchestration: background jobs, scheduling, realtime-ish updates, and clear UX around automation.
  • In habit coaching, trust matters as much as UX polish. Being explicit about evidence and making actions opt-in (Accept/Decline) creates a safer and more credible product.

Built With

Share this project:

Updates