Inspiration

Every student has notes, a syllabus, and a long list of things to revise. Almost nobody has a plan that survives contact with reality. Miss one day and the whole schedule collapses into guilt — so people abandon the plan, not the subject.

The tools that claim to help actually make it worse. To-do and planner apps show you what you failed to do, then quietly accept that you fell behind. Nothing reschedules. Nothing protects the deadline that actually matters.

We wanted the opposite: a planner that treats a missed day as ordinary life, and quietly rebuilds the rest of your plan around it.

What it does

  • Subjects with real constraints — add each subject with its exam date, priority, and topics with estimated study minutes.
  • AI-generated day-by-day plan — StudyPilot builds a realistic schedule that respects your daily study capacity and prioritises the subjects whose exams are nearest. Nearest exam first, and never more than you can actually finish in a day.
  • Today view — answers one question: "what should I study right now?", with your streak, exam countdowns and per-subject progress.
  • Adaptive replanning — skipped or missed tasks get redistributed across the remaining days, assuming skipped topics still need to be studied. Your exam dates stay protected.
  • Focus timer — a per-task pomodoro timer that logs focused minutes toward your streak.
  • Never a dead end — if the AI is unreachable, a deterministic local scheduler builds the plan instead. The app stays fully usable offline.

Monetization (RevenueCat)

Freemium, enforced through RevenueCat entitlements:

Free Pro (pro entitlement)
Subjects 1 Unlimited
AI plan generations 3 Unlimited
Offline planner, focus timer, progress Yes Yes

The integration uses the full RevenueCat SDK surface: Purchases.configure, getOfferings → default offering with monthly + lifetime packages, purchase flows, restorePurchases, entitlement checks, and a live customer-info listener that flips the entire app into Pro. Subscription management is handled by the RevenueCat Customer Center. As a student entry without a paid store account, purchases were verified end-to-end against RevenueCat's Test Store.

How we built it

Flutter (Dart) targeting Android, with Riverpod for state management and Hive for offline-first local persistence. AI plan generation runs through OpenRouter. Monetization is handled entirely by purchases_flutter and purchases_ui_flutter.

Architecture: UI → Controllers (ChangeNotifier + Riverpod) → Services (AiService, LocalScheduler, PlanService, RevenueCatService, Repository).

Challenges we ran into

Making an LLM reliable enough to build a product on. A model that returns malformed JSON is not a feature. StudyPilot prompts for strict JSON, retries with a repair call when parsing fails, and detects topics the AI silently dropped so they get re-inserted. If it still fails, a deterministic scheduler takes over — the user never sees an error where a plan should be.

Designing a fallback that's genuinely good, not a stub. The local scheduler sorts pending topics by urgency (daysUntilExam × 10 + priority) and packs them greedily into daily capacity. It's deterministic, unit-tested, and produces plans students actually follow.

A real purchase flow without a paid developer account. Rather than mocking payments, we wired the complete RevenueCat integration and verified it against the Test Store, so the entitlement, paywall, restore and Customer Center paths are all real code.

Accomplishments we're proud of

  • An AI feature with a guaranteed working fallback — the happy path is AI, but the product never depends on it.
  • Entitlement-driven limits: freemium logic lives in one place, driven by RevenueCat state.
  • Adaptive replanning that protects exam dates — the actual differentiator.
  • Clean flutter analyze, a unit-tested scheduler, MIT-licensed and fully open source.

What we learned

  • LLM output needs an engineering layer around it — schema, repair, gap detection, fallback — before it becomes something users can rely on.
  • Modelling access as a single entitlement makes freemium dramatically simpler.
  • A good fallback is a feature, not a compromise.

What's next

  • Local study reminders and an agenda/calendar view.
  • Weekly insights computed from logged focus minutes.
  • Publishing to Google Play with real store products.

Links

Video

<LINK — 2-minute demo on a physical Android device>

Built With

  • confetti
  • dart
  • flutter
  • hive
  • http
  • intl
  • openrouter
  • purchases-flutter
  • purchases-ui-flutter
  • revenuecat
  • riverpod
Share this project:

Updates

Submission history