12 Commits
Author SHA1 Message Date
tiennm99 737657b69a feat(dai-so): add the linear system lesson for lop 9
Two lines in standard form ax + by = c, with the intersection point as the
solution. Standard form rather than the slope-intercept form of linear.js,
because it represents vertical lines and the three cases fall out of one
determinant.

Coefficient sliders plus a drag handle per line that translates it, and
presets where the parallel and coincident cases differ only in c.
2026-09-15 10:07:05 +07:00
tiennm99 03c976cb5f fix(goc-noi-tiep): report the subtended arc, not the unsigned central angle
The readout showed the angle AOB, which does not change as M moves, so the
page contradicted its own theorem whenever M sat on the minor arc: the
inscribed angle read 120 degrees against a central angle of 120. It now
shows the measure of the arc that M does not lie on, so the inscribed angle
is half of it wherever M is. The inscribed angle is also marked undefined
when M reaches either end of the chord instead of reading zero.
2026-09-15 10:06:57 +07:00
tiennm99 27ec89fe89 fix(dinh-ly-pythagoras): preserve area through the shear proof
The animation interpolated each vertex straight from the leg square to its
target rectangle, which is not area preserving: the square collapsed to
about a ninth of its area midway, so a lesson about shear preserving area
showed the opposite. The morph is now a composition of shears and a quarter
turn built on geom-engine/transforms.js, each of determinant 1, so the area
is exactly a squared and b squared at every frame.

The square on the hypotenuse also reached outside the viewBox. The canvas
is larger and the legs are capped so every polygon stays on screen for any
position of the draggable vertex.
2026-09-15 10:06:57 +07:00
tiennm99 d558159173 fix(sang-eratosthenes): keep the grid usable for primes above 50
rippling was raised before the stagger loop but lowered only inside the
final timeout, so a prime with no multiple left on the 100-cell grid left
the flag raised and rejected every later click. Affected 10 of the 25
primes on the grid.
2026-09-15 10:06:46 +07:00
tiennm99 0f7da4cf35 fix(styles): load the tailwind 4 entry point
The project installs tailwind 4 but app.css still used the v3 @tailwind
directives, so no theme layer was imported and the emitted stylesheet
carried none of the color, spacing, radius, responsive or hover utilities
the pages rely on. The bare 'tailwindcss' specifier is intercepted by the
bundler's @import resolver, so the file path is spelled out instead, with
@config keeping the pair palette from tailwind.config.js.
2026-09-15 10:06:46 +07:00
tiennm99 9d5d3f04a0 feat: 3 interactive demo pages + transforms/sieve/linear engines
Lessons:
- /hinh-hoc/dinh-ly-pythagoras (lớp 7) — drag right-angle vertex; "Chứng minh"
  button plays Euclid-style dissection-shear animation tweening two leg-squares
  into the hypotenuse-square. Respects prefers-reduced-motion.
- /so-hoc/sang-eratosthenes (lớp 6) — 10×10 grid; click 2/3/5/7 → ripple
  cross-out of multiples in 4 colors; roving tabindex; aria-live announces.
- /dai-so/duong-thang (lớp 7) — y = ax + b plot; 2 sliders + 2 draggable
  anchors bidirectionally bound via draggable.onChange + viewport clamping +
  rounded epsilon gate (no oscillation at any drag speed).

Engines:
- geom-engine/transforms.js — translate, rotate, shear, compose, applyToPolygon (13 tests)
- numtheory-engine/sieve.js — sieveUpTo, multiplesOf, isPrime (10 tests)
- algebra-engine/linear.js — lineFromPoints, yAt, linePoints (6 tests); new module bootstrapped

Glue:
- registry: insert 3 new lessons in topic+grade order
- tailwind: extend colors.pair to 4 entries (pair.4 = #5E60CE for prime 7)
- README: bump count 5→8, list new URLs, update architecture section
2026-05-15 20:35:22 +07:00
tiennm99 8d6b5153dc feat: enable Số học + Đại số topic tiles + landings 2026-05-03 13:15:47 +07:00
tiennm99 1877bc91cd feat: hiệu hai bình phương lesson (lớp 7) 2026-05-03 13:15:45 +07:00
tiennm99 e553e7cd67 feat: numtheory-engine + GCD Euclidean lesson (lớp 6) 2026-05-03 13:15:44 +07:00
tiennm99 7c282c3aee feat: add KaTeX <Tex> component for math typography 2026-05-03 13:15:42 +07:00
tiennm99 a0da079500 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
2026-04-30 22:27:26 +07:00
tiennm99 7b75a72a16 feat: initial scaffold
- SvelteKit 2 + Svelte 5 + Tailwind 3 (JS only, paths.base=/mathmax)
- Vietnamese landing page: hero + scope (lớp 6-9) + 3 topic cards (Số học, Đại số, Hình học) all "Sắp ra mắt"
- GitHub Actions: CI (build) on PR + deploy to Pages on main
- Apache-2.0 LICENSE, README, RUNBOOK, CHANGELOG
2026-04-30 21:44:43 +07:00