← Series

Building a school-assignment assistant for my daughter
Building a private school-assignment assistant for one child: scraping a portal with no API, an LLM that learns to discard, cached summaries, a small agent, and knowing what it costs.
Part 18 minPart 27 minPart 38 minPart 47 minPart 58 minPart 67 min
Why I built a school-assignment app for my daughter
Clicking 12 subject tabs every night to find one due date? Here's why I built a school portal assignment tracker for my daughter instead.
Scraping a school portal with no API: dropping the browser for raw HTTP
Scraping a school portal with no public API: why I dropped Playwright for Node's built-in https module, a plain cookie jar, and regex parsing.
Teaching an LLM to ignore the recap and surface the homework
Teacher notes are mostly recap, not actions. Learn how to prompt an LLM to extract action items only and ignore past events.
Parent-friendly summaries without paying the LLM twice
Regenerating LLM summaries on every page load wastes money and time. Learn how a derived cache key makes LLM summary caching effortless.
Ask the app: a Q&A agent over a kid's school year
How I built a bounded LLM agent to answer open-ended questions over a child's school year, with three SQL tools and a hard four-iteration ceiling.
Tracking what the LLM costs in a one-person app
Slow token leaks hit harder than one big call. Learn how a single wrapper and use-case tags make tracking LLM API costs a query, not a monthly surprise.