Project Description

OmniTime is a cross-platform power reminders app built to solve a simple but painful problem: most reminder apps fail at the exact moments people need them most—when they’re offline, switching devices, or racing to capture something quickly. We built OmniTime around reliability first: instant local capture, deterministic sync, and no disappearing or duplicated reminders. The product combines fast reminder entry, natural-language parsing, recurrence, snooze/timer flows, and structured list views (Overdue, Today, Tomorrow, Upcoming, Anytime, Notes, Completed) in a calm interface optimized for speed.

Problem Statement & Motivation

People trust reminders only if they’re consistently correct. In real life, connectivity drops, apps get backgrounded, and users move between phone and web. Many tools still feel network-dependent, causing laggy input, duplicate items, or sync confusion.

Our motivation was to build an offline-first by default reminder system that feels instant and converges cleanly across devices, while remaining practical for real users through a free tier and pro features.

Solution & How It Works

OmniTime uses a local-first architecture where the on-device database is the source of truth for UX responsiveness. Every write is saved locally first, then queued as a pending mutation. A retryable, idempotent /sync flow pushes mutations and pulls ordered server deltas for deterministic convergence.

Key reliability behaviors:

  • Local writes are never blocked by network
  • Ordered change application via server sequence numbers
  • Soft-delete tombstones prevent deleted reminders from reappearing
  • Notification reconciliation runs after sync so schedules stay correct
  • Realtime WebSocket hints accelerate refresh but are not required for correctness

On top of this core, we added natural language capture (date/time/duration and recurrence phrases), timezone-aware notifications, snooze actions, and a unified reminders + timers model.

Technologies, Tools, APIs, Frameworks Used

  • Client: Flutter (iOS, Android, Web), Riverpod, go_router, Drift, Dio, Freezed, json_serializable, flutter_local_notifications
  • Backend: Node.js, Express, Prisma, MySQL, JWT auth, authoritative /sync endpoint
  • Auth/Billing: Username/password, Google Sign-In, Apple Sign-In, RevenueCat entitlement gating (pro)
  • Platform Integrations: APNs/FCM hint paths, QR device pairing, IndexedDB/sql.js support for web

Future Scope / Roadmap

  • Complete end-to-end push convergence validation across iOS/Android device matrices
  • Harden conflict resolution path before enabling broadly
  • Improve iOS notification action UX consistency
  • Expand collaboration/shared lists after sync reliability milestones
  • Strengthen CI/CD and production observability as post-hackathon scale work
Share this project:

Updates