# 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 ```bash 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 " 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 server - `npm run build` — production build - `npm start` — run the production build - `npm 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](https://litestream.io) 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](./LICENSE).