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.