ideas.
September 03, 2026 3 min read webconsumeraiautomation

Turn the school year's PDFs into one family calendar

A web app that reads school newsletters, term sheets, and club schedules and turns the dates buried in them into a subscribable family calendar.

The idea

Parents get their term dates as a PDF, the swim club's season as a Google Doc export, and the class trip deadline as paragraph four of a newsletter. None of it is a calendar. This is a web app where you forward or upload those documents and it extracts every dated commitment — inset days, deadlines, kit lists, pickup time changes — into a reviewable list, then publishes them as an ICS feed each family member subscribes to once and never touches again.

Why build this

The pain is concentrated and recurring: every household with school-age kids re-does this transcription three or four times a year, and the cost of missing one line ("no lunch provided Thursday") is a genuinely bad morning. Schools will not fix it — they publish to a website CMS and a mail merge, and that is the end of their obligation.

What makes it buildable now rather than five years ago is that the hard part was never the calendar, it was reading a two-column newsletter where "Wed 17th" refers to a month named in the header. Current LLMs handle that reliably enough with a good extraction prompt and the document's own text layer, and the failure mode is a wrong row a human spots in a review screen, not silent corruption. The other half — everyone in the house getting the result automatically — is solved by a plain hosted ICS URL that iOS Calendar, Google Calendar, and Outlook all already poll.

Stack sketch

  • Frontend: SvelteKit, server-rendered. The whole app is an upload box, a review table, and a settings page — no SPA framework tax needed.
  • Ingest: a per-family email address via Postmark's inbound webhook, so a parent can forward the newsletter straight from their phone. Uploads accepted too.
  • Text extraction: pdfplumber for PDFs with a text layer, python-docx for Word, Trafilatura for pasted URLs. Fall back to Tesseract only for scanned-looking pages.
  • Date extraction: Claude with a strict JSON schema — one object per event with title, start, end, all-day flag, confidence, and a verbatim source_snippet. Pass the document's publication date and the current school year so relative dates resolve.
  • Storage: Postgres, with a content hash per source document so the same newsletter forwarded twice does not duplicate anything.
  • Output: ics.py generating a feed per child, served at a long random URL with stable event UIDs so edits update in place instead of creating duplicates.

Scope for v1

In: upload or forward a document, extract events, review them in a table where every row shows the sentence it came from, approve or edit, and get one ICS URL per child. Support PDF, DOCX, and pasted text.

Out: school-portal logins, two-way sync, native apps, shared editing between households, reminders and notifications, anything resembling a family organizer. The product is "documents in, calendar feed out" and the review table is the entire UI worth polishing.

Where it could go

The obvious expansion is watching sources instead of receiving them: point it at the school's news page and re-scrape weekly, diffing extracted events so an amended date arrives as a change rather than a duplicate. That turns a seasonal chore into something that runs unattended, which is where retention comes from.

Beyond that, the same extraction pipeline fits any household that receives schedules as prose — sports leagues, community orchestras, shift-work rotas, care rotations for an elderly parent. And once several families in one class have uploaded the same newsletter, you have a de-duplicated, human-reviewed calendar for that class, which is a real network effect if you can offer it without becoming a place where parents talk to each other.

Watch out for

Extraction confidence is the whole product: an event silently dropped is far worse than one shown with a "check this" flag, so tune the prompt to over-report and let the review table filter. Also treat the documents as sensitive — they contain children's names and addresses, so keep uploads out of any third-party store you do not control and delete raw source files once events are approved.