Skip to content

ECHO-708 Join Slack community option addition#472

Merged
ussaama merged 3 commits intomainfrom
slack-community-addition
Mar 9, 2026
Merged

ECHO-708 Join Slack community option addition#472
ussaama merged 3 commits intomainfrom
slack-community-addition

Conversation

@ussaama
Copy link
Contributor

@ussaama ussaama commented Mar 9, 2026

Summary by CodeRabbit

  • New Features

    • Added a "Join the Slack community" header menu item for one-click access to the community workspace.
  • Chores

    • Added a configurable Slack invite URL environment setting.
    • Instrumented analytics for the Slack join action.
    • Added translations for the new UI strings across German, Spanish, French, Italian, and Dutch.

@linear
Copy link

linear bot commented Mar 9, 2026

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 9, 2026

Walkthrough

Adds a Slack community invite URL env var and config export, a "Join the Slack community" header menu item with analytics tracking, two analytics event keys, and corresponding translation entries across multiple locale files.

Changes

Cohort / File(s) Summary
Environment & Config
echo/frontend/.env.example, echo/frontend/src/config.ts
Added VITE_COMMUNITY_SLACK_URL to .env.example and exported COMMUNITY_SLACK_URL (reads env var with a fallback invite URL).
Header UI & Analytics
echo/frontend/src/components/layout/Header.tsx, echo/frontend/src/lib/analyticsEvents.ts
Added IconUsers and a Menu.Item linking to COMMUNITY_SLACK_URL (opens new tab) with analytics event JOIN_SLACK_COMMUNITY; added analytics keys JOIN_SLACK_COMMUNITY and RETRANSCRIBE_CONVERSATION.
Localization
echo/frontend/src/locales/.../{de-DE,en-US,es-ES,fr-FR,it-IT,nl-NL}.po
Added translations for "Join the Slack community" and "10+ members have joined"; many source-reference line adjustments across locale files due to code reflow.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title 'ECHO-708 Join Slack community option addition' accurately summarizes the main change—adding a new option to join the Slack community in the header.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch slack-community-addition

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@echo/frontend/src/config.ts`:
- Around line 41-43: The fallback hardcoded Slack invite should be removed from
the COMMUNITY_SLACK_URL export so we don't bundle an expiring invite; change
COMMUNITY_SLACK_URL to simply export import.meta.env.VITE_COMMUNITY_SLACK_URL
(or null/undefined when missing), add an exported flag (e.g.,
HAS_COMMUNITY_SLACK or rely on truthiness of COMMUNITY_SLACK_URL) and update
Header.tsx to conditionally render the community Slack menu item only when
COMMUNITY_SLACK_URL is truthy; ensure no hardcoded URL remains in config.ts and
that Header.tsx checks the exported symbol (COMMUNITY_SLACK_URL or
HAS_COMMUNITY_SLACK) before showing the CTA.

In `@echo/frontend/src/locales/en-US.po`:
- Around line 5492-5494: The localized string in ProjectChatRoute's catalog
still references the old mode name "Specific Context"; update the msgid/msgstr
pair in echo/frontend/src/locales/en-US.po for the ProjectChatRoute entry (the
string starting "Welcome to Overview Mode! I have summaries...") to replace
"Specific Context mode" with the renamed label "Specific Details" so the help
text matches the actual picker option.

In `@echo/frontend/src/locales/es-ES.po`:
- Around line 339-341: The Spanish translation for msgid "10+ members have
joined" has incorrect reflexive pronoun placement in msgstr; change the msgstr
from "10+ miembros han se unido" to "10+ miembros se han unido" so the pronoun
"se" appears before the auxiliary "han" (update the msgstr entry corresponding
to that msgid).

In `@echo/frontend/src/locales/fr-FR.po`:
- Around line 1555-1557: The French translation for msgid "Draft next actions
and organize them by priority" is not in proper imperative form; update the
msgstr entry for that msgid to a natural imperative like "Rédige les prochaines
actions et classe-les par priorité" (replace the current msgstr "Brouillon des
actions suivantes et les organiser par priorité" with the suggested imperative
phrasing) so the ChatModeSelector suggestion reads correctly.
- Around line 354-356: Update the French translations for the Slack CTA so the
pair of strings reads naturally: replace the msgstr for msgid "10+ members have
joined" (from Header.tsx:257) with "Plus de 10 membres ont rejoint la
communauté" and update the related CTA msgstr (the msgid used at lines
~2451-2453) to "Rejoindre la communauté Slack"; ensure both msgstr entries in
fr-FR.po are edited to these exact phrases so they match and flow together.
- Around line 4237-4240: The French locale entry for msgid "Specific Details" is
translated as "Détails précis" but the UI welcome copy references "mode Contexte
précis", so update the msgstr for msgid "Specific Details" to "Contexte précis"
(and update the duplicate occurrence of the same msgid in the file) to match the
in-product CTA; check the related components ChatModeSelector and ChatModeBanner
to ensure they use the same label string.

In `@echo/frontend/src/locales/it-IT.po`:
- Around line 528-531: Replace the English msgstr values in the Italian PO file
for the new Slack strings: locate the entries with msgid "10+ members have
joined" and msgid "Join the Slack community" in
echo/frontend/src/locales/it-IT.po and update their msgstr values to proper
Italian (e.g., "Più di 10 membri si sono uniti" for "10+ members have joined"
and "Unisciti alla community Slack" for "Join the Slack community"), then run
the project’s PO validation/linting to ensure encoding and formatting are
correct.

In `@echo/frontend/src/locales/nl-NL.po`:
- Around line 2553-2555: Replace the incorrect Dutch translation for the string
with msgid "Join the Slack community" in the locale file; currently msgstr is
"Slack-community bijwerken" which means "update" — change msgstr to a
join/membership phrasing such as "Word lid van de Slack-community" (or another
appropriate Dutch join verb) so the CTA in src/components/layout/Header.tsx
reflects "join" correctly.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 4d90ce4d-b5ff-4773-9c55-68c060309435

📥 Commits

Reviewing files that changed from the base of the PR and between 9f1dcbd and 7baa76b.

📒 Files selected for processing (16)
  • echo/frontend/.env.example
  • echo/frontend/src/components/layout/Header.tsx
  • echo/frontend/src/config.ts
  • echo/frontend/src/lib/analyticsEvents.ts
  • echo/frontend/src/locales/de-DE.po
  • echo/frontend/src/locales/de-DE.ts
  • echo/frontend/src/locales/en-US.po
  • echo/frontend/src/locales/en-US.ts
  • echo/frontend/src/locales/es-ES.po
  • echo/frontend/src/locales/es-ES.ts
  • echo/frontend/src/locales/fr-FR.po
  • echo/frontend/src/locales/fr-FR.ts
  • echo/frontend/src/locales/it-IT.po
  • echo/frontend/src/locales/it-IT.ts
  • echo/frontend/src/locales/nl-NL.po
  • echo/frontend/src/locales/nl-NL.ts

Comment on lines +5492 to 5494
#: src/routes/project/chat/ProjectChatRoute.tsx:549
msgid "Welcome to Overview Mode! I have summaries of all your conversations loaded. Ask me about patterns, themes, and insights across your data. For exact quotes, start a new chat in Specific Context mode."
msgstr "Welcome to Overview Mode! I have summaries of all your conversations loaded. Ask me about patterns, themes, and insights across your data. For exact quotes, start a new chat in Specific Context mode."
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

LGTM after the Overview intro uses the renamed mode label.

Line 5493 still tells users to open Specific Context mode, but the renamed mode in this same catalog is Specific Details on Line 4480. That points users to a mode name they can't actually find in the picker.

⚡ Proposed fix
- "Welcome to Overview Mode! I have summaries of all your conversations loaded. Ask me about patterns, themes, and insights across your data. For exact quotes, start a new chat in Specific Context mode."
+ "Welcome to Overview Mode! I have summaries of all your conversations loaded. Ask me about patterns, themes, and insights across your data. For exact quotes, start a new chat in Specific Details mode."
📝 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.

Suggested change
#: src/routes/project/chat/ProjectChatRoute.tsx:549
msgid "Welcome to Overview Mode! I have summaries of all your conversations loaded. Ask me about patterns, themes, and insights across your data. For exact quotes, start a new chat in Specific Context mode."
msgstr "Welcome to Overview Mode! I have summaries of all your conversations loaded. Ask me about patterns, themes, and insights across your data. For exact quotes, start a new chat in Specific Context mode."
#: src/routes/project/chat/ProjectChatRoute.tsx:549
msgid "Welcome to Overview Mode! I have summaries of all your conversations loaded. Ask me about patterns, themes, and insights across your data. For exact quotes, start a new chat in Specific Details mode."
msgstr "Welcome to Overview Mode! I have summaries of all your conversations loaded. Ask me about patterns, themes, and insights across your data. For exact quotes, start a new chat in Specific Details mode."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@echo/frontend/src/locales/en-US.po` around lines 5492 - 5494, The localized
string in ProjectChatRoute's catalog still references the old mode name
"Specific Context"; update the msgid/msgstr pair in
echo/frontend/src/locales/en-US.po for the ProjectChatRoute entry (the string
starting "Welcome to Overview Mode! I have summaries...") to replace "Specific
Context mode" with the renamed label "Specific Details" so the help text matches
the actual picker option.

Comment on lines +339 to +341
#: src/components/layout/Header.tsx:257
msgid "10+ members have joined"
msgstr "10+ miembros han se unido"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix Spanish grammar: reflexive pronoun placement.

The translation has incorrect word order. In Spanish, when using reflexive verbs with compound tenses, the reflexive pronoun "se" must come before the auxiliary verb "han", not after.

🔧 Proposed fix
 #: src/components/layout/Header.tsx:257
 msgid "10+ members have joined"
-msgstr "10+ miembros han se unido"
+msgstr "10+ miembros se han unido"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@echo/frontend/src/locales/es-ES.po` around lines 339 - 341, The Spanish
translation for msgid "10+ members have joined" has incorrect reflexive pronoun
placement in msgstr; change the msgstr from "10+ miembros han se unido" to "10+
miembros se han unido" so the pronoun "se" appears before the auxiliary "han"
(update the msgstr entry corresponding to that msgid).

Comment on lines +354 to +356
#: src/components/layout/Header.tsx:257
msgid "10+ members have joined"
msgstr "10+ membres ont rejoint"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Polish the new Slack CTA copy.

Line 355 reads incomplete in French, and Line 2453 sounds off as product copy. I’d translate these together so the pair reads naturally, e.g. Plus de 10 membres ont rejoint la communauté and Rejoindre la communauté Slack.

Also applies to: 2451-2453

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@echo/frontend/src/locales/fr-FR.po` around lines 354 - 356, Update the French
translations for the Slack CTA so the pair of strings reads naturally: replace
the msgstr for msgid "10+ members have joined" (from Header.tsx:257) with "Plus
de 10 membres ont rejoint la communauté" and update the related CTA msgstr (the
msgid used at lines ~2451-2453) to "Rejoindre la communauté Slack"; ensure both
msgstr entries in fr-FR.po are edited to these exact phrases so they match and
flow together.

Comment on lines +1555 to 1557
#: src/components/chat/ChatModeSelector.tsx:69
msgid "Draft next actions and organize them by priority"
msgstr "Brouillon des actions suivantes et les organiser par priorité"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix the French imperative here.

Brouillon des actions suivantes et les organiser par priorité doesn’t parse naturally. Something like Rédige les prochaines actions et classe-les par priorité will read cleanly in the suggestions list.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@echo/frontend/src/locales/fr-FR.po` around lines 1555 - 1557, The French
translation for msgid "Draft next actions and organize them by priority" is not
in proper imperative form; update the msgstr entry for that msgid to a natural
imperative like "Rédige les prochaines actions et classe-les par priorité"
(replace the current msgstr "Brouillon des actions suivantes et les organiser
par priorité" with the suggested imperative phrasing) so the ChatModeSelector
suggestion reads correctly.

Comment on lines +4237 to 4240
#: src/components/chat/ChatModeSelector.tsx:289
#: src/components/chat/ChatModeBanner.tsx:40
msgid "Specific Details"
msgstr "Détails précis"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Keep the mode label consistent with the rest of the locale.

The welcome copy sends users to mode Contexte précis, but this locale now labels that mode as Détails précis on Line 4239. That mismatch will make the CTA feel broken in-product.

Also applies to: 5184-5186

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@echo/frontend/src/locales/fr-FR.po` around lines 4237 - 4240, The French
locale entry for msgid "Specific Details" is translated as "Détails précis" but
the UI welcome copy references "mode Contexte précis", so update the msgstr for
msgid "Specific Details" to "Contexte précis" (and update the duplicate
occurrence of the same msgid in the file) to match the in-product CTA; check the
related components ChatModeSelector and ChatModeBanner to ensure they use the
same label string.

Comment on lines +528 to +531
#: src/components/layout/Header.tsx:257
msgid "10+ members have joined"
msgstr "10+ members have joined"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Missing Italian translations for new Slack community strings.

Ship it but these msgstr values are still English — need actual Italian translations for it-IT.po. Currently users on Italian locale gonna see English text for these new menu items, which is suboptimal UX.

Lines 528-531:

msgid "10+ members have joined"
msgstr "10+ members have joined"  // Should be Italian

Lines 1729-1731:

msgid "Join the Slack community"
msgstr "Join the Slack community"  // Should be Italian

Suggested translations (verify with native speaker):

  • "10+ members have joined" → "Più di 10 membri si sono uniti"
  • "Join the Slack community" → "Unisciti alla community Slack"

As per coding guidelines: "All .po translation files in frontend/src/locales/ must cover supported languages: en-US, nl-NL, de-DE, fr-FR, es-ES, it-IT"

Also applies to: 1729-1731

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@echo/frontend/src/locales/it-IT.po` around lines 528 - 531, Replace the
English msgstr values in the Italian PO file for the new Slack strings: locate
the entries with msgid "10+ members have joined" and msgid "Join the Slack
community" in echo/frontend/src/locales/it-IT.po and update their msgstr values
to proper Italian (e.g., "Più di 10 membri si sono uniti" for "10+ members have
joined" and "Unisciti alla community Slack" for "Join the Slack community"),
then run the project’s PO validation/linting to ensure encoding and formatting
are correct.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@echo/frontend/src/locales/nl-NL.po`:
- Around line 5347-5349: The onboarding copy still references "Specific Context
mode" while the selector uses "Specific Details"; update the source string in
ProjectChatRoute.tsx (the msgid that begins "Welcome to Overview Mode! I have
summaries...") to say "Specific Details mode" and update the corresponding Dutch
translation msgstr to match ("Specific Details" in place of "Specific Context
mode"), then re-extract or regenerate the .po catalog so the change is applied
across locales.
- Around line 348-350: Update the Dutch translation for the msgid "10+ members
have joined" (source reference: src/components/layout/Header.tsx:257) by
replacing the current msgstr "10+ leden zijn lid geworden" with a more natural
phrasing, e.g. "10+ mensen zijn al lid geworden".

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: b4665fcd-9a60-43ce-be01-c7f996fabe1a

📥 Commits

Reviewing files that changed from the base of the PR and between 7baa76b and a708f5b.

📒 Files selected for processing (2)
  • echo/frontend/src/locales/nl-NL.po
  • echo/frontend/src/locales/nl-NL.ts

Comment on lines +348 to +350
#: src/components/layout/Header.tsx:257
msgid "10+ members have joined"
msgstr "10+ leden zijn lid geworden"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Polish the Dutch social-proof copy.

10+ leden zijn lid geworden reads repetitive in Dutch and feels less polished in the header. Prefer a phrasing that avoids repeating lid, e.g. 10+ mensen zijn al lid geworden.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@echo/frontend/src/locales/nl-NL.po` around lines 348 - 350, Update the Dutch
translation for the msgid "10+ members have joined" (source reference:
src/components/layout/Header.tsx:257) by replacing the current msgstr "10+ leden
zijn lid geworden" with a more natural phrasing, e.g. "10+ mensen zijn al lid
geworden".

Comment on lines +5347 to 5349
#: src/routes/project/chat/ProjectChatRoute.tsx:549
msgid "Welcome to Overview Mode! I have summaries of all your conversations loaded. Ask me about patterns, themes, and insights across your data. For exact quotes, start a new chat in Specific Context mode."
msgstr "Welkom in Overview Mode! Ik heb samenvattingen van al je gesprekken klaarstaan. Vraag me naar patronen, thema’s en inzichten in je data. Voor exacte quotes start je een nieuwe chat in Specific Context mode."
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Rename the mode consistently here too.

This copy still points users to Specific Context mode, while the renamed mode label in the same catalog is Specific Details. That leaves two names for the same mode in the UI. Update the source string and re-extract locales so the onboarding copy matches the selector.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@echo/frontend/src/locales/nl-NL.po` around lines 5347 - 5349, The onboarding
copy still references "Specific Context mode" while the selector uses "Specific
Details"; update the source string in ProjectChatRoute.tsx (the msgid that
begins "Welcome to Overview Mode! I have summaries...") to say "Specific Details
mode" and update the corresponding Dutch translation msgstr to match ("Specific
Details" in place of "Specific Context mode"), then re-extract or regenerate the
.po catalog so the change is applied across locales.

@ussaama ussaama added this pull request to the merge queue Mar 9, 2026
Merged via the queue into main with commit 040b9cc Mar 9, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants