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
36c35864d3
test: let vitest import svelte rune modules
...
Adds the svelte plugin and the $lib alias so *.svelte.js modules can be
imported by tests. The lesson interaction logic was untestable without it.
2026-09-15 10:06:46 +07:00
tiennm99
c291d52cd2
build: move from pnpm to npm
...
Replace pnpm-lock.yaml with package-lock.json. The security overrides move to
package.json#overrides with their range operators intact, so advisory floors
stay floors. allowBuilds becomes package.json#allowScripts where the listed
package is actually in the tree.
2026-08-17 13:15:15 +07:00
5ca8d29ef7
build(deps): bump postcss from 8.5.16 to 8.5.23 ( #26 )
...
Bumps [postcss](https://github.com/postcss/postcss ) from 8.5.16 to 8.5.23.
- [Release notes](https://github.com/postcss/postcss/releases )
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/postcss/postcss/compare/8.5.16...8.5.23 )
---
updated-dependencies:
- dependency-name: postcss
dependency-version: 8.5.23
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-25 14:45:42 +07:00
tiennm99
1d4ddc8e22
chore: remove dependabot version-update config
2026-07-25 14:14:26 +07:00
tiennm99
e1966c22f0
build(deps): update dependencies and actions, pin cookie >=0.7.2
...
- bump minor-and-patch group: @sveltejs/kit 2.69.3, vite 8.1.5,
svelte 5.56.6, tailwindcss 4.3.3, vitest 4.1.10, and related tools
- bump actions/checkout and actions/setup-node to v7
- override transitive cookie to 0.7.2 to resolve GHSA advisory
2026-07-17 17:56:53 +07:00
tiennm99
0510b671b3
fix: update vite security patch
2026-07-02 09:08:14 +07:00
f08303fdcb
build(deps): bump tailwindcss from 3.4.19 to 4.3.0 ( #15 )
...
* build(deps): bump tailwindcss from 3.4.19 to 4.3.0
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss ) from 3.4.19 to 4.3.0.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases )
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.0/packages/tailwindcss )
---
updated-dependencies:
- dependency-name: tailwindcss
dependency-version: 4.3.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
* fix(styles): migrate to tailwindcss v4 with @tailwindcss/postcss plugin
* fix(styles): use @tailwind directives (v4-compat) instead of bare CSS @import
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: tiennm99 <tiennm99@outlook.com >
2026-05-23 18:36:39 +07:00
0a71009374
build(deps-dev): bump prettier-plugin-svelte from 3.5.2 to 4.0.1 ( #14 )
...
Bumps [prettier-plugin-svelte](https://github.com/sveltejs/prettier-plugin-svelte ) from 3.5.2 to 4.0.1.
- [Release notes](https://github.com/sveltejs/prettier-plugin-svelte/releases )
- [Changelog](https://github.com/sveltejs/prettier-plugin-svelte/blob/main/CHANGELOG.md )
- [Commits](https://github.com/sveltejs/prettier-plugin-svelte/compare/v3.5.2...prettier-plugin-svelte@4.0.1 )
---
updated-dependencies:
- dependency-name: prettier-plugin-svelte
dependency-version: 4.0.1
dependency-type: direct:development
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:24:38 +07:00
92c440406d
build(deps-dev): bump vitest from 3.2.4 to 4.1.7 ( #13 )
...
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest ) from 3.2.4 to 4.1.7.
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md )
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.7/packages/vitest )
---
updated-dependencies:
- dependency-name: vitest
dependency-version: 4.1.7
dependency-type: direct:development
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:24:35 +07:00
2a1b36acbb
build(deps): bump pnpm/action-setup from 4 to 6 ( #11 )
...
Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup ) from 4 to 6.
- [Release notes](https://github.com/pnpm/action-setup/releases )
- [Commits](https://github.com/pnpm/action-setup/compare/v4...v6 )
---
updated-dependencies:
- dependency-name: pnpm/action-setup
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:09:23 +07:00
e9e1399dd0
build(deps): bump actions/deploy-pages from 4 to 5 ( #10 )
...
Bumps [actions/deploy-pages](https://github.com/actions/deploy-pages ) from 4 to 5.
- [Release notes](https://github.com/actions/deploy-pages/releases )
- [Commits](https://github.com/actions/deploy-pages/compare/v4...v5 )
---
updated-dependencies:
- dependency-name: actions/deploy-pages
dependency-version: '5'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:09:19 +07:00
68a9237c9c
build(deps): bump actions/upload-pages-artifact from 3 to 5 ( #9 )
...
Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact ) from 3 to 5.
- [Release notes](https://github.com/actions/upload-pages-artifact/releases )
- [Commits](https://github.com/actions/upload-pages-artifact/compare/v3...v5 )
---
updated-dependencies:
- dependency-name: actions/upload-pages-artifact
dependency-version: '5'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:09:16 +07:00
b825fc1457
build(deps): bump actions/checkout from 4 to 6 ( #8 )
...
Bumps [actions/checkout](https://github.com/actions/checkout ) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases )
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md )
- [Commits](https://github.com/actions/checkout/compare/v4...v6 )
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:09:11 +07:00
33ff67a7ae
build(deps): bump actions/setup-node from 4 to 6 ( #7 )
...
Bumps [actions/setup-node](https://github.com/actions/setup-node ) from 4 to 6.
- [Release notes](https://github.com/actions/setup-node/releases )
- [Commits](https://github.com/actions/setup-node/compare/v4...v6 )
---
updated-dependencies:
- dependency-name: actions/setup-node
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:09:07 +07:00
1c0ca94c9a
build(deps): bump the minor-and-patch group with 5 updates ( #12 )
...
Bumps the minor-and-patch group with 5 updates:
| Package | From | To |
| --- | --- | --- |
| [@sveltejs/kit](https://github.com/sveltejs/kit/tree/HEAD/packages/kit ) | `2.59.1` | `2.61.0` |
| [katex](https://github.com/KaTeX/KaTeX ) | `0.16.45` | `0.17.0` |
| [postcss](https://github.com/postcss/postcss ) | `8.5.14` | `8.5.15` |
| [svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte ) | `5.55.5` | `5.55.9` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite ) | `8.0.12` | `8.0.14` |
Updates `@sveltejs/kit` from 2.59.1 to 2.61.0
- [Release notes](https://github.com/sveltejs/kit/releases )
- [Changelog](https://github.com/sveltejs/kit/blob/main/packages/kit/CHANGELOG.md )
- [Commits](https://github.com/sveltejs/kit/commits/@sveltejs/kit@2.61.0/packages/kit )
Updates `katex` from 0.16.45 to 0.17.0
- [Release notes](https://github.com/KaTeX/KaTeX/releases )
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md )
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.45...v0.17.0 )
Updates `postcss` from 8.5.14 to 8.5.15
- [Release notes](https://github.com/postcss/postcss/releases )
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/postcss/postcss/compare/8.5.14...8.5.15 )
Updates `svelte` from 5.55.5 to 5.55.9
- [Release notes](https://github.com/sveltejs/svelte/releases )
- [Changelog](https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md )
- [Commits](https://github.com/sveltejs/svelte/commits/svelte@5.55.9/packages/svelte )
Updates `vite` from 8.0.12 to 8.0.14
- [Release notes](https://github.com/vitejs/vite/releases )
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md )
- [Commits](https://github.com/vitejs/vite/commits/v8.0.14/packages/vite )
---
updated-dependencies:
- dependency-name: "@sveltejs/kit"
dependency-version: 2.61.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: katex
dependency-version: 0.17.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: postcss
dependency-version: 8.5.15
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: svelte
dependency-version: 5.55.9
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: vite
dependency-version: 8.0.14
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:08:20 +07:00
tiennm99 and GitHub
89b0452abb
chore: add dependabot config ( #6 )
2026-05-23 10:49:15 +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
fb6089aff0
docs: brainstorm + plan for cool demo pages round 2
...
Brainstorm survey of 6 candidates with brutal-honesty trade-off matrix; top-3
ranked (Pythagoras động, Sàng Eratosthenes, đường thẳng y=ax+b). Plan with
8 phases — 3 engines + 3 lessons + glue + verify.
2026-05-15 20:35:02 +07:00
tiennm99
1056dd8caf
fix(ci): remove pnpm version override conflicting with packageManager
2026-05-13 10:28:56 +07:00
tiennm99
926abb3be1
chore: update pnpm lockfile for bumped deps
2026-05-13 10:21:20 +07:00
tiennm99
77877b8dca
chore: migrate from npm to pnpm
2026-05-13 10:20:51 +07:00
ecd663ccc2
build(deps): bump vite and @sveltejs/vite-plugin-svelte ( #3 )
...
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite ) and [@sveltejs/vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte/tree/HEAD/packages/vite-plugin-svelte ). These dependencies needed to be updated together.
Updates `vite` from 5.4.21 to 8.0.10
- [Release notes](https://github.com/vitejs/vite/releases )
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md )
- [Commits](https://github.com/vitejs/vite/commits/v8.0.10/packages/vite )
Updates `@sveltejs/vite-plugin-svelte` from 4.0.4 to 7.0.0
- [Release notes](https://github.com/sveltejs/vite-plugin-svelte/releases )
- [Changelog](https://github.com/sveltejs/vite-plugin-svelte/blob/main/packages/vite-plugin-svelte/CHANGELOG.md )
- [Commits](https://github.com/sveltejs/vite-plugin-svelte/commits/@sveltejs/vite-plugin-svelte@7.0.0/packages/vite-plugin-svelte )
---
updated-dependencies:
- dependency-name: vite
dependency-version: 8.0.10
dependency-type: direct:production
- dependency-name: "@sveltejs/vite-plugin-svelte"
dependency-version: 7.0.0
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-07 13:33:13 +07:00
tiennm99
610dfa7cec
docs: brainstorm survey + lesson 4+5 plan
2026-05-03 13:15:55 +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
8804c192db
fix: remove SPA fallback so prerendered HTML wins at /
...
With prerender=true on +layout.js, adapter-static emits index.html
per route. Setting fallback: 'index.html' overwrites the prerendered
home with the SPA bootstrap shell, leaving the live page empty before
hydration. Drop the fallback option.
2026-04-30 21:49:08 +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