The source library is the part of a homeschool programme most prone to bloat: every week you find three more good sites, and three months later nobody remembers which one was for which grade. The library below preloads 30 sources, each tagged with subject, band, language, and free-or-paid — so you can filter instead of remember.
How the 30 split
- 21 free, 9 paid. The paid ones: IXL, Time4Learning, Outschool, Wyzant, Preply, italki, Twinkl, Teachers Pay Teachers, HSLDA.
- By subject: math 16, reading 16, science 14, coding 7, social studies 6.
- By band: 24 sources cover grade 3–5 (including the all-bands sources), 21 cover K–2, 25 cover 9–12.
- 9 carry Vietnamese or Vietnamese subtitles: Khan Academy, PhET, Desmos, Preply, italki, Duolingo, Scratch, Code.org, StoryWeaver.
Filtering "math" + band "3–5" returns 12 sources — because all-bands sources count too. No subject × band pair is empty: every combination across 5 subjects and 4 bands has at least one source, so the lesson generator never has to leave the material slot blank.
3 checks before giving a child a new site
- Minimum age and COPPA/GDPR-K. Many sites — IXL, Outschool, Wyzant — require the parent to hold the account; the child cannot sign up alone. This is a legal constraint, not a recommendation.
- Real cost. "Free" is usually a 7-day trial. Write it in the notes column before recommending to a parent, because parents only find out once the card is charged.
- Language. Children below grade 6 learning from native English often drop pace. Prefer sources with Vietnamese subtitles first (Khan, PhET, Code.org, StoryWeaver), then move up to English-only.
Testing for dead links each quarter
External sources rot: sites change URLs, merge, or shut down. Test quarterly. In the most recent pass, 26 of 30 returned 200. The remaining four — All-in-One Homeschool, Wyzant, Teachers Pay Teachers, Common Sense Education — block bots with Cloudflare, but still open in a real browser.
That distinction matters when reading script output: a 403 is bot blocking, not a dead link. Delete a source just because curl returned 403 and you will delete exactly the best paid sources. Confirm in a browser before removing any row.
Adding and removing sources needs no restart
New sources are added through a form on the library screen, admin-only, and the URL must be http(s):// — that condition blocks javascript: and similar schemes. No SQL, no restart: once added, the lesson generator already sees the source.
The rest of the series: the legal frame and the weekly rhythm, choosing and training tutors, data, privacy and backup.