The Language I Wouldn't Name
A few weeks ago I wrote a post about getting Sesla ready for a third language, and I was deliberately cagey about which one it was. I said it didn't matter, because the post was about the refactor, not the pick. That was true. But people noticed, and a couple of you emailed to guess. So: it's Spanish. It was always going to be Spanish. This is the post about what filling it in actually took, now that the scaffolding from last time is holding weight.
1,378
Symbols in Catalog
167
Duplicate Tiles Cut
5,100+
Tests Passing
Why Spanish first of the "rest of the world" languages? It's not complicated. It's one of the most-spoken languages on the planet, a lot of the families who'd benefit from an AAC app speak it, and — honestly — I can lean on people. I can find native speakers to tell me when something sounds like a robot. You can't say that about every language, and a communication app that sounds slightly wrong is worse than useless. It teaches the wrong thing.
The grammar is the easy part to underestimate
On paper Spanish looks friendly. Mostly phonetic, familiar alphabet, lots of cognates. Then you actually try to generate sentences from tapped symbols and the friendliness evaporates.
Everything has a gender. The doctor is el doctor or la doctora depending on who you mean, and the adjective has to agree, and the article has to agree, and if you pluralize it they all have to agree again. Verbs conjugate across person and tense the way Turkish does — Sesla already had a morphology engine, so that part had a home — but Spanish throws in the personal "a", that little word that shows up before a direct object only when the object is a person. "I see the television" gets no a. "I see mom" gets one: Veo a mamá. Miss it and you sound off in a way a native speaker clocks instantly even if they can't tell you the rule.
None of this is exotic if you grew up with it. All of it is a landmine if your job is to make a board of tappable tiles produce a sentence that a six-year-old's speech therapist won't wince at.
The slash problem
Here's a small one that I'm weirdly proud of fixing. Because
Spanish words carry gender, a lot of tiles in the catalog were
labelled with both forms jammed together — Doctor/a,
El/Ella, Jugador/a de béisbol. That's
correct as a dictionary entry. It's terrible as the face
of a button a kid is supposed to read.
The fix is a split personality. The tile face now shows
the clean form — just Doctor — while the engine
underneath still sees the full Doctor/a and uses the
slash to pick the right gender when it builds the actual sentence.
Display-only cleanup on the surface, full information underneath.
The button looks like a word a human would write; the grammar
engine keeps the bit it needs.
The catalog was a hoarder
The less glamorous half of this whole effort was data cleanup. When you grow a symbol catalog across three languages over months, you accumulate junk. Tiles get added twice. A concept that needed its own tile in one language gets a redundant copy in another. And in my case, a pile of distinctly Turkish foods — simit, pide, ayran — were cheerfully showing up on the Spanish board, which is a bit like opening a Mexican kids' app and finding a tile for clotted cream.
So I did two dedup passes — one on the Spanish side, then a matching one on Turkish because the same mess existed there too. Some tiles got deleted outright; others got flagged as "show this one only in its home language." The visible catalog went from north of 1,500 symbols down to 1,378, and the boards got noticeably less cluttered without losing anything anyone actually uses.
Two tiles that say the same thing in the same language, sitting next to each other, is the kind of bug that no test catches and every real user sees in the first thirty seconds.
The deletions that hid from my own phone
This one cost me an afternoon and deserves a warning label for anyone building something similar. I did all this careful cleanup, ran the tests, everything green, deployed it to my actual phone to look at it — and the duplicates were still there. Staring at me.
The catalog ships as a data file that the app loads into its local database once, the first time it runs. After that it assumes the database is the source of truth and doesn't bother re-reading the file. Great for performance. Terrible when the whole point of your change is that the file now has fewer things in it. Adding a row would have shown up. Removing rows is invisible, because nothing was telling the database "hey, go delete the stuff that's no longer in the file."
The fix was two parts: bump the version number that forces the app to re-read the catalog, and add a cleanup pass that actually prunes rows the file no longer mentions — and have it run on every refresh, not just on fresh installs. Then the irritating part: proving it works on a phone that's upgrading, not a clean install, because those are two very different code paths and only one of them was my actual problem. Pull the database off the device, open it, count the rows, confirm the dead tiles are gone. They were.
A Beta sticker, up and then down
When Spanish first went in, I put a little honest marker on it — a "Spanish (Beta)" chip in onboarding and settings — basically a sign saying "this works but I'm not done, tell me if something's wrong." I think those markers matter. It's a medical-adjacent tool; pretending something is finished when it isn't is the wrong kind of confident.
But over these few weeks the gaps got filled — the grammar holds, the catalog's clean, the sentence output reads right across thousands of generated test sentences I've sat and read by hand — and the sticker started to feel like false modesty instead of honesty. So this week it came down. The widget and its tests are deleted. Spanish is just a language the app speaks now, not a language the app apologizes for.
What's next: actual humans
Everything up to here is me, the tests, and a couple of AI models I use to peer-review each other's work and be deliberately harsh about it. That's a good filter. It is not the same thing as a person who has spoken Spanish their whole life reading a sentence their kid might tap out.
That's the next step, and it's happening now: I'm putting it in front of native speakers and asking them to be honest about anything that sounds even slightly translated. If you speak Spanish — Latin American especially, since that's the variant I've focused on — and you'd be up for poking at it and telling me what's off, I'd love the help. The app gets better the moment someone who'd never read this devlog opens it and frowns at a tile.
The test suite is north of 5,100 now, the boards are cleaner than they've been in months, and Sesla speaks three languages without an asterisk on any of them. Three weeks ago I wouldn't tell you which one was coming. Now it's just here.