Lesson manager now keeps the sentence builder quiz in sync whenever you add, edit, or remove example
sentences.
Sentence builder pulls Cantonese text straight from the lesson and still respects special tokens like 阿明,
十歲, 咗.
0.1.54
Sentence Builder for Lesson 12 now uses 你食咗咩? so the "What did you eat?" question keeps the 咗 token in step
with the lesson.
0.1.53
Fixed the sentence builder test script so the unified sentence tests load again after a syntax error stopped
the bundle.
0.1.52
Audio sync now understands sentence-builder chunks automatically and skips clips that earlier lessons
already provide.
Shared tokenizer keeps the lesson tool and in-browser tests in sync when you add new lessons.
0.1.51
Audio sync now retains sentence builder chunk clips (阿明, åæ²) for Lesson 12 so they aren't flagged
for removal.
0.1.50
The lesson manager now includes an Audio Sync option that generates any missing clips for a lesson and
tidies up files you no longer need.
Updated docs explain how to run the sync command on both Windows and macOS/Linux.
0.1.49
The new lesson manager command walks you through adding, editing, or removing lessons and vocabulary without
touching code — write the blurb in Markdown and the tool takes care of formatting.
Lesson blurbs now render from Markdown on the server, keeping spacing consistent while still letting you
style them from one source of truth.
0.1.48
Lesson 12 introduces question words for who, what, and where with sample answers you can follow.
Fresh audio plus both Vocab and Sentence Builder quizzes let you practice the new Q&A patterns.
0.1.47
Visitors see the welcome homepage first again, with a new `/lessons` shortcut that opens the lesson list
without signing in.
The homepage button now links to `/lessons`, keeping the updated copy while letting guests browse freely.
0.1.46
The homepage now drops you straight into the lessons list even before signing in.
Updated the call to action to say "Go to lessons and get started" so guests know what to do next.
0.1.45
Added Lesson 11: Talking About the Past — introduces 咗 (zo2) for completed actions with everyday verbs.
Lesson 11 tests: Vocab (Multiple Choice) and Sentences (builder) launch from the lesson page and unified
test route.
Audio: Generated new clips for Lesson 11 under audio/lesson011/.
0.1.44
Added Lesson 10: Talking About the Future — introduces 會 (wui5, “willâ€) and plural pronoun forms
like 我哋.
Lesson 10 tests: Vocab (Multiple Choice) and Sentences (builder) now launch from the lesson page and unified
test route.
Audio: Generated new clips for Lesson 10 under audio/lesson010/.
0.1.43
Lesson 9: The lesson page now offers both tests. Start Test shows separate buttons for
Vocab and Sentences.
UI: Updated the Start Test route map to include Lesson 9 sentences.
0.1.42
Lesson 9: Removed vocab items ã€Œå¸æ ¡ã€ and 「返工〠(still available in earlier lessons).
Lesson 9: Added sentence 「我喺舖é 。〠and removed ã€Œä½¢å–ºå¸æ ¡ã€‚ã€.
Audio: New phrase queued for 「我喺舖é 。ã€; cleaned up the old ã€Œä½¢å–ºå¸æ ¡ã€‚〠clip in
audio/lesson009/.
0.1.41
Added Lesson 9: Where Are You? — introduces 喺 (hai2, at/in) and 邊度 (bin1 dou6, where) with vocab and
sentences.
Tests: Sentence Builder added for Lesson 9; Vocab (MC) available via the unified page.
Audio: New clips for key tokens and sentences under audio/lesson009/.
0.1.40
Audio: Reuse shared clips across lessons without duplication. The app now falls back to a common folder and
earlier lessons.
Tooling: Added an audio de-duplication script to clean up redundant files.
0.1.39
Added Lesson 8: Daily Actions — verbs and natural phrases (瞓覺/行路/è·‘æ¥/講嘢) with example
sentences and audio.
Tests: Added both Vocab (MC) and Sentences (builder) for Lesson 8.
0.1.38
Lesson 7: Changed 「佢返å¸ã€‚〠to 「佢放å¸ã€‚〠and refreshed audio. Removed the old clip.
0.1.37
Lesson 7: Updated to 「我返å¸ã€‚〠(was ã€Œæˆ‘åŽ»å¸æ ¡ã€‚ã€) and added 「佢返å¸ã€‚ã€. Audio
regenerated; old clip removed.
0.1.36
Lesson 7: Updated sentence to use 「我返屋ä¼ã€‚〠(replacing 「我去屋ä¼ã€‚ã€) and refreshed
audio. Removed the old clip.
0.1.35
SEO/indexing: Address Google Search Console notices.
Sitemap: Removed /login//verify (noindex) to avoid crawling non-indexable pages.
Canonicals: Use absolute URLs; lessons/tests update absolute canonicals dynamically.
Server: 301 redirects from *.html variants to canonical routes; add
X-Robots-Tag: noindex for login/verify.
UX: Fixed garbled title separator on lesson/test pages (now uses •).
0.1.34
Add admin dashboard (/admin) protected by ADMIN_PASSWORD. View users, scores, and
comments; delete users or edit scores.
0.1.33
Fix: Root page now sends Cache-Control: no-store (and varies by Cookie) so you
land on the correct page after signing in/out without needing a hard refresh.
0.1.32
Homepage: Added a signed-out landing page at / with a clear welcome and next steps. Signed-in
users continue to see the lessons list.
0.1.31
Added Lesson 7: Going Places, introducing 去 (heoi3) with places and natural work phrases 返工/放工,
plus example sentences and audio.
Added Lesson 7 tests.
0.1.30
Auth: Existing users can now request a verification email without being logged in using
POST /api/request-email-verification. Login error now offers a “Resend verification emailâ€
action.
Backend: Resend endpoint added; generates a fresh token and emails via Mailgun.
Frontend: Login screen reveals an email field and resend button when blocked by unverified email.
0.1.29
Auth: Email verification added. Signup requires email and sends a verification link via Mailgun. Login
requires verified email.
Frontend: Signup form adds email; new /verify page verifies tokens.
Docs: Mailgun setup added; sitemap updated.
0.1.28
UX: The page header is now sticky across all pages so it remains visible while scrolling.
0.1.27
Home: Lesson cards now show separate last scores for Vocab and Sentences when both types exist.
Home: Improved score formatting with spacing and a heading.
Lesson: The header now shows split last scores by type (Vocab/Sentences).
Backend: Added mode to saved test results and a new API
GET /api/my/test-results/latest-by-mode.
Frontend: Tests include their mode in posted results.
0.1.26
UX: Lesson page test buttons now stack vertically (Vocab above Sentences) for clearer layout.
0.1.25
Fix: The test page’s “Back to Lesson†link now shows and links to the correct lesson based on the
URL’s lesson parameter.
0.1.24
Consolidated multiple test pages into a single dynamic page at
/test?lesson=<ID>&mode=<mc|sb>.
Updated lesson Start Test links; legacy /test2, /test3, etc. now redirect.
Updated sitemap and README to reflect the unified route.
0.1.23
Added Discussion to lesson pages: users can comment and reply. Comments are stored in SQLite.
New API: GET/POST /api/lessons/:id/comments.
0.1.22
Refactor: shared utilities and generic test engines reduce duplicate code across tests.
Start Test links now use a small route map.
0.1.21
Improved documentation: clearer in-code comments across the app (no user-visible changes).
0.1.20
Added Lesson 6: Eating and Food, introducing 食 (sik6) and common foods with example sentences.
Added Lesson 6 tests: /test6 (Vocab) and /test6s (Sentences).
Updated sitemap with Lesson 6 and its test routes.
0.1.19
Improved audio: test pages now preload their audio just like lessons, reducing delay before playback.
Added a visible “Loading audio…†indicator on test pages while sounds prepare.
0.1.18
Refactor: Reused Lesson 3 sentence builder for Lesson 5 Sentences to unify behavior and fix double audio.
0.1.17
Lesson 5 Sentences: prevent a synthetic click after drop from replaying audio; audio now plays once per
drop.
0.1.16
Lesson 5 Sentences: fixed double audio when dragging into the drop area. Audio now plays once when the token
lands.
0.1.14
Lesson 5 Test combined (vocab + sentences) and favicon added.
0.1.15
Split Lesson 5 tests into two pages with buttons on the lesson page.
Added `/test5` (Vocab) and `/test5s` (Sentences); improved sentence tokenization.
0.1.13
Added Lesson 5: Talking about Family, with audio.
New Lesson 5 Test (multiple-choice) at /test5.
Updated sitemap and documentation; bumped version.
0.1.12
Added sitemap.xml and robots.txt for search engines.
Improved SEO: meta descriptions, canonical URLs, and social tags across pages.
0.1.11
Added Lesson 4 Test (sentence builder)
0.1.10
Removed audio link preloads; use hidden <audio preload="auto"> and fetch()
to warm cache to avoid preload credential/as warnings.
0.1.9
Fix: replaced <link rel="preload" as="audio"> with as="fetch" to avoid
unsupported-as warnings and improve audio preloading reliability.
0.1.8
Lesson blurbs are now provided by the backend for Lessons 1, 3, and 4; the lesson page renders
lesson.blurb from the API.
0.1.7
Added Lesson 4: Saying “I Have …†with 有 (jau5), classifiers 張/支, and example sentences. Audio
included.
0.1.6
Fix: mobile tap audio could still be wrong due to the synthetic click overriding the intended token;
suppressed click and added guards.
0.1.5
Fix: mobile tap sometimes played the wrong token; audio playback is now guarded to prevent race conditions.
0.1.4
Lesson 2 & 3 tests: tap tokens to move on mobile; drag still works.
Playing audio now triggers when tapping a token into the drop area on mobile.