Inspiration

As a college student, I kept losing focus in two specific ways: switching between YouTube and my notes app to clarify concepts, and jumping between apps to check my habit streak. Every "productivity" app I tried only solved one half of the problem — either task tracking or note-taking, never both, and never with the content I actually needed (video) sitting inside the note I was writing.

Notaum started as a single question: what if a note could hold a YouTube video and an AI that already knows what the note is about?

What I Learned

Building Notaum taught me more than any single course:

  • Flutter architecture — state management with Riverpod, navigation with GoRouter, and separating feature modules so that task cards and notes stay independent.
  • Local-first data — using Hive with custom TypeAdapters, and understanding that timestamps, not UI timers, must be the source of truth for anything time-based. (This cost me a full day to learn the hard way.)
  • Monetization — integrating RevenueCat end-to-end: products, entitlements, offerings, and gating features client-side without ever trusting the client for access.
  • Bring-Your-Own-API design — instead of paying for AI on behalf of every user, letting users plug in their own OpenAI or Gemini key. This keeps costs low, keeps user data on their side, and puts them in control.

How I Built It

The stack is Flutter + Hive (offline storage) + Riverpod (state) + GoRouter (navigation) + RevenueCat (subscriptions) + flutter_quill (rich text) + youtube_player_flutter (embedded video). Every screen is fully offline-capable; the only network calls are the ones the user's own API key makes.

I broke the build into phases: Foundation (auth, Hive, routing) → Task Cards → Notes Engine → YouTube Embed → Floating Overlay → AI Chat → Premium + RevenueCat. Each phase was tested on-device before moving on.

Challenges

  • Time as a liar — my task cards were using a UI countdown timer, so when the app was backgrounded, cycles were missed. Fixing it required rewriting the reset logic to compute missed cycles mathematically from DateTime.now().
  • The YouTube player rewrite — youtube_player_flutter v10 completely changed its API, which broke every widget I had written for v9. Rewriting for the new API while keeping the "one active video per note" rule was the single hardest feature.
  • Hive adapter confusion — I had duplicate model classes across files, and build_runner silently generated zero adapters. It took finding a Map<String, dynamic> field that Hive couldn't serialize.
  • AI tooling itself — most AI coding assistants hit rate limits, mis-suggested architectures, or broke routing. I learned to rely on git commits as checkpoints, and to build small and verify often.

Notaum is finished. It is not the app I planned to build — it is the app I learned to build.

What's next for Untitled

We are looking forward to update with backup feature, more smooth transition and animations, authentication and authorisation backed by firebase, custom themes, focus mode that remove everything else other than minimized ai, yt player and taking note, more rich text features including fonts and more, and looking forward for more user-friendly features.

Built With

  • android
  • api
  • auth
  • core
  • dart
  • file-picker
  • flex-color-scheme
  • flutter
  • flutter-quill
  • flutter-secure-storage
  • flutter-svg
  • gemini
  • github
  • gorouter
  • hive
  • image-picker
  • ios
  • local-auth
  • lottie
  • openai
  • revenuecat
  • riverpod
  • youtube-player-flutter
Share this project:

Updates