Add repo guidance file referencing curriculum and design docs

This commit is contained in:
Dan
2026-06-29 14:11:11 +00:00
parent 21bf3459a7
commit 9880cf40d5
+64
View File
@@ -0,0 +1,64 @@
# CLAUDE.md — DrawIt
Guidance for Claude (and humans) working in this repo.
## What DrawIt is
A free, open-source, **privacy-first** web app that teaches kids to draw — mobile/iPad-first.
**Non-negotiable principle: no data collection.** No analytics, no trackers, no third-party calls.
All data stays in the operator's self-hosted SQLite. Any feature must preserve this.
## Stack
Next.js 15 (App Router) + TypeScript · `better-sqlite3` (WAL) · custom cookie-session auth (scrypt) ·
`nodemailer` SMTP · `pdf-lib` (award certificates) · hand-written mobile-first CSS (no UI framework).
Path alias `@/*``./src/*` (needs `baseUrl` in tsconfig for the Windows/Next build).
## How the curriculum works (read before touching lessons)
- **Levels:** Early Beginner → Beginner → Learner → Advanced Learner → Superb (`LEVELS` in
`src/lib/curriculum.ts`).
- **Subjects & phases:** each subject is a set of `Lesson` entries, one per phase.
- Early Beginner = 3 phases: **Outline → Details → Color it!** (per-subject badge on Details).
- Beginner = 4 phases: **Construct → Outline → Color → Light** (per-**pack** badge).
- **Runners:** trace phases use per-step `lines: string[]` (SVG elements) revealed one at a time by
`LineDraw` inside `TraceRunner`; color/light phases use `baseSvg` rasterized by `ColoringRunner`.
- **Curriculum files:** static lessons live in `src/lib/curriculum.ts` and the generated
`curriculum.beginner.ts`, `curriculum.eb2.ts`, `curriculum.animals.ts`. Art is produced by Python
generators in the scratch outputs dir (cairosvg-rendered montages verify it before wiring).
- **Grouping/gating:** `getGroupedSubjects` + `EARLY_BEGINNER_GROUPS` (EB themed groups);
`src/lib/gating.ts` (Beginner unlocks after 5 EB lessons; pack completion). Per-subject vs per-pack
badges via `badgeDefs()`.
## Build / verify
`npm run build` and `npm run typecheck` are the source of truth — **run them locally**. Note: the
Cowork sandbox cannot reliably run them (typescript is a devDep often absent; native `better-sqlite3`
won't compile; shell file reads of the mount can truncate). Verify edits via the file tools and the
cairosvg art montages; do a real build on a normal machine before shipping.
## Design & research docs (`docs/`)
Read the relevant doc before building a feature it covers:
- `docs/RESEARCH-drawing-platforms-and-techniques.md` — competitor scan + drawing pedagogy; maps
techniques to the five levels.
- `docs/RESEARCH-beginner-level.md` — the Beginner level spec (4 phases, 3 packs, unlock gate,
per-pack badges). **Built.**
- `docs/RESEARCH-early-beginner-expansion.md` — the Early Beginner expansion (Simple Shapes, Fun
Things, Clothes, Faces, ~19 animals; themed groups). **Built.**
- **`docs/DESIGN-create-ai-lessons.md` — the "Create" feature + Creator role: type a subject →
ComfyUI generates coloring-book line art → DrawIt turns it into a lesson. Covers the Creator role,
ComfyUI API integration, the image→level pipeline, mandatory kids-safety/moderation, data model,
API routes, and phased rollout. Design only (not built). Read this before implementing Create.**
Operational/setup docs also live in `docs/` (BUILDING, DOCKER, SYSTEMD, REVERSE_PROXIES, AUTO_STARTING).
## Conventions
- Preserve the privacy principle in every change.
- First registered account is forced `admin` + active; everyone else defaults `learner` + `pending`
until email confirmation. Roles: `admin | learner | creator` (creator = learner + the Create ability).
- Adding a lesson subject = append `Lesson` entries (+ art); routes/runners are generic and handle the
rest. Keep sublevels unique within a level (`subjectIndex*10 + phase` for static lessons).
- Images (drawings, avatars, created line art) are stored as data URLs in SQLite for privacy.