English | 简体中文
A native WeChat mini program for memorizing English words with the IPSM Approach (音形意统一记忆法) — a method that unifies pronunciation, spelling, and meaning into a single act of memorization.
- IPS (sound–spelling unity) — phoneme-notation symbols embed pronunciation rules directly into the written word
- ISM (spelling–meaning unity) — morpheme segmentation embeds word-formation rules into the word
- IPM (sound–meaning unity) — feel the intrinsic link between the sound of a word and its meaning
Every word card shows four aligned elements: the word, its IPS notation, its IPS-ISM annotation, and its Chinese meaning.
- 📚 9 built-in chapters — the complete IPSM method, from symbol tables and overview to IPS notation, the three unification approaches, and a simple phonics tutorial
- 📖 Word books — CET-4 and CET-6 (≈6,000 words each), sharded A–Z by root lemma and loaded on demand
- 🃏 Arc-swipe cards — drag a card along a curved path with a slight tilt; swipe left for "don't know" (goes to the review book), right for "know"
- 🔁 Review book — automatically collects every word you marked as "don't know" across all your word books
- 🔊 Tap to hear — American English pronunciation via TTS, played on tap
- 🔤 Math fonts included — double-struck and script Unicode letters (𝕒 𝓐) are subset and inlined so the notation always renders
- 🔒 Fully local — no backend, no account, no permissions; all progress lives in on-device storage
Prerequisites: WeChat DevTools (stable build).
- Clone this repository.
- Open WeChat DevTools → Import → select the
mini_program/directory. The project config (including AppID) is read fromproject.config.json. - Compile. That's it — the generated data under
data/is committed, so the app runs out of the box.
Only needed if you change the sources (word_books/*.csv, the chapter markdown, images, or fonts):
cd scripts
npm install
node build_all.jsThe font subsetting step additionally requires Python 3 with fontTools.
├── app.js / app.json / app.wxss # App entry & global config
├── pages/ # 7 pages: home, books, study, card, review, doc_detail, profile
├── components/ # word-card (swipe gestures), tile, doc-renderer (recursive AST renderer)
├── custom-tab-bar/ # Custom tab bar with inline SVG icons
├── utils/ # storage (ipsm_ keys), audio (TTS singleton), book-loader
├── data/ # Committed build output: word shards, doc ASTs, book meta
├── scripts/ # Build pipeline (Node.js + Python)
├── word_books/ # Word book CSV sources (read-only)
└── assets/ # Logo, document images, subset math fonts
node scripts/build_all.js runs four steps:
| Script | Purpose |
|---|---|
csv_to_json.js |
word_books/*.csv → per-letter .js shards under data/<book>/words/ (only card fields kept, short keys) |
md_to_ast.js |
Chapter markdown → render-ready AST under data/docs/ |
svg_to_png.js |
Chapter SVG illustrations → PNG in assets/images/ |
subset_font.py |
Double-struck/script fonts subset to ~25 KB each, base64-inlined as @font-face |
Build output is emitted as .js modules (not .json) because WeChat's require() only supports .js files.
- IPSM Approach website — the full method in 10 languages, with a live IPA–IPS reference and word search
