April 28, 2026 · Gökhan Oğuz

Walking the English Board, One Screenshot at a Time

Tests were green. The English audit shipped a few days ago. On paper, EN was at parity with TR. Then I actually opened the app, switched to English, and started scrolling. Oh.

11

Missing Icons

81

Labels Lowercased

22

Baked-Text Strips

709

Tests Still Green

Why is everything Capitalised

Every English label was Title Case. Boy. Girl. Apple. Looks like a children's book. Every commercial AAC app I bothered to check uses lowercase, and there's an actual reason — lowercase letterforms have more distinctive shapes, which matters for early readers and anyone with visual processing differences. Capitals all look like rectangles.

So, bulk lowercase script. Easy. Ten seconds later half the alphabet card was broken (a, b, c, d, e…), I was i, Sunday became sunday, Easter became easter. Reverted, added a skip list, ran it again. AAC apps care about edge cases more than most software does.

The default board was Turkish

Switched to English. Opened Boards. Default board: Turkish. Several tiles on it were marked "hide on English" so they showed up as gray holes. Welcoming.

Turns out the board provider was just returning "the first default board it finds", no matter what language you'd picked. Three lines to make it language-aware. The kind of bug you can only catch by actually flipping the toggle.

Why does every tile say "he he"

AAC symbols traditionally have the word baked right into the picture. But Sesla also shows the word as a label below the icon. So every tile read "he he" or "need need" or "my my". I'd been careful about this on Turkish. I had been less careful on English.

Two flavours of bug:

Wrote a strip script. Ran it. Half the cards went blank because some symbols are text-only by design — the symbol for and is just the word "and" in a coloured rectangle, and stripping the text leaves you with a coloured rectangle. Reverted, rewrote the script to only strip if the SVG had actual glyph content underneath. Text-only cards survive; redundant overlays die. Better.

Eleven icons pointed at nothing

Some tiles came up as broken-image placeholders: boy, neighbor, we, they, good night, bored, calm, to throw… The SVGs existed. Right there on disk. The JSON just had empty image paths pointing at nothing.

Eleven empty paths filled in. The kind of bug your test suite is genuinely incapable of catching — schema is valid, FK constraints satisfied, data is just blank. Eyes only.

The version-bump dance

Quick aside on shipping data fixes. The bundled symbol JSON has a version number. The app remembers what version it last seeded. Bump the number, re-seed on next launch, custom user symbols are preserved. Today the number went from v34 to v37 across three commits. Boards work differently — they only seed once ever, so they don't clobber user edits, which means board changes need their own update path. Today's fixes were symbol-level. Lucky.

How the day actually went

The loop: ask Copilot for a screenshot, look at it, list every wrong thing, next category, repeat. Twelve categories. Twelve screenshots. A growing list of "fix this later". Then one batched fix at the end that covered everything that wasn't a one-off.

A few cards still bother me. need in the helper row is just the word "need" in a green rectangle. Not great. But replacing it with a glyph means deciding what "need" looks like as a picture, and that's a real design call, not a sweep. Logged. Tomorrow.

Tests catch logic bugs. Eyes catch design bugs. For an app whose entire job is visual communication, you really can't skip the second one.

Tomorrow

English morphology gets the same depth pass Turkish already got. Right now the EN engine does third-person-singular, 25 irregular pasts, and plural triggering — enough for a basic sentence. Turkish does possessive agreement, purpose clauses, dative for movement verbs, and reads like an actual Turkish person talking. The English side needs to feel like that too before any launch conversation makes sense.