paiseh apps.paiseh.sg
← All apps

Speak Cantonese

一日一句 — one day, one phrase

A daily Cantonese phrase with pronunciation, translation and text-to-speech. One phrase a day, every morning at eight — the pace language actually sticks at.

Status
Flutter port
Platforms
iOS · Android
Role
Port from the original Swift app
Source
PaisehSG/speak-cantonese (private)
What it does
Hear it said properly Cantonese text-to-speech, because romanisation only gets you so far with a tonal language.
Report a bad phrase A way to flag what's wrong — not optional for a language with this much regional variation.
A phrase a day Pronunciation and translation, delivered by notification at eight in the morning, with every past phrase kept in a history view.
Offline history Phrases arrive through Cloud Functions with App Check and cache locally in Realm, so today's phrase and the archive work without signal.

One Cantonese phrase a day, delivered at 8am. Not a course, not a streak to defend — just a phrase, its romanisation, its meaning, and a button to hear it said properly.

How it’s built

A Flutter port of an original Swift app, so one Dart codebase now serves both iOS and Android. Phrases are served through Firebase Cloud Functions with App Check verification, cached locally in Realm so the history view and today’s phrase work offline. State is provider-based, with services cleanly separated: phrase fetching, text-to-speech, notifications and storage each stand alone.

The original iOS app was written in Swift by Nico Liu; this is that app, rebuilt to run everywhere.