← back to Wild Wallcoverings

marketing/README.md

121 lines

# Whimsical Wallcoverings — Launch Marketing Package

Built 2026-07-23. Total build cost: **$0 (local)** — ImageMagick + ffmpeg + local PG/Admin-API reads; no paid API calls.

## LAUNCH STATUS (fired 2026-07-23 on Steve's explicit go)

| Channel | Status |
|---|---|
| IG reel (Caption A) | **LIVE** — media 17973907902089874, https://www.instagram.com/reel/DbI8WntDQns/ (first comment = collection URL, comment id 18120044812873062) |
| IG grid Slot 9 (Regatta Royale) | **LIVE** — media 18104822393278517, https://www.instagram.com/p/DbI8ecNEvn-/ (first comment = product URL) |
| IG grid Slots 8→1 | **QUEUED** — one/day via `scripts/ig-grid-post-next.mjs` + `scripts/ig-grid-queue.json`; launchd plist DRAFT at `scripts/com.steve.whimsical-ig-grid.plist` (bootstrap paste below — scheduled-job gate) |
| TikTok | **Steve's hands** (~3 min) — package on `~/Desktop/tiktok-whimsical-launch/` (MP4 + Caption C one-pager). API path is private-only pre-App-Review (MCC confirms SELF_ONLY 2026-07-23). |
| Pinterest | **Steve's hands** (~10 min) — openclaw real-Chrome attempt 2026-07-23 found the ONLY logged-in Pinterest account is Steve's personal @wallpaper70s ("Wallpaper from the 70s", steveabramsdesigns@gmail.com, not business) — NO DW business account linked in Chrome. Wrong-brand, so 0 pins posted. Log the DW Pinterest business account into Chrome, then re-run; board + 10 pins per `pinterest-plan.md`, images in `pins/`. |
| Bluesky (Caption A short + line card) | **LIVE 2026-07-23** — at://did:plc:lgj3ph35oumd2srrlb4at7kl/app.bsky.feed.post/3mrd7cyoerw2s → https://bsky.app/profile/designerwallco.bsky.social/post/3mrd7cyoerw2s (verified via public API: image embed + caption + collection link) |
| Facebook (page 92675029719) | **BLOCKED** — MCC publish 2026-07-23 auto-skipped: page posting needs `pages_manage_posts` (Meta App Review). Attempt staged in MCC outbox. The 7/21 "can-post-now=FB" memory is stale — the MCC postable flag is now honest about the missing scope. |
| Threads | **NOT LIVE (verified 2026-07-23)** — post 18106202063518711 / permalink DbJGmiZmofJ does NOT exist: direct Graph API query returns "does not exist", the id is absent from the account's live feed (newest real posts are 7/21 Bahama Cloth + 7/20 videos), and the public permalink 302-redirects to `?error=invalid_post`. The earlier "LIVE" claim was a false positive — MCC verified the media CONTAINER at creation, not an actual published post. No Pharmacy Follies (or any whimsical) content is public on Threads. Re-publish needed if a launch post is still wanted (rebuild with a NON-pharmacy line card). |

**Token note:** Norma's own IG token (…fgZD) EXPIRED 2026-07-20 (Graph error 190, confirmed live 2026-07-23) — posting went out via the healthy never-expiring `META_ACCESS_TOKEN` (…ZDZD, app "DW Marketing", has `instagram_content_publish`, addresses @designerwallcoverings) direct to the Graph API. Norma needs a Steve token re-mint (short-lived Explorer paste → fb_exchange_token) before her agent can post again; per standing rule the secrets token was NOT written into Norma's .env.

**Media hosting:** reel at https://marketing.designerwallcoverings.com/reels/whimsical-wallcoverings-launch-reel-20260723.mp4 (Kamatera :9600 public path). Grid feed images = Shopify CDN on-the-fly 4:5 JPEG transforms of the live product images (`&width=1080&height=1350&crop=center&format=pjpg`); the Slot 5 line card was uploaded to Shopify Files (MediaImage 28595689324595 → https://cdn.shopify.com/s/files/1/0015/4117/7456/files/whimsical-wallcoverings-line-card.jpg?v=1784819162). Local 4:5 masters kept in `marketing/feed/`.

### IG grid queue — arm the daily launchd job (Steve paste)

Posts one queued slot/day at 10:00 (Slot 8 → Slot 1, done ~7/31; each run verifies the permalink back and logs to `scripts/ig-grid-queue.log`):

```sh
launchctl bootstrap gui/$(id -u) /Users/macstudio3/Projects/wild-wallcoverings/scripts/com.steve.whimsical-ig-grid.plist
```

To fire one manually instead: `node /Users/macstudio3/Projects/wild-wallcoverings/scripts/ig-grid-post-next.mjs`
To disarm after the queue completes: `launchctl bootout gui/$(id -u)/com.steve.whimsical-ig-grid`

## The line

- **Whimsical Wallcoverings** — 20 original playful/maximalist designs, in-house (vendor "DW Bespoke Studio"), digitally printed to order, 24" x 25" repeat, $195/roll + $4.25 sample.
- LIVE since 2026-07-22: https://www.designerwallcoverings.com/collections/whimsical-wallcoverings
- SKUs DIG-92001-25 … DIG-92021-25; product-id map in `../data/staged-shopify.json`; 20 of the original 21 `active` with live handles — **DIG-92005-25 (Pharmacy Follies · Aubergine Apothecary) archived 2026-07-23** — off the storefront + all sales channels (status `archived`, unpublished). NOTE: it still carries the `Whimsical Wallcoverings` / `New Arrival` / `Trending Wallcovering Collection 2026` tags, so it remains a smart-collection tag-rule member at the data level until those tags are stripped (verified via Admin API 2026-07-23); tag removal drafted for approval in `~/.claude/yolo-queue/pending-approval/`.

## Package index

| Asset | Path |
|---|---|
| Launch reel (9:16, 28s; rebuilt 2026-07-23 from the clean 10-design lineup — Pharmacy Follies removed, no longer appears) | `~/Videos/whimsical-wallcoverings-launch-reel-20260723.mp4` |
| Reel build script (reproducible, $0 local) | `../scripts/build_launch_reel.sh` |
| Reel caption drafts (3 options, IG/TikTok) | `marketing/reel-captions.md` |
| IG 9-post grid plan + 3 story concepts | `marketing/ig-plan.md` |
| Pinterest board + 9 pin drafts | `marketing/pinterest-plan.md` |
| Pinterest pin images (2:3, 1000x1500) | `marketing/pins/*.jpg` (9 files) |

The reel also appears in the video gallery at http://127.0.0.1:9763 (scans ~/Videos).

## Full product URL map

`https://www.designerwallcoverings.com/products/<handle>`

| SKU | Design · Colorway | Handle |
|---|---|---|
| DIG-92001-25 | Arcade Aristocrat · Loden & Bone | arcade-aristocrat-loden-bone-whimsical-wallcoverings |
| DIG-92002-25 | Tigris Nocturne · Onyx & Chalk | tigris-nocturne-onyx-chalk-whimsical-wallcoverings |
| DIG-92003-25 | Wilderness Waltz · Ink on Chalk | wilderness-waltz-ink-on-chalk-whimsical-wallcoverings |
| DIG-92004-25 | Halo Hypnosis · Silver & Dove | halo-hypnosis-silver-dove-whimsical-wallcoverings |
| DIG-92005-25 | ~~Pharmacy Follies · Aubergine Apothecary~~ — **ARCHIVED 2026-07-23** (off storefront; smart-collection tag strip pending approval) | pharmacy-follies-aubergine-apothecary-whimsical-wallcoverings |
| DIG-92006-25 | Cactus Cathedral · Blush & Alabaster | cactus-cathedral-blush-alabaster-whimsical-wallcoverings |
| DIG-92007-25 | Cumulus Court · Storm & Dove | cumulus-court-storm-dove-whimsical-wallcoverings |
| DIG-92008-25 | Mushroom Metropolis · Eucalyptus Mist | mushroom-metropolis-eucalyptus-mist-whimsical-wallcoverings |
| DIG-92009-25 | Cosmodrome Circus · Graphite Static | cosmodrome-circus-graphite-static-whimsical-wallcoverings |
| DIG-92010-25 | Pineapple Palazzo · Noir & Silver | pineapple-palazzo-noir-silver-whimsical-wallcoverings |
| DIG-92011-25 | Serpent Lagoon · Sea Glass | serpent-lagoon-sea-glass-whimsical-wallcoverings |
| DIG-92012-25 | Saurian Empire · Fog & Bone | saurian-empire-fog-bone-whimsical-wallcoverings |
| DIG-92013-25 | Voltage Ballroom · Gunmetal Fog | voltage-ballroom-gunmetal-fog-whimsical-wallcoverings |
| DIG-92014-25 | Orbit Deluxe · Cerulean & Chalk | orbit-deluxe-cerulean-chalk-whimsical-wallcoverings |
| DIG-92015-25 | Lunar Loom · Alabaster Veil | lunar-loom-alabaster-veil-whimsical-wallcoverings |
| DIG-92016-25 | Midnight Menagerie · Ink Jungle | midnight-menagerie-ink-jungle-whimsical-wallcoverings |
| DIG-92017-25 | Feather Fandango · Camel & Chalk | feather-fandango-camel-chalk-whimsical-wallcoverings |
| DIG-92018-25 | Velvet Ray Ballet · Dusty Rose Wash | velvet-ray-ballet-dusty-rose-wash-whimsical-wallcoverings |
| DIG-92019-25 | Regatta Royale · Hunter & Chalk | regatta-royale-hunter-chalk-whimsical-wallcoverings |
| DIG-92020-25 | Automaton Waltz · Silver & Chalk | automaton-waltz-silver-chalk-whimsical-wallcoverings |
| DIG-92021-25 | Anemone Opera · Powder Tide | anemone-opera-powder-tide-whimsical-wallcoverings |

## Go-live steps (each awaits Steve's explicit go)

### 1. Instagram — reel + grid (Norma agent :9810)

Norma instagram-agent posts via Meta Graph API and needs a public URL for media (URL-pull). Suggested flow per post:

```bash
# a) check agent + token health first (agent is auth-gated — DW-Agents standard basic auth)
curl -s -u admin:DWSecure2024! http://127.0.0.1:9810/api/status | python3 -m json.tool

# b) host the reel where Meta can pull it (marketing.dw reels dir on Kamatera, :9600 app)
scp ~/Videos/whimsical-wallcoverings-launch-reel-20260723.mp4 root@45.61.58.125:/root/DW-Agents/reels/public/

# c) fire the reel post (caption = Option A from marketing/reel-captions.md)
curl -s -X POST http://127.0.0.1:9810/api/post \
  -H 'Content-Type: application/json' \
  -d '{"type":"reel","media_url":"https://marketing.designerwallcoverings.com/reels/whimsical-wallcoverings-launch-reel-20260723.mp4","caption":"<Option A text>"}'
```

Then the 9 grid posts, one/day, in ig-plan.md's **reverse slot order** (Post 1 = Slot 9), feed images cropped 4:5 from the print masters. Meta token health is watched by meta-token-canary; verify HEALTHY before firing.

### 2. TikTok

Reuse the same MP4 + Option C caption. TikTok public posting is still gated on App Review (DW dev app 7662772350357866516 — token has video.publish but unaudited apps post private). Until review clears: post manually from the TikTok app with the reel AirDropped/synced, or fire via the `tiktok` skill in draft/private mode for QA.

### 3. Pinterest (manual)

Create the board + upload the 10 pins per `marketing/pinterest-plan.md` (images ready in `marketing/pins/`). Products already flow to the Pinterest sales channel (publication 44234276915) so rich-pin price data attaches automatically.

### 4. Optional follow-ons (not built yet, say the word)

- 1:1 and 16:9 reel variants (same script, different geometry) for LinkedIn/YouTube.
- Room-setting renders for the 9 grid designs (`room-setting-generator`) — would make the feed images stronger than flat tiles; Gemini cost ~$0.04-0.10 total, quote before running.
- Constant Contact launch mailer via MCC (:9820 draft API) — **outbound send is compliance-gated** (CAN-SPAM via vp-compliance-policy) and needs Steve's explicit list-send go; drafting is safe.
- New Arrivals tag sync so the 20 appear in the New Arrivals collection (`new-arrivals-rotator` / daily tag cron).

## Compliance notes

- No outbound list sends are part of this package (organic social only), so no CAN-SPAM/TCPA gate is triggered; publishing itself is customer-facing and stays Steve-gated.
- Copy rules enforced: "Wallcovering(s)" throughout; no inspiration-source names anywhere; the Pinterest SEO keyword exception (Steve-directed) is flagged at the top of pinterest-plan.md.
- All 21 designs previously passed settlement + copycheck gates (see `../data/designs.json` per-variant verdicts).