A local web-based vocabulary review tool for MaiMemo (墨墨背单词) on desktop.
It works as a one-way sync: pulls your daily study tasks from MaiMemo's open API, lets you review them locally, and stores all feedback locally — nothing is written back to your MaiMemo account.
- Daily task sync — pulls today's study plan from MaiMemo, filtering out words already finished on your phone or locally.
- Card-based review — press
Spaceto reveal the definition; four-level feedback (1know /2vague /3forgot /4familiar). - Automatic re-review — words marked as forgotten are requeued automatically until everything is correct.
- Pronunciation — TTS audio via Youdao dictvoice (American English first, falls back to British English).
- Statistics dashboard — streak (doesn't break if you skip today but studied yesterday), total words studied, error rate, today's count, and an 8-week heatmap calendar.
- Wrong-word review — words are ranked by how often you marked them "forgot/vague"; pick any and re-review with one click.
- Fallback definitions — when MaiMemo returns no interpretation (common for accounts without custom definitions), it automatically falls back to Youdao's public dictionary, including phonetics.
- Node.js ≥ 18 (no other dependencies, no build step)
Windows — double-click start.bat.
macOS / Linux:
./start.shOr manually:
node server/index.jsThen open http://localhost:8765 in your browser (port 8765).
- Open the Settings page and paste your MaiMemo API token.
- Go to Review — today's tasks are loaded (phone-finished and locally-finished words are skipped).
- Review each card: press
Spaceto reveal the definition, listen to the pronunciation, then rate it with1(know) /2(vague) /3(forgot) /4(familiar). Forgot words are re-queued until you finish. - Check the Stats and Review tabs for your dashboard and wrong-word review.
Your MaiMemo account must have auto-sync enabled in the app for the study data API to return data.
All data is stored locally in the data/ directory (gitignored):
| File | Content |
|---|---|
data/config.json |
API token |
data/study.json |
Study records (atomically written) |
data/interpretations.json |
Definition cache |
| Endpoint | Method | Description |
|---|---|---|
/api/config |
GET / POST | Read / save API token |
/api/today |
GET | Today's task list |
/api/progress |
GET | Study progress |
/api/feedback |
POST | Submit a feedback rating |
/api/interpretation?voc_id= |
GET | Definition (cached, with Youdao fallback) |
/api/reset-today |
POST | Clear today's task feedback and re-review everything |
/api/stats |
GET | Dashboard statistics |
/api/review |
GET | Wrong-word review list |
server/index.js HTTP server, routing, static files
server/maimemo-api.js MaiMemo API wrapper (rate-limited serial queue)
server/store.js JSON storage + statistics aggregation
public/index.html Single-page UI
public/style.css Dark minimal card style
public/app.js Frontend logic
data/ Local data (gitignored)
- Feedback is not written back to MaiMemo — the open API has no endpoint for submitting study feedback, so words remain "unfinished" on your phone. This is a hard API limitation; the design intentionally follows one-way sync.
- Study data API is in public beta — the official docs state it may change or become unavailable at any time.
- MaiMemo interpretations return user-created definitions only; for accounts without them, the Youdao fallback is used (this is the normal case).
This is an unofficial tool. It uses MaiMemo's public open API and Youdao's public dictionary endpoints. All data stays on your machine. Use it at your own risk and follow MaiMemo's platform terms.