AI-discoverability dashboard

Instructions

How the AI-visibility platform works, how to refresh this dashboard, and what every metric means.

What this is

This platform makes appomate.com.au accurately discoverable to AI systems (ChatGPT, Claude, Perplexity, Gemini, and AI browsing agents). A CLI generates AI-consumable formats from one canonical knowledge base, measures which AI crawlers hit the site, and scores how completely each page reflects the source of truth. This dashboard visualises those reports.

Everything reads from one source — the Appomate Brain knowledge base — so the published formats never drift from each other.

Refresh the dashboard — the pipeline

run in apps/cli
1

Sync the knowledge base

Validate the canonical KB and vendor a snapshot.
visibility sync
2

Publish AI-consumable formats

Render llms.txt, llms-full.txt, JSON-LD, and markdown.
visibility publish
3

Analyse crawler traffic

Parse a real Apache/LiteSpeed access log into a per-bot report.
visibility analytics --log /path/to/access.log
4

Score page gaps

Audit a page against the KB (needs ANTHROPIC_API_KEY). Repeat per page.
visibility gap --url https://www.appomate.com.au/adidas/
5

Prioritise fixes

Join retrieval demand with completeness into a ranked worklist.
visibility prioritize --analytics out/reports/analytics.json --gaps out/reports/gap-*.json
6

Push to Supabase

Load the snapshot the dashboard reads. Creates a new run (visible in the snapshot selector).
SUPABASE_URL=… SUPABASE_SERVICE_ROLE_KEY=… \
  visibility push --label "weekly"

Deploy the artifacts to WordPress

The site is WordPress (LiteSpeed, custom theme). Deployment is static files + template snippets:

  1. Upload llms.txt and llms-full.txt to the web root, served as text/plain; charset=utf-8.
  2. Paste each JSON-LD snippet (the .html files) into the matching page template: Organization site-wide, Reviews on the testimonials page, each Service on its service page.
  3. Purge the LiteSpeed cache and verify with Google’s Rich Results Test.

The Published Artifacts tab shows exactly what will be deployed for the selected run.

Glossary

Training crawl
A broad, steady sweep across many pages over a long window (e.g. GPTBot, ClaudeBot, CCBot). The content is being scraped for model training — not necessarily surfaced to a user right now.
Retrieval fetch
A bursty request concentrated on a few pages in a short window (e.g. ChatGPT-User, Claude-User, PerplexityBot). This is the signal that an AI system is reading the page live to answer a user — i.e. we are being cited or considered, not just archived.
Burst fraction
The share of a bot’s hits that fall inside the densest 5-minute window. High = bursty = retrieval-leaning.
Path concentration
How focused a bot’s hits are on a few URLs (1 − normalised entropy over paths). High = concentrated on a handful of pages = retrieval-leaning.
Inferred class
The final training-vs-retrieval call, combining the bot’s known type (a prior), burst fraction, and path concentration into a score; ≥ 0.5 is retrieval.
Completeness score
A 0–100 judgement (by the Anthropic API) of how fully a page reflects the knowledge base — missing fields and thin sections pull it down.
Priority score
Retrieval hits × incompleteness (retrieval hits × (100 − completeness) / 100). A page fetched live but scoring low ranks highest — fix those first.

Snapshots

Each push creates a snapshot. Use the selector in the top bar to switch between runs and compare how crawler behaviour and completeness change over time.