Skip to content

feat: GEO strategy — AI visibility dashboard, prompt monitor, social amplification#1357

Merged
bokelley merged 4 commits into
mainfrom
bokelley/geo-strategy
Mar 9, 2026
Merged

feat: GEO strategy — AI visibility dashboard, prompt monitor, social amplification#1357
bokelley merged 4 commits into
mainfrom
bokelley/geo-strategy

Conversation

@bokelley

@bokelley bokelley commented Mar 9, 2026

Copy link
Copy Markdown
Contributor

Summary

Comprehensive GEO (Generative Engine Optimization) strategy to ensure AdCP dominates AI-generated discussions about agentic advertising.

What's included

GEO Admin Dashboard (/admin/geo)

  • LLM Pulse API integration for real-time brand visibility tracking
  • 4 KPI metrics: brand mention rate, share of voice, total prompts, citation rate
  • AI visibility by model table, tracked prompts, top cited URLs, competitive landscape
  • Cache with 1-hour TTL, stale fallback on API errors
  • Graceful unconfigured state when LLMPULSE_API_KEY is missing

GEO Prompt Monitor

  • Scheduled weekly job querying Claude with 15 standardized prompts across brand/competitive/intent categories
  • Detects AdCP mentions, competitor mentions (IAB Tech Lab, OpenRTB), and sentiment
  • Stored in geo_prompts + geo_prompt_results tables with proper indexing
  • 2s rate limiting between API calls

Social Amplification

  • DMs authors via Slack with pre-formatted LinkedIn and Twitter copy when content is approved
  • Skips link posts and members-only content
  • Non-intrusive: only sends to the author, not a broadcast

SEO/GEO Assets

  • robots.txt allowing 10+ named AI crawlers (GPTBot, ClaudeBot, PerplexityBot, etc.)
  • llms.txt and llms-full.txt following the emerging llmstxt.org convention
  • FAQ JSON-LD schema on homepage for "What is agentic advertising?" and "What is AgenticAdvertising.org?"
  • New definitive docs/agentic-advertising.mdx page with FAQ accordions targeting high-value search queries

Review feedback addressed

  • Removed premature social amplification DM from propose path (only fires on approve)
  • XSS protection: validate URLs start with http:// or https:// before rendering as links
  • Cache race condition: don't null cache before refresh fetch completes
  • Word boundaries on ADCP detection regex to reduce false positives
  • Design system compliance: --color-error-700, tbody tr:hover, ARIA attributes
  • Accessibility: scope="col" on table headers, right-aligned numeric columns
  • Sentence case on sidebar label

Files changed

  • 10 new files, 8 modified files
  • Migration: 263_geo_monitor.sql
  • New routes: server/src/routes/admin/geo.ts
  • New job: server/src/addie/jobs/geo-monitor.ts
  • New page: server/public/admin-geo.html
  • New docs: docs/agentic-advertising.mdx
  • New assets: robots.txt, llms.txt, llms-full.txt

Testing

  • All 323 tests pass
  • TypeScript compiles cleanly
  • OpenAPI spec up to date
  • Mintlify broken link check passes
  • Accessibility check passes

bokelley and others added 4 commits March 8, 2026 23:39
…amplification

Add comprehensive Generative Engine Optimization infrastructure to help
AdCP dominate AI-generated responses about agentic advertising.

Technical GEO infrastructure:
- robots.txt allowing 10 AI crawlers (GPTBot, ClaudeBot, PerplexityBot, etc.)
- llms.txt and llms-full.txt following llmstxt.org convention
- FAQ schema additions for "agentic advertising" and "AgenticAdvertising.org"

GEO visibility dashboard (/admin/geo):
- LLM Pulse API integration with 1-hour cache and stale fallback
- KPI cards: mention rate, share of voice, prompts tracked, citation rate
- Tables: model visibility, tracked prompts, cited URLs, competitive landscape
- Internal prompt monitor endpoint for self-hosted GEO tracking

GEO prompt monitor (weekly job):
- Queries Claude Haiku with 15 seeded prompts across brand/competitive/intent
- Detects AdCP mentions, competitor mentions (IAB Tech Lab), sentiment
- Stores results in geo_prompts/geo_prompt_results tables
- Migration 263 creates tables and seeds default prompts

Content amplification:
- "What is agentic advertising?" definitive docs page with FAQ accordions
- Social amplification DMs: Addie sends authors LinkedIn + Twitter copy
  when their perspective is published (articles only, not links or members-only)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove premature social amplification DM from propose path (only fire on approve)
- Prevent XSS via javascript: URIs in cited URLs table
- Fix cache race condition: don't null cache before refresh fetch
- Add word boundaries to ADCP detection regex to reduce false positives
- Add 2s rate limiting between GEO monitor API calls
- Fix --color-error-800 → --color-error-700 (design system compliance)
- Scope tr:hover to tbody only (don't highlight table headers)
- Add ARIA attributes (role="status", role="alert") for accessibility
- Add scope="col" to all table headers
- Right-align numeric columns (mention rate, citation count, etc.)
- Fix sidebar label to sentence case ("GEO visibility")

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The LLM Pulse API uses /api/v1 (not /v1) with project_id-scoped
endpoints. Rewrote to use the actual API structure:

- /dimensions/projects — discover project ID (1274)
- /metrics/summary — brand visibility, mentions, citations, sentiment
- /metrics/sov — share of voice over time
- /metrics/top_sources — top cited domains with visibility scores
- /dimensions/competitors — tracked competitor list
- /dimensions/prompts — all tracked prompts
- /dimensions/models — tracked AI models

Updated dashboard to show domain + avg visibility instead of
URL + models for top sources table.

Tested against live API: 54% brand mention rate, 100% SOV,
agenticadvertising.org #4 cited source across 5 AI models.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@bokelley bokelley merged commit 43d76e9 into main Mar 9, 2026
8 checks passed
@bokelley bokelley deleted the bokelley/geo-strategy branch March 9, 2026 12:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant