I opened a Japanese Shorts video in YouTube Studio. First frame, top of the app screen, it said: "ページが見つかりません" — page not found.
The video had rendered fine, uploaded fine, and was picking up views. But the screen frozen inside it was a 404. And the link in the description pointed confidently at mbti.ootssu.com/ja.
Let me ask you one thing up front. Does your automation pipeline check that the links it produces actually open? I had to answer no.
I clicked the link
mbti.ootssu.com/ja returned a 500. /ko and /en were fine. I opened the app and the reason was simple — it only shipped ko and en. LOCALES = ['ko', 'en']. There was never a Japanese version.
Yet a Japanese Shorts channel exists, posts daily, and links /ja in every description. A video whose screen recording is in Korean and whose link points at a non-existent Japanese page was already going out to viewers.
So what about the other apps?
This is where my stomach dropped. I run dozens of these apps. This one couldn't be the only one. So I pulled every URL from the manifest and knocked on /ja one by one.
200 ja works ............ 10
500 server crash ........ 15
404 cleanly absent ....... 823 of 33 apps were broken on /ja. Fifteen of them weren't even a clean 404 — they were throwing 500s, full error pages. Whichever one a Japanese video linked, the viewer met a server error.
I decided to call this locale rot. Each app supports a different set of locales (some ko-only, some ko/en, a few through ja), but the content pipeline assumed "every app supports four languages" and stamped out /ja links mechanically. The app's reality and the pipeline's assumption drifted apart, quietly, while no one was looking.
The fix: what would you do here?
Reviving the dead links meant the app needed a Japanese edition. It's an SEO dictionary with compatibility content (summary, love, friendship, work, strengths, frictions, tips) for all 136 type pairings. Add 16 type pages and that's 152 JSON files to translate.
Here's the fork. Would you hand-translate 152 files, or find another way?
Reading the English content, I noticed something — the English wasn't hand-written, it was a template product. The sentence skeletons were fixed, and only per-type phrases (that type's cognitive lens, how it shows care, its strengths, its friction points…) were slotted in.
So instead of translating, I did this:
- Regex-extract the per-type phrases back out of the 136 English files → a 9-slot dictionary per type.
- Cross-check overlapping slots between files, confirming zero mismatches (proof the extraction was correct).
- Translate only the 144 slots (16 types × 9) into Japanese.
- Feed the slots into a single Japanese template and regenerate all 136.
The translation work shrank from 152 documents to 144 short phrases, and the output was far more consistent. Schema validation, type check, build all passed; live /ja was back to 200.
The real lesson isn't the translation trick
The trick is a side quest. The core is this.
Automation, if it never checks itself, will lie with confidence. The video rendered fine, the upload succeeded, the dashboard was green. No stage of the pipeline asked "does this link actually return 200?", so no one knew. The bigger you scale, the more that silence costs — because one unchecked assumption gets copied to 33 places.
Audit your own pipeline
If you stamp out apps or content automatically, check three things today.
- Do the external links actually open? Does anything verify the HTTP status of the URLs your pipeline builds? (One line:
curl -o /dev/null -w "%{http_code}".) - Does your locale/variant matrix match what's actually deployed? Is there an implicit "everything supports every locale" baked in somewhere?
- Does the render reflect the live state? Do the screens your videos, thumbnails, and OG images capture match what's actually being served right now?
The remaining debt
Honestly, it's not all fixed. The 404 frame baked into already-uploaded videos is a screen recording — fixing the app won't change it; those need re-rendering or taking down. The other 22 broken apps remain, along with the pipeline that stamped links while ignoring app locales in the first place. The root fix is making the pipeline link only the locales an app actually supports.
So one last question. Is there a link in your own automation empire that nobody has ever clicked? Go curl exactly one, right now. I'm curious what you get.