A 6-month personalized learning project to prepare a gifted 4-year-old for admission to a top-tier private school by teaching foundational reading and math skills.
By the end of 6 months, the child should be able to:
Reading
- Recognize all 26 uppercase and lowercase letters
- Understand letter-sound relationships (phonics)
- Blend sounds to decode simple CVC words (cat, dog, sun)
- Read simple sight words (Dolch Pre-K and Kindergarten lists)
- Read short sentences and simple books independently
- Answer basic comprehension questions about what was read
Math
- Count reliably to 20 (and beyond)
- Recognize and write numerals 0–10
- Understand one-to-one correspondence
- Perform simple addition and subtraction within 10
- Recognize basic shapes and patterns
- Understand basic measurement concepts (longer/shorter, heavier/lighter)
/curriculum - Week-by-week lesson plans
/apps - Interactive learning tools and games
/assessments - Progress tracking and milestone checks
/resources - Reference materials, printables, and admission standards
| Month | Reading Focus | Math Focus |
|---|---|---|
| 1 | Letter recognition & sounds | Counting 1–10, number recognition |
| 2 | Phonics blending, CVC words | Numbers 11–20, patterns |
| 3 | Sight words (Pre-K list) | Addition within 5 |
| 4 | Short sentence reading | Subtraction within 5 |
| 5 | Sight words (K list), fluency | Addition & subtraction within 10 |
| 6 | Simple book reading, comprehension | Shapes, measurement, review |
A top-tier private school with rigorous kindergarten admission that assesses school readiness including pre-literacy and pre-numeracy skills.
See resources/admission-standards.md for a detailed breakdown of what the assessment evaluates.
Two versions of the personalized story generator exist: a macOS desktop app and an Android tablet app. Both call the Gemini API to produce decodable books tailored to the child's phonics level and favorite characters, then generate an illustration for each page.
You will need a Gemini API key from aistudio.google.com. The free tier is sufficient for normal use.
Location: tools/story_generator.py
Quick start:
./scripts/setup-python.shThis checks your Python version, creates a tools/.venv virtual environment, installs all dependencies, writes a tools/run.sh launcher, and opens the app. Re-run any time to repair or upgrade the environment. Pass --no-launch to skip auto-opening the app.
After the first run, launch with:
./tools/run.sh- macOS (uses Tkinter, which ships with the system Python on macOS 12+)
- Python 3.10 or later
- The three Python packages listed in
tools/requirements.txt
pip3 install -r tools/requirements.txtNote: If
pip3 install keyringfails on a fresh macOS install, runpip3 install --user -r tools/requirements.txtor use a virtual environment.
python3 tools/story_generator.pyA Tkinter window opens with four sections:
| Section | What to fill in |
|---|---|
| Profile | Child's name, favorite characters, phonics level |
| Story Spec | Title, theme, target sight words, page count (4–8) |
| API Key | Paste your Gemini key; tick Remember key (Keychain) to store it in the macOS Keychain so you only enter it once |
| Image Style Guide | Choose a template (Watercolor / Cartoon / Colored Pencil / Pixel Art) or write your own; save custom templates by name |
Workflow:
- Fill in all sections and click Generate Text — the story appears in the preview pane.
- Review each page; click Regenerate on any page you want rewritten.
- Click Generate Images — one illustration per page is created (this calls the image API and takes ~10–30 s per page).
- Click Save to Repo — writes
apps/social-stories/stories/<slug>/story.jsonandpage-NN.pnginto the repo. Commit and push as normal.
The key is stored in the macOS Keychain under service kinder-prep, account gemini-api-key. To remove it:
python3 -c "import keyring; keyring.delete_password('kinder-prep', 'gemini-api-key')"Location: apps-native/story_generator_flutter/
Quick start:
./scripts/setup-flutter.shThe script checks Flutter, detects whether Xcode (iPad) or Android SDK is available, adds iOS platform files on first run if Xcode is found, fetches packages, and interactively offers to run or build for your target device.
- Flutter SDK ≥ 3.22.0
- iPad (recommended): Mac with Xcode 15+ — install from the Mac App Store
- Android tablet: Android Studio with SDK Platform 35 and NDK installed
Check your setup:
flutter doctor- Connect iPad to your Mac via USB
- Unlock iPad and tap Trust when prompted
- Run the setup script and choose i, or:
cd apps-native/story_generator_flutter
flutter runOn first run the script adds the ios/ platform files automatically (flutter create --platforms ios .). Flutter selects the connected iPad and hot-reloads on save.
First-time signing prompt: Xcode may ask you to add your Apple ID under Xcode → Settings → Accounts and select a Development Team in
ios/Runner.xcodeproj. Free Apple IDs work for personal sideloading (7-day cert, re-runflutter runto renew).
Plug in your Android tablet with USB debugging enabled:
flutter runIf you see an Android SDK version error, open Android Studio → SDK Manager and install:
- SDK Platform 35 (or whatever Flutter's
flutter doctorrequests) - NDK (latest stable)
flutter build apk --release
# APK: build/app/outputs/flutter-apk/app-release.apkTransfer via USB, Google Drive, or email and tap to install. Enable Install unknown apps in Android Settings if prompted.
- Profile — child's name, favorite character, phonics level → Save Profile
- Story Spec — theme, sight words, page count (4–8)
- API Key — paste your Gemini key; toggle Remember key to store it securely (Keychain on iOS, Keystore on Android)
- Image Style Guide — pick a template or write your own; save custom templates by name
- Generate Story → review text, tap any page to edit
- Generate Images → progress bar fills as each page is illustrated
- Export Story → shares
story.json+ PNGs via the system share sheet
The key is stored in the device's secure enclave via flutter_secure_storage — Keychain on iOS, encrypted SharedPreferences on Android. It is never written to disk in plaintext. Toggle Remember key off to delete it.