Skip to content

Commit fd6094b

Browse files
committed
copy: reframe messaging channel descriptions from process to value
Replace technical setup instructions (BotFather, QR code) with outcome-first descriptions that communicate why to connect, not how.
1 parent 400ed68 commit fd6094b

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

apps/desktop/src/features/connections/components/MessagingConnectionsPanel.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { Button } from "@/components/ui/button";
1414
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
1515
import { cn } from "@/lib/utils";
1616
import type { SidecarClient } from "@/lib/sidecar/client";
17+
import { MESSAGING_CHANNEL_DESCRIPTIONS } from "./messaging-channel-descriptions";
1718
import { TelegramSetupFlow } from "./TelegramSetupFlow";
1819
import { WhatsAppSetupFlow } from "./WhatsAppSetupFlow";
1920

@@ -213,10 +214,7 @@ export function MessagingConnectionsPanel({
213214
{(["telegram", "whatsapp"] as const).map((type) => {
214215
const meta = TYPE_META[type]!;
215216
const Icon = meta.icon;
216-
const descriptions: Record<string, string> = {
217-
telegram: "Create a bot with BotFather and connect it to your CMO.",
218-
whatsapp: "Link your WhatsApp via QR code to message your CMO.",
219-
};
217+
const descriptions = MESSAGING_CHANNEL_DESCRIPTIONS;
220218
return (
221219
<button
222220
key={type}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/** Value-first descriptions for messaging channel cards (shown in the empty/connect state). */
2+
export const MESSAGING_CHANNEL_DESCRIPTIONS: Record<string, string> = {
3+
telegram:
4+
"Get marketing advice, output notifications, and run quick jobs — right from Telegram.",
5+
whatsapp:
6+
"Ask your CMO questions and get marketing outputs delivered to WhatsApp.",
7+
};
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { describe, expect, it } from "vitest";
2+
import { MESSAGING_CHANNEL_DESCRIPTIONS } from "../../apps/desktop/src/features/connections/components/messaging-channel-descriptions";
3+
4+
describe("Messaging channel card descriptions", () => {
5+
it("telegram description communicates value, not setup process", () => {
6+
const desc = MESSAGING_CHANNEL_DESCRIPTIONS.telegram;
7+
expect(desc).toBeDefined();
8+
// Must not mention technical setup steps
9+
expect(desc).not.toMatch(/BotFather/i);
10+
expect(desc).not.toMatch(/create a bot/i);
11+
// Must communicate value/outcome
12+
expect(desc).toMatch(/marketing|advice|notification|job/i);
13+
});
14+
15+
it("whatsapp description communicates value, not setup process", () => {
16+
const desc = MESSAGING_CHANNEL_DESCRIPTIONS.whatsapp;
17+
expect(desc).toBeDefined();
18+
// Must not mention technical setup steps
19+
expect(desc).not.toMatch(/QR code/i);
20+
expect(desc).not.toMatch(/link your/i);
21+
// Must communicate value/outcome
22+
expect(desc).toMatch(/question|output|marketing/i);
23+
});
24+
25+
it("both descriptions avoid process language entirely", () => {
26+
for (const [, desc] of Object.entries(MESSAGING_CHANNEL_DESCRIPTIONS)) {
27+
expect(desc).not.toMatch(/create a bot/i);
28+
expect(desc).not.toMatch(/QR code/i);
29+
expect(desc).not.toMatch(/BotFather/i);
30+
expect(desc).not.toMatch(/link your/i);
31+
}
32+
});
33+
});

0 commit comments

Comments
 (0)