63 lines
2.1 KiB
Markdown
63 lines
2.1 KiB
Markdown
# 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 <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 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).
|