Skip to content

Release notes

What shipped,when, and why.

Every release, grouped by version. Features on top, fixes below, each bullet linked to the commit that introduced it. Generated automatically from the repository — no marketing spin, no missing entries.

v2.34.0

Features

  • billingnative subscription management callables
  • channelsrecord HTTP status and latency on article deliveries
  • clientAccount page shows the real plan, usage and billing links
  • let owners edit a headless site's blog URL pattern
  • offer a post status on headless one-off runs
  • webmanage the subscription in the portal instead of Stripe's
  • webreplace the cycle usage card on Billing with a one-row strip
  • websay lifetime code instead of AppSumo and show lifetime licences as such
  • webshow the Article delivery state on builder sites' overview

Fixes

  • billingreport a change as syncing only while its confirm's expectation is unmet
  • builder-promptsinsist on every JSON-LD entry and copy the prompt unwrapped
  • functionsdefault builder sites to /blog/%postname% so delivered canonicals resolve
  • webdescribe Lovable's receiver as a route inside the site

v2.33.0

Features

  • billingcount delivered images on the cycle usage map
  • billingsell Cloud volumes as prices of one plan and stamp caps from the price
  • functionsadopt a pending WordPress space and merge a blocked claim
  • functionsguess a site's platform and record its builder
  • functionssite platform, pending WordPress spaces and the portal finish
  • toolslink the free tools' results to the new Learn pages
  • uidraw real platform and surface marks
  • uimarks for every site platform, a disabled stepper step, described-by on inputs
  • upload author photos instead of pasting a photo URL
  • webconnect a site from its address
  • webconnect the site as the last setup wizard step
  • webexplain the photo and profile page fields in the author form
  • webgive workspace authors their own page and show personas and authors as cards
  • weblicense key on the workspace home and platform status in site lists
  • webone setup wizard for every platform
  • webpick the Cloud posts-per-site volume on the pricing page
  • webproduct updates email opt-in
  • webshow the detected platform as one card, with the picker behind Change platform
  • wwwadd a format to Learn pages, a by-format strip on the hub and a fuller Learn footer column
  • wwwadd an IndexNow key file and a submit script
  • wwwcredit the post's author on blog posts and drop the API's duplicate BlogPosting
  • wwwmove the backlinks-needed post into the Learn hub
  • wwwone Cloud plan with a volume selector across the site, docs and plugin copy
  • wwwpublish 12 more Learn pages (wave 3)
  • wwwpublish 16 Learn pages and extend 12 existing ones
  • wwwpublish 18 more Learn pages (wave 2)
  • wwwtint the plan-choice band on the pricing page

Fixes

  • billingacknowledge subscription webhooks for a deleted user instead of retrying
  • docsserve sitemap.xml and robots.txt past the locale middleware
  • functionsadopt a pending WordPress space ahead of reviving a disconnected activation
  • headlessrun headlessReadPosts at 512 MiB
  • pluginnever hand the wp-admin dashboard a wizard state without a state
  • webalign onboarding copy across locales
  • weblet the site check outlast a cold start
  • webnoindex every portal route except /login and /signup for crawlers that skip JS
  • webrun Update on a live post without the publish confirmation
  • webshow the author's photo in the persona author picker and on the site persona card
  • webthe Persona step says Continue while Connect is still ahead
  • wwwleave retired blog posts out of the sitemap
  • wwwmove the footer's Learn links into a full-width band
  • wwwrun the free AI detector on its heuristics only
  • wwwstop caching a blog backend failure as a post 404

v2.32.0

Features

  • accept review notes in the WordPress editor and flag open notes in the owner email
  • credit a real author per persona per site with Person JSON-LD on every surface
  • functionsadd editor review notes to the WordPress delivery payload
  • keep authors in a workspace library and credit them per persona per site
  • pluginshow editor review notes in the Structura post meta box
  • wwwadd LetsLaunch listing badge to the footer rotator

Fixes

  • clientkeep the cloud consent gate busy until the page reloads
  • thememake the duration-fast/normal/slow/slower utilities exist
  • uidim disabled InputField, TextArea and Checkbox
  • uirequest a favicon size Google's S2 actually serves
  • webhold the shell behind the loader until workspace and role resolve
  • webshow bullets and numbers in post editor list blocks

v2.31.0

Features

  • campaignscampaigns without keywords write from the objective

Fixes

  • aikeep an OpenAI insufficient_quota 429 terminal through the engine wrapper
  • campaignsadd the scheme to WP site URLs built for portal runs
  • campaignsplugin cron runs of banked campaigns pick from the bank in the cloud

v2.30.0

Features

  • aievery own-key plan can connect all three providers
  • aiMagic suggest on every plan
  • aione image model on managed plans
  • functionsAI label on generated images
  • functionsgenerated images follow the site's image medium and show only what the brief names
  • plugina quieter Generate a Post page
  • toolstrack portal tool runs, Learn link clicks and the tool behind a signup
  • visualsimage medium cards and an AI label switch, with a reminder in the campaign form
  • wwwdraft the next three Learn pages of the authority cluster

Fixes

  • functionsreferral links to another domain are published as sponsored
  • functionstitles and headings in sentence case
  • image switches, license sync, partial preset updates and wizard medium parity
  • plugina preset update without the art direction keeps the stored text
  • pluginthe setup wizard works on anonymous installs

v2.29.0

Features

  • campaignsnew campaigns open on 1,200 words instead of 2,700
  • functionsa campaign save raises the Gemini text notice for a site without one
  • wwwthe header links to Learn instead of Blog where a Learn hub exists

Fixes

  • functionsmerge plan keeps the status of an unpublished source post
  • wwwLearn links inside posts use the default link style
  • wwwredirect the 16 blog posts merged in the 2026-10 quality audit

v2.28.0

Features

  • channelstest-send endpoint, connection verification fields, builder-prompts package, headless-only article delivery
  • deliver published articles to custom blogs
  • functions,wwwmake the DR checker a link-only, one-field check
  • functionsadmin tool to refresh a published headless post in place
  • functionsaudit with a model chosen per plan
  • functionsbatch generation mode in the evaluation harness
  • functionsevaluation harness for the post pipeline
  • functionsground posts in official sources, audit drafts and record Source check
  • functionsone AI lineup and a posts allowance for managed plans
  • functionsops alert when a site's Search Console data stops updating
  • functionsper-workspace limit on AI suggestion calls
  • functionspersona guardrails for generated personas
  • functionsrecord which free tool brought a signup
  • functionsrefresh tool can make the writing persona the post's author
  • functionsSEO tools for signed-in members on a monthly allowance
  • functionssite AI defaults that follow the best key, advice state and notice
  • model-catalogcurrent model generation, full prices and capability flags
  • model-catalogcurrent-generation text tiers for own-key plans
  • plugin"Recommended for text" label on the connected provider card
  • pluginmessage for the AI suggestion limit
  • pluginNew Campaign opens empty and drafts only on Magic suggest
  • pluginposts allowance and no AI engine details on managed plans
  • pluginprovider and model guidance for own-key plans
  • tools-uihand the per-visitor limit to the surface's card
  • tools-uiverdict chips, metric tiles and Learn links in the three reports
  • uiconnect-flow primitives — Stepper a11y, OptionCardGroup media/row, CodeBlock title, PlatformMark/Chip
  • uiprovider lists per plan, joined in the page's language
  • uiread-only mode for DiscoverableChipList
  • uirecommended label and inline advice components
  • webConnect your site flow for Article delivery
  • webfree SEO tools in the customer portal
  • webmessage for the AI suggestion limit
  • webmetric verdicts and Learn links in the portal's SEO tools
  • webposts allowance and no AI engine details on managed plans
  • webprovider and model guidance for own-key plans
  • webSource check notes in the post editor and Research on the run page
  • webtool links from www land on the running tool after sign-in
  • www,functionsadd free SEO tools (SEO checker, DR checker, keyword generator)
  • www"your next question" block on Learn pages
  • www/blog-seo-software — the selling page for the blog SEO buyer cluster
  • www/programmatic-seo and /byok — the last two pages from the GSC mismatch
  • www/wordpress-ai-writer — the plugin page for the WordPress AI writer cluster
  • www3 free checks per tool a day for each visitor
  • wwwadd LaunchNest listing badge to the footer rotator
  • wwwcredit the founder on every blog post and Learn page
  • wwwdraft the first four Learn pages of the authority cluster
  • wwwmanaged plan copy by posts allowance
  • wwwmetric verdicts on the free tool pages, Learn links gated on the hub
  • wwwpublish the first four Learn pages of the authority cluster
  • wwwresearched DE section headings, hero, and re-headed KI tool titles
  • wwwresearched EN section headings and a new hero message
  • wwwresearched ES section headings and hero
  • wwwresearched FR section headings and hero
  • wwwscaffold 12 Learn pages for the free tools' metrics
  • wwwsplit the footer into Product, Solutions and Free tools columns
  • wwwthe capacity card always offers a free account

Fixes

  • docspoint hard-coded links at locale-prefixed URLs
  • firestoredeclare the channelTestSends TTL policy in the index file
  • functions,wwwbase the DR checker's dofollow share on referring pages
  • functions,wwwlist each keyword search once in the keyword generator
  • functionsa "random" persona never draws from outside the site's persona list
  • functionsactivation keeps a workspace the customer has already set up
  • functionscount a site's live stock without an indexed filter
  • functionscount JSON-LD as structured data in the SEO checker
  • functionsheadless action steps read "Name: text" without an em-dash
  • functionsheadless delivery passes the campaign's referral links to the link repair
  • functionslink repair keeps configured referral links on the site's own origin
  • functionsonly a delivered post uses a post slot on own-key and free plans
  • functionspost titles stay within 70 characters
  • functionsretire DR link results cached before the dofollow fix
  • functionsstale stock written by an older model of the lineup's provider
  • functionsstock refill failures alert ops and the hourly tick finishes its work
  • functionsstop the prompt from inviting accusations and invented specifics
  • functionsstop two pickers from taking the same keyword
  • functionsworkspace allowance counts connected sites only
  • functionswriting rules for persona claims, keyphrase use, openers, titles and attribution
  • plugina single connected provider shows its name instead of an empty row
  • pluginaction steps read "Name: text" without an em-dash
  • pluginediting a campaign no longer resets its status or progress
  • pluginGemini needs at least a Free licence, as the cloud already requires
  • pluginMagic suggest no longer fails on PHP 7.4
  • pluginmanaged plans hide the queue's provider column and the image fallback
  • pluginnew posts and campaigns start on the best connected provider
  • pluginno provider advice or model picker until a text provider is connected
  • pluginprovider advice also shows on the New Campaign setup step
  • pluginthe provider advice says Claude
  • portal,functionsresolve plan, billing and permissions from the selected workspace
  • portalsend canonical Link headers for /login and /signup
  • rulesstop owners rewriting server-owned fields on their user doc
  • tools-uishow sub-second load times in milliseconds
  • tools-uivisual QA fixes for the verdict reports
  • uikeep unselected option cards visible on dark dialogs
  • uino divider above a first header-less combobox group
  • webbilling FAQ states the providers per plan in the user's language
  • webkeep the SEO tools reset date on one line
  • webno provider advice for a text provider with no key behind it
  • webrun inspector shows the error reference only on runs with an error
  • webthe provider advice and pickers say Claude
  • wwwalign the free-tool submit button with its input
  • wwwauthor credit polish from the visual review
  • wwwdrop the free-tools footer link that shipped ahead of its route
  • wwwfree-tool fixes from browser QA
  • wwwgive every locale its own sitemap entry with a full hreflang cluster
  • wwwhyphenate keywords in the market's language on phones
  • wwwkeep the Open Graph card text clear of its footer
  • wwwlimit card says "tomorrow" and its button wraps on small phones
  • wwwlink own pages directly instead of through redirects
  • wwwmake the hero one message instead of two sentences
  • wwwpaginate the changelog to stay under 2 MB per page
  • wwwpoint schema.org logo and image at files the site serves
  • wwwpricing and selling pages state the providers per plan
  • wwwrethrow Next's prerender signal from currency detection
  • wwwshorten the English homepage title to fit a Google result
  • wwwstop lazy-loading the theme-paired LaunchNest badge images
  • wwwwide article tables scroll inside themselves on phones

Performance

  • wwwprerender pages by rendering the document in the locale layout

v2.27.0

Features

  • uiaccept comma-separated lists in every per-item add field
  • wwwanimate the channels hero illustration
  • wwwanimate the features hero illustration
  • wwwanimate the homepage hero illustration

Fixes

  • functionsgate reference-lookup queries out of keyphrase grounding
  • functionsnever delete the workspace when purging the last site
  • pluginreplace German strings leaked into the es/fr catalogs

v2.26.0

⚠ BREAKING CHANGES

  • ai,client,web,plugin`number_in_title` is no longer a user-toggleable SEO rule. Stored values are ignored by the cloud and cleared by the script above; the `SeoRuleName` union no longer includes it. Numbers in titles are now decided per post by the cadence rotation.

Features

  • ai,client,web,pluginretire the "Number in title" toggle
  • billinggate member invites by plan tier only, drop the 3+ sites rule
  • campaign language per site and a drafted Setup step replace the interview
  • functionsforward error-level incidents to Telegram by default
  • functionspage ops on the money paths and the autonomous engines
  • functionsrank authority domains per post keyword before the site-search sweep
  • growthname the signup source on the Telegram ping
  • web,clientrun the AI refinement from a Magic suggest button, never automatically
  • webcreate a visual preset from the site Visuals page when none is bound
  • wwwadd /blog-automation — the "how does it run unattended?" page
  • wwwopt-in eyebrowAsHeading so /blog-automation inverts all 7 sections
  • wwwre-add SeekTool.ai as a neutral reciprocal link
  • wwwrotate the footer directory badges through one slot

Fixes

  • ainumbered-title suppression never fired — detector missed our own shape
  • cigive the integration emulator a dummy RESEND_API_KEY
  • clientkeep the campaign interview's answers and seeds across a revisit
  • firestoreadd the campaigns index the SEO-intel refresh cron needs
  • firestorerestore COLLECTION-scoped single-field indexes on campaigns.status
  • functionsan unbound RESEND_API_KEY must not kill the runtime
  • functionsbalance watch POSTed a GET-only endpoint, failing every tick
  • functionsbind the growth-alert secrets once on the campaign create paths
  • functionscount the monthly post cap per post, not per key resolution
  • functionsisolate the headless tick per campaign, wire the SEO-intel error rate
  • functionspage when the balance watch goes blind; retune threshold to $5
  • functionsrefresh cron never selected a never-refreshed campaign
  • functionsrefresh tick was killed at 60s and had no SERPER key
  • functionsreject "placeholder" stub blueprints and track outcomes per model
  • i18ncall the language catalogue "More languages", not "All WordPress languages"
  • web,functionsstop invited members landing on a dead workspace; owner-only billing and owner row
  • webgate campaign model pickers on the workspace's plan, not the user's own license
  • webkeep the GSC property picker inside the setup wizard; treat WebKit MIME-type errors as stale chunks
  • webkeep the license workspace when the membership callable fails
  • weblet the campaign wizard step back to Interview and forward again
  • wwwdon't lazy-load theme-paired footer badges
  • wwwdrop the SeekTool.ai pill — we were never listed there
  • wwwretarget /en/for-agencies off a term that means "hire an agency"

Chores

  • release the next version as 2.26.0, not 3.0.0

v2.25.0

Features

  • pluginname and tag the wp.org listing for the autoblogging cluster
  • pricingretire the founding offer from www and the portal, keep the Stripe code live
  • wwwadd followed SeekTool.ai footer link for the free directory listing
  • wwwdrop Learn from the header nav — footer Resources only
  • wwwlead the EN /vs/ titles with "alternative", the query that ranks
  • wwwPeerPush verification badge in the footer directory row
  • wwwsurface the Learn hub site-wide and 308 cross-locale tag/category ghosts

Fixes

  • channelsemail-owner channel actually sends — wire the mail-collection transport
  • clientGSC connect dialog title keeps its icon inline in wp-admin
  • clientwizard pre-fills saved positioning + never clobbers an untouched visual preset
  • functionsheadless run receipts finally reference their delivered post
  • functionsrestore surface-interest modules swept into 94e5f039d
  • functionsstrip leaked image-directive paragraphs from post bodies
  • headlesspost view reads the delivery-time AI model stamp
  • plugincompleted setup stays completed across the license claim
  • web,uiGSC property picker scoped to the site's domain; tall dialogs scroll
  • webadmin site-limit override goes through the adminOverrideSiteLimit callable
  • webcampaign view rendered raw key campaignView.seo.liveData

v2.24.0

Features

  • webWordPress connect flow becomes a real stepper with a verify stage

Fixes

  • pluginricher Plugins-screen row — description, action links, meta links
  • uiexplicit aria-disabled on inert Stepper chips

v2.23.0

Features

  • clientCreate Free Account CTAs on the anonymous Account & License page
  • functionsweekly cap on manual single-post generations
  • noticesSend Test Notification actually delivers a notice
  • noticesweekly single-gen cap refusals reach the Notification Center
  • proactive weekly one-off usage indicator on the Generate page
  • releasewp.org launch follow-through — www flag flip, portal wp.org zip, SVN deploy in CI
  • ui,webPromptDialog + upgrade CTAs across the free-tier portal
  • ui,webrich Pro upsell dialogs, tier-true provider pickers, Get Pro CTA
  • videoShorts title ships with hashtags, capped at YouTube's 100 chars
  • web,functionsweekly quota surface on the portal Generate page
  • www'Available on WordPress.org' badge in the footer brand column
  • wwwFAQ query cluster on the remaining ten vs pages
  • wwwquery-first titles + FAQ cluster for the Machined AI and SEOWriting vs pages
  • wwwquery-first titles for the remaining ten vs pages

Fixes

  • clientdon't seed the Generate form with a provider that has no key
  • clientexplain the license gate on the disabled New Campaign CTA
  • clienthonest escalating copy while a run waits for the site's cron
  • clientlicense gate wins the New Campaign tooltip; no engine-banner flash on cold boot
  • clientportal-side upgrades finally reach wp-admin
  • clientthe Interview step's Pro button explains itself
  • clientthe notification test button no longer masquerades as chaos tooling
  • functionsgetSingleGenQuota tolerates a license doc missing status
  • pluginclear Action Scheduler's cron event on deactivation
  • plugindrop unrelated 'xerx' wp.org handle from readme Contributors
  • pluginforward the Post Status choice onto the single-gen wire
  • pluginrename display name to StructuraWP for wp.org distinctiveness
  • uigated CTAs keep their explanatory tooltip and cursor while disabled
  • webatCampaignCap declared after the campaigns list it reads
  • webchannel tier badges respect entitlement; compact seat count in plan chip
  • webheader CTAs share one flex group instead of scattering
  • webone Add key CTA on the AI-keys page, not two
  • webportal New-campaign button respects the campaign cap
  • webthree surfaces stop disagreeing about post counts
  • webvisual-review nits on the conversion batch
  • webworkspace rename reaches the header without a manual refresh
  • www308 indexed cross-locale and WP-era blog URLs instead of 404ing

v2.22.0

Features

  • appsumocode pool, grant math, and the generator script
  • appsumoportal /redeem page + billing stacking entry
  • appsumoredeemAppsumoCode callable — validate, grant, stack
  • appsumorefund claw-back script
  • clientranked keyword bank on the wizard's Keywords step + discovery meta round-trip
  • functionsDFS Backlinks rank as domain authority + cold-start discovery mode
  • functionsexpose resolved discovery mode, KD ceiling and per-keyword variant counts
  • functionsinformational-first keyword scoring + volume-among-winnable bank order
  • functionskeyword ledger + exhaustion-aware picking + bank auto-refresh
  • functionstwo-stage duplicate-topic gate + title-shape variety
  • pluginrequire an explicit opt-in before any Structura Cloud contact
  • portalreusable login tokens for the AppSumo reviewer account
  • stockconsume-time finalize chain + persisted pickedKeyword
  • stockfallback-provider resubmission for failed image batches
  • stockpersona rotation on random campaigns + per-entry persona provenance
  • stockstock WP serve rides the shared delivery body + closes wire gaps
  • uiKeywordRow, MetricChip and KeywordBankList primitives for the ranked keyword bank
  • web,www,functionsfirst-touch attribution on sign_up + referrer-host capture
  • webkeyword-bank runway prediction + thin-bank warning in the campaign keyword step
  • webranked keyword bank on the campaign Discovery step + edit page
  • webSupport link in the portal account menu
  • www/ai-humanizer analyzer tool + detector retitled onto local head terms
  • www/ai-seo selling page for the AI SEO money cluster, all four locales
  • www/autoblogging definition block with stable anchor + DefinedTerm schema
  • www/for-developers — API-first CMS page for the headless cluster
  • www/vs/autoblogging-ai meta on the review + pricing brand queries
  • wwwAI Directories badge in the footer badge row
  • wwwauto-link blog bodies into the learn hub
  • wwwFazier #1 Product of the Day award badge in the footer
  • wwwFazier launch badge in the footer
  • wwwfollowed LaunchKiwi badge in the footer badge row
  • wwwfooter badges on their own row + SmolSaaS badge
  • wwwlearn hub — headless WordPress body + Next.js CMS comparison
  • wwwlearn hub content loader, schema builders, and auto-linker
  • wwwlearn hub routes, blocks, and the 25-term shortlist
  • wwwlearn terms — blog-seo, content-decay, generative-engine-optimization, content-hub, content-velocity
  • wwwlearn terms — evergreen-content, search-intent, ai-search-optimization, topical-authority
  • wwwlearn terms — pillar-page, content-pillars, blog-automation, content-marketing-automation
  • wwwlearn terms — seo-content-writing, content-brief, content-operations, content-pruning
  • wwwlearn terms — seo-copywriting, llm-seo, ai-visibility, content-automation
  • wwwpublish learn terms — blog-seo, content-decay, generative-engine-optimization, content-hub, content-velocity
  • wwwpublish learn terms — evergreen-content, search-intent, ai-search-optimization, topical-authority
  • wwwpublish learn terms — pillar-page, content-pillars, blog-automation, content-marketing-automation
  • wwwpublish learn terms — seo-content-writing, content-brief, content-operations, content-pruning
  • wwwpublish learn terms — seo-copywriting, llm-seo, ai-visibility, content-automation, headless-wordpress, nextjs-cms
  • wwwpublish the first two Learn terms — programmatic SEO, internal linking
  • wwwretitle home, grow-with-content, for-agencies per the Ahrefs pass
  • wwwretitle selling pages onto researched keywords, all four locales
  • wwwTAAFT featured badge in the footer badge row
  • wwwToolFame + Good AI Tools badges in the footer badge row

Fixes

  • aigive tags the reuse-first governance categories already had
  • billingsend welcome/dunning emails only on status or plan transition
  • bloga slug from another locale's corpus must 404, not render
  • channelsflip connection to expired on auth_expired publish
  • client"Campaign deleted." toast after a delete, not "archived"
  • docsdeclare @anthropic-ai/sdk + deterministic locale asset-path rewrite
  • docsthe generated-posts section link had no page to land on
  • functions150 suggestions per seed + stopword/plural-aware bank dedupe
  • functionsclose two discovery gate leaks seen on the first real run
  • functionsDFS keyword_suggestions rows were never ingested — flat item shape
  • functionsdrop hire-out / transactional keywords from blog banks instead of demoting them
  • functionslong-tail anchor splits hyphens/umlauts; bank collapses same-token-set rewordings
  • functionslong-tail keyphrase pool was starved to 0–2 entries
  • functionsmount BYOK_MASTER_KEY on portal credential endpoints
  • functionsmount BYOK_MASTER_KEY on three more BYOK-decrypting functions
  • functionsseed keyword discovery on the topic space, not buyer intent
  • i18nDE www speaks du-form everywhere — detector + contact-sales converted
  • keyword-bankalign partial-metric rows, label volumes, badge legacy live banks
  • pluginappend the Structura admin menu after Settings instead of position 25
  • pluginenqueue admin-notice scripts and styles instead of printing them inline
  • pluginescape slashes in JSON-LD output so schema data cannot close the script element
  • pluginforward per-keyword metrics from keyword discovery to the SPA
  • pricingretire the founding offer automatically when its 25 seats fill
  • scriptsxerx retitle must move metaTitle with title
  • stockpersist imageProvider on stock entries — writer dropped it since 2026-05-01
  • stocksingle-source research-stage secrets — stock cron gains DataForSEO
  • stocktrigger refills mount the research bundle too — DataForSEO gap
  • videoone render per instance — concurrency:1 on runVideoSynthesis
  • web,clientdead app.structurawp.com/pricing upsell links → real funnels
  • webcanonicalise /login and noindex all other portal routes
  • www308s for wrap-around duplicate blog posts + CMS repair script
  • wwwallow launchbuff.com to iframe the site via CSP frame-ancestors
  • wwwdecode every HTML entity in FAQ text before it reaches FAQPage JSON-LD
  • wwwdecode German and French quotation entities in FAQ text too
  • wwwdrop the changelog's GitHub commit links — the repo is private
  • wwwhreflang must name locales that actually serve the slug
  • wwwkeep learn's generateStaticParams out of the dev prerender manifest
  • wwwlearn hub — apply the Ahrefs pre-deploy validation pass
  • wwwlearn kit builds site-relative hrefs through the adapter's localePath
  • wwwlearn term titles drop the " — Structura" template suffix
  • wwwlegal-page autolinks swallowed the sentence's full stop
  • wwwLocaleSwitcher sends cross-locale blog links to the blog index
  • wwwput metadata in <head> for crawlers + canonicalize in-body links
  • wwwstrip inline issue refs from changelog bullet text
  • wwwsubmit every locale's blog posts, not just the first one's
  • wwwswap AI Directories badge variants — file names describe artwork color, not theme
  • wwwthe features comparison teaser pointed at a route we never had
  • wwwthe sitemap advertised term URLs in locales that never had them

Reverts

  • wwwremove LaunchKiwi footer badge
  • wwwremove ToolFame footer badge

v2.21.0

Features

  • aiinject attached research documents into the synthesis prompt
  • aitier picker for every BYOK-family tier, Standard default, provider gating
  • attachmentsresearch-attachment upload core — extract (PDF/DOCX/TXT/MD/HTML), store, portal callable + plugin bearer twin
  • campaignswiden the ephemeral single-post contract — content options + research attachments on the wire
  • clientResearch material section on Generate Post + attachment refs on the wire
  • headlesssurface image-rehost failures on run receipt, incidents, and ops Telegram
  • i18nAustrian and Swiss German campaign languages with variant prompt guidance
  • pluginresearch-doc upload proxy + attachments on the single-post wire
  • pricinggate the founding seat counter behind a reveal threshold
  • uiOptionCardGroup primitive — one selectable-card control for all campaign-mode grids
  • uiResearchAttachments multi-file primitive per design handoff
  • videocomma-separated Tags field on the Shorts caption package
  • websingle post generation is one full page — popup removed, full wire contract, research attachments

Fixes

  • campaignsempty keyword bank falls back to campaign name, warns, and regional geo reaches DataForSEO
  • functionspin @firebase/database-compat to 2.1.4 — 2.1.5 breaks cold starts
  • stockstop bucket lifecycle rule from deleting live stock images
  • webGSC modal wraps overflowing footers and adds a reconnect state for expired connections

v2.20.0

Features

  • aiaccept a BYOK model tier on the generation path (rollout-tolerant)
  • aiextract shared @structura/model-catalog with tier-based resolution
  • campaignspersist + thread the BYOK model tier through generation
  • clientmove GSC prompt to a dismissable dashboard banner; scroll the property picker
  • clientTop/Standard tier picker on campaign create/edit
  • clientTop/Standard tier picker on single-post-gen + create steps
  • functionsprime inputSnapshot on portal single-post runs
  • model-catalogadd live provider model-sync script
  • model-catalogbump models to live-confirmed ids
  • pluginforward model tier (top|mid) on campaign + single-gen
  • runs,webadd provider/model rows to the Run-again modal
  • runsconfirm before "Run again" with a run summary
  • runsrebuild the Run-again modal to the design handoff
  • Top/Standard tier picker for image regeneration
  • web"Run again" on the portal run receipt
  • webtier-based BYOK model picker (Top/Standard) on campaigns

Fixes

  • billingguard against a duplicate active product shadowing a plan
  • campaignsstop "Run again" crashing on a schedule-less snapshot
  • clientcorrect the wp.element JSX-runtime shim (React #130 crash)
  • clientscope the wp-admin Personas page to this site's bound voices
  • clienttier badge shows the plan only, not the retired audience suffix
  • onboardingbind seeded House voice for non-AI tiers + workspace-aware seed flag
  • onboardingdurable server-backed onboarding-dismissed flag
  • pluginself-heal a revoked anonymous bearer instead of 401-looping forever
  • runsshow draft-aware label on the single-post run header
  • webdraft-aware run receipt label for WP posts

v2.19.0

Features

  • gsccap the weekly digest length for agencies
  • gscvalue-gate the weekly digest — no email without a story
  • wwwadd Search Console differentiator to vs pages + home
  • wwwannounce Search Console analytics across the marketing site

v2.18.0

Features

  • gscdesigned connect flow — four-state modal on both surfaces
  • gscopportunity engine + URL inspection drip (slice 3 backend)
  • gscrange support + per-post table on the site overview
  • gscSearch performance page — trends, opportunity queue, post table
  • gscuncovered-query rule, impact tiers, competing titles, row sparklines
  • gscweekly search digest email — slice 4 complete
  • gscwizard connect cards + wp-admin dashboard glance card

Fixes

  • gscroute property-less connections to the Configure picker
  • headlessenforce WP-style per-site slug uniqueness at delivery

v2.17.0

Features

  • billingfounding member offer across portal, www, and seat counter
  • gscGoogle Search Console integration — connection + post performance
  • webshow translated render-stage progress on video cards
  • wwwadd /rank-higher paid-ad landing page

Fixes

  • functionscount delivered live posts in the headless terms cache
  • functionsdefault missing slug arrays in delivery term deltas
  • functionsportal run cancel no longer 500s
  • noticesrender translated copy instead of raw i18n keys
  • refuse URL-shaped input in API key fields before the live test
  • uiresolve pricing/search-perf subpaths for CommonJS consumers

v2.16.0

⚠ BREAKING CHANGES

  • videothe "assembly" video pipeline id and the Shotstack integration are removed from the cloud renderer.

Features

  • functionspublic share links for headless posts + SEO/AI provenance stamps
  • headlessrelease the Headless surface to everyone — remove the dogfood gate
  • portalreal Xerx mark + wider integration-help dialog
  • portaltrack outbound xerx.io clicks from the integration-help surfaces
  • portalXerx integration-help banner + lead dialog on the Headless surface
  • videoyear-long video retention with self-healing download links
  • web+wwwshare links live on the vanity host share.structurawp.com
  • webpost export (MD/HTML/DOCX) + Share-preview dialog for headless posts
  • wporgplugin directory listing assets — icon + banner
  • www"Works with your stack" platforms band + Content API feature card
  • wwwdrop "WordPress sites" from the Xerx builtBy credit
  • wwwfooter bottom-bar cleanup — cookies to Legal, Xerx credit
  • wwwplatform-neutral copy across EN landing pages
  • wwwport the multi-platform reposition to de/es/fr
  • wwwpublic share-preview page at /p/{token}
  • wwwrename the product descriptor to "autonomous blog engine"
  • wwwreposition homepage copy to two-paths (WordPress or Content API)
  • wwwscrub "WordPress-only" concessions from EN vs pages
  • wwwtwo-paths copy for features, pricing, and channels pages

Fixes

  • billingfree-tier weekly and monthly post caps never blocked
  • functionsmanaged AI derives from the plan, not the stored license flag
  • functionspage ops when the Serper account rejects all SERP calls
  • functionstemporal anchor in generation prompts + competitor guard on citations
  • functionstolerate trailing commas in AI blueprint JSON
  • functionstrigger-driven stock refills thread isManagedAi too
  • functionsvideo renders can no longer strand at 'rendering'
  • licensesentitlement bundle never matched WP sites — consolidate site-host normalizers
  • licensesgrace-period revokes wrote to the retired activations path, aborting every revoke
  • onboardingAI competitor suggestions survive wizard step remounts
  • plugincampaign Posts tab shows drafts — recent-blueprints queries set post_status
  • portalland invite acceptances in the invited workspace + lock member roster to owner/admin
  • web+clientmodel pickers are BYOK-only; managed campaigns store no model
  • web+docsalign portal and docs welcome with the two-paths positioning
  • webcampaign config card falls back to the provider name when no model is stored
  • webdrop stale pre-parity headless channel strings
  • webShare dialog close button + surface the active share link on the post view
  • webshow the wizard smart loader from first paint on Visuals + Persona steps
  • webwizard logo commits live at upload; suggested competitors auto-add
  • workspacesenforce the plan-tier provider gate on the plugin credential transport
  • wporg-zipclamp 'Tested up to' to major.minor
  • www+functionsshare-page identity tile prefers the square favicon over the logo
  • wwwmark Cloud as Most Popular on landing and vs pages, not BYOK
  • wwwremove false WordPress-only claims after headless GA

Chores

  • pin next release to 2.16.0
  • videoretire the Shotstack renderer

v2.15.0

Features

  • post-statusremove "pending", default to draft, and make run labels status-aware
  • videoGemini TTS voices with BYOK-aware key routing
  • videogrouped two-provider voice picker across wp-admin and portal
  • videoraise the monthly video cap 20 → 40
  • videoRemotion composition package with six-template lineup
  • videoremotion render pipeline, default renderer with Shotstack rollback
  • visualsfall back to a generic image style instead of blocking when no preset is bound

Fixes

  • none-tiergate AI-suggest to paid tiers + stop Visuals fetch when locked
  • portalwider video configure modal + scalable campaign bindings list
  • video4GiB worker + capped render concurrency after first-render OOM
  • videoaccept Remotion template ids as preset videoStyle values