Conversation
WalkthroughThis PR introduces anonymization badge rendering for sensitive data, swaps security icons for detective/incognito icons, enables auto-save for logo uploads, and adds a "custom_logos" folder with associated permissions across Directus sync and frontend components. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 5 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 15
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
echo/frontend/src/components/settings/WhitelabelLogoCard.tsx (1)
91-147:⚠️ Potential issue | 🟠 MajorAdd inline error feedback for upload/remove mutations.
Auto-upload makes toast-only errors easy to miss. Please surface failures inline (Mantine
Alert) near the FileInput.💡 One possible pattern
+ const [logoError, setLogoError] = useState<string | null>(null); const uploadMutation = useMutation({ ... onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["users", "me"] }); setFile(null); + setLogoError(null); toast.success(t`Logo updated successfully`); }, onError: () => { + setLogoError(t`Failed to upload logo`); toast.error(t`Failed to upload logo`); }, }); return ( <Card withBorder p="lg" radius="md"> <Stack gap="md"> + {logoError ? ( + <Alert color="red" variant="light"> + {logoError} + </Alert> + ) : null} ... </Stack> </Card> );As per coding guidelines, surface UI mutations with inline feedback: pair toasts with contextual Mantine Alert components inside modals/forms for errors or warnings.
echo/frontend/src/locales/it-IT.po (1)
8-8:⚠️ Potential issue | 🟡 MinorLanguage header says
en-USbut this isit-IT.po.Line 8 has
"Language: en-US\n"— should be"Language: it-IT\n". Likely a pre-existing issue from the initial file setup, but worth fixing to keep metadata accurate.
🤖 Fix all issues with AI agents
In `@echo/directus/sync/collections/folders.json`:
- Around line 2-6: The JSON contains a duplicate root-level folder entry with
"name": "custom_logos" (this diff adds _syncId
"416965c6-7695-4235-8322-8515c9a05820"), which will create a third ambiguous
root folder—remove this duplicate and keep a single canonical root entry for
"custom_logos"; specifically, delete the added object (the one with parent: null
and _syncId "416965c6-7695-4235-8322-8515c9a05820") or merge any unique metadata
into the existing canonical "custom_logos" record so only one root folder with
name "custom_logos" remains in folders.json.
In `@echo/frontend/src/components/common/RedactedText.tsx`:
- Around line 87-94: The conditional in the RedactedText component is redundant
because both branches return identical JSX; simplify by removing the if-check
and directly returning <span className={className}>{rendered}</span> where
`rendered` comes from useMemo(parseRedactedText(children)); update the component
body to compute `rendered` (via useMemo and parseRedactedText) and then return
the single span using `className` and `rendered`.
In
`@echo/frontend/src/components/conversation/ConversationChunkAudioTranscript.tsx`:
- Around line 69-74: In the ConversationChunkAudioTranscript JSX where the
ternary renders status spans (the branch using chunk.error / !chunk.transcript
and the span with className "italic text-gray-500"), replace the hardcoded
Tailwind color utility with a theme CSS variable token (e.g., use a class that
applies color: var(--color-text-muted) or Tailwind arbitrary value referencing
the token) so the status text uses the theme token instead of text-gray-500;
ensure the token name you reference (for example --color-text-muted) exists in
the global CSS/theme and update both span occurrences (the "Unable to process
this chunk" and "Transcribing...") so they consistently use the token while
keeping the italic utility class and the rest of the markup (including
RedactedText) unchanged.
In `@echo/frontend/src/components/participant/UserChunkMessage.tsx`:
- Around line 105-115: The Paper message bubble currently hardcodes its
background with the utility class bg-gray-100; replace that hardcoded color with
a CSS theme token and update the Paper className to use the token-based
background instead (e.g. remove bg-gray-100 and reference a CSS variable like
--color-surface in the className or inline style). Update your theme/stylesheet
to ensure the token (e.g. --color-surface) is defined for the app and used for
message bubbles, and keep other utilities (my-2, rounded-*, border-0, p-4)
unchanged; verify rendering in UserChunkMessage (the Paper component rendering
chunk.transcript) after the change.
In `@echo/frontend/src/components/project/ProjectPortalEditor.tsx`:
- Around line 1223-1226: Replace the hardcoded Tailwind class on the
IconInfoCircle (currently using className="text-gray-400") with a CSS-variable
based color so theme switching works; locate the IconInfoCircle usage in
ProjectPortalEditor and set its color via a style or class that references the
Mantine/theme CSS variable (e.g. use style={{ color:
'var(--your-theme-color-variable)' }} or a utility class that maps to that
variable) instead of "text-gray-400", ensuring the variable used matches the
app's existing theme variables.
In `@echo/frontend/src/components/settings/WhitelabelLogoCard.tsx`:
- Around line 84-88: The file input remains selected after a failed auto-upload,
preventing re-selecting the same file; update the upload failure path to clear
the selected file so users can retry. In the upload mutation's onError handler
(the uploadMutation used in handleFileChange) call setFile(null) or clear the
input's value (via the input ref) to reset the FileInput, or add the UI
component's clearable prop so the control is cleared on error; ensure this
change is applied where uploadMutation.mutate is defined/handled (the
uploadMutation onError callback) so the selection is reset after a failure.
In `@echo/frontend/src/locales/de-DE.po`:
- Around line 4371-4373: The source copy in ProjectPortalEditor.tsx currently
uses "AI" in the prompt string (the msgid shown) and must be changed to
"language model"; update the string literal in
src/components/project/ProjectPortalEditor.tsx (the prompt passed/defined around
the code referenced by the msgid) to replace “AI” with “language model”, then
re-run the i18n extraction (lingui/cli or your project’s extraction tool) to
regenerate the .po files instead of editing echo/frontend/src/locales/de-DE.po
directly.
- Around line 4695-4697: Update the source UI strings in the WhitelabelLogoCard
component to use lowercase "dembrane" (replace "Dembrane" → "dembrane" in the
strings used by WhitelabelLogoCard.tsx, including the sentence that currently
reads "Upload a custom logo to replace the Dembrane logo..."), then re-run the
i18n extractor (pnpm messages:extract) so the .po files are regenerated instead
of manually editing locales; ensure you update all occurrences referenced in
that component (also the other occurrence noted around the same component)
before extracting.
In `@echo/frontend/src/locales/it-IT.po`:
- Around line 656-658: Several RedactedText translations in it-IT.po are still
English; find the RedactedText entries (from
src/components/common/RedactedText.tsx, e.g. msgid "Address" and the other
RedactedText msgids in the listed ranges) and replace their English msgstr
values with the correct Italian translations (for example "Address" ->
"Indirizzo"). Update every occurrence in it-IT.po that currently has an English
msgstr so it matches the translations used in other locales (de-DE, es-ES,
fr-FR, nl-NL) before merging to production.
In `@echo/frontend/src/locales/nl-NL.po`:
- Around line 2218-2219: Replace the current Dutch translation for the msgid
"Guide how titles are generated. Titles describe the topic of the conversation,
not the participant." by updating the msgstr to a more natural phrasing: "Leg
uit hoe titels worden gegenereerd. Titels beschrijven het onderwerp van het
gesprek, niet de deelnemer." — adjust the msgstr entry in the nl-NL.po file so
it replaces the existing "Gids hoe titels worden gegenereerd. Titels beschrijven
het onderwerp van het gesprek, niet de deelnemer." text.
- Around line 1423-1424: The Dutch translation for the string identified by
msgid "Deleted successfully" is incorrectly ordered; update msgstr in nl-NL.po
from "Verwijderd succesvol" to the correct phrasing "Succesvol verwijderd" so
the translation reads naturally; locate the entry with msgid "Deleted
successfully" and replace its msgstr value accordingly.
- Around line 4496-4497: Update the Dutch translation for the given msgid so it
uses informal "je/jij" instead of formal "u/uw": modify the msgstr for "This is
a live preview of the participant's portal. You will need to refresh the page to
see the latest changes." to "Dit is een live voorbeeld van het portaal van de
deelnemer. Je moet de pagina vernieuwen om de meest recente wijzigingen te
bekijken." ensuring the msgid remains unchanged.
- Around line 5005-5006: Update the Dutch translation for the msgid "Verify
Topics": replace the current msgstr "Verifiëren Themen" with the grammatically
correct "Verifiëren thema’s" so the translation uses the correct Dutch
plural/possessive form; locate the entry for msgid "Verify Topics" and update
its msgstr accordingly.
- Around line 4879-4881: The Dutch translation for the string with msgid "Upload
a custom logo to replace the Dembrane logo across the portal, dashboard,
reports, and host guide." contains typos and anglicisms; update the msgstr to
the corrected Dutch suggested: "Upload een aangepast logo om het dembrane‑logo
te vervangen in het portaal, dashboard, rapporten en hostgids." so the msgstr
matches that exact corrected phrasing for the same msgid.
- Around line 1696-1698: Update the Dutch translation for the message used in
ProjectPortalEditor (the msgid that starts "Enable this feature to allow
participants...") by replacing "AI" with "taalmodel", removing the duplicated
idea in the second sentence to tighten the copy, and produce a concise Dutch
msgstr that conveys participants can click "Verkennen" after recording to get
contextual feedback and that a cooldown applies; apply the same change to the
other identical occurrence referenced (the msgid at the other location noted in
the comment, e.g., lines 4544-4547) so both msgstr entries use "taalmodel" and
the tightened wording.
| { | ||
| "name": "custom_logos", | ||
| "parent": null, | ||
| "_syncId": "416965c6-7695-4235-8322-8515c9a05820" | ||
| }, |
There was a problem hiding this comment.
Avoid duplicate root custom_logos folders.
You’re adding a third root-level custom_logos entry while two already exist (Line 13–20). Directus will create multiple folders with the same name, making lookups and permission scoping ambiguous. Keep a single canonical entry and dedupe the rest.
🐛 Proposed fix (dedupe if existing entries are canonical)
- {
- "name": "custom_logos",
- "parent": null,
- "_syncId": "416965c6-7695-4235-8322-8515c9a05820"
- },📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| { | |
| "name": "custom_logos", | |
| "parent": null, | |
| "_syncId": "416965c6-7695-4235-8322-8515c9a05820" | |
| }, |
🤖 Prompt for AI Agents
In `@echo/directus/sync/collections/folders.json` around lines 2 - 6, The JSON
contains a duplicate root-level folder entry with "name": "custom_logos" (this
diff adds _syncId "416965c6-7695-4235-8322-8515c9a05820"), which will create a
third ambiguous root folder—remove this duplicate and keep a single canonical
root entry for "custom_logos"; specifically, delete the added object (the one
with parent: null and _syncId "416965c6-7695-4235-8322-8515c9a05820") or merge
any unique metadata into the existing canonical "custom_logos" record so only
one root folder with name "custom_logos" remains in folders.json.
| }) => { | ||
| const rendered = useMemo(() => parseRedactedText(children), [children]); | ||
|
|
||
| if (typeof rendered === "string") { | ||
| return <span className={className}>{rendered}</span>; | ||
| } | ||
|
|
||
| return <span className={className}>{rendered}</span>; |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Redundant conditional — both branches are identical.
Lines 90-94: the if (typeof rendered === "string") and else branches return the exact same JSX. Ship it cleaner:
♻️ Proposed fix
export const RedactedText = ({
children,
className,
}: {
children: string;
className?: string;
}) => {
const rendered = useMemo(() => parseRedactedText(children), [children]);
-
- if (typeof rendered === "string") {
- return <span className={className}>{rendered}</span>;
- }
-
return <span className={className}>{rendered}</span>;
};📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| }) => { | |
| const rendered = useMemo(() => parseRedactedText(children), [children]); | |
| if (typeof rendered === "string") { | |
| return <span className={className}>{rendered}</span>; | |
| } | |
| return <span className={className}>{rendered}</span>; | |
| }) => { | |
| const rendered = useMemo(() => parseRedactedText(children), [children]); | |
| return <span className={className}>{rendered}</span>; |
🤖 Prompt for AI Agents
In `@echo/frontend/src/components/common/RedactedText.tsx` around lines 87 - 94,
The conditional in the RedactedText component is redundant because both branches
return identical JSX; simplify by removing the if-check and directly returning
<span className={className}>{rendered}</span> where `rendered` comes from
useMemo(parseRedactedText(children)); update the component body to compute
`rendered` (via useMemo and parseRedactedText) and then return the single span
using `className` and `rendered`.
| {chunk.error ? ( | ||
| <span className="italic text-gray-500">{t`Unable to process this chunk`}</span> | ||
| ) : !chunk.transcript ? ( | ||
| <span className="italic text-gray-500">{t`Transcribing...`}</span> | ||
| ) : ( | ||
| <RedactedText>{chunk.transcript}</RedactedText> |
There was a problem hiding this comment.
Swap Tailwind gray to a theme token for status text.
text-gray-500 hardcodes a theme color; use a CSS variable token instead. LGTM once aligned.
♻️ Suggested fix
- {chunk.error ? (
- <span className="italic text-gray-500">{t`Unable to process this chunk`}</span>
- ) : !chunk.transcript ? (
- <span className="italic text-gray-500">{t`Transcribing...`}</span>
- ) : (
+ {chunk.error ? (
+ <span className="italic" style={{ color: "var(--app-text)" }}>
+ {t`Unable to process this chunk`}
+ </span>
+ ) : !chunk.transcript ? (
+ <span className="italic" style={{ color: "var(--app-text)" }}>
+ {t`Transcribing...`}
+ </span>
+ ) : (
<RedactedText>{chunk.transcript}</RedactedText>
)}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| {chunk.error ? ( | |
| <span className="italic text-gray-500">{t`Unable to process this chunk`}</span> | |
| ) : !chunk.transcript ? ( | |
| <span className="italic text-gray-500">{t`Transcribing...`}</span> | |
| ) : ( | |
| <RedactedText>{chunk.transcript}</RedactedText> | |
| {chunk.error ? ( | |
| <span className="italic" style={{ color: "var(--app-text)" }}> | |
| {t`Unable to process this chunk`} | |
| </span> | |
| ) : !chunk.transcript ? ( | |
| <span className="italic" style={{ color: "var(--app-text)" }}> | |
| {t`Transcribing...`} | |
| </span> | |
| ) : ( | |
| <RedactedText>{chunk.transcript}</RedactedText> | |
| )} |
🤖 Prompt for AI Agents
In
`@echo/frontend/src/components/conversation/ConversationChunkAudioTranscript.tsx`
around lines 69 - 74, In the ConversationChunkAudioTranscript JSX where the
ternary renders status spans (the branch using chunk.error / !chunk.transcript
and the span with className "italic text-gray-500"), replace the hardcoded
Tailwind color utility with a theme CSS variable token (e.g., use a class that
applies color: var(--color-text-muted) or Tailwind arbitrary value referencing
the token) so the status text uses the theme token instead of text-gray-500;
ensure the token name you reference (for example --color-text-muted) exists in
the global CSS/theme and update both span occurrences (the "Unable to process
this chunk" and "Transcribing...") so they consistently use the token while
keeping the italic utility class and the rest of the markup (including
RedactedText) unchanged.
| <Paper className="my-2 rounded-t-xl rounded-bl-xl border-0 bg-gray-100 p-4"> | ||
| <Text className="prose text-sm"> | ||
| {chunk.transcript == null ? ( | ||
| <Markdown content={t`*Transcription in progress.*`} /> | ||
| ) : chunk.transcript.includes("<redacted_") ? ( | ||
| <RedactedText>{chunk.transcript}</RedactedText> | ||
| ) : ( | ||
| <Markdown content={chunk.transcript} /> | ||
| )} | ||
| </Text> | ||
| </Paper> |
There was a problem hiding this comment.
Use a theme token for the message bubble background.
bg-gray-100 hardcodes a theme color; swap to a CSS variable token. LGTM once aligned.
♻️ Suggested fix
- <Paper className="my-2 rounded-t-xl rounded-bl-xl border-0 bg-gray-100 p-4">
+ <Paper
+ className="my-2 rounded-t-xl rounded-bl-xl border-0 p-4"
+ style={{ backgroundColor: "var(--app-background)" }}
+ >📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <Paper className="my-2 rounded-t-xl rounded-bl-xl border-0 bg-gray-100 p-4"> | |
| <Text className="prose text-sm"> | |
| {chunk.transcript == null ? ( | |
| <Markdown content={t`*Transcription in progress.*`} /> | |
| ) : chunk.transcript.includes("<redacted_") ? ( | |
| <RedactedText>{chunk.transcript}</RedactedText> | |
| ) : ( | |
| <Markdown content={chunk.transcript} /> | |
| )} | |
| </Text> | |
| </Paper> | |
| <Paper | |
| className="my-2 rounded-t-xl rounded-bl-xl border-0 p-4" | |
| style={{ backgroundColor: "var(--app-background)" }} | |
| > | |
| <Text className="prose text-sm"> | |
| {chunk.transcript == null ? ( | |
| <Markdown content={t`*Transcription in progress.*`} /> | |
| ) : chunk.transcript.includes("<redacted_") ? ( | |
| <RedactedText>{chunk.transcript}</RedactedText> | |
| ) : ( | |
| <Markdown content={chunk.transcript} /> | |
| )} | |
| </Text> | |
| </Paper> |
🤖 Prompt for AI Agents
In `@echo/frontend/src/components/participant/UserChunkMessage.tsx` around lines
105 - 115, The Paper message bubble currently hardcodes its background with the
utility class bg-gray-100; replace that hardcoded color with a CSS theme token
and update the Paper className to use the token-based background instead (e.g.
remove bg-gray-100 and reference a CSS variable like --color-surface in the
className or inline style). Update your theme/stylesheet to ensure the token
(e.g. --color-surface) is defined for the app and used for message bubbles, and
keep other utilities (my-2, rounded-*, border-0, p-4) unchanged; verify
rendering in UserChunkMessage (the Paper component rendering chunk.transcript)
after the change.
| <IconInfoCircle | ||
| size={20} | ||
| className="text-gray-400" | ||
| /> |
There was a problem hiding this comment.
Use CSS variable for icon color, not Tailwind gray.
text-gray-400 hardcodes theme color. Use a CSS variable instead so themes stay consistent.
🔧 Suggested fix
<IconInfoCircle
size={20}
- className="text-gray-400"
+ style={{ color: "var(--mantine-color-gray-5)" }}
/>As per coding guidelines "When adding new Mantine components, prefer referencing CSS variables in styles over hardcoded hex values" and "Keep theme-dependent colors to CSS variables."
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <IconInfoCircle | |
| size={20} | |
| className="text-gray-400" | |
| /> | |
| <IconInfoCircle | |
| size={20} | |
| style={{ color: "var(--mantine-color-gray-5)" }} | |
| /> |
🤖 Prompt for AI Agents
In `@echo/frontend/src/components/project/ProjectPortalEditor.tsx` around lines
1223 - 1226, Replace the hardcoded Tailwind class on the IconInfoCircle
(currently using className="text-gray-400") with a CSS-variable based color so
theme switching works; locate the IconInfoCircle usage in ProjectPortalEditor
and set its color via a style or class that references the Mantine/theme CSS
variable (e.g. use style={{ color: 'var(--your-theme-color-variable)' }} or a
utility class that maps to that variable) instead of "text-gray-400", ensuring
the variable used matches the app's existing theme variables.
| #: src/components/project/ProjectPortalEditor.tsx:644 | ||
| msgid "Enable this feature to allow participants to request AI-powered responses during their conversation. Participants can click \"Explore\" after recording their thoughts to receive contextual feedback, encouraging deeper reflection and engagement. A cooldown period applies between requests." | ||
| msgstr "Schakel deze functie in zodat deelnemers AI-antwoorden kunnen vragen tijdens hun gesprek. Na het inspreken van hun gedachten kunnen ze op \"Verkennen\" klikken voor contextuele feedback, zodat ze dieper gaan nadenken en meer betrokken raken. Er zit een wachttijd tussen verzoeken." |
There was a problem hiding this comment.
Replace “AI” with “taalmodel” and tighten the Dutch copy.
Guideline says “language model” instead of “AI,” and the second sentence is duplicated. Suggested NL rewrite:
💬 Suggested translation update
-msgstr "Schakel deze functie in zodat deelnemers AI-antwoorden kunnen vragen tijdens hun gesprek. Na het inspreken van hun gedachten kunnen ze op \"Verkennen\" klikken voor contextuele feedback, zodat ze dieper gaan nadenken en meer betrokken raken. Er zit een wachttijd tussen verzoeken."
+msgstr "Schakel deze functie in zodat deelnemers antwoorden van het taalmodel kunnen vragen tijdens hun gesprek. Na het inspreken van hun gedachten kunnen ze op \"Verkennen\" klikken voor contextuele feedback. Er zit een wachttijd tussen verzoeken."
-msgstr "Deze prompt bepaalt hoe de AI reageert op deelnemers. Deze prompt stuurt aan hoe de AI reageert"
+msgstr "Deze prompt bepaalt hoe het taalmodel reageert op deelnemers."As per coding guidelines "use 'language model' instead of 'AI'".
Also applies to: 4544-4547
🤖 Prompt for AI Agents
In `@echo/frontend/src/locales/nl-NL.po` around lines 1696 - 1698, Update the
Dutch translation for the message used in ProjectPortalEditor (the msgid that
starts "Enable this feature to allow participants...") by replacing "AI" with
"taalmodel", removing the duplicated idea in the second sentence to tighten the
copy, and produce a concise Dutch msgstr that conveys participants can click
"Verkennen" after recording to get contextual feedback and that a cooldown
applies; apply the same change to the other identical occurrence referenced (the
msgid at the other location noted in the comment, e.g., lines 4544-4547) so both
msgstr entries use "taalmodel" and the tightened wording.
| msgid "Guide how titles are generated. Titles describe the topic of the conversation, not the participant." | ||
| msgstr "Gids hoe titels worden gegenereerd. Titels beschrijven het onderwerp van het gesprek, niet de deelnemer." |
There was a problem hiding this comment.
Make the Dutch sentence natural.
“Gids hoe …” → “Leg uit hoe …”
🤖 Prompt for AI Agents
In `@echo/frontend/src/locales/nl-NL.po` around lines 2218 - 2219, Replace the
current Dutch translation for the msgid "Guide how titles are generated. Titles
describe the topic of the conversation, not the participant." by updating the
msgstr to a more natural phrasing: "Leg uit hoe titels worden gegenereerd.
Titels beschrijven het onderwerp van het gesprek, niet de deelnemer." — adjust
the msgstr entry in the nl-NL.po file so it replaces the existing "Gids hoe
titels worden gegenereerd. Titels beschrijven het onderwerp van het gesprek,
niet de deelnemer." text.
| msgid "This is a live preview of the participant's portal. You will need to refresh the page to see the latest changes." | ||
| msgstr "Dit is een live voorbeeld van het portaal van de deelnemer. U moet de pagina vernieuwen om de meest recente wijzigingen te bekijken." |
There was a problem hiding this comment.
Gebruik “je/jij” i.p.v. formeel “u/uw”.
Voor consistent NL:
"Je moet de pagina vernieuwen om de meest recente wijzigingen te bekijken."
As per coding guidelines "Dutch localization: use 'je/jij' not 'u/uw'".
🤖 Prompt for AI Agents
In `@echo/frontend/src/locales/nl-NL.po` around lines 4496 - 4497, Update the
Dutch translation for the given msgid so it uses informal "je/jij" instead of
formal "u/uw": modify the msgstr for "This is a live preview of the
participant's portal. You will need to refresh the page to see the latest
changes." to "Dit is een live voorbeeld van het portaal van de deelnemer. Je
moet de pagina vernieuwen om de meest recente wijzigingen te bekijken." ensuring
the msgid remains unchanged.
| msgid "Upload a custom logo to replace the Dembrane logo across the portal, dashboard, reports, and host guide." | ||
| msgstr "Upload een custom logo om het dembrane logo te vervangen op het portale, dashboard, rapporten, en host gids." | ||
|
|
There was a problem hiding this comment.
Fix typos/anglicisms in custom logo copy.
Suggested:
“Upload een aangepast logo om het dembrane‑logo te vervangen in het portaal, dashboard, rapporten en hostgids.”
🤖 Prompt for AI Agents
In `@echo/frontend/src/locales/nl-NL.po` around lines 4879 - 4881, The Dutch
translation for the string with msgid "Upload a custom logo to replace the
Dembrane logo across the portal, dashboard, reports, and host guide." contains
typos and anglicisms; update the msgstr to the corrected Dutch suggested:
"Upload een aangepast logo om het dembrane‑logo te vervangen in het portaal,
dashboard, rapporten en hostgids." so the msgstr matches that exact corrected
phrasing for the same msgid.
| msgid "Verify Topics" | ||
| msgstr "Verifiëren Themen" |
There was a problem hiding this comment.
Fix Dutch grammar for “Verify Topics”.
“Verifiëren Themen” → “Verifiëren thema’s”.
🤖 Prompt for AI Agents
In `@echo/frontend/src/locales/nl-NL.po` around lines 5005 - 5006, Update the
Dutch translation for the msgid "Verify Topics": replace the current msgstr
"Verifiëren Themen" with the grammatically correct "Verifiëren thema’s" so the
translation uses the correct Dutch plural/possessive form; locate the entry for
msgid "Verify Topics" and update its msgstr accordingly.
Summary by CodeRabbit
New Features
UI/UX Improvements
Localization