2026-05-29
Why 'How Are You?' Has Three Different Translations in Vietnamese
Yesterday I wrote about the idea. This morning I'm writing about the thing that actually exists.
If you missed the first post — the short version is: I've spent 12 months living between Da Nang and Chiang Mai, and every translation app I used kept giving me technically correct words in completely wrong relationships. Vietnamese, Thai, Japanese — these languages don't work like English. Who you're talking to changes everything. The pronouns, the particles, the entire tone. No app I tried accounted for that. So I decided to build one that does.
I called it VibeTalk in that first post. Working title, I said. The actual name came faster than expected.

It's Sayso now. You're saying something. You're saying it your way, to the right person. That felt like the name.
What changed overnight
In the first post I had a concept, a design, and a Cursor prompt. By end of day I had a working app.
That's not me being dramatic about velocity. That's just what happens when the problem is sharp enough and the scope is disciplined enough. The core loop I defined — pick a relationship, speak, get a contextually appropriate translation — that's what I built. Nothing more, nothing less.
Here's what shipped in day one:
The character grid works. You open the app, you see your relationship types laid out as avatar cards. Stranger, Service, Friend, Partner. The presets differ by country — Thailand, Vietnam, Indonesia, Japan, and English are all in. Tap a card and you're in the translation screen instantly.
The translation is context-aware. This is the whole point. The AI prompt carries the relationship type, the target language, the cultural register. When you pick Partner for Vietnamese, the output uses em and anh appropriately. When you pick Stranger for Japanese, you get full teineigo — です/ます — not the casual plain form that would land somewhere between odd and rude. The words are right and the relationship is right.
Voice input is live. iOS Speech Framework via the speech_to_text Flutter package. Tap the mic, speak, get the translation. No extra model to download, no API cost on the STT side. It just works on iPhone.
The Learn tab is in. Every translation bubble has a bookmark icon. Tap it and the phrase saves as a flashcard. The Learn tab shows a badge count of pending cards. Flip through them — see the phrase, tap to reveal the meaning, mark it as learned or push it back to review. Five minutes of actual vocabulary from conversations you actually had. That's the whole idea.
The name change is reflected everywhere. VibeTalk is dead. Sayso is the product.
Japan and English made the cut
In the original design post I had Thailand, Vietnam, and Indonesia as the v1 markets. Overnight I added Japan and English.
Japan because the formality system is arguably the most complex of all of them — keigo has sub-levels that most learners never fully internalize, and I wanted Sayso to handle the Senpai/Elder tier that genuinely has no equivalent in Western languages. There are a lot of nomads in Japan. There are a lot of people dating Japanese partners. This felt necessary.
English because it rounds out the product logic. English doesn't have grammatical formality levels the way Asian languages do, but register is real — the gap between how you write to a client versus how you text a close friend is significant, especially for non-native speakers who often oscillate between accidentally stiff and accidentally blunt. Sayso can help with that too.
What the build actually felt like
I'll be honest: I've shipped a lot of products. Some took months. Some took weeks. A few took a single focused sprint.
This one felt different because the problem was so personally felt. Every design decision had a real memory attached to it. The Partner preset for Vietnamese exists because I remember running a phrase through Google Translate in Da Nang and handing my phone over and watching it land completely flat — words that should have been warm coming out clinical. The Service preset for Bali exists because I've sat in enough negotiation conversations with villa managers to know that tone is everything and the wrong register can end a conversation before it starts.
When the problem is that real, the product decisions are fast. You're not guessing what users want. You are the user.
What's not in yet
Custom characters — the ability to add a specific person and have Sayso remember context across conversations with them — is Phase 2. The data model is there, the UI shell is there, but the history-based personalization isn't wired up yet.
The bidirectional translation toggle — where you flip to "they're speaking" mode and hand the phone over — is scaffolded but not fully polished.
Both of those are next.
The thing that keeps pulling me forward
There's a version of Sayso that's a translation utility. Useful, ships fast, gets a few downloads.
And then there's the version I keep thinking about — where your custom characters accumulate context over time. Where Sayso starts to remember that you and P'Nong at the coffee shop always joke around, so the translations lean warmer and more casual without you having to think about it. Where it stops feeling like a tool and starts feeling like the social layer you wish you'd had since day one of living abroad.
That's where this is going. Day one just had to exist first.
If you're reading this
I built this for nomads living in Southeast Asia and Japan — people who are deep enough in a culture to care about getting the relationship right, not just the words. If that's you, I'd genuinely love to hear what you think.
The app is early. It will get better fast.