mirror of
https://github.com/Luchexx/wacrm.git
synced 2026-11-02 17:29:45 +00:00
Merge pull request #85 from ArnasDon/chore/whatsapp-trademark-symbol
chore: add WhatsApp® on first mention across user-facing surfaces
This commit is contained in:
commit
280e5b8cd9
@ -1,6 +1,6 @@
|
|||||||
# CRM Template for WhatsApp
|
# CRM Template for WhatsApp
|
||||||
|
|
||||||
> Self-hostable CRM template for WhatsApp — shared inbox, contacts,
|
> Self-hostable CRM template for WhatsApp® — shared inbox, contacts,
|
||||||
> sales pipelines, broadcasts, and no-code automations. Fork it, brand
|
> sales pipelines, broadcasts, and no-code automations. Fork it, brand
|
||||||
> it, host it.
|
> it, host it.
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# Documentation
|
# Documentation
|
||||||
|
|
||||||
A self-hostable CRM template for WhatsApp built on Next.js and Supabase.
|
A self-hostable CRM template for WhatsApp® built on Next.js and Supabase.
|
||||||
These docs walk you from a freshly forked repo to a production deploy.
|
These docs walk you from a freshly forked repo to a production deploy.
|
||||||
|
|
||||||
## Reading order
|
## Reading order
|
||||||
|
|||||||
@ -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. |
|
| 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. |
|
| 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. |
|
| 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. |
|
| 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. |
|
| Scheduler | External HTTP pinger | Hits `GET /api/automations/cron` to drain Wait-step executions. |
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# Automations cron
|
# Automations cron
|
||||||
|
|
||||||
The **Automations** module lets you build flows that react to WhatsApp
|
The **Automations** module lets you build flows that react to WhatsApp®
|
||||||
events (new message, new contact, keyword match, schedule, etc.). Most
|
events (new message, new contact, keyword match, schedule, etc.). Most
|
||||||
steps run inline — the exception is the **Wait** step, which parks the
|
steps run inline — the exception is the **Wait** step, which parks the
|
||||||
execution in `automation_pending_executions` until its due time.
|
execution in `automation_pending_executions` until its due time.
|
||||||
|
|||||||
@ -101,7 +101,7 @@ plain-HTTP version.
|
|||||||
|
|
||||||
## 7. Update the Meta webhook
|
## 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.
|
callback URL to `https://<your-domain>/api/whatsapp/webhook` and re-verify.
|
||||||
|
|
||||||
## 8. Schedule the automations cron
|
## 8. Schedule the automations cron
|
||||||
|
|||||||
@ -56,7 +56,7 @@ AUTOMATION_CRON_SECRET=generate-a-long-random-string
|
|||||||
- Rotate `SUPABASE_SERVICE_ROLE_KEY` if it leaks — Supabase lets you
|
- Rotate `SUPABASE_SERVICE_ROLE_KEY` if it leaks — Supabase lets you
|
||||||
regenerate it under Project Settings → API.
|
regenerate it under Project Settings → API.
|
||||||
- Treat `ENCRYPTION_KEY` like a database master key. Losing it means
|
- 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
|
## Next step
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@ cp .env.local.example .env.local
|
|||||||
|
|
||||||
You cannot run `npm run dev` until **at least** `NEXT_PUBLIC_SUPABASE_URL`
|
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
|
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
|
## 4. Set up Supabase
|
||||||
|
|
||||||
|
|||||||
@ -74,7 +74,7 @@ emails link back correctly.
|
|||||||
|
|
||||||
## 6. (Optional) Storage
|
## 6. (Optional) Storage
|
||||||
|
|
||||||
The app downloads WhatsApp media through Meta's `/download` endpoint and
|
The app downloads WhatsApp® media through Meta's `/download` endpoint and
|
||||||
currently relays it on demand rather than caching it in Supabase Storage.
|
currently relays it on demand rather than caching it in Supabase Storage.
|
||||||
No bucket setup is required for a default install.
|
No bucket setup is required for a default install.
|
||||||
|
|
||||||
|
|||||||
@ -41,7 +41,7 @@ In Supabase → **Authentication → Providers → Email**, either:
|
|||||||
Set `NEXT_PUBLIC_SITE_URL` **and** add the same origin to Supabase →
|
Set `NEXT_PUBLIC_SITE_URL` **and** add the same origin to Supabase →
|
||||||
**Authentication → URL Configuration → Redirect URLs**.
|
**Authentication → URL Configuration → Redirect URLs**.
|
||||||
|
|
||||||
## WhatsApp
|
## WhatsApp®
|
||||||
|
|
||||||
### Webhook verification fails in Meta
|
### Webhook verification fails in Meta
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# WhatsApp setup
|
# WhatsApp setup
|
||||||
|
|
||||||
This template talks to the official **WhatsApp Business Cloud API** (Meta). Each
|
This template talks to the official **WhatsApp® Business Cloud API** (Meta). Each
|
||||||
account stores its own `phone_number_id`, `waba_id`, and encrypted
|
account stores its own `phone_number_id`, `waba_id`, and encrypted
|
||||||
`access_token` — there is no shared app-level token. This page walks
|
`access_token` — there is no shared app-level token. This page walks
|
||||||
through getting those values and wiring the webhook.
|
through getting those values and wiring the webhook.
|
||||||
|
|||||||
@ -159,7 +159,7 @@ export default function AutomationsPage() {
|
|||||||
<div>
|
<div>
|
||||||
<h1 className="text-2xl font-bold text-white">Automations</h1>
|
<h1 className="text-2xl font-bold text-white">Automations</h1>
|
||||||
<p className="mt-1 text-sm text-slate-400">
|
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<Button
|
<Button
|
||||||
|
|||||||
@ -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">
|
<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" />
|
<WifiOff className="h-4 w-4 text-amber-400" />
|
||||||
<p className="text-xs 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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@ -39,7 +39,7 @@ export default function SettingsPage() {
|
|||||||
<div>
|
<div>
|
||||||
<h1 className="text-2xl font-bold text-white">Settings</h1>
|
<h1 className="text-2xl font-bold text-white">Settings</h1>
|
||||||
<p className="text-sm text-slate-400 mt-1">
|
<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.
|
tags.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -77,7 +77,7 @@ export default async function Image() {
|
|||||||
maxWidth: 1000,
|
maxWidth: 1000,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<span>Run your WhatsApp business from </span>
|
<span>Run your WhatsApp® business from </span>
|
||||||
<span style={{ color: '#a78bfa' }}>one inbox.</span>
|
<span style={{ color: '#a78bfa' }}>one inbox.</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,7 @@ export function Hero() {
|
|||||||
<div>
|
<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">
|
<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-violet-400" />
|
<ShieldCheck className="h-3.5 w-3.5 text-violet-400" />
|
||||||
Built on the official WhatsApp Business API
|
Built on the official WhatsApp® Business API
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1 className="mt-5 text-4xl font-bold tracking-tight text-white sm:text-5xl lg:text-6xl">
|
<h1 className="mt-5 text-4xl font-bold tracking-tight text-white sm:text-5xl lg:text-6xl">
|
||||||
|
|||||||
@ -11,11 +11,11 @@ export const SITE_URL =
|
|||||||
|
|
||||||
export const SITE_NAME = 'CRM Template for WhatsApp'
|
export const SITE_NAME = 'CRM Template for WhatsApp'
|
||||||
|
|
||||||
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. */
|
/** Default description — reused by layout metadata and structured data. */
|
||||||
export const SITE_DESCRIPTION =
|
export const SITE_DESCRIPTION =
|
||||||
'A CRM template for WhatsApp built for small teams: shared inbox, contact hub, sales pipelines, broadcasts, and no-code automations — built on the official WhatsApp Business API.'
|
'A CRM template for WhatsApp® built 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
|
* Keyword targets. Search engines largely ignore the meta keywords
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user