# Alt Page

> <!-- SETUP:BEGIN -->

- Skill: `harsh719/alt-page` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add harsh719/alt-page`
- Raw SKILL.md: https://api.skillmd.com/api/skills/harsh719/alt-page/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: harsh719 (https://skillmd.com/u/harsh719)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/harsh719/alt-page

---

<!-- SETUP:BEGIN -->
## Before you run this skill

This skill is brand-neutral. It reads its brand, palette and endpoints from
`brand.config.json` at the repo root.

**On first use, do this before anything else:**

1. Run `python3 brandkit.py`. It prints the config source and any placeholder
   that is still unset.
2. If it says `configured: False`, copy `brand.config.example.json` to
   `brand.config.json`.
3. Ask the operator for each value under `missing`, then write them in. Do not
   guess a brand name, a domain, or a colour.
4. Anything the skill writes out should be passed through
   `brandkit.fill(text)`, which swaps every `{{TOKEN}}` for its configured value
   and remaps the default palette to the operator's.

Text below uses `{{TOKEN}}` where a value is operator-specific. Treat an
unresolved `{{TOKEN}}` in your output as a bug, not as literal copy.

<!-- SETUP:END -->

<!-- CMS:BEGIN -->
## Publishing: which CMS

Never write CMS calls by hand in this skill. Use the shared adapter layer, which
covers Strapi, WordPress, Contentful, Sanity, Ghost, Webflow, Payload, Directus,
and plain files.

```python
from cms import get_adapter, Page, CMSError

cms  = get_adapter()                       # reads cms.kind from brand.config.json
page = Page(slug=slug, title=title, description=meta_desc,
            html=body_html, blocks=components, jsonld=graph)

entry_id = cms.upsert(page)                # ALWAYS a draft, whatever the CMS
admin, public = cms.locate(page, entry_id)
```

Rules:

- `upsert()` creates a draft. There is no way to publish through it, by design.
- `cms.publish(page)` goes live. Call it **only** after the operator says so, for
  this page, in this session. Approval never carries forward.
- If `cms.kind` is `none`, `get_adapter()` raises. Report that and offer `files`,
  which writes the page to disk instead, rather than guessing a CMS.
- `python3 -c "import cms; print(cms.describe())"` tells the operator what is
  wired and whether that adapter has been verified live.
- Only `strapi` and `files` are verified against real instances. For the rest,
  build the page, run the audit, then tell the operator to expect a possible
  field-name mismatch on the first push.

<!-- CMS:END -->

# /alt-page — {{BRAND_NAME}} Alternative / Comparison Page Builder

End-to-end skill that produces a {{BRAND_NAME}} alternative page ({{BRAND_NAME}}-vs-X) or A-vs-B comparison page (X-vs-Y, {{BRAND_NAME}} as third option), matching the design system, structure, and quality of the live references:

- `/jotform-vs-typeform/` (A-vs-B, {{BRAND_NAME}} as third option)
- `/google-forms-vs-microsoft-forms/` (A-vs-B, {{BRAND_NAME}} as third option)
- `/fillout-alternative/` ({{BRAND_NAME}}-vs-X, canonical design source)
- `/qualtrics-alternative/` ({{BRAND_NAME}}-vs-X, canonical FACT-PROCESS source — first page rebuilt under the research-first contract, 2026-08-10)

The skill:
1. Collects the minimum required inputs from the user
2. Runs the full research protocol (SERP + content gap + AEO/LLM + first-party fact verification) BEFORE any copy
3. Generates the HTML component files matching the canonical design system
4. Assembles a standalone prototype.html for browser preview
5. pushes to your CMS as a draft page with each component as a separate `micro-components.raw-html` block
6. Runs the mandatory technical SEO + schema audit AND the final fact-check gate
7. Produces the per-page Source Document
8. Waits for user approval before publish, then flips `publishedAt` and confirms live rendering

## Core principle (governs every other rule)

**Accuracy over assumptions. Research over copying. Useful information over word count. Human writing over AI-sounding SEO copy. Honest comparisons over exaggerated competitor criticism. User experience over search-engine manipulation. Verified facts over convenient claims.**

The final page should read like it was written by someone who genuinely understands the competitor, understands {{BRAND_NAME}}, understands the search intent, and is helping the visitor make the right product decision. The goal is not simply to rank; the page is a decision-making resource.

## Rule A — Inspiration pages are design-only, never fact sources (GLOBAL HARD RULE)

Root cause: the Aug 2026 factual audit found 4 alternative pages shipped with the inspiration page's facts (Wufoo's pricing tiers, "$0.05 overage", "owned by SurveyMonkey", "since 2006") left in place for different competitors, because components were cloned and find-and-replaced. This must never recur.

- An internal inspiration/reference page may be reused ONLY for: page structure, information architecture, section structure, layout, design patterns, visual treatment, formatting, component patterns, UX approach.
- NEVER carry over from an inspiration page: content, claims, facts, statistics, pricing, product information, competitor information, comparisons, sentences, or paragraphs.
- **Research first. Writing second.** Every factual statement is independently researched and verified for THIS page's competitor.
- Never assume information is correct because it exists on another {{BRAND_NAME}} page. Never copy incorrect information from one alternative page to another. Never guess or hallucinate. If information cannot be confidently verified, do not publish it as fact — flag it for the user instead.
- Cloned template blocks that carry competitor-specific facts (pricing tables, "why teams leave" cards, honest-comparison cards, glance tables) must be REBUILT from fresh research for every new subject, never find-and-replaced.

## Rule 0 — Ask these inputs first (in this order)

Before touching any file, ask the user each of these one at a time. Do not proceed until all are collected. After collection, echo the full input block back and ask "OK to proceed?" before starting the build.

1. **Page type** — one of:
   - `{{BRAND_NAME}}-vs-one` ({{BRAND_NAME}} positioned against a single competitor, e.g. `/fillout-alternative/`)
   - `a-vs-b` (two competitors compared head-to-head, {{BRAND_NAME}} enters as the third option, e.g. `/jotform-vs-typeform/`)
2. **Slug** — the URL path, kebab-case, no leading slash. E.g. `wpforms-alternative`, `jotform-vs-typeform`.
3. **Primary keyword** — target search term. E.g. `wpforms alternative`, `jotform vs typeform`.
4. **Competitor A** — brand name in correct casing (check the `competitor-research.md` dossier: `Jotform` not `JotForm`, `WPForms` not `WP Forms`, `forms.app` lowercase with dot, etc.). Also confirm the competitor's `/pricing/` URL.
5. **Competitor B** — same, only if page type is `a-vs-b`. Skip if `{{BRAND_NAME}}-vs-one`.
6. **Hero H1 override** — optional, one line, 40-60 chars. If skipped, the skill generates one following the pattern `<Competitor A> vs <Competitor B>: the honest comparison` (a-vs-b) or `The <Competitor> alternative with <{{BRAND_NAME}} differentiator>` ({{BRAND_NAME}}-vs-one).

## Rule 0.5 — Research protocol (mandatory, BEFORE any copy is written)

**The competitor is a VARIABLE, never a fixed subject.** Every research pass below targets the actual competitor of the page being created or updated, and switches automatically with the page: a Jotform Alternative build researches Jotform's SERP, pricing, features, limitations, G2/Capterra reviews, third-party sentiment, LLM/AEO presence, user pain points, competitors, and content gaps; a SurveySparrow build researches SurveySparrow's; and so on. The workflow and methodology stay constant, the research subject always follows the page. Reference implementation of the full protocol: the /qualtrics-alternative/ recreation (2026-08-10).

After Rule 0 collects inputs and BEFORE any content is drafted, run ALL FOUR research passes. Never skip any of them — every content skill that shipped without this in 2026-07 landed with 0/4 LLM citations and wrong-intent positioning; every page that skipped fact research in 2026-08 shipped fabricated competitor facts.

### 0.5a — SERP research + content gap analysis (DataForSEO)

Google SERP top-10 via DataForSEO Live SERP (US, desktop, depth 10). Extract top-10 organic, SERP features (AI Overview, PAA, Video pack, Related Searches, Discussions & Forums), and PAA questions verbatim. Firecrawl the top 5 commercial results: H2/H3 tree, word count, entity coverage, EEAT signals, distinctive sections.

From the SERP set, identify: search intent, common topics, content structures, questions being answered, feature comparisons, pricing presentation, product limitations, switching considerations, common objections, competitor positioning, related searches, recurring terminology and entities.

Then run the **content gap analysis** explicitly. Determine: what the top-ranking pages cover, what they cover poorly, what they completely miss, what users likely need but are not getting, what {{BRAND_NAME}} can explain better, and what unique information our page should include. Do NOT add content merely to increase word count — the gap analysis picks sections, it does not pad them.

### 0.5b — AEO / LLM research

Probe how the competitor and category are represented in ChatGPT (via `gpt-4o-search-preview` citation probe × 4 query variants), and where available Claude/Perplexity (DataForSEO `ai_optimization` llm_responses). Parse `annotations[].url_citation` for cited domains and track {{BRAND_NAME}} mentions.

Analyze: which products are recommended and why, common contextual queries, brand mentions, entity associations, sources being cited, authority signals, product positioning, common comparison questions, user questions, information gaps, and content structures LLMs lift from.

Use this to make the page easy to understand, factually precise, entity-rich, contextually relevant, and citation-worthy — for users first, answer engines second. Do not write robotic content just to optimize for LLMs.

### 0.5c — First-party fact research (the fact base for every claim)

For the competitor(s) on THIS page, research and record before writing:

- Company: ownership, parent company, founders, founding year, HQ (newsroom/press releases/about page)
- Product: real capabilities, real limitations, AI capabilities, integrations, enterprise features, offline/mobile support
- Pricing: full current tier structure (see Rule P below)
- Security/compliance: certifications actually held (never inferred)
- Reputation: recurring strengths and complaints from G2/Capterra/Reddit — always kept attributed

**Source priority (highest first):** 1. Official product website → 2. Official pricing page → 3. Official documentation → 4. Official help center → 5. Official company/about page → 6. Official press release → 7. Other authoritative sources. Never rely on SEO blogs or comparison sites when a first-party source is available. If an official pricing page renders via JavaScript and cannot be scraped, verify in a browser or flag it — never substitute a guess.

Existing helpers: `competitor-research.md` dossier (8 tracked competitors — a starting point, ALWAYS re-verified against live sources, never treated as current), `memory/brand-facts.md` ({{BRAND_NAME}}'s own facts — canonical, §12 pricing), Firecrawl live scrapes of every competitor `/pricing/` + `{{SITE_HOST}}/pricing/` saved to `output/alt-pages/<slug>/research/`.

### 0.5d — Synthesize and get approval

Present the ranking-factor report: current state, SERP snapshot, competitor pattern, LLM citation status, content-gap findings, fact-base summary (with anything unverifiable flagged), proposed component/section plan, meta title + description, compliance framing decision. **Wait for explicit user approval before building.**

## Rule P — Pricing requires extra verification (HARD)

Pricing is the most sensitive claim class on these pages. Before any pricing appears in copy:

1. Find the competitor's official pricing source and verify the current price there.
2. Determine whether the figure is monthly or annual billing, and whether annual billing is required to get it. Label the cadence in the copy.
3. Verify plan limits, free-plan limitations, feature restrictions, and usage/submission/response caps (including whether caps are per month, per year, or lifetime).
4. Record the source in the Source Document (Rule S).
5. Only then write the pricing into the page.

Never copy pricing from another {{BRAND_NAME}} alternative page. Never assume an old price is still valid. Never infer pricing from third parties when official pricing exists. If pricing cannot be verified (e.g. quote-only vendors like Qualtrics), say that honestly on the page instead of inventing numbers; review-reported figures may be used only with explicit in-copy attribution ("reviews on G2 commonly report...").

## Rule S — Source Document (one per page, organized SECTION-BY-SECTION, mandatory)

Every alternative/comparison page ships with a separate clean source document. Sources are logged **under the page section they support**, not as one general list (format updated 2026-08-10). Structure:

```
### Section: Why teams choose {{BRAND_NAME}} over [Competitor]

| Source link | Information |
|---|---|
| <URL> | Exact claim/text this source supports |

### Section: How {{BRAND_NAME}} compares with [Competitor]

| Source link | Information |
|---|---|
| <URL> | Exact claim/text this source supports |
```

...continuing for every section that contains externally verifiable information.

The **Information column carries the actual claim the source supports**, specifically — e.g. `G2 reviewers frequently mention ease of use and a lower learning curve as reasons for choosing lighter tools` — never "this source was used for the section". A human reviewer must be able to open any source and immediately see which part of the page it supports. No commentary, no methodology, no filler.

Save as `output/alt-pages/<slug>/sources.md` AND as a Google Doc (via `~/.claude/skills/gdoc/build_gdoc.py`, `GDOC_AUTH_DIR={{GOOGLE_AUTH_DIR}}`) titled `<Page name> — Source Document`, updated in place via `--doc-id` on subsequent runs.

## Rule E — Review-evidence hierarchy for switching-driver sections (mandatory)

The **"Why teams choose {{BRAND_NAME}} over [Competitor]"** and **"Why teams leave [Competitor]"** sections are built primarily from INDEPENDENT third-party user evidence, never from {{BRAND_NAME}}'s own marketing claims about the competitor. Source priority:

1. **G2** (competitor's review pages, esp. "dislikes"/cons)
2. **Capterra**
3. Other reputable third-party review/aggregator platforms (TrustRadius, Software Advice, Gartner Peer Insights)
4. Independent industry publications/reviews
5. The competitor's own website/documentation (for capability facts, not sentiment)
6. Other reliable sources only when the above do not provide enough evidence

Research recurring themes across reviews — ease of use, learning curve, setup/onboarding, pricing/value, complexity, user experience, flexibility, speed, small-team usability, feature accessibility, administrative overhead, workflow limitations, and other repeated pain points — and include ONLY themes the evidence actually supports. Distinguish "why users choose lighter alternatives" (what they value) from "why users leave [Competitor]" (their stated frustrations). **Never manufacture a pain point to make {{BRAND_NAME}} look better.** If review sources are thin on a claim, step down the hierarchy and verify, or drop the claim. Every theme used gets a row in the Source Document under its section.

## Rule C — On-page content hygiene (what never appears in user-facing copy)

The published page must NOT contain:

- Research notes, source links, or verification notes ("According to our research", "Based on our analysis", "We checked/reviewed...", "verified against each vendor's live pricing page")
- Date-stamped verification lines: "As of [date]", "Checked [month/year]", "(checked August 2026)" — these read as editorial notes and go stale. Freshness belongs in `dateModified` schema and the Source Document, not in copy. (Flagged by Harsh 2026-08-10 on /qualtrics-alternative/.)
- Research methodology, internal editorial notes, writer commentary
- Unnecessary quotation marks around headlines, product descriptions, feature descriptions, or comparison statements — normal factual statements are not pseudo-quotes. Real quotations only when genuinely necessary and properly sourced.
- Self-referential media captions ("Real {{BRAND_NAME}} UI, captured in-app", "actual product screenshot") — a caption may state only WHAT is shown ("Form builder, Design tab"), never that it is real/actual/captured.
- Filler: generic introductions, "In today's..." openers, repetitive sections, unnecessary FAQs, generic conclusions, padding of any kind. Every section must have a clear purpose and provide genuine visitor value. Do not add sections solely because a competitor page has them or a keyword exists.

In-copy attribution of review-sourced claims IS allowed and encouraged ("a steep learning curve is a recurring theme in G2 reviews") — that is honesty, not commentary. The line is: attribute claims naturally in prose; never annotate the page with the research process.

## Rule H — Honest comparison (content contract)

The comparison must be genuinely honest. Never: manufacture competitor weaknesses, exaggerate {{BRAND_NAME}} advantages, misrepresent competitor features, use knowingly outdated information, make misleading comparisons, or present opinions as facts.

The page must clearly cover, based only on verified differences:
- **Where {{BRAND_NAME}} is stronger** (each item tied to a verified feature/plan fact)
- **Where the competitor is stronger** — transparent, specific, useful
- **Who should choose which product** — help the visitor self-select

The **"When [Competitor] is still the better choice"** section gets a strong, polished presentation: real competitor strengths (certifications held, ecosystem depth, specialized tooling), concrete "choose them if" scenarios, and an honest-tradeoff line. It is a decision-making section, not an apology. Honesty increases trust and conversion. Reference implementation: /qualtrics-alternative/ (rebuilt 2026-08-10: certified enterprise research depth + XM-platform consolidation, both verified).

Conversion frame — a visitor should be able to answer all ten within one scroll: (1) What is the competitor? (2) What does it cost? (3) What does it do well? (4) What are its limitations? (5) How does {{BRAND_NAME}} compare? (6) Where is {{BRAND_NAME}} better? (7) Where is the competitor better? (8) What does switching involve? (9) Which product is right for them? (10) What should they do next?

## Rule L — Competitor logos

Every compared product carries its correct official brand mark — no generic icons, no placeholders, no AI-generated logos, no wrong marks. Standard implementation: Google favicon service `https://t3.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://<official-domain>&size=64` (renders the vendor's real favicon; use the product's own domain, e.g. `forms.office.com` for Microsoft Forms, gstatic's official Forms icon for Google Forms). Sizing/treatment is uniform page-wide: 20x20 (22-24px in pricing card headers), `border-radius: 4px`, inline-flex with 8px gap before the name. Logos appear in: glance table column headers, pricing card headers, vs-cards, and "other alternatives" cards.

## Rule V — Voice: world-class product-marketing copy (mandatory)

The copy is written to the standard of a world-class product marketer and conversion copywriter, with visible command of user psychology, buying anxiety, friction, objections, emotional triggers, decision-making, product positioning, sentence rhythm, information hierarchy, and conversion psychology. The reader should feel: *"this company understands exactly why I'm considering leaving [Competitor], and they're showing me a better path."* The objective is never "salesy" — it is understanding, progressively built as the reader scrolls.

**Write from the reader's perspective, not from a positioning framework.** Before drafting the hero, articulate what the searcher is actually thinking (e.g. for an enterprise-tool alternative: "this is more complicated than what we need", "why does a simple form require this much setup?", "we're paying for a huge platform for one workflow", "how fast can my team actually start?"). The hero must make that visitor feel "yes, this is exactly the problem I'm trying to solve" — not read a compressed summary of our positioning.

**Banned constructions** (these read as AI even with perfect grammar):
- Stacked-descriptor sentences: "X is enterprise-quoted, procurement-gated, and slow to onboard" — three compressed adjectives standing in for a real thought
- The "X is this. Y is that." contrast formula, unless the sentence genuinely earns it
- Words chosen for compression instead of natural communication; sentences that summarize a framework instead of talking to a buyer
- Empty superlatives, excessive adjectives, artificial contrasts, repetitive structures, generic SaaS phrases, keyword stuffing, AI-style headings, predictable transitions, overly compressed sentences, em dashes
- "In today's..." intros, repeated "whether you're..." and "from X to Y..." constructions, generic conclusions, generic CTA language, fake enthusiasm

**Required:** natural sentence lengths (varied), strong verbs, specific language, concrete examples, human phrasing, appropriate emotional tension, clear explanations, transitions that connect sections, persuasive but honest positioning. **Every sentence must have a reason to exist. The copy must read naturally aloud** — read it aloud (mentally) as a gate.

- **Run the `/humanizer` skill over every copy block** during writing and again before push. Non-negotiable.
- **Style references (style ONLY, never content):** Jotform, ClickUp, monday.com alternative/comparison/product pages — sentence rhythm, tone, information density, how they explain differences, address objections, structure comparisons. Derive principles; write in {{BRAND_NAME}}'s own voice; never copy sentences.
- Never write like: an SEO content generator, a template, a generic SaaS landing page, a feature comparison engine, or a corporate brochure.

## Rule N — Narrative arc + switching anxiety (page-level content design)

The page is a story, not a stack of independent SEO sections. Target arc:

**Problem → Friction → Recognition → Better alternative → Proof → Product experience → Confidence → Decision → Conversion**

Scrolling top to bottom, the reader should naturally learn: (1) why [Competitor] may not fit them, (2) why other teams consider alternatives, (3) what {{BRAND_NAME}} does differently, (4) how it solves their specific frustrations, (5) what the product experience actually looks like, (6) why they can trust the comparison, (7) why switching is practical, (8) why it is worth trying now. Section subheads do transition work — each one picks up where the previous section left off; generic connective tissue is banned.

**"How to switch" section — reduce switching anxiety.** The section exists to answer the reader's real question: *"if I move away from [Competitor], how hard is this going to be?"* The steps must feel simple, practical, predictable, low-risk, fast, and manageable, and be written specifically for someone migrating from THIS competitor (name its actual export screens and artifacts). Never a generic migration workflow.

**Step 1 presentation:** the first step must make the reader think "this is what I would actually do first." Headline, supporting copy, and visual must reinforce each other; the visual shows the relevant product moment (real footage per Rule D), not a generic screen. If the right footage does not exist, ask for it. Steps flow visibly into each other (step 1's output is step 2's input).

## Rule D — Product demonstrations (real, PAGE-SPECIFIC footage only; updated 2026-08-11)

A demo video/GIF must match the page it sits on. **Ask the user for the specific video associated with this page/competitor before building the demo section** — never drop in footage from another page because it exists, and never use generic or AI-generated video. A clip of the AI building a consent form does not belong on a survey-tool comparison; the mismatch reads as generic filler (flagged by Harsh 2026-08-10 on /qualtrics-alternative/). If the right footage does not exist yet, OMIT the demo section and request a recording; ship the section when the footage arrives.

- Source walkthrough library: keep your own screen-recording clips in one place and reference them by filename. Use a clip ONLY where its content matches the section's story.
- Never fabricate or simulate UI.

**GIF/clip production pipeline (locked 2026-08-11):** cut from the page's Loom recordings → crop ALL recorder chrome and delogo the Loom bubble (it moves; probe its position per segment and time-gate delogo boxes if needed) → cut every loading state and idle stretch → ~2x speed → export GIF at 900px wide, 14fps, two-pass palettegen → upload to your CMS media library. Each embed ships `width`/`height` attributes (no CLS), `loading="lazy"`, descriptive alt, no authenticity captions. When the display slot is wider than ~700px, use an MP4 `<video autoplay muted loop playsinline>` instead — GIF upscaling blurs. Legacy crop reference for the walkthrough library: `1826:1080:46:0`, delogo `x=8:y=270:w=104:h=300` post-crop.

**Hero comparison video — LOCKED SPEC (v2, 2026-08-12).** Reference implementations: `videos/fmt-vs-surveysparrow-sbs/` and `videos/fmt-vs-qualtrics-v2/` (both live in their page heroes). **When the user supplies Loom recordings for an alternative page, build exactly this. Do not invent a new format.** Copy the reference `index.html`, swap the competitor tokens/copy/footage, re-render.

**Format:** ~52s, 1920x1080, MUSIC-ONLY (no voiceover ever), {{BRAND_NAME}} left / competitor right throughout.

**Scene order and timing (the locked spine):**

| Time | Scene |
|---|---|
| 0–4.2 | Logo VS intro: two cards slam in, light beam, VS with burst ring + 6 sparks |
| 4.2–16.7 | **Race**: "Creating a form/survey" on real footage at ~2x, side by side |
| 16.7–20.5 | **Diff card**: one-line lead + two big-number cards naming the core difference |
| 20.5–36.5 | **4 feature beats**, 4s each: kicker → card → implication pill → category verdict |
| 36.5–42.0 | **Pricing**: 3 rows per side, each with its cap/limit as a sub-line, plus a footer line |
| 42.0–48.0 | **"Who should choose what"**: 6 rows, "If you need X → Pick Y" |
| 48.0–52.0 | Finale: wordmark, one-line positioning, CTA |

**The pill system (one class, everything):** `display:inline-flex; align-items:center; justify-content:center; gap:10px; font-size:22px; font-weight:700; line-height:1; border-radius:999px; padding:11px 26px 15px; border:1px solid transparent` with `svg{width:20px;height:20px}`. The asymmetric 11/15 padding is **measured, not arbitrary** — Inter's line box sits the ink ~3.5px low under symmetric padding, which reads as "empty space above the text". The transparent base border keeps bordered and filled pills the same height. Never use symmetric padding or `line-height: normal` on a pill.

**Brand colors, not generic green.** {{BRAND_NAME}} = `#8B5CF6` fill / white text, soft `rgba(139,92,246,.16)` + border `rgba(167,139,250,.42)` + text `#DDD6FE`. Competitor = their real brand color sampled from their own favicon or UI, lightened for legibility on the dark stage (SurveySparrow `#489DA8` → `#5FC2CB`; Qualtrics `#2873E9` → `#6BA5FF`). Neutral/limitation pills stay grey (`rgba(255,255,255,.06)` + `#B9B2CF`); "the catch" lines use amber `#E3B778`. Brand colors are accents on pills, chips, card borders, and panel frames only — the stage stays violet-neutral so the video never becomes a rainbow.

**Badges over white product UI must be opaque.** A translucent pill vanishes on a white app screenshot. Use a solid fill: brand fill for the winner, `#3E3856` slate for a neutral note.

**Both sides always carry a real card. Never blur a card away.** Blurring a whole card destroys its 1px border and collapses its fill into the stage, producing dead space (shipped bug 2026-08-12). The secondary side gets the SAME footprint (620px wide, 178px min-height, same padding/radius) with: neutral grey border, no glow, `#CFC9DE` heading, grey icon tile, muted pill — and **real information inside** (the actual limitation plus its numbers), not placeholder bars. Hierarchy comes from palette, glow, and entry motion (the winner card rises 22px; the secondary card only fades with the scene).

**Copy is decision-oriented, not descriptive.** Card headline = what it is; pill = what it means; never both saying the same thing. "Free: 75/quarter · Paid: annual cap" beats "75 a quarter free, then capped yearly". Keep pills to ~3 words where possible.

**Category verdicts** (subtle strip under each beat, uppercase label + brand-coloured winner) only where the research genuinely supports a winner. Never manufacture one.

**Limitations get surfaced** with a warning-triangle SVG and a "The catch:" line, including on our own side. Use inline SVG, never emoji.

**Honest beat is mandatory:** at least one of the four beats flips in the competitor's favour (compliance, chat UX, ecosystem depth), with their brand-coloured card and an explicit verdict naming them. The decision scene must also split roughly evenly — a 6-0 sweep is a red flag that the research was not honest.

**Footage rules:** no camera push / scale on the recordings — any scale crops the product UI (shipped bug 2026-08-12). Use `object-fit: contain` on a white `.mv` background so nothing is cropped and any letterbox blends with the app UI. Remove Loom recorder artifacts by **painting over them with the sampled local background colour** (`drawbox` with the measured hex), never with `delogo` — delogo leaves a grey smear that is visible against white app chrome. Measure the artifact's bbox from frames, verify the paint at 3x contrast boost, and never crop so far that you clip the product's own logo or nav.

**Fact gate:** every beat, price, cap, and verdict must trace to the page's verified glance/pricing sections and Source Document. The video never introduces a claim the page does not carry.

**Brand consistency:** locally hosted Inter woff2 (the brand font), `#0A0817` stage with a violet radial glow that breathes over the full runtime, 0.35–0.5s power2 crossfades between scenes, `back.out` pops on pills, and the SAME Numtera track as the Aug-2026 launch video (`videos/4 Aug launch video/Best AI SaaS Product Launch Video  Numtera.mp3`) trimmed to length with a 3s fade-out.

Build in HyperFrames, `npx hyperframes check` must pass with 0 errors, QA every scene from rendered frames (not from the preview), then archive the project under `videos/<slug>-sbs/` so it can be re-rendered outside the session. Upload the render to your CMS media library and wire it into the hero per the Hero contract.

## Rule G — Section content contracts (updated 2026-08-10)

**"Why teams leave [Competitor]":**
- Section intro = ONE short, direct, research-backed sentence stating the primary reason users move away. **No review-site meta-commentary in visible copy** ("the same themes run through G2 and TrustRadius reviews" is banned on-page). The research informs the copy; it never becomes the copy. Sources live in the Source Document.
- The 4 cards come from scraping/analyzing negative reviews (G2, TrustRadius, Reddit, others per Rule E): features users dislike or find unnecessary, missing functionality, poor use cases, pricing/value complaints, usability problems, limitations, stated switching reasons. Pick the strongest RECURRING problems and turn them into short, specific, authentic titles ("Too much complexity for simple surveys", never "Complex Experience"), each with 1-2 concise sentences of the actual problem. Cards must read like real customer experience, not competitor-comparison copy.

**"Why teams choose {{BRAND_NAME}} over [Competitor]":**
- **4-6 cards maximum**, each an advantage RELATIVE TO THIS COMPETITOR (research-backed). Never the full {{BRAND_NAME}} feature list, never the same card set across pages. If the competitor is strong somewhere (e.g. they ship offline apps), that card does not appear.

**MCP is no longer a safe default differentiator. VERIFY IT PER COMPETITOR, EVERY TIME.** The category adopted MCP fast during 2026. As of 2026-08-12 these competitors ship one, confirmed first-party, and any page claiming an MCP or AI-generation gap against them is factually wrong:

| Competitor | MCP endpoint / product | Tier |
|---|---|---|
| Cognito Forms | "Cognito Forms MCP Connector" (Claude, ChatGPT) + prompt-to-form AI | Pro and above |
| Jotform | `mcp.jotform.com` (ChatGPT Apps, Claude, Cursor, Manus) | Not confirmed which tiers |
| Typeform | `api.typeform.com/mcp` (OAuth only, EU regional endpoints) | Not confirmed which tiers |

Confirmed as NOT shipping one: Qualtrics, SurveySparrow, 123FormBuilder, Wufoo, Alchemer (all third-party Zapier/Pipedream wrappers only). Check the competitor's own docs and integrations directory before the MCP row, card, or beat goes anywhere near copy.

**Scraping notes that cost time to rediscover:** `alchemer.com/pricing/` 404s, the live path is `/plans-pricing/`, and Alchemer sits behind Cloudflare which blocks both plain curl and headless Playwright — Firecrawl gets through. SurveySparrow and Cognito localise currency by IP, so a US-rendered capture (Firecrawl, or Playwright with a US-looking session) is required before quoting any dollar figure. Where they ship one, drop the MCP angle on that page and compete on something real. Add every new finding to this table.

**The factual-accuracy audit sheet is a starting list, NOT a source of truth.** Verified 2026-08-12: the sheet's own "Correct Information" column was itself wrong or stale on four Jotform/Typeform points (Typeform's tier prices, Typeform's free-plan response cap, its template count, and a claim that Jotform publishes no per-form field cap). Live first-party verification supersedes the sheet every time, including the sheet's corrections.

**"When [Competitor] is still the better choice" (honest comparison) — scannable card design:** clear card titles + relevant icons + short descriptions + bullet points; no large text blocks; each card lands its point in seconds; balanced and credible, not promotional.

**"See it in action" tabbed demo section (locked 2026-08-11, reference: /qualtrics-alternative/ `demos.html`):**
- 3 tabs, each a distinct product workflow relevant to this competitor's audience (e.g. Create with AI / Branching logic / 180+ languages), each panel = H3 title + ONE line saying what the viewer is seeing and why it matters + a real product GIF per Rule D's pipeline.
- **CSS-only radio-input tabs — no JavaScript ever.** **Strapi only:** raw-html blocks do not reliably execute scripts on the live site. Hidden radios + label pills + `:checked ~` sibling selectors; panels stacked via `grid-area: 1/1` with a 320ms opacity/translate crossfade; `:focus-visible` outline on the active label.
- Tab bar: centered segmented pill control on a `#f2f4f7` track, active pill filled violet-600.
- **Placement: directly AFTER the glance/honest-comparison table, BEFORE "Why teams leave".** Rationale (locked): the hero video already gives "see the product in seconds"; the glance table is the highest-intent block on an alternative page and must not be pushed down; the tabs then prove the table's {{BRAND_NAME}} claims immediately after they are read. Do not place the demo after why-pick.

**Answer-first TL;DR block — LOCKED (2026-08-12).** Reference: `HTML component/surveysparrow-alternative/answer-first.html` (also on /qualtrics-alternative/ and /123formbuilder-alternative/). Every alt page carries ONE block, positioned **immediately after the trust-seals macro** (so it is the third thing on the page, right where answer engines look, without breaking the locked hero → trust-seals adjacency). It is a single bordered card in two parts:

- **Top (violet-tinted):** a `TL;DR` badge beside an H2 in **question form naming the competitor** ("Is {{BRAND_NAME}} a good [Competitor] alternative?"), then a **three-sentence answer**: (1) yes/no plus the condition that makes it true, (2) the mechanism in one clause with the competitor's actual number, (3) where the competitor still wins. Three sentences is the ceiling.
- **Bottom (white):** the **decision matrix** — 6 rows of "if you need X → [winner]", each with a topic icon, split roughly evenly between the two products. The winner is named in text on every row, so identity is never colour-alone. {{BRAND_NAME}} rows use the violet pill, competitor rows use the neutral grey pill; the page stays violet-only (never import the competitor's brand colour into the page, that is video-only).

Hard rules learned from the shipped iteration:
- **Never a separate TL;DR and a separate decision guide.** Shipping both produced three competing summaries (hero video, TL;DR, decision guide) and a wall of text under the hero. Merge them.
- **Never restate the glance table.** The first version listed free plans, caps, seats, AI, agents, and competitor wins as six numbered paragraphs, all of which are rows in the glance table one section below. The TL;DR gives the verdict; the table carries the numbers.
- **The hero video is already a visual TL;DR.** The text block must complement it (scannable verdict a crawler can read), not repeat its narration. Overlap with the video's closing decision scene is intentional and fine: one is muted motion at second 48, the other is indexable text.

**Question-form H2s — LOCKED (2026-08-12).** Convert the seven query-shaped section headings; leave the rest alone. The canonical mapping:

| Section | Question form |
|---|---|
| glance | {{BRAND_NAME}} vs [Competitor]: where do they actually differ? |
| why-leave | Why do teams leave [Competitor]? |
| pricing | {{BRAND_NAME}} vs [Competitor] pricing: what do you actually pay? |
| api-mcp | Can AI agents read your survey/form data? |
| why-pick | Why do teams choose {{BRAND_NAME}} over [Competitor]? |
| switch | How do you switch from [Competitor] to {{BRAND_NAME}}? |
| when-wins | When is [Competitor] still the better choice? |

Leave demos, privacy, ask-the-AI, other-alternatives, FAQs, more-from-{{BRAND_NAME}}, and the final CTA as declarative. Keep the "vs" keyword in the two headings that carry it, and when a heading loses a detail (for example "in 3 steps"), move that detail into the section's subhead rather than dropping it.

**Section callouts — LOCKED (2026-08-12).** Break the two densest sections (glance and pricing) with one callout each: a soft violet box (`#faf5ff` on `#e9d7fe`, lightbulb icon in a `#f4ebff` tile) holding a bolded lead-in plus one or two sentences. Glance gets a "**Worth knowing:** the differences cluster in ..." orientation line; pricing gets a "**Worth flagging:** ..." line that surfaces a real catch (billing cadence, annual caps, per-seat add-ons). Insert as the last child of the section container. Never use a callout to restate a benefit already on screen.

**Reversibility is mandatory for any retrofit of a live page.** Before editing an existing page, snapshot its full component array plus meta to `output/alt-pages/<slug>/snapshots/page-<id>-pre-aeo-<stamp>.json` and write a one-command `scripts/restore_<id>.py`. The operator must be able to revert with a single command without deciding anything.

**Conciseness:** the goal is more relevant, not more content. Remove anything that does not add value, repeats another section, is generic, lacks research support, does not relate to this competitor, or pads length. Every section answers a real visitor question.

**Layout contracts (added 2026-08-10):**

- **"Why teams cho

…(truncated)
