[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-83271":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":14,"stars7d":15,"stars30d":15,"stars90d":13,"forks30d":13,"starsTrendScore":16,"compositeScore":17,"rankGlobal":8,"rankLanguage":8,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":8,"pushedAt":8,"updatedAt":23,"readmeContent":24,"aiSummary":8,"trendingCount":13,"starSnapshotCount":13,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},83271,"edulab","wy51ai\u002Fedulab","wy51ai",null,"HTML",490,89,6,0,18,308,131,5.86,"Apache License 2.0",false,"master",true,[],"2026-06-12 02:04:32","# edulab\n\n[简体中文](README.zh-CN.md) · **English**\n\nA collection of education skills that turn academic problems into **interactive lesson web pages**.\n\n## Install\n\n**Recommended** — install with [skills](https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fskills) in one command:\n\n```bash\nnpx skills add wy51ai\u002Fedulab\n```\n\nTo update to the latest version later:\n\n```bash\nnpx skills update\n```\n\nOr use it as a Claude Code plugin marketplace:\n\n```\n\u002Fplugin marketplace add wy51ai\u002Fedulab\n\u002Fplugin install edulab\n```\n\nOnce installed, the skills activate on their trigger words, and can also be invoked manually.\n\n## Skill: edu-solid-geometry\n\n![edu-solid-geometry demo](edu-solid-geometry.gif)\n\nSolves one solid geometry problem into a self-contained interactive lesson page. Three entry points:\n\n| Entry point | What it does |\n|---|---|\n| Text problem | Extracts the statement and solves directly |\n| Image upload | Reads the problem from the image via vision, echoes it back for confirmation, then solves |\n| Random problem | Solves with random parameters; re-rolls if the answer isn't clean |\n\n**Problem types covered**: line-plane angle, dihedral angle, angle between skew lines, point-to-plane distance, volume, and more — on cubes \u002F cuboids, pyramids \u002F prisms, cylinders \u002F cones. All solved uniformly via the \"coordinate system + vector method.\"\n\n**Trigger words**: solid geometry, line-plane angle, dihedral angle, angle between skew lines, distance to plane, interactive geometry solution page; 立体几何、线面角、二面角、异面直线、点到平面距离、正四棱锥、解这道几何题、随机出一道立体几何题、这张图里的立体几何题, etc.\n\n### Dependency\n\nThe compute core `lib\u002Fgeometry_kernel.py` depends on **sympy**. Use any `python3` that can import sympy:\n\n```bash\npython3 -m pip install sympy   # if sympy is missing\n```\n\n### Generate from the command line (without Claude)\n\n```bash\ncd skills\u002Fedu-solid-geometry\npython3 scripts\u002Fgenerate.py cube   .\u002Fcube.html     # cube · line-plane angle\npython3 scripts\u002Fgenerate.py box    .\u002Fbox.html      # cuboid · volume\npython3 scripts\u002Fgenerate.py random 7 .\u002Frandom.html # random problem (seed=7)\npython3 lib\u002Fgeometry_kernel.py                     # kernel built-in self-check\n```\n\n> If you don't pass an output path, it writes to the **current working directory (cwd)**.\n\n## Skill: edu-analytic-geometry\n\n![edu-analytic-geometry demo](edu-analytic-geometry.gif)\n\nSolves one analytic geometry (conic sections) problem into a self-contained interactive lesson page. Same three entry points as above (text \u002F image \u002F random). Built on a **2D Canvas board + KaTeX** with a generic, data-driven interactive engine: a parameter slider drives derived constructions (line∩conic, point-on-conic, central reflection, tangent…) and live readouts, with a theoretical-range bar or a fixed-value indicator.\n\n**Problem types covered**: standard equation, chord length, dot-product range \u002F fixed value, triangle-area extremum, fixed point, fixed value (slope product), locus, tangent, eccentricity — on ellipses \u002F hyperbolas \u002F parabolas \u002F circles. All solved uniformly via \"parametrized line `x = my + c` + system + Vieta's formulas + substitution.\"\n\n> A correctness note baked into the kernel: open\u002Fclosed interval endpoints are decided by whether a *real* line attains them, so the boxed answer always matches what the interactive tool shows (e.g. the ellipse `MA·MB` range is the **closed** `[-3, 7\u002F4]` — slide θ to 0° and you read exactly −3).\n\n**Trigger words**: analytic geometry, conic sections, ellipse, hyperbola, parabola, chord length, dot product range, fixed point, fixed value, locus, eccentricity, interactive analytic geometry solution page; 解析几何、圆锥曲线、椭圆、双曲线、抛物线、焦点弦、向量数量积取值范围、定点问题、定值问题、斜率之积、三角形面积最值、轨迹方程、离心率, etc.\n\n### Dependency\n\nThe compute core `lib\u002Fanalytic_kernel.py` depends on **sympy** (same as above).\n\n### Generate from the command line (without Claude)\n\n```bash\ncd skills\u002Fedu-analytic-geometry\npython3 scripts\u002Fgenerate.py list                          # list registered problem types\npython3 scripts\u002Fgenerate.py ellipse_dot_range .\u002Fsol.html  # ellipse · MA·MB range [-3, 7\u002F4]\npython3 scripts\u002Fgenerate.py parabola_dot_const .\u002Fsol.html # parabola focal chord · OA·OB ≡ -3\npython3 scripts\u002Fgenerate.py all .\u002Fout_dir                 # all registered types\npython3 lib\u002Fanalytic_kernel.py                            # kernel built-in self-check\n```\n\n> Like above, no output path → writes to the **current working directory (cwd)**.\n\n## How it works\n\n1. **Get a problem spec** — normalize all three entry points into a structured description (body type and dimensions, given conditions, the quantity asked, language).\n2. **Exact kernel computation** — sympy computes exact coordinates, key vectors, normals, the final answer, and every intermediate value (as LaTeX strings). Never by hand.\n3. **Assemble and inject the template** — feed the `lesson` \u002F `steps` \u002F `model` data into the data-driven template `template\u002Flesson.html`; 3D vertex coordinates come from `kernel.to_three(...)`, sharing the same source as the solution.\n4. **Self-check** — kernel answer == answer card == final value shown in the last step; a local static server + preview check confirms no console errors and correct formula\u002Fhighlight rendering.\n5. **Deliver** — the finished page is written to the user's current working directory, named like `solution-\u003Cshort-description>.html`.\n\n## Project structure\n\n```\nedulab\u002F\n├── .claude-plugin\u002F\n│   ├── plugin.json              # plugin metadata\n│   └── marketplace.json         # marketplace manifest\n├── index.html                   # finished sample (quad pyramid · line-plane angle)\n└── skills\u002F\n    ├── edu-solid-geometry\u002F      # solid geometry — 3D (Three.js) + MathJax\n    │   ├── SKILL.md\n    │   ├── template\u002Flesson.html # data-driven template (generic 3D renderer + data island)\n    │   ├── lib\u002F\n    │   │   ├── geometry_kernel.py  # sympy exact-computation core\n    │   │   └── bodies.py           # edge-topology library for solids\n    │   ├── scripts\u002Fgenerate.py\n    │   ├── output\u002F\n    │   └── references\u002F          # problem-schema.md · conventions.md\n    └── edu-analytic-geometry\u002F   # analytic geometry \u002F conics — 2D (Canvas) + KaTeX\n        ├── SKILL.md\n        ├── template\u002Fboard.html  # data-driven template (generic 2D renderer + param engine)\n        ├── lib\u002F\n        │   ├── analytic_kernel.py  # sympy exact-solver core (system · Vieta · range · fixed value)\n        │   └── conics.py           # conic-section definition library\n        ├── scripts\u002Fgenerate.py\n        ├── output\u002F\n        └── references\u002F          # problem-schema.md · conventions.md\n```\n\n## Extending\n\n**edu-solid-geometry**\n- **Add a problem type**: add a solver function in `geometry_kernel.py` (see the recipe table in `references\u002Fconventions.md`), then add a `build_*` in `generate.py`.\n- **Add a solid**: add a coordinate-construction function in `geometry_kernel.py`, then add its edge topology in `bodies.py`.\n\n**edu-analytic-geometry**\n- **Add a problem type**: add a target-quantity function in `analytic_kernel.py` and reuse `range_over_m` \u002F `is_constant_in_m`, then add a `build_*` in `generate.py` (pick an interaction: range bar \u002F fixed value \u002F fixed point \u002F locus trace).\n- **Add a curve**: ellipse \u002F hyperbola \u002F parabola \u002F circle are built in; new curves go in `conics.py` and the `board.html` engine.\n\n## License\n\n[Apache-2.0](LICENSE)\n\n## Author\n\nWY · [@akokoi1](https:\u002F\u002Fx.com\u002Fakokoi1)\n\n## Star History\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F?repos=wy51ai%2Fedulab&type=date&legend=top-left\">\n \u003Cpicture>\n   \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=wy51ai\u002Fedulab&type=date&theme=dark&legend=top-left\" \u002F>\n   \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=wy51ai\u002Fedulab&type=date&legend=top-left\" \u002F>\n   \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=wy51ai\u002Fedulab&type=date&legend=top-left\" \u002F>\n \u003C\u002Fpicture>\n\u003C\u002Fa>\n",2,"2026-06-11 04:10:44","CREATED_QUERY"]