Summary
LanguagePreferences.jsx is a complete settings surface with tests, but it is not routed or linked from Settings.
Problem
Translation and language preference management is unreachable from the product chrome.
Evidence
client/src/pages/LanguagePreferences.jsx (~874 LOC).
LanguagePreferencesApiClient.test.jsx exists.
- Page is not registered in
ProtectedRoutes.jsx.
- Server
translationRoutes.js exposes preference/translation endpoints.
Proposed fix
- Add a protected route and Settings/Navbar entry.
- Wire save/load of language prefs to translation APIs.
- Cover happy/error paths with tests.
Acceptance criteria
Likely files
LanguagePreferences.jsx, ProtectedRoutes.jsx, Settings.jsx, translationRoutes.js, translation controllers
Estimated effort
~220 LOC
{
"assignedAt": null,
"lastActivityAt": null,
"remindersSentAt": {},
"reminder12SentAt": null,
"reminder18SentAt": null,
"expiredAt": null,
"welcomeSentAt": null,
"welcomeSource": null,
"guidance": {},
"processedClaimCommentIds": [
5441321909,
5482266758
],
"processedUnclaimCommentIds": [
5463317803
],
"manualAssignment": false,
"authorPriorityExpiresAt": null
}
Summary
LanguagePreferences.jsxis a complete settings surface with tests, but it is not routed or linked from Settings.Problem
Translation and language preference management is unreachable from the product chrome.
Evidence
client/src/pages/LanguagePreferences.jsx(~874 LOC).LanguagePreferencesApiClient.test.jsxexists.ProtectedRoutes.jsx.translationRoutes.jsexposes preference/translation endpoints.Proposed fix
Acceptance criteria
Likely files
LanguagePreferences.jsx,ProtectedRoutes.jsx,Settings.jsx,translationRoutes.js, translation controllersEstimated effort
~220 LOC
{
"assignedAt": null,
"lastActivityAt": null,
"remindersSentAt": {},
"reminder12SentAt": null,
"reminder18SentAt": null,
"expiredAt": null,
"welcomeSentAt": null,
"welcomeSource": null,
"guidance": {},
"processedClaimCommentIds": [
5441321909,
5482266758
],
"processedUnclaimCommentIds": [
5463317803
],
"manualAssignment": false,
"authorPriorityExpiresAt": null
}