.js` there, plus `navi/locales.py` on the backend (and the
+ same slug in `navi_users.locale_override` constraints on the client side).
+- Lists of options or nav items must be **computed**, not module-level
+ constants, or their labels freeze in the language that was active at import.
+
+The backend side is `navi/locales.py` (`normalize_locale`, `effective_locale`),
+mirroring the frontend's normalisation: `en-US`/`en_US` → `en`, anything not
+shipped → `None`.
+
+## Translation status
+
+Phase 1 shipped the framework and the language block only. Everything else is
+still hard-coded English and is translated area by area, biggest first:
+
+| Area | Strings | Status |
+|---|---|---|
+| `settings.*` | ~118 | language block only |
+| `artifacts.*` | ~45 | pending |
+| `sidebar.*` | ~29 | pending |
+| `messages.*` | ~27 | pending |
+| `chat.*` | ~21 | pending |
+| `ui.*` | ~20 | pending |
+
+The remaining strings are counted in templates (text nodes, `placeholder`,
+`title`, `aria-label`, `label`, `alt`) plus keyed strings in `
+
+
diff --git a/webclient/src/components/ui/LoginScreen.vue b/webclient/src/components/ui/LoginScreen.vue
index 5ef0943..9a25f4e 100644
--- a/webclient/src/components/ui/LoginScreen.vue
+++ b/webclient/src/components/ui/LoginScreen.vue
@@ -4,7 +4,7 @@
Welcome to Navi
Your personal AI assistant
-
+
Login with GNEXUS
@@ -12,9 +12,12 @@