# kenowong/math-mastery: A Zero-Dependency Chinese Math Practice App That Randomizes Every Question

> A single-file, offline-capable HTML application that covers 49 core methods from primary school through high school with a parametric question generator. The README describes a complete system, but the repository has no tests and no documented versioning.

**kenowong/math-mastery** — Integrated primary and secondary school math methods - a pure front-end, zero-dependency, parameterized random question generation engine.

- Repository: https://github.com/kenowong/math-mastery
- Stars: 390 · Forks: 121
- Language: HTML
- License: not declared
- Published: 2026-09-17 · Updated: 2026-09-17 · Language: en
- Canonical page: https://hysenlabs.com/projects/kenowong-math-mastery

## What math-mastery Actually Is and Who It Serves

The repository describes itself as a pure frontend, zero-dependency, offline-usable application for learning and practicing primary and secondary school math methods. The README lists coverage of 10 primary school methods, 15 junior high methods, 24 high school methods, and a large set of extension topics that reach into university preparatory material. The interface language is Chinese, and the content is organized around Chinese curriculum topics: 鸡兔同笼 (chickens and rabbits in the same cage), 植树问题 (tree planting), 一元一次方程 (linear equations in one variable), 导数与单调性 (derivatives and monotonicity), and so on.

The intended user is a Chinese-speaking student who wants to drill specific problem types, or a teacher who wants a free offline tool that generates fresh problems. The README also positions it as useful for self-study because each generated question includes a step-by-step solution and an SVG figure. According to the README, the figure shows only the given data and structural relationships, never the answer. That is a deliberate design choice: the visual aid supports understanding without making the exercise trivial.

A secondary audience is developers who want to see how parametric question generation can work without a build step. The entire application is HTML, native JavaScript, and CSS. There is no package manager, no bundler, and no runtime dependency. The data-driven architecture means new methods are added by extending a JavaScript array rather than by writing new UI code.

## The Parametric Question Generator: How It Works

The core mechanism is a function called qgen(n) attached to each method. The README states that every core method has one, and that the first, second, and third practice rounds all produce different question stems. The parameter n appears to control the randomization, though the README does not document the exact range or semantics of n. What is clear is that the correct answer is computed directly from the mathematical construction, not stored as a static string. The README says this guarantees correctness.

Each generated question carries a step-by-step solution and an SVG figure. The figure is generated by a separate module, figures.js, and the README notes that figures show only the given data and structural relationships, never the answer. Seven methods also have interactive animations: Euler's formula, Taylor series, number-line reasoning, tree diagrams, linear programming, normal distribution, and complex number geometry. The README describes these as including unit circle rotation, polynomial approximation, quadrant positioning, step-by-step tree growth, objective line translation, 3-sigma interval shading, and multiplication by i as a 90-degree rotation.

The data flow is straightforward. index.html loads data.js, qgen.js, qgen_junior.js, qgen_high.js, figures.js, animations.js, related-projects.js, and app.js. The window.TECHNIQUES array in data.js defines the methods. The qgen files attach generators to those methods. app.js handles routing, rendering, and state. Progress is persisted in localStorage. Hash routing keeps it a single-page application without a server.

## Opening the App and Running a First Practice Round

The README gives two ways to start. The simplest is to open index.html directly in a browser. No installation, no build step, no server required. The alternative is to serve the directory with Python's built-in HTTP server. The README uses port 8142:

```bash
python -m http.server 8142
# then visit http://127.0.0.1:8142/
```

After the page loads, the user sees a learning path organized by dependency. The README describes it as a step-by-step arrangement of techniques. Selecting a technique opens its practice mode. Each technique has a challenge mode called 闯关 (gate crossing). Wrong answers are automatically added to a weak-point list.

The weak-point review mode presents the missed questions again until the list is empty. There is also a return-path behavior: after finishing practice, clicking 返回路径 (return to path) scrolls back to and highlights the technique node that was just practiced. That is a small usability detail, but it matters for long paths where manually scrolling back would be tedious.

The repository also contains a standalone build. The file math-mastery-standalone.html is a single-file version, and build_standalone.js is the script that produces it. The README does not document the build command for that script, so anyone who wants to regenerate the standalone file would need to read the script itself. The presence of inject_highschool.py, transform_grades.py, and verify.py suggests that content was injected and transformed programmatically, and that some verification step exists. The README does not explain what verify.py checks.

## Where the Randomization Engine Falls Short

The README makes a strong claim: questions never repeat. In practice, a parametric generator with a finite parameter space will eventually cycle. The README does not state the size of the parameter space for any method. For a method like 鸡兔同笼 with two variants (assumption method and foot-lifting method), the number of distinct integer combinations that produce sensible word problems is not infinite. A student who practices the same method for many rounds may see a repeated stem. The README does not address this.

A second limitation is the absence of tests. The repository has a verify.py file, but the README does not describe what it verifies or how to run it. There is no test directory, no CI configuration, and no documented assertion that the generated answers are correct. The README's claim that correctness is guaranteed by mathematical construction is a design argument, not a verification result. For a tool that students may use unsupervised, that distinction matters.

The third limitation is language. All content is in Chinese. The README is in Chinese. The method names are Chinese curriculum terms. A student who does not read Chinese cannot use the application. The related-projects page links to English-language resources like Manim and Desmos, but the application itself is not localized.

Finally, the README does not document browser compatibility. It says pure frontend and offline-capable, but does not state which browsers are supported or whether the SVG figures and animations degrade gracefully on older browsers. The use of native JavaScript and CSS suggests broad compatibility, but that is an inference, not a documented guarantee.

## How It Compares to GeoGebra and Manim

The README's related-projects page lists Manim, Manim-Web, GeoGebra, Desmos, and 网络画板 (Netboard) as visualization engines with similar positioning. The difference in approach is significant. GeoGebra and Desmos are general-purpose graphing and geometry tools. A user constructs a figure, manipulates parameters, and observes the result. They are exploratory environments. math-mastery is a practice environment. The user does not construct anything; the application presents a problem, the user answers it, and the application tracks progress and weak points.

Manim is a Python library for programmatic animation. It produces video or rendered scenes, not interactive practice. Manim-Web brings some of that to the browser, but the workflow is still authoring animations, not drilling problems. math-mastery's interactive animations are embedded in the practice flow, not authored by the user.

The practical difference is that GeoGebra can be used to teach any mathematical concept the teacher can model, while math-mastery can only teach the methods in its window.TECHNIQUES array. The trade-off is depth versus breadth. math-mastery goes deep on 49 methods with randomized practice and progress tracking. GeoGebra goes broad on visualization but leaves practice design to the user.

There is also a licensing difference. The README states MIT for math-mastery. GeoGebra uses a mix of licenses depending on the component. Desmos is proprietary. Manim is MIT. For a school that wants to modify and redistribute the tool, the MIT license is permissive, but the README's license statement is the only source. The repository's top-level entries do not include a LICENSE file, which is worth verifying.

## Maintenance Status and Upgrade Considerations

The repository is not archived. The last push was on 2026-09-09, which is eight days before the current date. That is recent enough to indicate active work, though the README does not describe a release process, versioning scheme, or changelog. There are no retrieved releases. Upgrades would therefore be done by pulling from the master branch, and there is no documented way to know what changed between pulls other than reading the commit history.

For a zero-dependency application, the upgrade surface is small. There are no npm packages to update, no framework versions to track, and no build toolchain to maintain. The main upgrade considerations are content changes in data.js and the qgen files, and any changes to the localStorage schema. The README does not document the localStorage keys or their format. If a future version changes the storage schema, existing progress could be lost or corrupted. A user who cares about progress should export or back up the relevant localStorage entries before upgrading, though the README does not describe an export feature.

The license situation is also worth attention. The README states MIT, but the repository's top-level entries do not include a LICENSE file. The README is the only license statement available. For most users this is fine, but for anyone who needs to redistribute the code in a commercial product or a school district with strict licensing requirements, the absence of a LICENSE file is a gap. The README's MIT statement is a declaration, not a file that a legal review can point to. Verifying the actual license with the author would be the safe step.

## Conclusion

This is a practical tool for Chinese-speaking students and teachers who want randomized offline practice across a wide range of methods, and for developers who want a reference implementation of parametric question generation in plain JavaScript. It is not suitable for anyone who needs English-language content, formal assessment, or a documented API. Before adopting it, verify the accuracy of the generated answers by working through several rounds manually, check that the localStorage keys do not collide with other apps on the same origin, and confirm that the MIT license in the README matches the repository's actual license file.

## FAQ

### Is kenowong/math-mastery legit?

The repository is a real, non-archived project with a last push on 2026-09-09 and a README that describes its architecture, coverage, and local running instructions in detail. The README states an MIT license, though the repository's top-level entries do not include a LICENSE file.

### What is kenowong/math-mastery?

It is a pure frontend, zero-dependency, offline-usable application for learning and practicing primary and secondary school math methods. The README describes coverage of 10 primary school methods, 15 junior high methods, 24 high school methods, and a set of extension topics.

### Is the kenowong/math-mastery app free?

The README states an MIT license, which is a permissive open source license. The repository is public and the application runs entirely in the browser with no server or paid service.

### What is kenowong/math-mastery lab?

The README does not describe a separate lab component. The application is a single pure frontend project with a learning path, practice modes, and a weak-point review system.

### Is kenowong/math-mastery mastery-based or spiral-based?

The README describes a path-based learning structure where techniques are arranged by dependency and practiced until the weak-point list is empty. That is closer to a mastery approach than a spiral one, though the README does not use either term explicitly.

## Sources

- [Issues](https://github.com/kenowong/math-mastery/issues)
- [kenowong/math-mastery on GitHub](https://github.com/kenowong/math-mastery)
- [README](https://github.com/kenowong/math-mastery/blob/master/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/kenowong-math-mastery
