feat: port 3 interactive geometry lessons + geom-engine

- Add pure geom-engine module (vec, triangle, circle, ticks) with 34 vitest tests
- Add 3 lessons under /hinh-hoc/: tam-giac-bang-nhau (SSS), tam-giac-dong-dang (similarity), goc-noi-tiep (inscribed angle)
- Add reactive draggable Svelte action with arrow-key a11y
- Add per-lesson colocated i18n + site chrome + lesson registry
- Enable Hình học topic card on landing; keep Số học/Đại số as Sắp ra mắt
- Codify pedagogical tick palette as Tailwind colors.pair.{1,2,3}
- Add Be Vietnam Pro via @fontsource
This commit is contained in:
2026-04-30 22:27:26 +07:00
parent 8804c192db
commit a0da079500
31 changed files with 4761 additions and 106 deletions
+13 -4
View File
@@ -4,7 +4,11 @@ Toán tương tác cho học sinh THCS Việt Nam (lớp 6-9). Số học, Đạ
## Status
Scaffold only (v0.0.1.0). Landing page liệt kê 3 chủ đề với "Sắp ra mắt". Modules tương tác sẽ ra mắt từng phần.
3 bài hình học đầu tiên đã ra mắt. Số học và Đại số vẫn "Sắp ra mắt".
- Lớp 7 — Tam giác bằng nhau (SSS): `/hinh-hoc/tam-giac-bang-nhau/`
- Lớp 8 — Tam giác đồng dạng: `/hinh-hoc/tam-giac-dong-dang/`
- Lớp 9 — Góc nội tiếp: `/hinh-hoc/goc-noi-tiep/`
## Develop
@@ -13,6 +17,8 @@ Yêu cầu: Node 24+, npm 11+.
```sh
npm install
npm run dev # http://localhost:5173/mathmax/
npm run test # Vitest (geom-engine unit tests)
npm run check # svelte-check + JSDoc strict
npm run build # Static output → build/
npm run preview # Serve build/
```
@@ -26,9 +32,12 @@ Live URL: https://tiennm99.github.io/mathmax/
## Architecture
- **Static**: SvelteKit + `@sveltejs/adapter-static`, `paths.base = '/mathmax'`, output `build/`.
- **Styling**: Tailwind 3 (PostCSS), system font stack (Be Vietnam Pro sẽ thêm khi có module đầu tiên).
- **Language**: JavaScript only (Svelte 5, JSDoc qua `jsconfig.json`).
- **i18n**: Hiện chỉ có tiếng Việt. English thêm khi cần.
- **Styling**: Tailwind 3 (PostCSS) + Be Vietnam Pro (woff2 qua `@fontsource`). Tick palette `colors.pair.{1,2,3}` được khai báo trong `tailwind.config.js`.
- **Language**: JavaScript only (Svelte 5, JSDoc qua `jsconfig.json` với `checkJs: true`).
- **Math engine**: `src/lib/geom-engine/` — module thuần (không phụ thuộc DOM): `vec`, `triangle`, `circle`, `ticks`. Vitest unit tests đi kèm.
- **Lessons**: mỗi bài là một `+page.svelte`; copy tiếng Việt colocate trong `src/lib/lessons/<slug>/copy.vi.js`.
- **Drag**: Svelte action `use:draggable` (`src/lib/actions/draggable.svelte.js`) — Pointer Events + bàn phím mũi tên cho a11y.
- **i18n**: Hiện chỉ có tiếng Việt. Site chrome ở `src/lib/i18n/site.vi.js`. English thêm sau bằng cách tạo `*.en.js` song song.
## License