Changelog
What changed, and when.
Every release of AdvisorPPC, newest first. New capabilities, behaviour changes, fixes and security work. Machine-readable at /changelog.json.
Unreleased
Added
Added illustrated niche pages and narrated campaign-economics examples with captions, transcripts and clearer buyer-fit guidance. #310
Gravity now has a home in the workspace for every signed-in role: a left-menu entry, a setup page at
/app/gravity, a card on Connectors and a card in Settings, each explaining how to connect Claude and how to work the site.- One host, one MCP:
GRAVITY_ENDPOINTSinsrc/content/mcp-endpoints.tsis the only public placegravity.advisorppc.comand/mcpare written for these surfaces. Copy lives incomponents/app/gravity/gravity-product.tsand is gated bygravityCopyProblems(). Members see the connect guide. The operator dashboard (orgs, drafts, client revoke) stays superuser-only on the same page, so its API hooks never run for other roles. No backend, no migration, no chat or memory writes. #321
- One host, one MCP:
Shield now has a home in the workspace: a left-menu entry, a setup page at
/app/shield, a card on Connectors and a card in Settings, each explaining what Shield scores and how to connect it to Claude.- One host, one MCP:
SHIELD_ENDPOINTSinsrc/content/mcp-endpoints.tsis the only placeshield.advisorppc.com, its/shield/mcpendpoint and its pricing page are written; the connector catalog now reads that pricing link and states Shield's tool count as 20. Copy lives incomponents/app/shield/shield-product.tsand is gated byshieldCopyProblems(), which rejects a retired host, a price literal, a wrong product name, a claimed connection state or an off-product link. Every Shield surface is a guide and a link-out: Shield signs in on its own host, so nothing here calls an API or reports Shield as connected.
- One host, one MCP:
TrackPPC, the conversion-tracking product formerly listed as Tracker, now has a home in the workspace: a left-menu entry, a setup page at
/app/trackerand a card on Connectors, each explaining what TrackPPC measures and how to connect it to Claude. The public catalogue, the connectors landing copy andllms.txtuse the new name.- One host, one MCP:
TRACKER_ENDPOINTSinsrc/content/mcp-endpoints.tsis the only placetrack.advisorppc.com, its/trackerendpoint and its pricing page are written; the public TrackPPC leaf now links to that pricing page. Copy lives incomponents/app/tracker/tracker-product.tsand is gated bytrackerCopyProblems(), which rejects a retired host or working name, a price literal, the ingest host, a claimed connection state or an off-product link. Every TrackPPC surface is a guide and a link-out: TrackPPC signs in on its own host, so nothing here calls an API or reports it as connected.
- One host, one MCP:
Changed
One price line, everywhere.
pricing.tsnow also projects a price-line manifest (backend/app/knowledge/price_line.json) that the backend, the billing page and the MCP connectors read, so included accounts, seats and add-on prices are enforced from the same numbers the pricing page prints.- Extra ad accounts are priced on a dated schedule stated everywhere the same way: one rate for accounts added through 30 September 2026 and the standing rate for accounts added from 1 October 2026 (both numbers live only in
pricing.ts); an account added at the earlier rate keeps it. The half-off promo framing is gone. Needs the founder to create theadvisorppc_site_extra_account_intro_monthlyStripe price; checkout refuses to mint until it resolves at the advertised amount. - The account-change rule: three free account changes per included account, counter always visible on Connectors; from the next new ad account the change is a billable extra managed account. Confirm-then-charge: the API answers 409
connector_account_change_billablewith the price, the UI asks for a click, andPOST /api/stripe/addons/extra_accountadds the subscription item (prorated, invoiced now). Purchased add-ons raise the account and seat caps (tenant_subscriptions.extra_accounts/extra_seats, written by the webhook). Migrationd9e0f1a2b3c4. - The price gate now hunts figures from $40 and the manifest is a gated generated artifact. Gates: price-gate,
test:gate(pricing tests added),pytest tests/test_connector_entitlements.py tests/test_price_line.py.
- Extra ad accounts are priced on a dated schedule stated everywhere the same way: one rate for accounts added through 30 September 2026 and the standing rate for accounts added from 1 October 2026 (both numbers live only in
Fixed
TrackPPC setup now opens the connectors billing page at
/dashboard/billing#tracker, the live subscribe form, instead of the public pricing page which has no TrackPPC section. #321Fixed the Overview page showing only its heading when your account could not be loaded. It now shows a loading state, or a clear message with a Try again button that reloads your account and then your report. #439
/api/auth/menow has a 15 s deadline. Six new tests pin that the Overview body is never empty.
Added
A workspace for SEO and AI search: decide what to change, edit it, compare versions, schedule the work and export it.
- Gravity GEO package B per the frozen
gravity-geo/ARCHITECTURE.md, built over the facts the Gravity MCP returns. Gates at build time:tsc --noEmitclean,test:gateclean,pytest tests/test_geo_router.py8 passed. The backend baseline is red at merge-base (53 failures); the gate method is zero NEW failing test IDs, not green. #249
- Gravity GEO package B per the frozen
Changed
The Shield connector page now explains Shield's own Free / Pro / Agency tiers and links to Shield's pricing.
/connectors/shielddescribes click scoring, Google Ads IP exclusions and the Bing paste list; a catalog-drivenpricingHrefCTA opensshield.advisorppc.com/pricing. Shield rungs are deliberately NOT added to the main/pricingladder, which sells AI managers. #137
Added
Reset your own password without contacting support. #244
Fixed
Logged-out visitors can buy the Google Suite plan instead of hitting a wall at checkout. #245
Added
The Google Suite plan is on sale. #230
Added
Support answers the phone, with the same brain and the same guardrails as chat. #173
Live sales metrics on Overview: ad spend, paid vs organic, pending approvals, auto-refreshing. (#189, #188)
A secure AdvisorPPC Telegram channel, with the Mini App hosted on AdvisorPPC. (#222, #224, #223)
Super-admin DGX model lanes in chat. #209
Changed
All 235 media files moved to R2 and off the origin, with every
/brandsource routed through the CDN resolver. (#212, #213, #214)Editorial pass on all 98 blog posts, plus real image and media gates. #210
Two daily Field Notes through Aug 26. #208
Fixed
Dark mode no longer forces light artwork: the multiply plate is neutralised on the homepage hero and elsewhere, and art keeps white with rounded corners. (#215, #216, #217)
The Telegram logo keeps its
idot and drops the top arc and circle. (#227, #226)The Google Partner footer aria-label loses its em dash. #211
Alembic heads #189 and #224 each created are merged. #225
Added
An in-app Billing page at
/app/billing. #171Every support conversation is remembered, and the owner can read it. #164
A context budget orchestrator: a 256k ceiling with dynamic per-turn allocation. #191
Changed
Chat pipeline: speed, exposure hardening and manual write-gate enforcement. #151
Fixed
Chat turns no longer block on
connector_account_locks, and Google consent stays native without status-refresh lock starvation. (#148, #140)One unreadable Google service no longer blanks the whole chat context. #144
The site's customers are signed into the MCP runtime, and the runtime is told which plan a workspace is on. (#168, #152)
A hyphenated ad account is read under its canonical id, and a target CPA can steer pacing. #174
A scheduled run targets the workspace's managed accounts. #159
The authorizing Google account is captured and shown on the card. #146
Enter no longer eats IME messages, and loads stop looking blank. #149
Added
Field Notes stills and inline figure nodes. #136
Changed
Plan-gate refusals are named and shown above the composer. #128
Fixed
Dashboard, chat connect, billing, security and trust corrections. #134
The scaling page meta description is back inside 160 characters. #135
Added
Superuser plan control for tenants. #118
Added
Account agents in chat. #107
Fixed
Dark marketing media fallback, and the Grok dark-marketing surface. (#104, #103)
Field Notes H2 and FAQ structure. (#100, #99)
Added
Gravity runs on live data. #92
Fixed
Startup recovery and RLS. #89
Meta dashboard first-recovered state. #88
Added
The brand-green :30 film is the home hero. #ac246f3
Video files, :30 TV spots, an
/adslibrary and six trade blog heroes. #c1776e5
Added
Chat data visibility, a PDF rail, the Portfolio Manager orchestrator, and Fable / Opus 5 models. #b0b757c
Added
Google Ads Ad Scheduling post. #6a04c8b