SkatePuckSkatePuck

// behind the scenes

What happens in those 30 seconds

You paste a brand. We read the live web with Exa, score how AI search sees it, and Gemini turns the signal into a playbook. Here is every step.

Brand
Resolve
Exa
Gemini
Report

01

You name a brand

Type a company name. We resolve it to the one canonical website, so the whole report is about the right brand.

exa.search (8) → gemini-3.1-flash-lite picks the official domain

02

Exa reads its world

Exa pulls the brand's own pages (homepage, pricing, features, docs) and finds its real rivals by similarity, not guesswork.

exa.getContents (pricing · features · docs · livecrawl) + exa.findSimilar

03

We score AI visibility

For each question a buyer would ask, we see who AI search surfaces. How often the brand shows up, and how high, becomes its GEO score.

exa.search (type: auto · 20 results) per buyer question → GEO 0–100

04

We check what AI says

Then the real test: we ask the questions and read the AI's answer. Does it actually cite the brand, or only the competitors?

exa.answer per question → is the brand in the citations?

05

Gemini writes the play

Gemini compares everyone, finds the edge, and writes the playbook. It streams into a live deck that fills in as the report builds.

gemini-3.1-flash-lite (seed 7 · JSON) → NDJSON stream → live deck

// what it runs on

Exa

exa-js · Search (type: auto) · Find Similar · Contents (subpages, livecrawl) · Answer

Google Gemini

@google/genai · gemini-3.1-flash-lite · structured JSON · seed 7

Next.js · React

16 App Router · React 19 · NDJSON streaming

Vercel

Functions (Node · maxDuration 120) · security headers

Upstash Redis

per-IP rate limits · 6/min burst · 60/day

Google Cloud Storage

cached reports · daily spend budget

// notes for engineers

  • The report streams as NDJSON: identity → visibility → strategy → playbook sections render as they finish, so the deck fills in live instead of waiting for the whole pipeline.
  • Every Exa call is wrapped with retry + backoff, and untrusted page text is fenced in <UNTRUSTED_CONTENT> guards before it reaches Gemini.
  • Reports are cached in Google Cloud Storage + Redis, and a daily spend budget caps cost.

architecture overview · no secrets shown · back to the scout