manueljpconde takes Mike multilingual for Europe

The mikeEU fork now speaks English, Portuguese, Spanish, French, and German across the main app, with English as the safety net everywhere.

i18n

manueljpconde built the localization layer from scratch rather than reaching for an off-the-shelf library - a thin wrapper over the browser's native formatting tools, small enough for a lawyer's tech team to actually audit. Users get a language switcher in the sidebar, and the choice follows them: a guest who picks Portuguese before signing up stays in Portuguese after, and signed-in users have their preference saved to their profile.

A follow-up pass extended coverage from the login screens into the parts that matter day-to-day - the chat view, projects, workflows, document review screens - adding roughly 500 new translated strings. manueljpconde flags honestly that the translations themselves were produced by a model and want a native-speaker pass before they reach paying clients, and that keeping five locales in sync is an ongoing tax even with the included validator.

So what Worth a look for any firm or vendor eyeing EU rollout - this is the cleanest path to a multi-language Mike anyone has shipped so far.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

5 commits from manueljpconde/mikeEU, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
346b8197 feat: add localization support for en/pt/es/fr/de (#4) Manuel Conde 2026-05-10 ↗ GitHub
commit body
Adds i18n infrastructure (thin custom + native Intl, no library) covering
auth pages, sidebar nav, language switcher, and common labels across the
five supported locales. English is canonical fallback at every layer.

- Schema: user_profiles.locale text column with named CHECK constraint
- Backend: PATCH /user/profile accepts/persists locale with allowlist validation
- Frontend: server-side locale resolution (cookie -> Accept-Language -> en)
  in root layout; client I18nProvider for runtime switching; ProfileLocaleSync
  applies authenticated profile.locale one-way
- Cookie 'mike_locale' (non-httpOnly, Path=/, Max-Age=1y, SameSite=Lax)
- Catalog validator with structural + placeholder + plural-shape checks
- 51 automated tests (46 frontend + 5 backend) on pure logic; React surface
  covered manually
- Coupled allowlist triple flagged: schema CHECK / backend SUPPORTED_LOCALES
  / frontend SupportedLocale must move together

Spec:  https://github.com/manueljpconde/mikeEU/issues/4#issuecomment-4414976968
Plan:  https://github.com/manueljpconde/mikeEU/issues/4#issuecomment-4414987693
GO:    https://github.com/manueljpconde/mikeEU/issues/4#issuecomment-4415157201

Closes #4
cb6b9a2f fix(i18n): four review findings on PR #10 Manuel Conde 2026-05-10 ↗ GitHub
commit body
1. npm test scripts: replace quoted-glob args (which tsx received literally
   and didn't expand on bash 3.2) with a Node-based test discovery script
   per repo. Both `npm test --prefix frontend` and `npm test --prefix
   backend` now run the suites correctly.

2. Validator now rejects duplicate top-level JSON keys via a state-machine
   raw-text scan (findDuplicateTopLevelKeys), restoring the contract
   promised in spec rule 4. JSON.parse silently dedupes; this catches
   editor mistakes before runtime sees the deduped catalog.

3. Signup persists the active i18n locale alongside name/organisation
   so a guest who selected pt/es/fr/de doesn't get snapped back to en
   when ProfileLocaleSync applies the (default 'en') profile after
   signup.

4. Client setLocale now syncs document.documentElement.lang via useEffect
   on locale change. SSR sets it once; the effect keeps it in sync after
   user-driven switches.

Tests: frontend 55/55 (added 9 in findDuplicateTopLevelKeys.test.ts),
backend 34/34. Both `npm test` and `npm run lint:catalogs` runnable
without manual glob expansion.
46c379ca Merge pull request #10 from manueljpconde/feature/4-implement-localization-for-supported-app-loca Manuel Conde 2026-05-10 ↗ GitHub
feat: add localization support for en/pt/es/fr/de
93b5b2bd Expand i18n coverage across main surfaces Manuel Conde 2026-05-10 ↗ GitHub
b6a1762d Merge pull request #14 from manueljpconde/codex/i18n-main-surfaces Manuel Conde 2026-05-10 ↗ GitHub
[codex] Expand i18n coverage across main surfaces

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-219.md from inside the repo you want the changes in.

⬇ Download capture-thread-219.md