Reviewed-on: #17
DrawIt 🐟🎨
A free and open-source web app that teaches kids how to draw — one simple shape at a time.
Mobile-first (built for iPads and tablets), privacy-first (no data collection, no trackers, no analytics), and self-hostable. Learners progress through levels, earn shareable badges, and unlock printable award certificates (PDF).
Ability levels: Early Beginner → Beginner → Learner → Advanced Learned → Superb. First lesson: Early Beginner → Level 1 → Draw a Fish.
Quick start
npm install
cp .env.example .env.local # then edit SMTP settings + APP_URL
npm run dev # http://localhost:3000
The first account you register becomes the Admin. Everyone else defaults to Learner. Accounts stay pending until the email link is confirmed.
Email (account confirmation)
Set real SMTP credentials in .env.local:
APP_URL=http://localhost:3000
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=your-user
SMTP_PASS=your-pass
SMTP_FROM="DrawIt <no-reply@example.com>"
SESSION_SECRET=change-me-to-a-long-random-string
If SMTP isn't configured, confirmation links are printed to the server console so you can still test locally.
Scripts
npm run dev— development servernpm run build— production buildnpm start— run the production buildnpm run typecheck— TypeScript check
Privacy
DrawIt stores only what an account needs (email, username, hashed password, learning progress) and keeps it in a local SQLite file on the server you run. There are no analytics, trackers, ad scripts, fingerprinting, or third-party runtime requests. One essential httpOnly session cookie is used for login — nothing else.
Data & backups
Progress lives in a single SQLite database (data/drawit.db) with WAL journaling enabled. For
off-box backups, point Litestream at the DB file (see litestream.yml).
(wal-g is a Postgres/MySQL tool and does not apply to SQLite; Litestream is the SQLite equivalent.)
License
See LICENSE.