# Client Factory — CTWA creative briefs

**Kind:** own · **Market:** South Africa · **Channel:** Click-to-WhatsApp (CTWA), WhatsApp-first
**Positioning:** "websites that sell", result/growth, experienced marketer — **no "AI"**. Two landers: **/a** (dark) + **/b** (editorial).

> Source of truth (do not duplicate, edit there):
> - Full strategy + ad copy (primary/headline/desc/CTA) + v2 visual briefs: `sites/clientfactory/creatives/CONCEPTS.md`
> - Render batch report + angle→file map: `sites/clientfactory/ad-src/CREATIVES-REPORT.md`
> - Generator: `sites/clientfactory/ad-src/gen-ads.js`
> - Cabinet DigiU `1527924297828627`, page `772382919301160`, pixel `1165935804896281`, WA `wa.me/27609539763`

## 8 angles → files → lander

| # | Angle | Hook | Files (45/11/916) | LP |
|---|---|---|---|---|
| 1 | website-that-sells | "A website that actually sells." | `cfa-sells-*` | /a (A) |
| 2 | ROAS / money | "R1 in ads. R4.80 back." | `cfa-roas-*` | /a (A) |
| 3 | dead FB page | "Your Facebook page isn't a website." | `cfa-deadpage-*` | /a (A) |
| 4 | deadline guarantee | "Live in 5 days & 48h — or your build is free." | `cfa-guarantee-*` | /a (A) |
| 5 | cheap lead (WA) | "Leads at R8–R20. Not R30–R80." | `cfb-cheaplead-*` | /b (B) |
| 6 | speed | "Website in 5 days. Ads in 48 hours." | `cfb-speed-*` | /b (B) |
| 7 | bundle price | "Everything to launch: R7 800." | `cfb-bundle-*` | /b (B) |
| 8 | WhatsApp channel | "Your customers live on WhatsApp." | `cfb-whatsapp-*` | /b (B) |

Plus base posters `cfa-{11,45}.png` / `cfb-{11,45}.png`. Aspects: **45** = 1080×1350 (feed, primary), **11** = 1080×1080, **916** = 1080×1920 (Stories/Reels).

## What's in `assets/` (rendered)

28 PNGs = the **v1 typographic posters** (image only, no on-ad copy baked in). Dark = `cfa-*`, editorial = `cfb-*`. This is v1 visual; the ad copy lives in `CONCEPTS.md`.

**To generate (v2):** photo/UGC layer + 9:16 motion for each angle — see the "Визуал v2" blocks per concept in `CONCEPTS.md`.

## Attribution (critical for CTWA)

`cfa-*` → LP `/a` + welcome-message marker **(A)**; `cfb-*` → LP `/b` + **(B)**. The marker must live in the ad's welcome/ice-breaker (the click can skip the lander).

## Gate

Copy + draft renders only (done). Upload to cabinet = **PAUSED, supervised**; live ACTIVE + budget = Oleg GO.
