# Research Notes — Variety Sprint 2026-05-15

Captured for future-Wes / future-Nagatha / future-Origin reference. Things learned across compliance review + cross-LLM review + 35-ad creative sprint.

---

## Validated angles (cross-LLM round-2 confirmed strong, ≥7.5 weighted)

1. **Anti-spam** — "Boiler rooms and robo-dialers." Scored **8.83**. Visual: prop-IS-the-message (CSS phone with spam-call stack).
2. **Editorial pull-quote with utility-fact framing** — "Socialize the costs / Privatize the profits." Scored **8.78**. ⚠ Compliance hold pending — Social Issues SAC question.
3. **Loan-vs-bill comparison (now financing-agnostic)** — "My solar payment is cheaper than my electric bill was." Scored **7.89**. Visual: two-column ledger / data viz.

## Inferred-strong angles (built post-redirect, cross-LLM not yet re-run)

These weren't in round 2 but the underlying logic — distinct visual register, untapped audience hook, no AI-bg credibility risk — suggests they outperform the MI Track A baseline (6.2-6.8):

- **Social proof** (`ad-neighbor-v1`) — map register, audience-agnostic
- **Direct contrast / split-frame** (`ad-network-v1`) — "Their network. Your home." Sidesteps SAC risk that monopoly hit.
- **EV-specific** (`ad-ev-v1`) — clear audience filter, low waste
- **Subscription/hedge** (`ad-subscription-v1`) — taps SaaS-fatigue zeitgeist
- **Retirement** (`ad-retire-v1`) — fixed-income demographic, time-projection chart

## Compliance learnings (don't repeat)

- **Personal Attributes policy** triggers on "Your bill" implying viewer's specific financial state. Use possessive of the UTILITY ("ComEd bills") not the viewer ("your bill"). Caught on Ad 01 v3 originally.
- **Special Ad Categories (Social Issues)** triggers when:
  - Politically charged framing ("socialize the costs / privatize the profits")
  - Named regulated utility paired with critique
  - Editorial chrome that mimics news content
- **Misleading testimonial / unverifiable source** — anonymous Reddit attribution ("r/solar, homeowner one year post-install") FAILS Meta substantiation policy for financial claims. Fix: replace with Summit-customer attribution (with signed release) OR drop attribution and frame as editorial.
- **Verifiable third-party claims (e.g., Xcel 10.5%)** require LP-side public-source citation — PUC docket, news cite. Private correspondence (forwarded emails) doesn't substantiate.
- **Banned-list financing terms ("loan", "lease", "PPA")** — solar has multiple ownership paths; pinning one excludes the rest. Use "solar payment" or "going solar" as financing-agnostic generics. Per Wes 2026-05-15.

## Visual-register learnings (works / doesn't)

**Works (per cross-LLM consensus):**
- CSS-art (Pattern A) — all variety-batch ads. Solves the AI-bg credibility risk.
- Editorial pull-quote (`ad-monopoly-v1`, `ad-spam-v2`, `ad-toldyou-v1`) — high editorial gravity
- Data visualization (charts, ledgers, scoreboards) — concrete, defensible
- Document mockups (listing, policy, form) — concrete-feeling, novel
- Split-frame contrast — visual diff anchors the message

**Doesn't (cross-LLM round-2 flag):**
- Generic AI lifestyle bg (suburban home, kitchen scene) — reads as cheap/stock. Reviewers flagged this on MI Track A scoring 6.2-6.8.
- Dark scrim as crutch — too heavy a scrim makes ads look murky/timid. Pull back where the image can carry warmth.
- Templated eyebrow-pill top-bar EVERY ad — algorithm reads this as a template family. Break the chrome where composition wants it broken.

## Motion-pattern vocabulary (5 patterns)

Reusable across future ads:
1. **Counter ramp** (`ad-meter-animated-v1`) — digit display animates 0 → target with ease-out cubic. Pulse-glow on display.
2. **Glow + ramp** (`ad-paidfor-animated-v1`) — element glow oscillates while a counter ramps. Layered with sun-ray pulse.
3. **Sequential bar reveal** (`ad-retire-animated-v1`) — bars scale-Y in cubic-bezier staircase, narrative element (retire marker) drops in last with overshoot easing.
4. **Card-reveal + spotlight + dim** (`ad-subscription-animated-v1`) — cards slide in left-to-right, then non-target cards dim while target gets pulsing spotlight.
5. **Narrative quote-stack** (`ad-toldyou-animated-v1`) — quotes appear one-by-one, struck-through styling baked in CSS (no JS dependency), final "reality" box gets glow.

All 5 use ~7.5-9.5s capture windows. Playwright `recordVideo` API → webm → ffmpeg → MP4 (libx264, yuv420p, CRF 22, preset medium). Meta-compatible.

## Open research questions (next-cycle)

- **Cross-LLM round-3 on variety-batch CSS-art ads** — would validate which Tier-2 picks are actually strongest. Round 2 only covered the new pillars + MI batch.
- **Top-of-funnel A/B test runs** — which Tier-1 picks actually win in cold delivery?
- **Audience-segment lookalikes** — for Tier-2 audience-specific ads (retire, ev, firsthome), what's the best seed?
- **Motion-vs-still A/B** — do the motion samples outperform their static counterparts on CTR / 3s-view? Worth testing on the strongest concept.
- **State expansion** — MI track was paused mid-sprint. Need OR / WI / CA versions following the same Reddit-voice + CSS-art template.
- **Video-from-still pipeline** — Wan-2.7 image-to-video on Imagen-bg ads, OR Veo3 storyboard concat. Currently using CSS-keyframes-via-Playwright (deterministic, cheap, fast). Either upgrade path adds production cost but visual punch.

## Compliance decision still pending Wes

`ad-monopoly-v1` — **A** (restructure: drop Xcel + populist line, lose populist energy, normal CPM) or **B** (declare Social Issue ad, 2-4× CPM, restricted targeting, PUC public-source on LP). High-impact creative either way; Wes needs to call the trade-off.

**Pre-built Option A:** `ad-monopoly-v2-restructured` — drops Xcel/populist line, reframes around homeowner sovereignty. Headline "Own the panel. Own the rate." Same editorial register so Wes can compare gravity visually. When he picks, the loser archives.

---

## Round 3 lessons — LLM rankings are NOT stable

Big lesson from round 2 → round 3 comparison: **the same ad can flip dramatically between cross-LLM rounds.**

- `ad-spam-v1` was round-2's #1 (8.83 weighted). Round 3 ranked it #8 (38.7), with 2/3 reviewers saying "kill it." The concept didn't change; the focused 8-ad multimodal pass surfaced visual weaknesses the round-2 broad pass missed (cluttered notifications, generic phone prop, weak pillar-fit).
- `ad-network-v1` had similar reversal — initial enthusiasm, then round-3 said "placeholder that never got finished."

**Implication for future cycles:** run cross-LLM in tighter cohorts (≤10 ads) for definitive rankings. Broad batches give directional signal but miss visual-craft and concept-execution-match nuance. The round-3 focused review actually changed launch decisions.

## Hyper-local proof-out

Gemini's round-3 specific suggestion: "test hyper-local versions with a stylized-but-recognizable map of a specific neighborhood... Elevates from 9 to 10." Implemented as `ad-neighbor-v2-hyperlocal` (Lake Zurich, IL — Old Mill Grove Rd). Same structure as v1, market-specific timestamp + headline + body. Easy to fork per market. **This pattern should be the default for the neighbor concept at scale launch** — hyper-local outperforms generic on the social-proof pillar.

## Visual cohesion / register monotony

Both Gemini and Grok independently flagged this in round 3: `ad-loan` + `ad-retire` + `ad-firsthome` (chart/list registers) feel like siblings. **Don't stack same-register ads in one ad set rotation.** Algorithm rewards visual diversity within the set. Mitigation rule for ad-set construction:
- Max one chart-style ad per set
- Max one document-mockup style per set
- Pair with map / split-frame / editorial-pull-quote for register diversity

---

— Clone (ad31a131), wrap-up of variety sprint 2026-05-15 (updated post-round-3)
