UNLISTED · for Jeremy + Codex · noindex

WiFi Odds · CTA button & extension-panel mockups

Two problems: (1) three people didn't realise the "Available in the Chrome Web Store" badge is the thing to click; (2) the real injected panel looks plainer than the site's hero mockup. Options below. Brand rule in play: Google's badge may be resized and linked but never redrawn, and we may not draw our own Chrome mark · so every custom CTA here is text only.

1 · The install CTA

Decided 29 Jul: Option A. Primary text button with the official badge directly beneath, both linking to the store listing. B and C are kept below for the record. The current site uses Google's badge alone, which reads as a passive "as seen on" credential; A adds a clearer primary action while keeping the badge brand-compliant.

A · Primary button + badge below (CHOSEN)

A prominent text button is the obvious action; Google's official badge sits under it as the "official listing" proof. No Chrome mark drawn by us. Both controls link to the store.

Add to Chrome · It's free
Works on united.com and Navan · No account
Available in the Chrome Web Store

Most explicit. Badge stays compliant and secondary.

B · The badge, framed as a button

Keep only Google's badge but wrap it so it clearly reads as interactive: a bordered card, hover lift, cursor, and a small "install free" affordance above it.

↓ click to install · free
Available in the Chrome Web Store

Smallest change. Still leans on the badge people already miss.

C · Text button + quiet store link

Lead with the button; demote the store to a small text link. Cleanest, but drops the big official badge · check brand comfort.

Highest clarity/conversion; least badge presence · needs a brand-rule call.

2 · The injected panel · approved direction with Codex's corrections

Direction approved (card rows, stronger odds pills, a prominent sort action), with these fixes applied below: keep the date, refresh (↻) and collapse (▾) controls; label the chip ESTIMATES not "LIVE" (these are historical and may be cached up to 6h); the purple pill uses near-black text (its old white text was ~3.3:1); the sort button reads "Sort these flights by WiFi odds"; and when a route has no Starlink history the panel populates from per-flight fallback odds as "Flights in these results" rather than an empty state.

Current (shipped)

🛰️ DEN→SFO · Aug 28↻ ▾
⭐ UA181263%
UA156151%
UA100746%
via SUN · all-legs estimate · wifiodds.com ↗

Approved uplift · route with history

🛰️ DEN → SFO · Aug 28 ESTIMATES ↻ ▾
UA1812 · nonstop63%
UA1561 · nonstop51%
UA1007 · nonstop46%
Sort button hidden while auto-sort is on · via SUN · all-legs estimate · wifiodds.com ↗

Approved uplift · empty route (fallback populates)

🛰️ SFO → EWR · Aug 28 ESTIMATES ↻ ▾
UA2402 · nonstop16%
UA1596 · nonstop68%
Flights in these results · per-flight odds (no Starlink route history yet)
via GEG+ORD · all-legs estimate55%

Manual-sort state (auto-sort unchecked)

🛰️ DEN → SFO · Aug 28 ESTIMATES ↻ ▾
UA181263%

Behaviour (auto-sort default-on, conditional button, fallback population, ESTIMATES label, sort copy) is already implemented and verified in the extension. The remaining work is the visual restyle (card rows, pills, header chip) in extension/content.css, plus CTA A into build/lib/render.js on the site behind an approved mockup.