nmemmertandClaude Sonnet 4.6 934919e392 Include assignment body and quiz questions in print course output
Course detail API now returns item body text and quiz questions.
Print course renders body paragraphs and numbered quiz questions
with lettered choices (correct answers marked with ✓).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 16:50:01 -04:00

🎓 Homeschool

A self-hosted homeschool learning platform — courses, lessons, assignments, quizzes, and a gradebook — with spelling practice and flashcards built in as first-class activity types. Two apps share one server: a kid-facing app (index.html) and a PIN-protected parent console (admin.html).

How it's organized

  • Courses → Units → Items. A parent builds courses (e.g. "Science 3"), each broken into units (e.g. "Week 1: Weather"), each holding items: lessons, assignments, quizzes, or an embedded spelling/flashcards activity.
  • Lessons are parent-authored content (text, images, YouTube embeds) the kid marks as read.
  • Assignments are turned in with a tap ("Mark as done") and graded by a parent from a grading queue.
  • Quizzes (multiple choice, true/false, short answer) are auto-graded on submission, with a right/wrong review shown immediately.
  • Spelling and flashcards activities reuse the same engines described below, and their results flow into the same gradebook.
  • Daily agenda. A parent schedules items (or free-text offline tasks like "Read Ch. 3") onto specific days in the weekly planner; the kid's home screen shows "Today's work" as a checklist that fills in as they go.
  • Gradebook. Every graded item (assignments, quizzes, spelling tests) rolls up per course into a percentage, with a printable weekly report for homeschool portfolio records.

How the spelling module works

  • Dictation practice — the browser speaks each word (and an example sentence if the list has one); the kid types it. No internet or API keys needed — it uses the browser's built-in speech synthesis.
  • Letter-diff feedback — a wrong answer shows exactly which letters were wrong, then the correct word appears for a few seconds, hides, and the kid retypes it from memory (look–cover–write–check).
  • Leitner spaced repetition — every word has a box (0–5). Right on the first try moves it up a box and pushes the next review out (1 → 2 → 4 → 7 → 14 days). A miss sends it back to box 1. Box 5 = mastered. Daily practice mixes the current list with whatever old words are due.
  • Spelling test — every word on the list, dictation only, no hints or retries. Scores are saved, and missed words automatically re-enter the practice rotation.

How the flashcards module works

Classic flip-cards (front → reveal → "Got it!" / "Study more") using the same Leitner scheduler as spelling, so a deck's due cards resurface on the right day automatically. Works standalone or as a course item.

Running it

npm install
npm start          # http://localhost:3000

Or with Docker:

docker compose up -d

The SQLite database lives in ./data/ (mounted as a volume in Docker).

Requires Node 24+ (uses the built-in node:sqlite module — no native dependencies).

First-time setup

  1. Open the app → Parent dashboard (/admin.html) → PIN 1234 (change it in Settings).
  2. Add your kids.
  3. Build a course: add units, then add items (lessons, assignments, quizzes, or a spelling/flashcards activity pointing at a list or deck).
  4. Enroll kids in the course, from the course's Roster section.
  5. Use the Weekly Planner to schedule items onto specific days — or let kids browse everything anytime from My Courses.
  6. For spelling specifically: pick a built-in Dolch list or create your own (one word per line, optional word | example sentence), then assign each kid a weekly list from the Spelling panel.

Kids just tap their name — no passwords. Everything they do (course work or spelling) reports back into the parent console automatically.

S
Description
No description provided
Readme
3.1 MiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 72.6%
CSS 16.7%
HTML 10.5%
Dockerfile 0.2%