From e46844d52771e418f8a922a311c0ed664c3d5358 Mon Sep 17 00:00:00 2001 From: Arnas Donauskas Date: Wed, 6 May 2026 12:13:26 +0300 Subject: [PATCH] =?UTF-8?q?chore:=20add=20WhatsApp=C2=AE=20on=20first=20me?= =?UTF-8?q?ntion=20across=20user-facing=20surfaces?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per Meta's brand-use guidance for third-party products, the registered trademark symbol (®) should appear on the FIRST mention of "WhatsApp" on each user-facing page. Subsequent mentions on the same page are left plain. Surfaces touched (one-per-page first mention): - Landing hero badge ("Built on the official WhatsApp® Business API"). - src/lib/seo/site-config.ts: SITE_TAGLINE and SITE_DESCRIPTION (rendered into and <meta description> on every page). - src/app/opengraph-image.tsx: hero text in social-share image. - Settings, Inbox connection banner, Automations page subtitle. - README.md tagline. - All public docs pages (docs/README.md, docs/whatsapp-setup.md, docs/getting-started.md, docs/supabase-setup.md, docs/environment-variables.md, docs/deployment-hostinger.md, docs/automations-and-cron.md, docs/architecture.md, docs/troubleshooting.md). Out of scope: SITE_KEYWORDS (the meta-keywords array isn't user-rendered text — putting ® on every keyword would look broken in the meta tag). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --- README.md | 2 +- docs/README.md | 2 +- docs/architecture.md | 2 +- docs/automations-and-cron.md | 2 +- docs/deployment-hostinger.md | 2 +- docs/environment-variables.md | 2 +- docs/getting-started.md | 2 +- docs/supabase-setup.md | 2 +- docs/troubleshooting.md | 2 +- docs/whatsapp-setup.md | 2 +- src/app/(dashboard)/automations/page.tsx | 2 +- src/app/(dashboard)/inbox/page.tsx | 2 +- src/app/(dashboard)/settings/page.tsx | 2 +- src/app/opengraph-image.tsx | 2 +- src/components/landing/hero.tsx | 2 +- src/lib/seo/site-config.ts | 4 ++-- 16 files changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 3ca0d5d..45dcc2e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # WaCRM -> Self-hostable WhatsApp CRM template — shared inbox, contacts, sales +> Self-hostable WhatsApp® CRM template — shared inbox, contacts, sales > pipelines, broadcasts, and no-code automations. Fork it, brand it, > host it. diff --git a/docs/README.md b/docs/README.md index b7e03bb..ba9b925 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,6 @@ # WaCRM documentation -WaCRM is a self-hostable WhatsApp CRM built on Next.js and Supabase. These +WaCRM is a self-hostable WhatsApp® CRM built on Next.js and Supabase. These docs walk you from a freshly forked repo to a production deploy. ## Reading order diff --git a/docs/architecture.md b/docs/architecture.md index c6f0ee3..215b8fe 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -10,7 +10,7 @@ want to change something in your fork. | Rendering | **Next.js 16** (App Router) | Server components for data-fetch pages; client components where interactivity's needed. React 19. | | UI | **Tailwind v4** + **shadcn/base-ui** primitives | Tailwind's zero-runtime styling, shadcn patterns for composable, dark-theme-first components. | | Data + Auth | **Supabase** | Postgres with Row-Level Security, built-in email/password auth, Storage for avatars, Realtime for the inbox. | -| WhatsApp | **Meta Cloud API** | Official Business API. No third-party gateway. | +| WhatsApp® | **Meta Cloud API** | Official Business API. No third-party gateway. | | Encryption | `node:crypto` AES-256-GCM | Per-user WhatsApp access + verify tokens at rest. | | Scheduler | External HTTP pinger | Hits `GET /api/automations/cron` to drain Wait-step executions. | diff --git a/docs/automations-and-cron.md b/docs/automations-and-cron.md index e269f0d..27c8366 100644 --- a/docs/automations-and-cron.md +++ b/docs/automations-and-cron.md @@ -1,6 +1,6 @@ # Automations cron -WaCRM's **Automations** module lets you build flows that react to WhatsApp +WaCRM's **Automations** module lets you build flows that react to WhatsApp® events (new message, new contact, keyword match, schedule, etc.). Most steps run inline — the exception is the **Wait** step, which parks the execution in `automation_pending_executions` until its due time. diff --git a/docs/deployment-hostinger.md b/docs/deployment-hostinger.md index 351ef21..c57da27 100644 --- a/docs/deployment-hostinger.md +++ b/docs/deployment-hostinger.md @@ -101,7 +101,7 @@ plain-HTTP version. ## 7. Update the Meta webhook -Back in **Meta for Developers → WhatsApp → Configuration**, change the +Back in **Meta for Developers → WhatsApp® → Configuration**, change the callback URL to `https://<your-domain>/api/whatsapp/webhook` and re-verify. ## 8. Schedule the automations cron diff --git a/docs/environment-variables.md b/docs/environment-variables.md index 4e5be78..19b5ab5 100644 --- a/docs/environment-variables.md +++ b/docs/environment-variables.md @@ -56,7 +56,7 @@ AUTOMATION_CRON_SECRET=generate-a-long-random-string - Rotate `SUPABASE_SERVICE_ROLE_KEY` if it leaks — Supabase lets you regenerate it under Project Settings → API. - Treat `ENCRYPTION_KEY` like a database master key. Losing it means - connected WhatsApp accounts must reconnect; rotating it means the same. + connected WhatsApp® accounts must reconnect; rotating it means the same. ## Next step diff --git a/docs/getting-started.md b/docs/getting-started.md index ac83cfe..aa51252 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -30,7 +30,7 @@ cp .env.local.example .env.local You cannot run `npm run dev` until **at least** `NEXT_PUBLIC_SUPABASE_URL` and `NEXT_PUBLIC_SUPABASE_ANON_KEY` are set. You need the full Supabase -setup before WhatsApp features will work, so do that next. +setup before WhatsApp® features will work, so do that next. ## 4. Set up Supabase diff --git a/docs/supabase-setup.md b/docs/supabase-setup.md index 85bbd73..019fd52 100644 --- a/docs/supabase-setup.md +++ b/docs/supabase-setup.md @@ -75,7 +75,7 @@ emails link back correctly. ## 6. (Optional) Storage -WaCRM downloads WhatsApp media through Meta's `/download` endpoint and +WaCRM downloads WhatsApp® media through Meta's `/download` endpoint and currently relays it on demand rather than caching it in Supabase Storage. No bucket setup is required for a default install. diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index b5c6283..ca06348 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -41,7 +41,7 @@ In Supabase → **Authentication → Providers → Email**, either: Set `NEXT_PUBLIC_SITE_URL` **and** add the same origin to Supabase → **Authentication → URL Configuration → Redirect URLs**. -## WhatsApp +## WhatsApp® ### Webhook verification fails in Meta diff --git a/docs/whatsapp-setup.md b/docs/whatsapp-setup.md index 94afeb1..3f1ac8c 100644 --- a/docs/whatsapp-setup.md +++ b/docs/whatsapp-setup.md @@ -1,6 +1,6 @@ # WhatsApp setup -WaCRM talks to the official **WhatsApp Business Cloud API** (Meta). Each +WaCRM talks to the official **WhatsApp® Business Cloud API** (Meta). Each account stores its own `phone_number_id`, `waba_id`, and encrypted `access_token` — there is no shared app-level token. This page walks through getting those values and wiring the webhook. diff --git a/src/app/(dashboard)/automations/page.tsx b/src/app/(dashboard)/automations/page.tsx index 021ae6e..9780853 100644 --- a/src/app/(dashboard)/automations/page.tsx +++ b/src/app/(dashboard)/automations/page.tsx @@ -159,7 +159,7 @@ export default function AutomationsPage() { <div> <h1 className="text-2xl font-bold text-white">Automations</h1> <p className="mt-1 text-sm text-slate-400"> - Build workflows that react to WhatsApp events automatically. + Build workflows that react to WhatsApp® events automatically. </p> </div> <Button diff --git a/src/app/(dashboard)/inbox/page.tsx b/src/app/(dashboard)/inbox/page.tsx index a5f9501..ffbf775 100644 --- a/src/app/(dashboard)/inbox/page.tsx +++ b/src/app/(dashboard)/inbox/page.tsx @@ -271,7 +271,7 @@ export default function InboxPage() { <div className="flex shrink-0 items-center justify-center gap-2 border-b border-amber-500/20 bg-amber-500/10 px-4 py-2"> <WifiOff className="h-4 w-4 text-amber-400" /> <p className="text-xs text-amber-400"> - WhatsApp is not connected. Go to Settings to connect your account. + WhatsApp® is not connected. Go to Settings to connect your account. </p> </div> )} diff --git a/src/app/(dashboard)/settings/page.tsx b/src/app/(dashboard)/settings/page.tsx index 8128daf..1c90cb8 100644 --- a/src/app/(dashboard)/settings/page.tsx +++ b/src/app/(dashboard)/settings/page.tsx @@ -39,7 +39,7 @@ export default function SettingsPage() { <div> <h1 className="text-2xl font-bold text-white">Settings</h1> <p className="text-sm text-slate-400 mt-1"> - Manage your profile, WhatsApp integration, message templates, and + Manage your profile, WhatsApp® integration, message templates, and tags. </p> </div> diff --git a/src/app/opengraph-image.tsx b/src/app/opengraph-image.tsx index 9cf4b1d..c0624cc 100644 --- a/src/app/opengraph-image.tsx +++ b/src/app/opengraph-image.tsx @@ -77,7 +77,7 @@ export default async function Image() { maxWidth: 1000, }} > - <span>Run your WhatsApp business from </span> + <span>Run your WhatsApp® business from </span> <span style={{ color: '#34d399' }}>one inbox.</span> </div> diff --git a/src/components/landing/hero.tsx b/src/components/landing/hero.tsx index bf59b01..622de56 100644 --- a/src/components/landing/hero.tsx +++ b/src/components/landing/hero.tsx @@ -25,7 +25,7 @@ export function Hero() { <div> <div className="inline-flex items-center gap-2 rounded-full border border-slate-800 bg-slate-900/60 px-3 py-1 text-xs text-slate-300"> <ShieldCheck className="h-3.5 w-3.5 text-emerald-400" /> - Built on the official WhatsApp Business API + Built on the official WhatsApp® Business API </div> <h1 className="mt-5 text-4xl font-bold tracking-tight text-white sm:text-5xl lg:text-6xl"> diff --git a/src/lib/seo/site-config.ts b/src/lib/seo/site-config.ts index cacccf7..0e1048c 100644 --- a/src/lib/seo/site-config.ts +++ b/src/lib/seo/site-config.ts @@ -11,11 +11,11 @@ export const SITE_URL = export const SITE_NAME = 'WaCRM' -export const SITE_TAGLINE = 'Run your WhatsApp business from one inbox' +export const SITE_TAGLINE = 'Run your WhatsApp® business from one inbox' /** Default description — reused by layout metadata and structured data. */ export const SITE_DESCRIPTION = - 'WaCRM is a WhatsApp CRM for small teams: shared inbox, contact hub, sales pipelines, broadcasts, and no-code automations — built on the official WhatsApp Business API.' + 'WaCRM is a WhatsApp® CRM for small teams: shared inbox, contact hub, sales pipelines, broadcasts, and no-code automations — built on the official WhatsApp Business API.' /** * Keyword targets. Search engines largely ignore the meta keywords