Programmatic content in GTM30

How to design a programmatic content system where your website becomes the primary narrative and data layer for GTM30.

Last updated: December 10, 2025

Quick start

Read this page as an implementation sequence. Programmatic content becomes powerful when the model, templates, and signals are designed together.

  1. Model: define a small set of entities and fields (section 3) and keep the entity model stable.
  2. Templates: decide page types and consistent spines (sections 4–5).
  3. Signals: emit machine-readable metadata + events/traits (sections 6–7) so they become reusable traits.
  4. Scale: add LLM, multilingual, tools, and UGC once the basics work (sections 8–10).

1. What programmatic content means in GTM30

In GTM30, programmatic content is not a pile of long-tail pages or AI slop. It is a structured system that turns your website into:

  • A discoverability layer for problems, use cases, and solutions.
  • A single source of truth for your narrative.
  • A structured data layer for automation, CRM, and LLMs.

The goal is that every page should be easy for humans to scan, easy for search engines to index, and easy for LLMs and internal tools to query and summarize.

Practically, you design a data model (entities + fields), render it through templates, and emit consistent signals (structured data + events) that other GTM systems can reuse.

Programmatic content works best when it is connected to ambassadors and community, so your narratives and signals stay consistent across every surface.

2. Role in the GTM30 stack

Programmatic content supports all four GTM30 pillars:

  • Ambassadors: canonical links for every problem or use case, in the right language and level of depth. See the ambassador system.
  • Community: every recurring topic gets a canonical home page; answers and threads link back to structured pages instead of scattered posts. See the community engine.
  • Programmatic content: each page emits stable, machine-readable signals that feed marketing automation, lead scoring, CRM, and LLM tools.
  • Cross-functionality: programmatic content provides the shared, entity-based schema and traits that Product, Growth, Sales, and Support use to stay aligned. Learn how the schema powers cross-functionality.

What it provides (inputs → outputs)

Programmatic content is the shared layer other GTM surfaces read from: canonical pages, consistent internal links, and machine-readable traits.

PillarProgrammatic inputOutput you get
AmbassadorsCanonical entity pages + consistent messaging + shareable URLsEasier linking and distribution without narrative drift
“link to the canonical page”
CommunityTopic hubs + glossary + how-to pages tied to entitiesFaster answers + fewer repeated threads + better internal linking back to canon
Programmatic contentTemplates + URL structure + structured data + event schemaScalable page generation with stable signals for SEO, LLMs, and automation
Cross-functionalityShared entity ids + traits (ICP, pain, intent, lifecycle) across all pagesOne language for Product, Growth, Sales, Support + consistent routing and reporting

Your website becomes the master narrative and data backbone for GTM30 – the layer every other channel (ads, sales, support, AI, ambassadors, community) reads from.

3. Start from the entity model, not keywords

GTM30 programmatic content starts from a data model, not from a list of keywords. Define a small, stable set of entities that power both content and automation.

Core entity types

  • Problems and pains.
  • Use cases and workflows.
  • Industries and verticals.
  • Roles and personas.
  • Integrations, tools, and alternatives.
  • Features and modules.

Typical fields

Each entity has fields usable in content, analytics, and automation:

  • Stable entity id, name, and short label.
  • Problem type and primary pain tag.
  • ICP segment (industry, company size, market).
  • Persona (role).
  • Lifecycle stage focus.
  • Intent level (low, medium, high).
  • Region relevance (global, EU, US, etc.).

Entity ids and relationships (what makes it stable)

Your entity model stays stable when ids are durable and relationships are explicit. That way, you can change copy, templates, and keywords without breaking the underlying structure.

  • Stable ids: use predictable ids like problem.ticket_backlog or usecase.churn_reduction_b2b_saas.
  • Localized slugs: slugs can change per locale; ids should not.
  • Relationships: connect entities with arrays like “problems”, “personas”, “integrations”, “features”, “alternatives” so templates can generate consistent internal links.

Example: keyword → entity → page (and automation tags)

Imagine you sell a helpdesk / shared inbox SaaS. The keyword is not the "thing" you model - it maps to a stable entity that many pages and systems can reference.

Query (keyword)Maps to entitySo you show / tag
reduce ticket backlog fastproblem.ticket_backlog
type: problem
Problem page: "Ticket backlog"
intent=high · pain=overload
ticket backlog meaningproblem.ticket_backlog
type: problem
Definition/education section for the same entity
intent=low
Zendesk alternativealternative.zendesk
type: alternative
Alternatives / comparison page
intent=comparison
helpdesk for Shopifyintegration.shopify
type: integration
Integration page (templates, setup, use cases)
platform=shopify
shared inbox for support teamsfeature.shared_inbox
type: feature
Feature page (benefits, constraints, proof)
feature=shared_inbox

Test for a good entity model: if someone views three or more pages tied to the same entity set, you can reliably tag them with ICP segment, primary pains, and relevant workflows.

Don't treat every keyword as its own entity. You want a small, stable schema that many pages reference, not thousands of fragile records.

4. Page types that sit on top of the model

Once you have an entity model, you don't publish “a page per keyword”. You publish a small set of page types (templates) that each present the same entities from a different angle: explain a concept, guide an implementation, compare alternatives, or quantify impact. The model stays stable; the pages are the different views.

Example: one entity, many page views

Take one entity (e.g. usecase.churn_reduction_b2b_saas) and ship a small “pack” of pages that all reference it. Different templates, same underlying concept.

Page viewExample titleWhat it should link to / produce
Use case landingChurn reduction for B2B SaaSLinks to pains, personas, features, integrations
tags: icp=b2b_saas · intent=high
Blog article5 churn reduction patterns that compound retentionLinks back to the canonical use case + glossary terms
tags: intent=medium
Glossary entryNet revenue retention (NRR)Links to churn reduction use case + “how to calculate”
tags: intent=low
How-to / KBHow to instrument churn risk scoring (step-by-step)Enables implementation + links to tooling/integrations
tags: lifecycle=adoption
Tool / calculatorChurn impact calculatorCaptures inputs + routes to the use case landing page
tags: value-estimate
UGC / examplesHow Acme reduced churn from 3.2% → 2.1%Proof + links back to canonical entities (use case, pains, metrics)
tags: proof

The key is that all of these pages reference the same underlying entity ids, so your internal links, analytics, and automation stay coherent.

Reference: page type → fields → outputs

Use this as a checklist when you design templates and decide which fields belong in your entity model.

Page typePrimary question it answersEntity fields it should pull fromWhat it produces (for linking + automation)
Use case landing“How do I solve this workflow in my context?”ICP segment, persona, workflow steps, expected impact, prerequisites, related problemsStrong CTA + internal links to problems, features, integrations
tags: icp, persona, intent=high
Blog article“What should I know before I act?”Narrative angle, examples, proof points, linked entities (use case, pains, metrics)Discovery + distribution surface that links back to canonical pages
tags: intent=medium
Glossary entry“What does this term mean and why does it matter?”Definition, examples, related metrics, common mistakes, linked use casesLong-tail capture + clean internal linking node
tags: intent=low
How-to / KB“How do I implement this step-by-step?”Steps, checklists, constraints, screenshots, role ownership, integrations, failure modesActivation help + reduces support load
tags: lifecycle=onboarding/adoption
Alternative / comparison“Should I choose A or B for my situation?”Alternatives, differentiators, constraints, segment fit, migration notes, proof pointsDecision support + high-intent routing
tags: intent=comparison
Tool / calculator“What is the impact for me (numbers)?”Inputs, assumptions, formulas, segment defaults, interpretation guidance, next stepsLead capture + personalization hooks
tags: segment, value-estimate
UGC / examples“How are real teams doing this?”Real setups, quotes, screenshots, industry, tooling stack, outcomes, links to canonical entitiesProof + trust + internal links back to canonical pages
tags: proof, industry

5. URL and template structure

URL patterns

Treat URLs as a public API for your schema. A good URL tells you: locale, page type, segment, and the entity being viewed.

SegmentMeaningExample
/enLocale (language)/en/…
/use-casesPage type (template)/en/use-cases/…
/b2b-saasICP segment / vertical (optional but powerful)/en/use-cases/b2b-saas/…
/churn-reductionEntity slug (maps to a stable entity id)/en/use-cases/b2b-saas/churn-reduction
More examples
Glossary
/en/glossary/net-revenue-retention
Alternative
/en/alternatives/zendesk
Integration
/en/integrations/shopify
Tool
/en/tools/churn-impact-calculator

Template spines

Each page type follows a consistent "spine":

Page typeSpine + fields (what the template needs)
Use case
Who it's for → problem (ICP language) → why now → quantitative impact → solution pattern → steps → examples/UGC → related entities → next step
fields: persona, icpSegment, pains, workflowSteps, impact, proof, relatedEntities, intentLevel
Glossary
Short definition → why it matters → how to calculate/apply → examples → common mistakes → product interaction → links to use cases and deeper articles
fields: definition, examples, formulas, mistakes, relatedUseCases, relatedMetrics
Comparison
Who this is for → decision criteria → differences → constraints → migration notes → proof → recommended next step
fields: alternatives, differentiators, constraints, segmentFit, migrationNotes, proof
Rules of thumb
  • Slug maps to entity id: slugs can change; ids should not.
  • Canonical + redirects: if a slug changes, 301 redirect the old URL to the new canonical URL.
  • No query params: avoid opaque parameters for core pages.
  • Hreflang: locale variants cross-link via alternates.languages.
  • Internal linking: every entity page links up to its hub and to 3–5 related entities.

Internal linking: each entity page links up to its hub, surfaces 3–5 related entities, and never leaves the user at a dead end.

6. Make pages machine readable

Think of machine-readability as three layers: visible structure (what humans scan), metadata (what crawlers/LLMs can trust), and behavior signals (events/traits that turn reading into GTM actions).

On-page structure

  • Use logical heading hierarchy (H1 → H2 → H3).
  • Repeat section labels across pages for consistency.
  • Use short paragraphs and bullet lists for steps and checklists.
  • Use tables for comparisons and structured data.

Structured data & LLM practices

  • Use appropriate schema.org types (Article, FAQPage, HowTo, Product, Event).
  • Include entity id, type, problem description, intended audience, and region in JSON-LD, mapped directly from the entity model.
  • Expose supporting metadata like publish date, last updated date, breadcrumbs, and author.
  • Publish an llms.txt file that tells LLMs to prefer canonical URLs and JSON-LD (this site already has one).
  • Avoid vague headings and buried answers.
  • Put problem, audience, and solution pattern in the first screen.
  • Use consistent wording for core concepts across all page types.
  • Add an AI summary button on key pages that summarizes from the same entity-based content, not from ad hoc scraping, and makes it easy to copy or send that summary into tools like ChatGPT or Perplexity for deeper exploration.

Must-have metadata (minimum viable)

If these are consistent, everything else becomes easier: SEO indexing, internal linking, analytics, and LLM retrieval.

FieldExampleWhere it lives
entityIdusecase.churn_reduction_b2b_saasJSON-LD + analytics events
entityKindusecaseJSON-LD + analytics events
pageTypeuse-case | glossary | comparison | toolanalytics events + DOM (data attribute)
localeenURL + JSON-LD + analytics events
intentLevellow | medium | highentity model + analytics events
updatedAt2025-12-10page UI + JSON-LD

DOM hooks (recommended)

Add stable data-* attributes to the main content wrapper so tools don't have to guess by scraping.

AttributeExampleUsed for
data-entity-idusecase.churn_reduction_b2b_saasanalytics, internal tools, LLM retrieval
data-entity-kindusecaserouting and filtering by entity type
data-page-typeuse-casetemplate-specific tracking and QA
data-localeenmultilingual analytics + retrieval filtering

Validation checklist

  • JSON-LD exists and matches the visible content.
  • Canonical URL is correct (and old slugs redirect).
  • Hreflang is correct for locale variants.
  • Template spine is consistent (same H2 order across pages of the same type).
  • Summarize button pulls from the main content (not nav/footer noise).

7. Events and traits: from page views to GTM signals

Track at minimum

  • Page views with entity id, page type, language, and intent category.
  • Scroll depth (25%, 50%, 75%, 90%).
  • Key CTAs: demo, trial, signup, download, tool usage.
  • Outbound clicks to integrations and external docs.

Transform events into traits

For each event or pattern of events, define traits that map into analytics, MA, and CRM:

Event patternTrait you setDownstream use
Viewed 3+ pages tied to entities where primaryPain=churnpain_churn=trueRoute to churn playbook, personalize CTA, trigger relevant emails
Viewed multiple pages tagged icpSegment=b2b_saassegment_b2b_saas=trueShow B2B SaaS proof and case studies; adjust onboarding defaults
Viewed alternatives/comparison pages + clicked pricing/CTAintent_switch=highSales routing, competitor battlecard email, higher urgency follow-up
Used a calculator/tool with meaningful inputsvalue_estimate=trueCapture lead + store context; personalize the next page/CTA

Traits must come from the same schema as pSEO entities so that automation and sales plays align with what people actually read.

8. LLM integration: website as single source of truth

Minimum viable
  • Make pages scannable + structured (sections 5–7).
  • Ensure a stable entity id on every page (JSON-LD + events).
  • Use the summarize button to pull context directly from the page.
Advanced
  • Chunk pages/sections and index them by entity id.
  • Use retrieval for emails, sales snippets, support macros.
  • Log which entities power each generated asset.

LLMs should sit on top of your website content, not invent narratives from scratch. Your website becomes the content mesh that LLMs pull from.

Core pattern

  • Store entity-level content in a structured format.
  • Index pages and sections in a vector store, keyed by entity id and section id.
  • Use retrieval on this index for social posts, emails, sales snippets, and support macros.

Summarization workflows

  • Website → social: retrieve relevant sections for an entity, summarize into posts, always link back to canonical pages.
  • Website → email: retrieve sections for one pain and ICP segment, summarize into a focused email sequence, target based on traits.
  • Website → onboarding: for a new account with traits (e.g. B2B SaaS, churn pain, product analytics owner), retrieve matching content and generate a personalized onboarding plan.

Guardrails

  • Only generate from entity-based content and KB, not scattered drafts.
  • Avoid open-ended generation with no retrieval.
  • Log which entities power each generated asset.

9. Multilingual pSEO and LLM readiness

Minimum viable
  • One global entity id; localized title/slug/body.
  • Same template spine across languages.
  • Correct canonical + hreflang.
Advanced
  • Chunk metadata includes locale + entity id.
  • Language-aware retrieval + fallback logic.
  • Programmatic localization workflows tied to entity fields.

Multilinguality is a structural question, not just a translation task. Keep one global entity id per problem or use case and let language vary at the content level.

Global entity, local language

  • Single global entity id; language-specific fields (title, slug, body, meta).
  • Same sections in same order across languages.
  • Locale prefixes or domains with proper hreflang and cross-links.
  • Events carry both entity id and language code; automation logic runs on entity id, not language.

LLMs with multilingual content

  • Store language in chunk metadata and filter by preferred language first.
  • Allow fallbacks to English if no local content exists.
  • Let LLMs summarize into the user's language even if the source is mixed.

10. Dynamic tools and UGC

Minimum viable
  • Ship 1–2 simple tools (calculator/checklist) tied to an entity.
  • Log usage events with entity id + inputs/outputs.
  • Link tools back to canonical pages.
Advanced
  • UGC galleries from product data (anonymized + normalized).
  • Filter UGC by traits/segments and surface it as proof on canonical pages.
  • Let LLM workflows retrieve both canon + UGC examples.

Mini tools

  • Calculators, checklists, simple planners, scenario builders.
  • Design them so they emit structured data: inputs, outputs, context.
  • Log these as events tied to entities – they are strong intent signals.

UGC from the app

  • Public templates, workspaces, playbooks, or galleries.
  • Anonymize sensitive data and normalize fields.
  • Tag each item with the same entity model as your pages.
  • Link from UGC to canonical pages and back for context.

LLMs can use UGC as high-context examples ("show three anonymized setups for a B2B SaaS with churn pain"), while pSEO pages surface filtered UGC as proof and inspiration.

11. Operating and evolving the system

Ownership

  • Growth/marketing owns entity model and templates.
  • Product owns terminology and use case accuracy.
  • Sales and CS bring real-world feedback and gaps.
  • RevOps/data own event and trait mappings.

Monthly review

  • Top entity groups by traffic, leads, and revenue influence.
  • Traits actually used by automation and sales.
  • Pages with high traffic but low engagement.
  • Pages with high engagement but poor discoverability.
  • Language variants that underperform.

Monthly dashboard: metric → action

MetricUsually meansAction
High traffic, low scroll / low CTAMismatch in intent, weak above-the-fold, unclear next stepRewrite first screen; tighten spine; add better internal links/CTA
High engagement, low discoverabilityGood content but weak indexing / missing entry pagesAdd glossary/supporting pages; improve internal linking; add schema
Many visits across same entity clusterClear pain/ICP signal formingSet traits; trigger targeted sequences; route to relevant demo flow
Traits rarely used downstreamTracking exists but not connected to playsDelete/merge traits; define 2–3 core plays that actually run
One locale underperformsTranslation drift or missing local proof/termsAlign spine; localize examples; verify hreflang + canonicals

Decisions

  • Add or adjust entities based on real usage.
  • Merge or remove redundant content and pages.
  • Create missing glossary or KB entries for high-traffic queries.
  • Improve or expand dynamic tools and UGC where engagement is strong.

Keep the schema stable; iterate content and templates around it.

12. Technical notes for implementation

This section is about principles (what to centralize, what to keep stable). Section 13 shows a concrete Next.js + Cursor implementation path.

Content storage

  • Store entities in a typed and version-controlled schema.
  • Store page content as structured blocks keyed by entity and section.
  • Avoid unstructured HTML blobs that are hard to re-use.

Rendering and routing

  • Use dynamic routes based on entity ids and slugs.
  • Build templates around the spines with components per section.
  • Inject structured data from the same entity source used for rendering.

Analytics and traits

  • Centralize event sending in a single client or edge utility.
  • Always include entity id, page type, language, and intent category.
  • Keep mappings from entity → traits in code or config, not scattered across SaaS tools.

LLM integration

  • Use the same entity store for site rendering and retrieval context.
  • Avoid maintaining separate knowledge representations if possible.
  • Treat the website as the canonical narrative that everything else reads from.

13. Implementation with Cursor and Next.js

The goal is a single TypeScript schema that powers page generation, structured data, analytics events, and LLM retrieval. Cursor is the environment where you iterate on that schema safely.

If you only take one thing from this section: keep schema, rendering, structured data, analytics, and retrieval built from the same typed entity objects.

13.1 Repository structure

Keep the layout boring and explicit so it is easy to reason about and refactor. In this repo, the main patterns look like this:

  • app/ – routes implemented as pages, for example app/frameworks/gtm30/programmatic/page.tsx and app/blog/[slug]/page.tsx.
  • lib/ – shared data + helpers. Examples in this repo: lib/structured-data.ts (JSON-LD), lib/gtm30-glossary.ts (typed glossary data), lib/frameworks.ts (framework listing).
  • components/ – reusable UI like TableOfContents, Breadcrumbs, and SummarizeAIButton.
  • public/ – static artifacts, including public/llms.txt to guide LLMs.

13.2 Entity schemas in TypeScript

If you want to move toward true programmatic generation, the best “starting point” in this repo is the existing pattern used for the GTM30 glossary: a typed array in lib/ plus routes that read it. From there, you can expand into a broader entity model (problems, use cases, integrations, alternatives) with the same approach.

  • Keep a stable entityId and a human-readable slug.
  • Put your “GTM traits” (ICP, pains, intent, lifecycle) in the entity record so templates and analytics can reuse them.
  • If you add locales, keep the global entityId stable and localize the display fields (title/description/slug) per language.
  • Model relationships as arrays (e.g. related problems, related glossary terms) to drive internal linking automatically.

Cursor then auto-completes and validates every field as you edit, and refactors safely when you rename traits or relationships.

13.3 Page generation in Next.js

This repo mixes static pages (hand-written framework pages) and dynamic routes for data-driven content (e.g. glossary terms and blog posts). Programmatic content fits naturally into the “data-driven route” pattern:

  • generateStaticParams – enumerate your entity records and output route params (for example, glossary uses { slug }).
  • generateMetadata – build title, description, and alternates.canonical from the same record.
  • Page component – resolve the record by slug and render a consistent “spine” (H2 sections in a stable order).

Keep display logic in these template components, not scattered across many route files.

13.4 Structured data generation

Centralize JSON-LD builders so they always read from the same entity objects as your page templates:

  • In this repo, JSON-LD helpers live in lib/structured-data.ts (for example createArticleSchema, createWebPageSchema, createDefinedTermSchema).
  • Pick the closest schema.org types you already use (Article, WebPage, DefinedTerm, BreadcrumbList), and extend only when you have a strong reason.
  • In the page component, render a <script type="application/ld+json"> tag with JSON.stringify of this object.

That way, crawlers and LLMs read the same structure your UI uses – no drift between UI and structured data.

13.5 Analytics wiring

This repo doesn't currently have a dedicated lib/analytics/ layer. If/when you add tracking, keep it centralized and always attach entity metadata.

  • Centralize tracking calls in one place (one client component or helper), so the event schema stays consistent across pages.
  • Send page_view with: entityId, entityKind, pageType, locale, and intentLevel.
  • Reuse the same schema for CTAs, tool usage, and outbound clicks.

All downstream tools then see consistent traits and intent signals because they originate from the same entity model.

13.6 Mapping table from entity to traits

Keep mappings from entities to traits in code, close to the schema, so Cursor can refactor them with you:

  • Implement helpers like useCaseToTraits(entity) that return trait objects such as icp_segment, company_size, primary_pain, lifecycle_stage_focus.
  • Add boolean traits for high-intent behaviours (for example high_intent_use_case_viewer: true).
  • Feed these traits into your analytics and automation stack so they stay aligned with what people actually read.

13.7 Multilingual implementation in Next.js

In this repo, multilingual content is currently implemented as explicit routes (for example /sgh/fi) rather than a global [locale] segment. The principle still holds: keep logic tied to stable ids, not to the language.

  • Use per-language pages where it makes sense, but keep slugs and internal links consistent and canonicalized.
  • If you later move to a shared entity store, localize display fields (title/description/slug) and keep the global entity id stable.
  • Use generateMetadata to set canonical URLs (and optionally alternates.languages when you connect locales).
  • Always send both locale and entityId in analytics. Automation runs on entityId, not language.

13.8 LLM integration from the same codebase

In this repo, the practical baseline for LLM integration is: (1) structured pages + JSON-LD, (2) public/llms.txt, and (3) the SummarizeAIButton that builds prompts from the page content.

  • Keep canonical URLs and JSON-LD consistent, so LLMs have a stable source of truth.
  • Use llms.txt to tell assistants to prefer canonical pages and glossary definitions when summarizing.
  • If you later add retrieval, index content by entityId + section headings (matching the template spine) so it stays aligned with the page structure.

The key is consistency: the same entity ids and sections should power pages, structured data, analytics, and any retrieval you add later.

13.9 Working with this in Cursor

Cursor fits best when it operates on the structured system, not on random text blobs. Use it to:

  • Generate new entity records from ICP descriptions, while keeping fields typed and consistent.
  • Refactor schemas when you adjust GTM30 fields, with type errors surfacing drift.
  • Generate boilerplate templates for new page types that still follow your spines and structured data patterns.
  • Maintain mapping functions, analytics helpers, and retrieval utilities next to the entity types.

The stricter your entity model, the more safely you can let Cursor automate content, mappings, and retrieval around it.

14. Automate content production and distribution

The website is the source of truth. Automation is how you turn each canonical entity into a consistent bundle of assets and push them into distribution surfaces, without drifting from your narrative.

Entity → asset bundle (production)

Generate downstream assets from the same entity fields + template sections (H2 spine). Never generate from “random context”.

AssetGenerated fromOutput
Social post setentityId + pain + ICP + “why now” + proof sections3–5 angles (definition, checklist, contrarian take, example, metric) + canonical link
Emailpain + ICP segment + steps + next step sections1 focused email per entity (or per entity cluster) + CTA back to canonical page
Sales snippetcomparison/proof/constraints sections + objectionstalk track + “when not a fit” + links to comparison and proof pages
Support macrohow-to steps + pitfalls + prerequisitesshort answer + step list + canonical links (KB/glossary/use case)
Community seedproblem framing + “common mistakes” + examplesquestion-first post + 2–3 replies + link to the canonical hub page

Keep an asset log (asset type, entityId, source sections, publish date, canonical URL) so you can trace every output back to the source of truth.

Canon → channels → canon (distribution loops)

LoopTriggerAutomation
Ambassadorsnew canonical page / entity updategenerate 2–3 share angles + prewritten snippet, always linking to the canonical URL
Communityrecurring thread detected for an entitygenerate reply templates + update canonical hub with missing sections/links
Emailtraits set (section 7)pick the matching entity bundle and send an ICP+pain specific sequence with canonical links
Sales/CScomparison intent, tool usage, or high intent viewsgenerate battlecards/onboarding snippets from the same entities and log provenance

Guardrails (keep it on-brand)

  • Generate from source: only from canonical pages + entity fields (never “open web” as truth).
  • Human-in-the-loop: auto-draft, manual approve for claims, comparisons, and numbers.
  • Provenance: every asset stores entityId + source sections and links back to canon.
  • Don’t A/B test truth: test packaging and distribution, not canonical definitions.