Skip to content

Repository files navigation

IPSM Words logo

IPSM Words — WeChat Mini Program

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.

Features

  • 📚 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

Getting Started

Prerequisites: WeChat DevTools (stable build).

  1. Clone this repository.
  2. Open WeChat DevTools → Import → select the mini_program/ directory. The project config (including AppID) is read from project.config.json.
  3. Compile. That's it — the generated data under data/ is committed, so the app runs out of the box.

Rebuilding the data

Only needed if you change the sources (word_books/*.csv, the chapter markdown, images, or fonts):

cd scripts
npm install
node build_all.js

The font subsetting step additionally requires Python 3 with fontTools.

Project Structure

├── 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

Data Pipeline

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.

Related

  • IPSM Approach website — the full method in 10 languages, with a live IPA–IPS reference and word search

Releases

Packages

Contributors

Languages