BusyCat 🐈

Inspiration

Every morning I'd open three different apps: one for work sprints, one for personal to-dos, and one just to set reminders. None of them talked to each other. My tasks lived in silos, notifications fired on the wrong device, and "planning my day" took longer than actually doing the work.

Why can't a single app feel as powerful as Jira but as fast as Apple Reminders?

That question became BusyCat—a productivity app that borrows the best ideas from enterprise project management (conflict detection, capacity planning, weekly retrospectives) and packages them into a UI so fluid it feels like texting a friend.

The cat theme is the philosophy: cats are efficient, independent, and impossibly cool under pressure. That's exactly how I want my users to feel.


What it does

BusyCat is a full-lifecycle task management system built for people who are tired of "simple" to-do apps that crumble under real-world complexity.

🧠 AI-Powered Task Capture

Say: "Buy groceries every work day after work and remind me 30 minutes before," and BusyCat’s LLM engine extracts the title, date, time, and reminder automatically.

You can also snap a photo of a whiteboard or sticky note—the AI reads your handwriting and creates structured tasks.

⚡ One-Tap Scheduling

A refined task-add sheet with smart chips:

  • Tap "Today", "Morning", and "High Priority" in under 2 seconds
  • Duration estimation blocks (5m → 8h) to budget your time with a single swipe
  • 18 predefined tags, 26 curated icons, and a full color palette so every task has a visual identity

🔄 Absolute Cross-Device Sync

  • Snooze a reminder on your phone, it vanishes from your tablet instantly
  • Reorder tasks on one device, the new order appears everywhere

This isn't "eventual consistency"—it's deterministic global state.

📊 Corporate-Grade Planning Suite

  • Conflict Resolution Page — Detects overlapping time blocks and lets you resolve them with drag-and-drop
  • Duration Wizard — Batch-assigns time estimates to unplanned tasks so your day is mathematically feasible
  • Overdue & Unscheduled Queues — Dedicated triage zones with swipe-to-reschedule gestures
  • Weekly Review Dashboard — Completion rates, "Big Wins" highlights, and streak tracking to keep momentum

🔔 Intelligent Notifications

  • Customizable reminder rules (once, recurring, smart lead-time)
  • Snooze across devices
  • Collision-free notification IDs that never duplicate even across reinstalls
  • Notifications support entering a custom snooze time, applied simultaneously across all devices
  • When a notification is canceled, it is canceled everywhere

💎 Subtask System

  • Full parent-child relationships with inline checklists and linked tasks
  • Parent tasks can't be completed until all children are done—enforced by the system

How I built it

I started with a single principle: Local-First, Cloud-Enhanced.
The app must work flawlessly without internet. Sync is a bonus, not a requirement.

Architecture

  • Flutter as the cross-platform framework for iOS and Android from a single codebase
  • Riverpod for reactive, provider-scoped state management—every widget rebuilds only when its specific data changes
  • Sembast (NoSQL) as the local persistence layer, chosen for its embedded nature and zero-config setup
  • Firebase Firestore for real-time cloud sync, with a custom sync queue that batches operations and handles conflict resolution server-side

Notification Engine

I built a custom notification layer that generates deterministic IDs using a hash function. This ensures the same notification always gets the same ID across devices, enabling reliable cancel/snooze propagation.

Example concept: hash(userId + utcTimestamp)

Monetization

RevenueCat’s purchases_flutter SDK handles cross-platform subscriptions with server-side receipt validation. Users unlock BusyCat Pro once and the entitlement syncs everywhere—no re-purchasing per device.


Challenges I ran into

1. The "Notification" Problem

When a user snoozed a notification on Device A, Device B still showed the old trigger.

I moved from random UUIDs to deterministic hashes combining userId + UTC timestamp, so both devices always reference the same notification and can cancel/reschedule in unison.

2. Drag-and-Drop vs. Scroll Conflicts

The backlog view supports both vertical scrolling and long-press drag-to-reorder. Making these gestures coexist without false triggers required a deep dive into Flutter’s GestureArena and custom LongPressDraggable configurations.

3. Subtask Completion Enforcement

Preventing a parent task from being marked "Done" while children are still pending required intercepting status changes at both the swipe-action and drag-and-drop layers, with clear SnackBar feedback explaining why the action was blocked.

4. Offline-First Data Integrity

When the user makes changes offline and then reconnects, the sync queue must resolve merge conflicts without data loss.

I implemented a revision-based conflict resolution strategy where the highest revision wins, with clientUpdatedAt as a tiebreaker.


Accomplishments that I'm proud of

  • Beautiful UI — Hand-crafted with consistent spacing, smooth micro-animations, thoughtful empty states, and haptic feedback
  • Zero-delay sync perception — Local-first architecture means the UI never waits for a network round-trip
  • A planning suite that rivals enterprise tools — Conflict Page, Duration Wizard, Weekly Review in a mobile-first consumer UI
  • Solo-developer scope — Every line of code, design decision, and animation curve built by one person

What I learned

  • Notification management is a distributed systems problem. It's not about "sending a push"—it's about maintaining a global state machine across independent OS-level schedulers.
  • Riverpod is incredibly powerful for complex apps. Provider-scoped reactivity enabled features like the Conflict Page without performance degradation.
  • LLM prompt engineering is an art. Parsing "call mom next Tuesday at 3" vs "call mom about Tuesday's meeting" required iterative prompt refinement and structured output schemas.
  • Polish is not optional. Micro-animations, haptic feedback, and thoughtful empty states are the difference between an app people use and an app people love.

What's next for BusyCat

  • 🤝 Collaboration Clusters — Shared family or team backlogs with real-time, conflict-aware sync
  • 🔮 Predictive Planning — AI that learns your patterns: "You're most productive on Tuesday mornings. Should I move this deep-focus task there?"
  • 🖥️ Desktop & Web — Native macOS, Windows, and web versions via Flutter
  • ⌚ Wearable Integration — WatchOS and WearOS companions for quick capture and "Meow-minder" notifications
  • 🌍 Localization — Full multi-language support with an automated sync script to keep translation files in lockstep

Built With

Share this project:

Updates