Every product on CommsLink is designed and shipped to production by an AI — live, most days. This is the raw record, generated straight from the commit history. No hand-picking, no polish: 2,361 ships and counting.
Navigate to link href instead of synthetic click
In-page browser: keep iframe mounted across tab switches (reliable render)
In-page browser: force iframe reload on every navigate (nonce)
Don't cache the /chat HTML shell (no-store)
In-page browser: React-controlled iframe src (fixes blank panel)
In-page AI browser: render the browsed site as an iframe in the chat Web panel
Web browsing: feed search/browse results back to the agent
Web browsing: add Grok function-calling tool defs + tool-call translation
Add CommsLink Browser Agent Chrome extension (packages/browser-extension)
Add AI web browsing: {search}/{browse}/{web_click} commands routed to user's browser via new Chrome extension (packages/browser-extension), cmd_web room toggle, Web panel tab
Add @commslink/hologram package with Phase 1 demo route
Dashboard globes: animated arcs for major shipping lanes (maritime) + major international air routes (air traffic)
Dashboard globes: Maritime = grey land overlay on Blue Marble; AirTraffic = solid blue ocean + green continents (no topography)
Remove self-serve card refund buttons (campaign + wallet) — card refunds now go through support@commslink.net
Ligo: file-cache _fetch_yahoo_chart with stale-fallback so dashboard stops hammering Yahoo on every page load
SiteHeader: gate pathname-based product suffix behind mount to fix React hydration error 418/423/425
Remove ffxivWs websocket leftover from game removal
Remove AI Kingdoms game — delete routes, actions, data modules, handlers, Prisma models, docs
Remove AI Kingdoms - Dark Ages card
Chat: volume slider is now live — affects all in-flight audio (AI, own voice, other users)
Dashboard layout header: show 'CommsLink Chat' (purple) on /chat
Header: show 'CommsLink Chat' (purple) on /chat
Header: show 'CommsLink AI-vertizing' (orange) on all /ai-vertizing pages
Campaign chat: remove floating bottom-right, make it a permanent right-column sidebar
Campaign detail: Grok chat sidebar + performance diagnostics (impression share, first-page-bid warnings)
Archive deleted/refunded campaigns, add cross-tool transaction history
Fix pending_payment refund bug — don't mint free wallet credit on unpaid drafts
AI-vertizing anti-abuse: email verification, daily cap, refund delay
Terms & refund policy page, pro-rated campaign refunds to card, wallet refund, 30s rate limit + auth on /analyze
Remove 'coming soon' / 'Phase 1' language — product is live
Step 2 days picker no longer auto-snaps to min — shows actual selection with warning, Continue blocked. Step 5 reads wallet balance and shows wallet → covered/Stripe breakdown, button label switches to 'Launch with $0 charge' when fully wallet-funded
Wizard chat: replace floating popup with permanent right-sidebar (steps 2-5), sticky alongside wizard content — feels like part of the system, not a support widget
Wizard chat assistant: floating Grok chat panel on steps 2-5 (refines profile + plan via JSON patches), persisted in localStorage
Wizard: duration picker moves to Step 2 (alongside daily budget). Step 5 just shows summary
Wizard launch step: replace 'total budget' chips with duration picker — pick days (3/7/14/30 or custom), total auto-computed = daily × days
Ad-spend wallet: ad_wallet table tracks user balance, smart checkout uses wallet first only charging Stripe for delta, delete-campaign endpoint returns unspent budget to wallet, wallet displayed on dashboard, delete button on detail page
Dashboard totals: Spend + Budget now sum across ACTIVE campaigns only (was all-time including refunded)
Stop hijacking root URL — / always goes to /landing now, never auto-bounces logged-in users to /chat
AI-vertizing dashboard at /ai-vertizing (campaigns list + first-campaign prompt + stats), wizard moved to /ai-vertizing/new, OAuth callback + reset bounce updated
Breadcrumbs on campaign list + detail pages: AI-vertizing › Campaigns › [name]
Campaign detail: live status from Google (campaign primary_status + per-ad approval), ad previews rendered as Google search results
Campaign management: 'Open in Google Ads' deep link on detail + list pages, account/campaign IDs visible for transparency
AI-vertizing: campaigns now launch ENABLED (no more PAUSED safety), EU political advertising disclosure question added to wizard launch step, schema column + flag wired through API → Stripe webhook → ligo → Google
AI-vertizing wizard: Back + Cancel/Start Over buttons on every step (steps 2-5), step counters fixed to OF 5
AI-vertizing pivot to per-user OAuth: Connect Google Ads step in wizard, account picker, HMAC-signed state binding flow to user_id, ligo launches into user's own account (no MCC)
Ad checkout requires real billing email — added field to launch step (prefilled from account), backend rejects fake addresses, Stripe receipt now goes to a real inbox, account email auto-backfilled if blank
AI-vertizing wizard: persist all state to localStorage so login bounce returns user to exact step they were on (no more starting over after sign-in)
Use window.location for returnUrl in /register to avoid Suspense prerender requirement
Fix returnUrl propagation through register/login: /register honors returnUrl on submit success and forwards to /login link; /login forwards to /register link
Actually deploy the ai-vertizing page updates (file was untracked, every prior 'web' deploy silently skipped it)
Stripe webhook → ligo /launch-direct after ad payment succeeds (auto-pushes campaign to Google Ads MCC)
AI-vertizing: ask for daily budget in Step 2 (was monthly), carry through to Launch step (no re-entry needed). Drop the launch-step daily-cap field
AI-vertizing Phase 2 MVP: ad_campaign/ad_payment/ad_spend_log tables, /api/v1/ads checkout/list/get/pause routes, Stripe checkout for budget+20% markup, wizard launch step (conversion URL/budget/daily cap), campaign list + detail dashboard pages. Google Ads API push pending separate work
AI Lab: remove dead-coded futures/map block (TS was type-checking it)
Deploy missing /ai-lab page (was never SCP'd because it was untracked)
Portfolio holdings persistence: user_holding MySQL table, GET/POST/DELETE /api/v1/holdings, one-time localStorage→DB migration on first logged-in load
Portfolio: add options (call/put) support — strike + expiry fields, live option premium via /api/markets/option-quote, P&L calc respects 100x contract multiplier
Portfolio tracker for logged-in users (localStorage-backed, 30s price refresh), Air Traffic section under Maritime, /api/algos/dashboard 30s cache
Hide Shipping Equities section from dashboard (still shown on /maritime)
Globe: bump port markers to bright amber, larger size, higher altitude — more prominent. Backend ports limit 50→150
Maritime: globe + top ports side-by-side (50/50 grid), globe width halved since it's a circle
GlobeMap: fix TS types for pointColor/pointRadius callbacks
Add GlobeMap.tsx file
Maritime map → 3D globe (react-globe.gl) with Blue Marble texture, drag to rotate
Maritime map: ESRI Ocean Basemap (blue water + green land + bathymetry), 'Maritime Traffic' title overlay top-right
Maritime: navy-tinted nautical-chart map, 25% shorter (345px), move chokepoint cards to right sidebar as Key Chokepoints rail
Extract MaritimeMonitor, embed on dashboard, scrollable top ports
Extract MaritimeMonitor into reusable component, embed on dashboard under news panel, top ports now scrollable
Remove Alt Indexes, News & Sentiment, Bond Auctions, Funding Stress, EPS Revisions, Econ Surprise from left menu
Invert sign up button — dark bg with cyan text + cyan border
CTA: transparent bg, stacked centered layout, button label simplified to 'Sign up'
Remove Live Market and Active Tracker from left menu (pages kept — active-tracker still used by indicator popup)
Skeleton shells with loading spinners for Futures, News, and Signals sections while first fetch is in-flight
Add signed-out CTA above news panel: 'Sign up free to track your own portfolio'
News panel: split Yahoo Finance (left) from other sources (right), drop Recent Headlines title, 25% taller (230→290)
Consolidate news panels: one Paper, one scrollbar, 2-col grid inside, 180s countdown, flash new items, fix UTC parsing
Recent Headlines: add mood chip matching News Stream style
Add 2-column News Stream + Recent Headlines panel under the map
Drop 'Global Market Dashboard' title; header logo text becomes 'CommsLink Markets' on market pages
Move active-viewers endpoint under /stats/active to avoid route collision, grey eye icon
Add /ai-lab route, shrink dashboard, active-viewers eye badge
Add /ai-lab route w/ algo sections, shrink dashboard to Futures+Map+Signals, add active-viewers eye badge w/ 30d history hover
Dashboard: split main content into 80/20 grid, move Signals to a tall thin sticky rail on the right
Signals: drop borders, 30s auto-refresh with live countdown badge, flash green/red on value change
Signals: drop inline sparkline + status dot, add hover tooltip with history chart + raw/state details
31 Indicators: unified card style — status dot + white label + colored value, matches Global Markets/Futures
News ticker: uppercase with slight letter spacing — broadcast-style
Title color reflects market mood, remove subtitle, live countdown 10→0, futures + map merged into one panel
Futures cards: strip ticker symbol from label (3-line uniform), add direction-colored borders matching markets style
Overnight Futures cards: match Global Markets style — green/red status dot, white label, smaller price
Overnight Futures: uniform borders, hover for 24h chart, real-time price flash on update
Lift news ticker 10px off the bottom edge so it hovers above the map
Ticker: no repeat, 70s cycle (30s scroll + 40s pause). Backend pulse cache reduced 600s→180s for fresher Grok headlines
Transparent ticker (text floats over map), live overnight futures every 10s with visibility pause
Move breaking text overlay to map top-left and pulse to map bottom as scrolling news ticker
Real-time map: client-side sun position (smooth motion), 5s market refresh, price-flash on info-strip cards, moon tooltip with full coordinates
Moon: lit limb always faces sun (fix waning case where lit was drawn on wrong side)
Moon dark side: opaque deep navy so phase shadow reads clearly (no screen-blend)
Moon: remove duplicate native title tooltip, more saturated blue color
Add accurate moon position with proper phase oriented toward sun + cool blue moonshine glow
Generated 2026-07-17 from git across all CommsLink repos · page 16/24, showing 1,501–1,600 of 2,361 ships · complete record: /changelog.txt · /changelog.json.