Inspiration
Households with kids in lessons run on a strange database: a tuition envelope that must leave the house on the right day, a makeup lesson that silently expires, a paper newsletter from school announcing a sports day that collides with swimming. The data arrives on paper, lives in one parent's head, and fails at the worst moments.
We wanted all of it in one calendar - and we wanted the paper to enter it by camera, not by typing.
What it does
LessonNote is a lesson-management app for busy parents.
- Tuition that reminds you. Register the amount and the bring-it day per lesson; the app notifies you the day before and the morning of. Mark it handed over and the reminders stop.
- Makeup lessons that do not expire silently. Record the scheduled makeup date and get reminders 7 and 3 days ahead; check it off when it is used.
- School events checked against lessons. Register sports days and parent-observation days, and the calendar flags collisions with lessons. Each conflict is resolved with a three-way choice: skip, reschedule, or go ahead.
- One calendar, every child. Per-lesson colors, and separate management for each sibling.
- Newsletter AI import (Plus). Photograph the school newsletter or pick it from the library; AI reads the events, you review them on a confirmation screen, and they land in the calendar in one batch.
- Foresight (Plus). Conflict alerts on the home screen, push notifications ahead of collisions, and an annual tuition summary per lesson.
Free covers the entire management core; Plus (JPY 380 per month / 2,800 per year on the Japanese storefront) adds the AI import and the look-ahead features.
How we built it
Swift and SwiftUI, with SwiftData for persistence - the family's data lives on the device, with no accounts and no server-side storage.
- UserNotifications for tuition, makeup and conflict reminders, rescheduled automatically on every launch
- Cloudflare Workers as a relay to the Anthropic Claude API for newsletter reading - the image goes up when the parent chooses to import, the structured events come back, and the image is not retained
- RevenueCat with StoreKit 2 for the subscription: two products, one group, one entitlement (plus_access)
- PostHog for product analytics
The AI import is deliberately not autonomous: every extraction passes through a human confirmation screen before anything touches the calendar, and the import screen explains in plain language what the AI will do before the first photo is taken.
Challenges we ran into
Making an AI feature trustworthy enough for family data. The newsletter import was the last of the Plus features to ship, and most of the work was not the extraction - it was the contract around it. The image had to be sent only on explicit use, never stored after analysis, never used for training; the results had to be reviewable before saving; and late in development we realized the screen never actually said that AI would auto-fill the schedule, so we added a prominent explanation panel before submission. An AI feature aimed at parents earns its keep by being predictable, not clever.
A build that passed every test and failed to ship. Our purchase-SDK integration passed the full simulator test suite, then broke during archive: a build-phase script created a dependency cycle that only the release archive build graph exposed. The archive pipeline builds differently from the simulator pipeline, and a green test run says nothing about the one that matters. We now treat "it archives" as part of the definition of done.
Accomplishments that we're proud of
Shipping an AI feature with a privacy contract we can state in one sentence: your family's data stays on the phone, except a newsletter image you explicitly choose to send, which is read, returned and discarded. We are equally proud of the free plan - the entire management core with no caps on children or lessons - because an app about not dropping family obligations should not itself become one.
What we learned
For family software, transparency is a feature with UI, not a paragraph in a policy. The explanation panel we almost forgot matters as much as the extraction quality - a parent who is surprised by what an AI did once will not use it twice. And on the engineering side: the release build graph is a separate test target; run it early.
What's next for LessonNote
Deepening the newsletter import - better recognition across the enormous variety of school newsletter layouts - and continuing to refine how imported events are distinguished on the calendar, so a family can see at a glance which entries came from paper and which they typed themselves.
Log in or sign up for Devpost to join the conversation.