Sitemap

A Prompt Engineering Application — Building a Study Planner for My Daughter

11 min readFeb 25, 2026

--

Press enter or click to view image in full size
AI generated image

Recently I started working on a personal project. This project came from a personal struggle to plan my daughter’s daily study schedule.

Let me explain the problem in more detail.

We spend around 30–60 minutes daily with her working on concepts she is learning in school — Maths, Language, General Awareness and more.

Most days, we notice something she struggles with — say, number comparison. So we double down on Maths to teach and revise addition, subtraction, ascending, descending — and we end up missing other subjects like language or spelling. After a couple of days we realise she hasn’t revised those other concepts, so we switch focus. Then a week later when we come back to addition, she has already forgotten it.

Misery for her, misery for us.

Solutions That Didn’t Work

I tried making a plan myself but it’s genuinely difficult. She has daily classes with new concepts introduced constantly. She doesn’t want to sit for two hours filling pages. And then there are intermediate school tests and olympiad tests which take precedence and the whole plan falls apart.

I then thought — this is an ideal problem to try with an LLM. If I can tell it what concepts she is learning in school, it can plan for her.

What I Had to Work With

The school sends a monthly newsletter with her daily class plan — that’s the most important asset. If I can store what she has learnt last month, last week and this week, I can have a good understanding of what she should be studying daily. This gives us both consistent school recap and a revision plan.

I also know when she has tests and olympiads, so we can emphasise those topics more in the relevant week.

How I Planned It

I began like any software engineer — list the features, build a working MVP without overcomplicating.

MVP features:

  • Basic student profile (name, grade, board, subjects)
  • Ingest and store newsletter data
  • Store historical plans to inform future planning
  • Use the SM-2 (SuperMemo-2) algorithm to generate balanced weekly plans with both new topics and revision
  • Cover only 2 subjects per 30-minute session for 6 days a week

SM-2 is a spaced repetition algorithm — it schedules revision of a topic at increasing intervals based on how well the student knows it. The better she knows something, the longer before it needs revisiting. It’s the same technique used by apps like Anki.

Next set of features:

  • Configurable daily session time and session days in a week
  • Generate daily practice papers for revision using LLM and internet resources
  • Feedback on whether a suggested topic was actually studied, to refine future plans
  • Feedback on her progress — if she’s doing well, reduce revision frequency
  • Ability to tweak the plan around upcoming tests
  • Start with a basic web UI, eventually move to a mobile app

How I Executed It

I used vibe coding — a style of development where you describe what you want to build in natural language and let an AI coding assistant (like GitHub Copilot or Claude) generate the code, while you steer the architecture and design decisions rather than writing every line yourself.

I used Docker to run Postgres locally for easy data management, and ran Ollama locally with the llama3.1 model to reduce API costs. Rather than building the whole MVP in one go, I went module by module for more control on code and quality.

It took around 10–15 hours to build the MVP with just prompt engineering — no orchestration layer, no vector DB, no agents. I may need those later, but not yet.

What I Learned Building It

1. Code Generation Can Spiral Out of Control

Code generation went out of hand quickly. I had to restart from scratch twice — that was faster than trying to fix what had been generated. LLMs will build anything you ask them to, but not everything needs to be automated.

Adding layers of complexity in code just because you can is a trap.

2. Data Extraction Was Harder Than Expected

Getting data out of the newsletter was the hardest part by far.

First I tried using a PDF library to extract content from the 50-page PDF and send it to the LLM — it just ran forever.

Then I tried taking a screenshot of just the timetable, converting it to PDF and extracting from that — same result.

Finally I used Claude chat to convert timetable screenshots directly into CSV files. That worked. But the CSV had a lot of junk — art activities, general assembly sessions, entries like “revision of page 3 and 4” with no actual content. Cleaning all of this on Claude chat took 5–6 hours across multiple sessions. When I later converted that entire cleanup process into a prompt for my ingestion pipeline, it turned into a 5-page prompt.

Turns out data cleaning still matters more than the code itself. Garbage in, garbage out — no amount of clever prompting fixes bad data.

3. Prompt Engineering Has Real Limits on Smaller Models

Once the CSVs were loaded into Postgres, I started generating weekly plans using Ollama (llama3.1). The first result was not good.

I iterated on the prompt — added harder constraints for 2 topics per day, closed loopholes where it treated the last day as a catch-up day, fixed bugs in the data being passed to it. Each iteration improved things incrementally. The cap (2 topics a day) started working, the catch-up day was closed. But it still couldn’t reliably handle multi-constraint structured reasoning. Subject-topic matching kept breaking, and when pushed a bit further it gave up entirely and repeated the same plan for all six days.

I switched to Claude Sonnet via API with the exact same prompt as Ollama. First attempt and voila — 2 topics every day without exception, every topic assigned to its correct subject, and instead of inventing topics for subjects that hadn’t started yet it simply noted “carry forward — no topics in curriculum yet” and moved on.

The takeaway: don’t try to prompt-engineer around model limitations. Small models are fine for simple tasks, but complex reasoning needs a capable model from day one.

For those interested in the detailed iteration-by-iteration comparison, I’ve documented that in the appendix at the end.

4. Failure Modes Matter As Much As Output Quality

This was a bigger realization than I expected.

Ollama failed silently — producing a confident-looking table that was completely wrong. Claude failed honestly — flagging what was missing, explaining what it skipped, and catching bugs in my own pipeline that I hadn’t noticed.

For something that will eventually drive a real child’s study schedule, that difference matters a lot. I need to know when the system doesn’t understand something, not have it make up a plausible-looking answer.

5. AI-Generated Code Doesn’t Clean Up After Itself

Debugging code added by AI doesn’t get removed automatically. Copilot would add console logs, print statements and debug helpers while solving a problem — which is useful in the moment. But it never cleans up after itself. That junk accumulates fast and becomes a maintenance headache very quickly. You have to be deliberate about reviewing and removing it, otherwise six weeks later you’re staring at a codebase full of logging noise that nobody added intentionally and nobody wants to own.

6. You Don’t Own the Code Anymore, But You Own the Design

This is the biggest shift when building with LLMs. The architecture, the data model, the decisions about what to automate and what not to — all of that still requires careful thought. If anything it requires more thought, because the LLM will happily build whatever you describe, good idea or bad.

You’re no longer writing every line, but you’re absolutely responsible for every decision that shapes what gets built.

What’s Next

The app isn’t being used yet. The plan is to solidify it over the next 2–3 months so it’s ready before her next school session.

There’s a lot still to build — practice paper generation, a feedback loop for tracking what was actually studied, progress signals to adjust revision frequency, and test/olympiad mode. Each of those can be a blog post in itself.

The broader question I am still thinking about is how much of this can move off Claude API onto a local model for the simpler tasks, without sacrificing the plan quality that only a more capable model seems to deliver reliably right now. That tradeoff between cost and quality is going to define how this scales.

More on all of that in future posts.

Feel free to download the code and play: https://github.com/aashuagg/plan-my-study

Appendix: Ollama vs Claude — The Detailed Iteration Breakdown

For those interested in seeing exactly how prompt engineering evolved and where smaller models hit their limits, here’s the full iteration-by-iteration comparison.

Iteration 1 — No constraints, baseline Ollama output

2025-07-07  GENERAL AWARENESS              [NEW] Days of the week
2025-07-08 LITERACY, NUMERACY [NEW] Alphabet Revision
[NEW] Recap of numbers 1-100
2025-07-09 GENERAL AWARENESS, KANNADA [NEW] Months of the year
[NEW] Pattern writing (Rekhabyasa)
2025-07-10 LITERACY, HINDI [NEW] Introduction to Vowels and consonants
[NEW] Sense organs ← GA topic on Hindi day
2025-07-11 NUMERICY, GENERAL AWARENESS [NEW] Pre-Number concept - Big and small
[NEW] Myself (orals)
2025-07-12 LITERACY, NUMERACY, KANNADA [NEW] Vowels in the beginning and middle
[NEW] Recap of prenumber concepts done so far
[NEW] Pattern writing (Rekhabyasa) ← 3 topics

Problems right away — “NUMERICY” spelling bug, only one topic on day 1, three topics crammed onto day 6, and General Awareness topics being assigned to Hindi days.

Iteration 2 — Added a hard 2-topic limit

I added ABSOLUTE HARD LIMIT: Maximum 2 topics per day, no exceptions and fixed the history message that was showing misleading "999 days ago" data which was causing the model to panic and try to cover everything at once.

2025-07-14  LITERACY, NUMERACY             [NEW] Introduction to Vowels and consonants
[NEW] Recap of numbers 1-100
2025-07-15 GENERAL AWARENESS, KANNADA [NEW] Days of the week
[REV] Pattern writing (Rekhabyasa)
2025-07-16 LITERACY, NUMERICY, HINDI [REV] Vowels in the beginning and middle
[NEW] Pre-Number concept - Big and small
[REV] Introduction to Vowels and consonants ← 3 subjects
2025-07-17 GENERAL AWARENESS, NUMERACY, [NEW] Months of the year
LITERACY [REV] Pre-Number concept - Thick and thin ← 3 subjects
[NEW] Vowels in the beginning and middle
2025-07-18 KANNADA, GENERAL AWARENESS, [REV] Pattern writing (Rekhabyasa)
NUMERICY [NEW] My body parts ← 3 subjects
[REV] Pre-Number concept - Heavy and light
2025-07-19 LITERACY, HINDI, KANNADA, [REV] Recap of Vowels
GENERAL AWARENESS, NUMERICY [NEW] Activity for vowels and consonants ← 5 subjects!
[REV] Pattern writing (Rekhabyasa)
[NEW] My Moods
[REV] Pre-Number concept - Tall and short

Days 1 and 2 were clean. But the last four days still broke the cap — and day 6 had five subjects. The model was treating the last day as a catch-up day.

Iteration 3 — Closed the catch-up day loophole

Improvised prompt with harder condition: The last day of the week follows the SAME rules as every other day. There is no catch-up day. Unscheduled topics carry to next week.

2025-07-14  HINDI, NUMERACY                [NEW] Months of the year  ← GA topic on Hindi day
[NEW] Pre-Number concept - Big and small
2025-07-15 LITERACY, GENERAL AWARENESS [NEW] Alphabet Revision
[REV] Days of the week
2025-07-16 KANNADA, NUMERACY [REV] Pattern writing (Rekhabyasa)
[NEW] Pre-Number concept - Thick and thin
2025-07-17 HINDI, GENERAL AWARENESS [NEW] My body parts
[REV] Sense organs ← both are GA topics, no Hindi
2025-07-18 LITERACY, NUMERACY [REV] Vowels in the beginning and middle
[NEW] Recap of prenumber concepts done so far
2025-07-19 KANNADA, GENERAL AWARENESS [NEW] Activity for vowels and consonants ← Literacy topic
[REV] My Moods

2 topics every day — the cap was finally working.

But subject-topic mismatches were everywhere. GA topics appearing on Hindi days, Literacy topics on Kannada days. Hindi kept appearing in the subject column but with no actual Hindi topics assigned — because Hindi hadn’t started in school yet. The model knew Hindi was in the student profile and was trying to include it anyway by making things up.

Iteration 4 — Complete Ollama breakdown

When the same prompt was sent again without changes, Ollama completely failed:

2025-07-14  All 5 subjects    [NEW] Months of the year
[NEW] Myself
[REV] Pre-Number concept - Big and small
[NEW] Sense organs
[REV] Pattern writing (Rekhabyasa)
← EXACT SAME 5 TOPICS REPEATED FOR ALL 6 DAYS

Identical plan copy-pasted across every day. The model had given up on reasoning.

Iteration 5 — Switched to Claude API

Same prompt, no changes, just switched to Claude Sonnet via API:

Mon July 14  LITERACY    Alphabet Revision                     New   15 min
NUMERACY Recap of numbers 1-100 New 15 min
Tue July 15 GA Days of the week New 15 min
KANNADA Pattern writing (Rekhabyasa) New 15 min
HINDI (carry forward — no topics yet) — —
Wed July 16 NUMERACY Pre-Number concept - Big and small New 15 min
LITERACY Introduction to Vowels and consonants New 15 min
Thu July 17 GA Months of the year New 15 min
NUMERACY Pre-Number concept - Thick and thin New 15 min
Fri July 18 LITERACY Vowels in the beginning and middle New 15 min
GA Myself (orals) New 15 min
Sat July 19 KANNADA Pattern writing (Rekhabyasa) Review 15 min
NUMERACY Pre-Number concept - Heavy and light New 15 min

First attempt. 2 topics every day without exception. Every topic assigned to its correct subject. And instead of inventing Hindi topics, it simply noted “carry forward — no Hindi topics in curriculum yet” and moved on. It also intentionally left several topics unscheduled and explained that they carry to next week — which is exactly the right behaviour.

Iteration 6 — Week 3, Claude as a code reviewer

For the next week’s plan, before generating anything Claude flagged two bugs in the data being passed to it:

  • SM-2 review dates were all showing today’s date (2026-02-19) instead of calculated future dates — a date calculation bug in the application code
  • Recap of prenumber concepts done so far was still appearing in the review list despite having been deleted from the source CSV — a stale database record

It then generated the correct plan despite the bad input data, flagging what it had ignored and why:

Mon July 21  GA          Days of the week                      REV   15 min
LITERACY Alphabet Revision REV 15 min
Tue July 22 NUMERACY Recap of numbers 1-100 REV 15 min
GA My body parts REV 15 min
Wed July 23 LITERACY Introduction to Vowels and consonants REV 15 min
KANNADA Pattern writing (Rekhabyasa) REV 15 min
Thu July 24 NUMERACY Pre-Number concept - Big and small REV 15 min
GA Sense organs NEW 15 min
Fri July 25 LITERACY Vowels in the beginning and middle REV 15 min
NUMERACY Pre-Number concept - Thick and thin REV 15 min
Sat July 26 GA Myself (orals) REV 15 min
LITERACY Recap of Vowels NEW 15 min

Review-heavy week (~80% REV) correctly reflecting 15 overdue topics. Subjects balanced across the week. Hindi honestly skipped again.

What This Shows

Prompt engineering has diminishing returns on smaller local models. Four iterative fixes improved Ollama’s output incrementally — the cap worked, the catch-up day was closed — but it still couldn’t reliably handle multi-constraint structured reasoning. Subject-topic matching kept breaking, and when pushed further it gave up entirely and repeated the same plan for all six days.

Claude handled it correctly on the first attempt with the same prompt, and in subsequent weeks started acting as a code reviewer — catching bugs in my own pipeline before generating plans.

--

--