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.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

v2.14.1

Fixes

  • none-tierwp.org "none"-tier UX fixes across wizard, diagnostics, and run screen
  • schedulerresolve webhook signing secret by workspace for "none" installs

v2.14.0

Features

  • campaignsshow posts created vs published on the campaign view

v2.13.0

Features

  • billingbundle Channels into all paid tiers + pricing-restructure spec
  • billingcollapse catalog to 3 graduated tiers (agency merge)
  • billingone-ladder pricing UI + regenerated catalog (Slice 2C)
  • billingretire audience gating — seats derive from site quantity
  • billingretire standalone Channels SKU, bundle into every paid plan
  • channelsdiscoverable multi-connection UX for LinkedIn (portal)
  • channelsmake the per-connection publish cooldown env-tunable
  • channelsportal post Channels tab — View post link + throttle display
  • channelspre-emptively gate the video Regenerate button
  • channelswp-admin LinkedIn connect radio choice (portal parity)
  • channelswrite an audit tombstone when a connection is deleted
  • functionsfoundingSeats endpoint for the live scarcity counter
  • wwwadd Video to the channels page, badged "New"
  • wwwFounding-Customer offer on the pricing page
  • wwwlive founding seat counter
  • wwwshow the Founding offer on the ad landing pages

Fixes

  • channelsclassify rate_limited as a skip, not a delivery failure
  • channelsgate video Regenerate on an active connection + quota
  • channelshide Notification language on publish-only channels
  • channelskey dispatch results by connectionId, not integrationId
  • channelsLinkedIn featured images — read bytes binary-safe, not as text
  • channelsLinkedIn Page picker — versioned organizationAcls contract
  • channelsreconcile LinkedIn Page names against a workspace cache
  • channelswait for LinkedIn image to be AVAILABLE before posting
  • referral-linksgate the referral-links editor to paid tiers
  • schedulercount posts published after manual review
  • workspacesrestore COLLECTION index on invitations.email
  • wwwfounding pricing page — design QA

v2.12.0

Features

  • functions,web,clientclient referral/affiliate links woven into relevant posts
  • webAI "Suggest competitors" on the site profile + subtitle fix

v2.11.0

Features

  • client,pluginvideo styling moves onto the visual preset (wp-admin surfaces)
  • clientper-platform caption packages on the video Ready row
  • clientRegenerate on ready videos behind a quota confirmation
  • clientVideo channel UI in wp-admin — premium store card, config modal, activity lifecycle, quota, gates
  • discoverylocalize explicit topic seeds + thin-pool augmentation
  • functions,typesStripe price-metadata video entitlement + per-site video quota
  • functions,websuper-admin "Regenerate (sandbox)" via Shotstack's free stage env
  • functions'your video is ready' owner email (en/de/es/fr)
  • functionsallowedActivationIds on the workspace member model
  • functionsbackfill channel adapt bodyText from generations store
  • functionscaption placement + palette accents in the video EDL
  • functionsconfigurable Shotstack environment (stage sandbox vs v1)
  • functionsdisconnected flag on cycle rows + discount on billing overview
  • functionsfan headless posts out to channels
  • functionsfan out channels when a review post is manually published
  • functionsfirst-render feedback batch — useful scripts, safe captions, brand mood, persona voice, real filenames, run milestone
  • functionsjoin video jobs into channelsListEvents + video category
  • functionskaraoke captions — word-synced chunks + SRT sidecar
  • functionslive video quota snapshot for the meter UI
  • functionsmake the video channel credential-installable
  • functionsmember access-change notification emails
  • functionsmode:'video' usage metering + cloud_pro quota gate
  • functionsmotion-graphics video assembly — branded cards, numbered step headlines, pipeline seam
  • functionsopen the Video channel in the store (drop comingSoon)
  • functionspage ops on permanent video render failures
  • functionsper-platform social paste packages for the Video channel
  • functionsprefer preset.videoArtDirection in the video adapt art-direction resolver
  • functionsrunVideoSynthesis worker + video channel wiring
  • functionsship boundVisualPreset digest on channelsListConnections
  • functionsShotstack EDL builder for the video channel
  • functionssite-access endpoint + restricted activation listing
  • functionsstock-served headless posts get channels dispatch + owner email + persona stamp
  • functionssuppress owner-signup artifacts for invite-driven signups
  • functionsthread invite-time site scope through invite → accept
  • functionsTTS, Pexels, and Shotstack clients for video synthesis
  • functionsvideo job metadata for the activity UI + kinetic preset
  • functionsvideo retry/regenerate endpoint (bearer + portal)
  • functionsvideo synthesis orchestrator
  • functionsvideo worker resolves style/placement/accent from the bound visual preset
  • functionsvideo-ready email deep-links to the post view Channels tab
  • functionsvideo-script prompt template, parser, adapt-fn factory
  • functionsVideoIntegration (adapt→script, publish→enqueue)
  • functionsvisual suggest pass also drafts videoArtDirection + extracts brand palette
  • functionsvoice personas + video connection settings wire fields
  • functionsworkspace-aware headless gate for operate-on-site endpoints
  • getHeadlessAccess honors workspace-aware gating for the post editor
  • rulesscope activation reads to the member's allowedActivationIds
  • typesadd video styling fields to VisualPreset (packages/types + functions twin)
  • uishared VideoChannelGlyph mark (9:16 frame + play wedge)
  • uiTabs size=xs + stretch — in-card platform switcher variant
  • uivideo-channel primitives — ProgressBar, QuotaMeter, MediaLightbox, PresetRadioCard, Badge dot, Select adornment
  • uivideo-visuals primitives — VideoStylePreview, PlacementRadio, SectionGateTeaser, PaletteSwatches
  • web,clientCaptions (.srt) download on ready videos
  • web,uiportal single-post detail view per design handoff
  • webbilling display modes — unmetered usage, renewal variants, site states
  • webbrand-derived preset swatches + site-named default presets
  • webmove video styling into Visuals — preset editor #video section, slimmed channel dialog, wizard row
  • webper-doc site subscriptions for restricted members
  • webper-platform caption packages on the video Ready card
  • webRegenerate on ready videos behind a quota confirmation
  • webrestructure site Channels page into Store/Connections/Activity tabs
  • webrestyle Channel Store to the board's uniform card grid + local channel glyphs
  • website access controls on the Members page and invite dialog
  • webVideo channel UI in the customer portal (store, config, activity, quota)

Fixes

  • adminresolve firebase-admin via functions/node_modules in voice-sample script
  • clientconnection-row video meta reads the bound preset's style, not the frozen legacy field
  • clientdefer the Visuals video-section highlight out of the deep-link effect
  • clientmake the Ready video thumbnail a Preview button opening the lightbox
  • clientshow loading state on single stock-post discard confirm
  • discoveryrewrite-tolerant re-rank guard + collapse retry
  • e2eboot portal e2e with committed .env.test firebase config
  • functions,pluginprevent auto-mode category sprawl
  • functionsblank-line paragraph gaps in the Shorts description package
  • functionsdark outline on white video captions for bright footage
  • functionsgate portal stock reads on campaigns.read
  • functionsheadless site names in usage rows + unmetered flag on cycle view
  • functionslet the video styling fields through every visual-preset allowlist
  • functionsscrim captions (Shotstack drops text-shadow) + video fields on the portal preset list
  • functionssnug inline caption scrim + Montserrat font registration + darker pill
  • uipreview thumbs show the scrim pill the render actually produces
  • web,clientclarify voice previews are English-only samples
  • web,functionscorrect public post URLs + persona provenance in the post view
  • webcampaign Posts tab + run detail link to the post view, not the editor
  • webcaption package as full-width row below hero media + clickable video thumbnails
  • webdefault body images ON for portal-created campaigns
  • webgetInitials survives partial pre-provisioning user profiles
  • webkeep disconnected sites out of the site-access pickers
  • webresolve persona names from the workspace library on run + post views
  • webstop Finish setup crashing with React #185 after the draft clears
  • webwizard Persona step scopes to site membership + seeds a tailored voice
  • www,e2efix pricing FAQ invalid dt/dd nesting (hydration crash) + make portal e2e self-seed
  • www,web,uimake Cloud most popular, catalog-drive all prices, fix plan/model/provider copy

v2.10.2

Fixes

  • aimanaged tiers own the model server-side; alert on batch image failures

v2.10.1

Fixes

  • campaignsdefault core/code block off for new portal campaigns

v2.10.0

Features

  • aimake Gemini Flash Image the recommended default; seed-tooling fixes
  • discoverytune keyword bank for blog reach; hide difficulty selector

Fixes

  • aistop heading keyword-stuffing + never inject unverified authority URLs
  • campaignstolerate object-shaped authorityDomains in cluster adapter
  • headlessscope internal-link suggestions to the campaign language

v2.9.0

Features

  • campaignsmake competitors a site-level fact only

v2.8.0

Features

  • campaignclearer discovery actions — "Re-discover" (fresh) vs "Find more" (append)
  • converttell users on the Done step that campaigns came over paused
  • deliverypull fallback when the webhook push is blocked
  • discoverybuyer-intent keyword seeds, winnability filter, clear-on-language
  • discoverykeyword difficulty modes (winnable / balanced / authority)
  • discoveryper-language positioning for multilingual campaigns
  • discoverywebsite-grounded seeds, diversity, and precision filters
  • growthlet users request an unshipped content language from the campaign builder
  • headless-editoreditable publish date + status-change confirmations
  • migratefix in-body internal links after WP→headless import
  • migratevision-derived image alt + scene topic for imported posts
  • migrationshandle unsupported source language on import
  • onboardingcapture the full service range in AI positioning
  • permalinkmake %year% and %category% tokens actually resolve
  • postsadd Published-date column; drop redundant title hover-underline
  • profileinline-editable positioning with AI re-suggest in settings
  • profilemove headless site identity from Settings to the profile
  • visual-suggestground image-style on homepage screenshot, demote logo
  • wwwserve the blog from the headless API (cursor pagination, no search)

Fixes

  • campaign-viewuse favicons for authority domains (not letter monograms)
  • campaignscoerce keywordBank entries to strings (no more [object Object])
  • campaignshonor campaign language across all discovery explorations
  • convertcarry WP persona bindings (subcollection) onto headless site
  • convertmake the delete-confirm checkbox checkable on the Done step
  • convertpreserve campaign pregenerationEnabled (don't force it off)
  • wwwallow the headless media bucket in next/image remotePatterns

v2.7.0

Features

  • convertoptional source WP app password → authenticated import
  • seoAI strategy suggest on single post + tighter SEO Targeting UI
  • seoescalate a missing SERPER key to an incident instead of silent decay
  • seoportal AI "Generate post strategy" on the single-post page
  • webadd "Generate now" to the portal Stock tab's empty state (plugin parity)

Fixes

  • stockcoerce object keyword-bank entries to strings before research
  • stockmount SERPER + JINA secrets on the stock-generation functions
  • stockreap FROZEN pending entries in the cleanup cron

v2.6.0

Features

  • functionsground campaign keyword discovery in activation positioning
  • growthserver-side Google Ads OCI for signup + purchase (magic-link fix)
  • migratecapture protected SEO meta via new plugin endpoint
  • schedulerreject host-intercepted webhook responses (no phantom publish)
  • seoground per-post focus keyphrase in real DFS long-tails
  • seoground single-post generation in a real keyphrase + authority
  • uishare DiscoverableChipList + add EmptyState across surfaces
  • webcollapse campaign create/edit into the redesign's Discovery step
  • webDiscovery "Replace" — guarded discard-and-rediscover
  • webedit campaign as one scrollable form + sticky section-nav
  • webEditor/Edit polish — section icon headers + consolidated Discovery
  • webInterview pass — match the create prototype
  • webList card "in stock" chip — reuse existing stock-summary hook
  • webList filters + loading skeleton + View output-progress bar
  • webLOW cosmetic batch — paused hint, mode check, neutral tile, recent×3
  • webpersist the grounded long-tail pool when discovering campaign keywords
  • webprototype polish — keyword volume arrows + Strategy validity dots
  • webprototype polish — SEO live-data pill, tier pills, stepper gating, delete side-effects
  • webrebuild campaign List card to the prototype; drop "dark-first" doctrine
  • webStrategy progressive disclosure + shared Collapsible primitive
  • webView/Delete polish — mode tile, SEO row, competitor chips, dup toast
  • webwire site-runs into List cards — needs-attention pill + live-run strip

Fixes

  • campaignsforward authorityDomains through campaignDocToCluster
  • campaignsnormalize legacy object-shaped keyword/authority arrays in edit form
  • campaignstopic interview step shows AI seeds only, not bank keywords
  • convertcorrect Review previews — personas count, provider logos, keywords, switch
  • convertschemeless source siteUrl 400'd the move; calmer convert step
  • editorauto-size + soft-wrap the code block
  • growthkeep recordAttribution bound to GROWTH_EVENT_SECRETS
  • growthretry OCI uploads + never permanently lose a signup conversion
  • headlesshonor postStatus on stock-served posts + diversify authority links
  • headlessstrip keyphrase-bolding the model emits despite the prompt
  • migratestrip stray <code> wrapper from imported code blocks
  • portalcount posts-this-week from workspace-rooted runs
  • seoAI-relevance-filter the long-tail pool, not just token-match
  • seofilter long-tail pool to genuine variations of bank keywords
  • seostop the monthly keyword refresh from drifting the bank off-topic
  • webmove campaign filter/needs-attention keys into the campaigns namespace
  • webno auto-discovery on the campaign edit screen
  • webrefetch the raw campaign doc after edit so the view isn't stale

v2.5.0

Features

  • clientdisable campaign image toggles when uploads dir is unwritable
  • pluginwarn + guide when the uploads dir blocks image saves
  • surface plugin image-sideload failures as "completed with warnings"

Fixes

  • generatehonor post status on single-post gen; never surprise-publish
  • pluginan image sideload failure must not destroy the post
  • uicenter the logo + give the page a dark-mode background

v2.4.0

Features

  • conversionWP→headless site conversion backend (preview + start)
  • convert"Move to Headless" wizard (portal frontend)
  • headlessadd a distinct "draft" post status
  • migratere-polish imported posts + richer html-to-blocks parse
  • opsdaily reconciliation cron for paid-but-unprovisioned accounts
  • opspage ops on billing-webhook + signup-provisioning failures
  • sitesDrafts tab + DRAFT badge + 3-way editor status control
  • sitesre-polish action for imported posts + open imports in editor
  • webBetter Stack error tracking (Sentry SDK) + copyable error block
  • webpage-level error boundary so a page failure degrades in-shell

Fixes

  • authoritybroaden per-post authority search beyond top-3 domains
  • billingdon't 500 the overview when the invoice list 403s
  • growthsupport gbraid/wbraid in Google Ads OCI + bump sunset API version
  • headlessrespect campaign "Publish immediately" on delivery
  • signupkey provisioning idempotency on the license, not the user doc
  • uifull-viewport height on AppLoader splash screen

v2.3.0

Features

  • headlessemail the site owner when a new draft is ready to review
  • sitestop-right "Re-discover" button in campaign discovery steps
  • supportsend the ticket submitter a branded confirmation email

Fixes

  • billingredirect checkout to the hosted session url
  • billingstop expanding past Stripe's 4-level limit in overview
  • headlessresolve %lang% permalink token so URLs/redirects don't emit a literal
  • headlesssupply internal-link candidates to stock-generated posts
  • seo-intelground campaign keyword re-rank on the objective
  • sitesraise discovery callable client timeout (deadline-exceeded)

v2.2.1

Fixes

  • connectredirect into new site after WordPress connect celebration
  • onboardingdrop "What does your site do?" from the wp-admin wizard
  • workspaceshide retired/merged workspaces from listMyWorkspaces

v2.2.0

Features

  • onboardingper-site persona membership in the wp-admin wizard
  • personasbearer-auth membership endpoints for the plugin wizard
  • pluginpersona membership REST routes + envelope for the wizard

Fixes

  • onboardingSEO auto-draft retry + manual competitor suggest
  • plugin/wizard/state returns a quiet fresh state when license-less
  • portalredirect to Sites when a site route resolves to a deleted site

v2.1.0

Features

  • keywordsshow real DFS monthly search volume on keyword chips
  • onboardingauto-add DFS-measured competitors in the wizard SEO step
  • plugin"permanently delete all data" checkbox in the disconnect dialog
  • portal"permanently delete all data" checkbox in the removal dialog
  • portalkeep AI-guessed competitors as suggestions in onboarding SEO step
  • workspaceshard-purge path for site removal (+ last-site teardown)

Fixes

  • campaigns/sitepoll next-run, human model names, no auto-discover
  • clientgraceful recovery in the error boundary for a stale connection
  • i18nre-merge + complete de/de_AT/es/fr translations after wizard rebuild
  • seostop interstitial pages poisoning keyword/positioning discovery
  • usagescope the wp-admin cycle-usage widget to the current site

v2.0.0

⚠ BREAKING CHANGES

  • pluginremove site-level keywords + authorities (now campaign-scoped)
  • webremove site-level keywords + authorities (now campaign-scoped)

Features

  • campaignscampaign-level competitor augmentation (language-aware)
  • channelsmanage channels from the portal for non-WP surfaces
  • competitorsthread campaign language through the plugin suggestion path
  • keywordsdrive gap analysis from the campaign's competitor list
  • migratemigrate a WordPress blog into a headless site
  • onboardingadd the image-medium switcher to the wizard Visuals step
  • onboardingseed a site-specific persona even in a populated workspace
  • plugincampaign Competitors step + campaign-scoped persistence
  • pluginremove site-level keywords + authorities (now campaign-scoped)
  • seo-intelDFS-first multi-seed keyword discovery with smart-model re-rank
  • setupland SEO step prefilled, drop redundant step-1 description
  • webcampaign Competitors step (portal) — language-aware augmentation
  • webremove site-level keywords + authorities (now campaign-scoped)

Fixes

  • ai-enginekeep workspace-key rows single-line for long site names
  • authmagic-link deliverability + signup inbox recovery UX
  • authpolish magic-link "check inbox" panel
  • diagnosticsmake "Run a connection check" actually run the check
  • onboardinglocalize wizard AI drafts + decode entity in key picker
  • runsscope the "Recent generations" widget to the current site
  • siteskeleton the positioning editor while it loads
  • taxonomystop feeding the default category to the model; nudge it to create

v1.89.0

Features

  • channels/linkedinbrand-voice prompt variant for company Page posts

Fixes

  • channels/linkedinhide unreachable "Personal profile" target on org connections
  • channels/linkedinpopulate company-Page picker via versioned org-ACL read
  • channelsauto-open Configure modal after OAuth connect (hash params)

v1.88.0

Features

  • personasper-site persona membership + in-site rotation; v6 portal Personas/Visuals
  • plugin,weball-tier Bridge Diagnostics + cloud-unreachable warning
  • pluginfold image medium into the Suggest dropdown (wp-admin parity)
  • pluginimage-medium picker on the wp-admin Visuals page
  • portalposts list — thumbnails, click-to-edit rows, three-dot menu
  • visualsfold image medium into a "Suggest image style" dropdown (portal)
  • visualsimage-medium picker + photography-first art direction
  • webauto-suggest authority domains on the Site profile tab

Fixes

  • ailink validator — HEAD is advisory, confirm dead with GET
  • ainever let the model invent outbound links — homepages or none
  • headlessrepair fabricated internal links + resolve headless public URL
  • schedulerlink-validate against the real site host, not the UUID
  • stockrun link validation in the batch path (was bypassed)
  • suggestionsroute portal visual/persona suggest through the shared getSuggestionBlueprint
  • visualscursor + hover affordance on the image-medium cards
  • visualsricher per-medium art-direction prompts + exact-hex palette
  • webdrop spurious _many plural keys from es/fr locales

v1.87.0

Features

  • headlessbidirectional cursor pagination for read API
  • seocomplete JSON-LD graph on plugin render + dedupe www schema
  • sitesdocument `before` cursor param on the Delivery API page
  • wwwadd competitor comparison pages for neuroflash, mindverse, neuronwriter, zimmwriter, writesonic

Fixes

  • headlessadd ascending publishedAt indexes for backward paging

v1.86.0

Features

  • headlessper-language delivery blogs
  • headlessregenerate post images with AI
  • headlessrestore trashed posts to their pre-trash status
  • headlesstrash, restore, and permanently delete posts
  • webinline text formatting toolbar + create link
  • webreal top-bar overflow (3-dot) menu
  • webresponsive headless editor layout

Fixes

  • headlessbind image-gen secrets to regenerateHeadlessImage
  • stockcompare keywordBank by keyword text, not object reference
  • webconfirmations, inline popup errors, status tabs, format polish

v1.85.0

Features

  • headlessFAQ/HowTo JSON-LD schema + section marker classes
  • imagespage ops on inline image-gen provider failures
  • opspage Telegram when a campaign hits the stock failure cap
  • stocksurface "pre-generation paused — provider errors" in the Stock tab
  • webcampaign edit save bar with Cancel

Fixes

  • aiunique writing-variety seed per stock-batch post
  • headlessdeliver action_steps + FAQ as blocks; heal body image
  • headlessrender body image + caption inline in delivered posts
  • imagesdefault imageModel to a real image model + heal bad values
  • runsflag failed image steps as warnings, not green checks
  • stockforward image alt/caption/fileName/topic in served bundle
  • stockinvalidate on keyword change; refill only when buffer drains to 0
  • stockstop self-cancellations tripping the failure cap; coalesce refills; reap failed entries
  • webrender Select dropdown panels (add missing Select.Content)

v1.84.0

Features

  • aiper-post writing variety to kill content-farm tells
  • campaignsbring headless campaign create flow to plugin parity
  • headlessfull Gutenberg-style post editor in the portal
  • onboardingground wizard keyword suggestions in real demand + two buckets
  • onboardingrebuild portal setup wizard AI/persona/visuals steps
  • onboardingrebuild portal setup wizard as a 6-step plugin clone
  • pluginexplain intentional readability-score variance to users
  • sites'Fetch from site' favicon button
  • sitescross-campaign Posts page for headless sites
  • sitesoptional favicon for the dashboard icon + real domain in SERP preview
  • wwwcontextual AI Detector links on landing pages + blog posts
  • wwwfree in-browser AI Content Detector tool page
  • wwwlink the AI Detector from the footer Resources column
  • wwwPostHog events on footer links

Fixes

  • campaignsUX polish on the headless campaign create flow
  • headlesseditor polish — portaled-popover styling, list editor, DnD, captions
  • headlessstop editor re-render loop and render full-screen
  • portaldefer account creation to magic-link click
  • workspaceslabel headless activations by siteName, not the raw id
  • wwwactually send the AI-detector breakdown email
  • wwwadd /ai-detector to the sitemap
  • wwwreplace AI-detector placeholders with real homepage assets
  • wwwtidy AI-detector promo spacing on blog posts
  • wwwtype the subscribe-test fetch mock so tsc passes
  • wwwuse Resend Segments API for AI-detector email capture

v1.83.0

Features

  • functions,webAI-guess transparency notes + pipeline fixes from live run
  • functions,webclose plugin-parity gaps — stock/run control, key testing, channels store, billing + chunk fixes
  • functions,webheadless campaign engine — full surface parity
  • functions,webheadless campaigns consume pre-generation stock
  • functions,webpersona + visual-preset CRUD in the portal
  • functions,webportal-triggered WP generation — Run now + single post
  • functions,webv3 paid billing — plan hero, cycle meters, payment method, invoices
  • functionsactivation-reminder cron, personal sender, localized greeting
  • functionscreateHeadlessSite callable (dogfood-gated)
  • functionsdurable headless image storage + upload endpoint (Tier-2 #7b)
  • functionsfeed real site context to headless generation (+ slug foundation)
  • functionsgenerate on headless — store posts instead of webhooking WP (Tier-2 #8)
  • functionshard maxSites gate on createHeadlessSite
  • functionsheadless auto-pilot scheduler backend (Tier-3 #19)
  • functionsheadless block→HTML renderer (Tier-2 #6)
  • functionsheadless categories/tags archives + pagination
  • functionsheadless editor backend + image-block rendering (Tier-3 #2a)
  • functionsheadless image normalization core (Tier-2 #7a)
  • functionsheadless read endpoint + publish action — Tier 2 complete
  • functionsheadless run-now + posts list backend (Tier-3 #1a)
  • functionsheadless surface type foundation + dogfood gate
  • functionsimport existing posts into a headless site (Tier-3 #3a)
  • functionssend a free-tier welcome email on signup
  • headlessrelease gate toggle (Firestore flag, no deploy to flip)
  • ui,webshared Stepper component — one wizard strip everywhere
  • ui,webshared zod form-validation layer — required fields highlight in place
  • web,functionsplan-tier gating for invites + AI providers; show stats for free
  • web,functionsplugin-parity campaign UX — catalog dropdowns, AI Engine, campaign tabs
  • web,functionsportal two-world redesign — site world, wizard, campaign flow
  • webblock-list editor + image paste for headless posts (Tier-3 #2b)
  • webclearer Download Plugin card — drop "Pro", add free/paid note
  • webConnect a site CTA in Overview empty state
  • webexplicit free-activation CTA on Subscription page
  • webheadless auto-pilot schedule UI — GA scheduler complete
  • webheadless integration instructions — Tier 1 complete
  • webhome attention slot — failed-run / all-paused / nothing-scheduled states
  • webimport UI for headless sites — Tier 3 complete (#3b)
  • webminimal Add-Site portal UI (dogfood-gated)
  • webmove headless site management to the Sites page
  • webone-click legacy schedule → campaign conversion
  • webper-site headless area — generate → review → publish (Tier-3 #1b)
  • webremove coming-soon surface waitlist from the Overview
  • webschedule-pulse home header — posts this week + next-post derivation
  • websurface archive + pagination routes in the headless guide
  • webv3 workspace pages redesign — keys, personas, presets, members, billing, settings, account
  • www/autoblogging landing page + /vs/machined-ai comparison
  • wwwadd missing pages
  • wwwadd Structura vs. AI Buster comparison page
  • wwwper-locale blog sources — de/es/fr blogs empty until their content campaigns launch

Fixes

  • functions,webDFS instant_pages 404 + explicit site-name field in headless connect
  • functions,webportal runs visibility — canonical path + missing doc fields
  • functionsEmailOwnerIntegration sends from the verified Resend domain
  • releaseforce plugin .zip to download as a file (Content-Disposition)
  • uiCodeBlock preserves newlines + bounds width
  • web,functionswizard magic results survive remounts + headless identity fallback
  • webcampaign-flow grids cap at 2 columns — selects were truncating
  • websites table fidelity — tinted header band, flush accent add-row
  • websync admin Test Email template list with the server registry
  • wwwstop dropping landing pageviews — queue captures behind PostHog init, re-emit on consent grant

Reverts

  • wwwback out marketing/www files swept into c3f344955

v1.82.0

Features

  • clientwizard auto-suggests the whole brand layer

Fixes

  • clientlicense gate success state + centered connect form

v1.81.0

Features

  • clientdefault new campaigns to pending-review post status
  • functions,plugin,clientfeed confirmed keywords + authority domains into AI suggest prompts
  • wwwsurface structural benchmarks + rankings-based internal links in marketing copy

Fixes

  • clientscope wp-admin cycle-usage widget + quota banner to the current activation
  • functions,clientscope competitor suggestions to the analyzed site + AI prompt context
  • plugin,functions,clientcache workspace audience so the plan badge doesn't flash

v1.80.0

Features

  • clientplan-aware setup wizard — skip AI step on cloud, license gate first
  • plugincarry provider_count_cap + is_anonymous on the settings payload

v1.79.0

Features

  • aiE-E-A-T writing signals + SERP entity coverage as toggleable SEO directives
  • wwwadd Agility Writer comparison page, reorder compare links by directness

Fixes

  • clientdefault the Code content block off for new campaigns
  • clientremove the 300ms transient frame in interview single-select
  • clientstop interview chip rows rewrapping when the checkmark appears
  • wwwgive every responsive grid an explicit grid-cols-1 base
  • wwwunstick mobile scroll lock + viewport-wide overflow on phones

v1.78.0

Features

  • admindebugging drill-down — site search, activation debug view, run traces
  • stockcampaign Stock tab — visibility + control over pre-generated posts
  • stockcancel frozen batches at the timeout ceiling and notify the owner

Fixes

  • researchrestore competitor analysis, site-level authority fallback, and stock enrichment
  • webstop dark-mode login logo from stacking icon over wordmark

v1.77.0

Features

  • analyticsroute browser PostHog through first-party reverse proxy
  • functionslog provider-native batch state on still-pending poller ticks
  • suggestionsground campaign/topic suggestions on positioning + target keywords

Fixes

  • aiclean up prompt-audit findings from a production system prompt
  • clientbackfill empty campaign model fields at the form-provider level
  • functionskey internal-link candidates by the activation's site URL

v1.76.0

Features

  • growthfire purchase milestone server-side (PostHog-only)
  • growthpersist utm_source through the funnel for partner referrals
  • wwwadd audience landing pages for individual + agency ad campaigns

Fixes

  • onboardinghydrate visuals over a pristine stale draft + make Exit stick

v1.75.1

Fixes

  • onboardingrestore Step 1 logo + hydrate Step 4 visuals from the bound preset

v1.75.0

Features

  • generationspersist the full prompt on text generation docs
  • growthdeep funnel events to PostHog, Telegram + Google Ads OCI
  • growthenrich funnel Telegram cards with name, plan, uid
  • growthreframe Overview as multi-surface activation + waitlist

Fixes

  • contentnormalize slug/keyphrase/heading/anchors before publish
  • growthdrop undefined click ids before the attribution set
  • scope site positioning + seoIntel to the activation, not the workspace
  • stockrun the repetition guard on batch-generated posts
  • webcommit public prod env so PostHog can't drop out of a build
  • webPostHog opt-state from consent at init, not a post-load flip

v1.74.0

Features

  • seoAI fallback for competitors + honest 'AI-guess' notices

v1.73.0

Features

  • siteSave button + Add all on Keywords/Competitors/Authority editors

Fixes

  • clientnamespace persisted localStorage per activation

v1.72.1

Fixes

  • onboardingcorrect a test cast that broke the release build

v1.72.0

Features

  • campaignsshow creation date on the campaign overview
  • onboardingauto-start the wizard on every activation, including free/none
  • onboardingfree/none get real Site/AI/Visuals/Personas steps; only SEO locked; hide campaign CTA for none
  • onboardingPro-gate format encoding + optimize-on-upload in the wizard Visuals step

Fixes

  • campaignsclose create wizard when the per-tier cap is hit on launch
  • campaignsreset margins on the launch-CTA heading + paragraph
  • sitefree tiers can restart the wizard + disabled Select now looks disabled
  • sitepad the locked-panel overlay so the lock card isn't flush

v1.71.0

Features

  • campaignsinherit SEO inputs from global settings; drop Competitors step
  • campaignsprominent keyword chips + prefill-from-site note
  • generationground post synthesis in brand positioning (tier-gated)
  • growthdedicated growth Telegram bot + Send-test, separate from ops alerts
  • growthGROWTH_TELEGRAM_CHAT_ID accepts a comma-separated recipient list
  • onboardinglogo→Step 1, unified magic loader, multi-persona, Step 6 CTA finish
  • onboardingrestart-wizard on Site→Settings, drop stale moved-widget, logo to top of Step 1
  • seopromote authority domains to a global workspace setting + fix dropped fields
  • sitere-run AI keyword suggestions on the Keywords tab
  • sitesurface + edit positioning on Site → Info with magic re-draft
  • sitesurface target keywords on the Keywords tab
  • stockpositioning-aware stock pre-generation (parity with live synthesis)
  • uiFileUpload drag-and-drop component; use it for the wizard logo

Fixes

  • ai-enginedialogs unusable inside onboarding wizard + auto-default sole provider
  • growthsurface Telegram rejection reason in Send-test + consistent button
  • onboardingblock Finish until complete instead of jumping to a step
  • onboardingconnect wizard personas to the shared library + prefill logo from custom_logo
  • onboardingFinish setup dead-ended after reload — persist validity + route to gaps
  • onboardingmodals invisible, loader spacing, empty visual draft, step-5-submit flow
  • onboardingpositioning/keyword AI-draft truncated — cap thinking budget, raise output cap
  • onboardingReact #310 — finishedRef useRef called after loading early return
  • onboardingwiden the wizard container on the Personas step
  • onboardingwizard logo stacked vertically — variant-swap classes clobbered LogoFull's flex
  • personaskeep New/Templates buttons in the Personas page header

Performance

  • authoritycap Gemini thinking + tighten liveness checks to fit the sync request budget

v1.70.0

Features

  • onboardingpolish round — clickable stepper, favicon competitor chips, Step 6 redesign, title relocation, Continue spinner
  • onboardingW-A wizard skeleton — routes, persistence, steps 1+6
  • onboardingW-A.1 — auto-redirect, dashboard resume tile, step 1 inline edit
  • onboardingW-B — step 2 AI engine + blocking connection test
  • onboardingW-C — step 3 SEO intelligence (positioning + competitors + keywords)
  • onboardingW-D — steps 4 (Visuals) + 5 (Persona)
  • onboardingW-E — tier-change reaction + campaign-side gate
  • onboardingwizard restart endpoint + Step 6 button + ?restart=1 URL trick

Fixes

  • onboardingContinue stuck post-restart + full wordmark + centered title in header
  • onboardingcritical wizard bugs — back button, dropdowns, cache merge, finish, headings
  • onboardinghoist OnboardingPage hooks above the loading-state early return
  • onboardingportal wizard out of wp-admin chrome, mirror dark class to body
  • onboardingseven issues from in-browser test — logo, exit color, footer gap, navigation model
  • onboardinguse icon logo variant in wizard header, mono ink for dark
  • seo-intelhide numeric category IDs from Site Intelligence niche display

v1.69.1

Fixes

  • seo-intelreal DFS response shapes — categories objects, organic-footprint authority, ETV sort

v1.69.0

Features

  • seo-intelsurface analyzed URL + source so headless setups are verifiable
  • siteinteractive Competitors + Settings CRUD; vertical spacing fix; DFS payload logs
  • siteSitePanelHeader for consistent layout; auto-discover SERP competitors

v1.68.0

Features

  • aiinternal-link picker — surface workspace's ranking URLs in prompts
  • aiwire SEO intel provider into post-synthesis research + prompt
  • campaignsadd Competitors wizard step; rename 'Excluded Domains'
  • campaignsdata-source badge — Live data vs AI estimate
  • campaignspersist wizard competitor URLs to workspace; thread to keyword discovery
  • channelsroute LinkedIn org connections through a second OAuth app
  • seo-inteladd monthly refresh cron + workspace notices
  • seo-intelextend campaign + workspace schemas; add updateWorkspaceSeoSettings
  • seo-intelhourly balance watch with Telegram critical alerts
  • seo-intelimplement DataForSEO OnPage client; wire analyzeCompetitorPages end-to-end
  • seo-intelreal discoverKeywords impl with gap analysis
  • seo-intelscaffold DataForSEO provider foundation
  • seo-intelwire keyword-discovery through the provider
  • seo-intelworkspace activation hook — warm /site cache on first activate
  • siteadd /site route with 5 tabs; relocate Headless Mode toggle
  • siteAuthority tab — real backlinks-driven authority metrics
  • sitemanual analyze trigger — real DataForSEO impls + Keywords/Info tabs

Fixes

  • seo-intelbind DATAFORSEO_SECRETS to TEXT_GENERATION_SECRETS
  • seo-intelconvert dynamic imports to static (.js extension)
  • siteempty-result UX, niche fallback, real Competitors/Settings data
  • siteLockedPanel overlay overflows when preview is shorter
  • sitereset heading + paragraph margins against wp-admin globals

v1.67.0

Features

  • aiguard generated content against degenerate repetition
  • campaignswarn when BYOK image gen is on but no image model picked

Fixes

  • airesolve BYOK image model from catalog default instead of failing
  • billingdrop undefined fields in recordUsage so keyless runs record
  • clientremove double spinner from campaign Posts tab loading state

v1.66.1

Fixes

  • pluginsync WP header Version with release-please (was stuck at 1.59.0)

v1.66.0

Features

  • aisingle source of truth for language→geo, extend to ~55 languages
  • personasground Magic Suggest on the site's own voice
  • progresssurface competitor-analysis and authority research steps
  • seofallback /llms.txt that defers to Yoast/Rank Math
  • uimonochrome logo variant for colored backgrounds
  • websplit-screen login, Overview dashboard, system-pref theme
  • wwwStructura vs. Outrank comparison page
  • wwwsurface multi-channel distribution + GEO on the homepage

Fixes

  • authauthoritative isNewUser for magic-link sign_up conversion
  • wwwlink the Outrank comparison page from nav + homepage

v1.65.0

Features

  • channelsLinkedIn company-page posting
  • clientswap dashboard upgrade banner for a permanent tiered upsell card

Fixes

  • clientrestrict header Upgrade to none/free, restyle, order internal links first
  • wwwsync channels page to catalog — drop X, add Telegram/WhatsApp/Email/Webhook

v1.64.0

Features

  • channelspage ops Telegram on permanent channel-dispatch failures
  • clientadd Manage account button to the account page
  • clientmove Account & Settings into a header account menu
  • runssurface partial channel-dispatch failures on the run

Fixes

  • i18ntranslate the bare "Upgrade" string for es/fr

v1.63.0

Features

  • adminanalytics dashboard, workspace drill-down, and shell parity
  • adminmake signups KPI 'today' (viewer-local) instead of rolling 24h
  • campaignscap Free tier to one post per week
  • channels/promptstune LinkedIn + X social copy for subtle conversion
  • consentenv-gated opt-out default for US-only launch
  • noticessurface generation failures + retire in-app System Logs strings
  • personasblock campaign and single-post creation when no personas exist
  • usersworkspace-aware account deletion with guard rails
  • web/accountmake delete dialog role-aware
  • web/accountrestyle danger zone and make delete dialog descriptive

Fixes

  • channels/xdrop ungrantable media.write scope so X OAuth can connect
  • channelsstop LinkedIn truncation + strip AI-tell em-dashes
  • client/channelsstop /channels/* redirect from racing the entitlement heartbeat
  • client/licenseinvalidate entire query cache on connect/disconnect
  • plugin/licensere-seed default persona after reconnecting to a new workspace
  • progressreflect stock-served progress instead of freezing at 25%

Reverts

  • channels/promptsrestore original LinkedIn + X social prompts

v1.62.0

Features

  • adminadd "Test Telegram" button to the admin dashboard
  • opscritical-alert fan-out + stalled-run watchdog; fix campaign-step OOM

Fixes

  • functions/emailuse the friendly run-timeline copy in failure emails
  • functionsraise global HTTP timeout so long generations don't die at 5 min
  • increase memory
  • runscorrect stalled-run index scope; add image-gen timing metrics

v1.61.1

Fixes

  • client/typesJob.persona_id accepts nanoid strings (type hygiene)
  • plugin/campaignspreserve nanoid in Campaign_Shape_Transformer::normalize_persona_id

v1.61.0

Features

  • personasPhase 2b — per-activation binding becomes the canonical author-attribution path

Fixes

  • personas/pagealways render the personas grid when the editor is open
  • plugin/campaigns,cloud/typespreserve nanoid string in personaId end-to-end
  • pluginwp.org Plugin Check security pass — escape output, sanitize input
  • scheduler/plugin,types/clouddefensive sweep — preserve persona nanoids in remaining (int) casts
  • schedulerwrite the resolved nanoid persona id on generation docs

v1.60.1

Fixes

  • channels/linkedinread post URN from x-restli-id header + diagnostic logging
  • plugin/channelsforward attach_featured_image through the settings REST proxy

v1.60.0

Features

  • channelsper-connection "attach featured image" toggle (default on)
  • notices,client,pluginPhase 3a — wp-admin Notices page
  • notices,clientbell + popover, shared utils, translations, indexes
  • notices,plugin,clientPhase 3b — retire local logs surface
  • notices,plugin,clientplugin-health diagnostics button
  • notices,webportal NoticesBell
  • noticesPhase 1 — cloud-side Notification Center
  • noticesPhase 1.1b — wire remaining audit-gap error branches
  • noticesPhase 2 — portal Notice Center page

Fixes

  • channels,schedulerforce OAuth landing on #/channels/connections; stamp link_validation milestone on paid-tier always-on runs
  • hook ordering, webhook timeout, link_validation milestone, timeline rail
  • notices,webportal page theming + missing Firestore index
  • progress/timelineper-tier image-row matrix (None tier-locks both; Free tier-locks body only)

v1.59.0

Features

  • progresssplit image gen into per-slot milestones (featured + body)

Fixes

  • ai/geminidisable reasoning on schema-constrained calls + breadcrumb the image phase
  • generate-postblock sync generation when no visual preset is bound
  • progress/timelinedefault to SHOWING the images row unless explicitly disabled
  • schedulerbound webhook delivery + inline image gen with wall-clock deadlines

Reverts

  • ai/geminidrop thinkingBudget: 0 — Gemini 3.x Pro rejects it

v1.58.1

Fixes

  • channels/dispatchergive adapt 30s and degrade timeout to title-only
  • channelsmount the BYOK + provider master keys on channelsPostPublished
  • progress/timelinerescue render when currentStep was filtered out of the visible order
  • schedulergive synthesis 30 min instead of 9, log terminal completion
  • stock/text-batchgive blueprint requests 64k output to survive reasoning models

v1.58.0

Features

  • analyticswire PostHog across www, web, and plugin SPA

v1.57.0

Features

  • analyticsmigrate to GTM + emit sign_up event from new-account flows
  • pricinghide WP.org column in comparison matrix when plugin unpublished
  • wwwgate wp.org plugin surfaces behind WP_PLUGIN_PUBLISHED flag

Fixes

  • wwwmobile-friendly layouts for comparison + agency-volume tables

v1.56.0

Features

  • channels/xattach featured image to tweets via v2 media upload
  • channelsAI-adapted social commentary (first-person + hashtags) for LinkedIn & X
  • channelsenrich post-published payload + auto-pick prefixSwap on headless

Fixes

  • channels/oauthland users on the real SPA route after OAuth, not a phantom admin slug
  • channels/oauthwrite OAuth secret doc under the workspace, not the license
  • settingskill the headless+inherit contradiction end-to-end
  • stockcron refills only when buffer fully drained (matches consume trigger + spec)

v1.55.0

Features

  • analyticswire Google Ads conversion tracking to consent banner
  • channelsper-connection campaign bindings + every-Nth-post cadence for OAuth

Fixes

  • pluginstatus badge

v1.54.2

Fixes

  • channelsforwarder reliability + honest "skipped" chip + de/es/fr i18n

v1.54.1

Fixes

  • client/billingrebind cycle quota banner to token-based usage view

v1.54.0

Features

  • progressmark bypassed steps as Skipped and add a Channels tail step

v1.53.1

Fixes

  • channels/oauthland users on the right wp-admin URL after the OAuth dance
  • channelsstop coercing nanoid campaignIds to int across the stack
  • runsstop ephemeral generate-post runs from creating phantom campaign docs

v1.53.0

Features

  • billingmake per-tier campaign cap a per-license Stripe field

v1.52.4

Fixes

  • billing/catalog-synctolerate restricted keys without meter-read permission

v1.52.3

Fixes

  • clientstabilize single-post run page and refine timeline chips
  • subscriptionscancel standalone Channels item when plan now bundles it

v1.52.2

Fixes

  • billingrollup cron resolves planId/maxSites from the bound License
  • client,functionsaudience-aware plan labels in the wp-admin SPA
  • i18nwire audienceMissingOrInvalid in the contracts source
  • subscriptionsrequire explicit audience on Stripe plan products
  • web/billingsingle Stripe-portal funnel + audience-aware plan label

v1.52.1

Fixes

  • channels,billingOAuth redirect_uri + launch chrome + channels load race

v1.52.0

Features

  • clientuse website favicons on workspace-keys provider chips

v1.51.1

Fixes

  • clientper-row binding state on workspace keys + brand chips + reorder

v1.51.0

Features

  • plugin,clientcleanup + warn on disconnect, pin cross-license switch

Fixes

  • recent-posts widget cross-campaign leak + empty textModel synthesis crash

v1.50.1

Fixes

  • clientdrop the duplicate sync spinner on the Posts tab toolbar

v1.50.0

Features

  • channelsgate save+dispatch on entitlements; fix client agency conflation

v1.49.9

Fixes

  • client,plugindrop fabricated "up to 5,000 words" claim

v1.49.8

Fixes

  • clientmove 500-word help text below the post-length grid

v1.49.7

Fixes

  • aidowngrade non-active licenses to anonymous tier so None→Free→None keeps working

v1.49.6

Fixes

  • campaignshelp-text under 500-word cap + honest engine-ready gate for None/Free

v1.49.5

Fixes

  • campaignscap postLength input + form default at 500 for None tier (matches Free)

v1.49.4

Fixes

  • schedulerswap persona block to picked persona's fields for random campaigns

v1.49.3

Fixes

  • schedulerresolve random persona to a workspace persona so post_author lands correctly

v1.49.2

Fixes

  • progresslocalise milestone subtext + filter Free-tier no-op steps from timeline

v1.49.1

Fixes

  • atomic cloud-side bump of campaign.postsPublished to close the read-then-write race

v1.49.0

Features

  • aicap Free post length at 500 + ban outbound links on Free/None tier
  • pluginhard-strip external `<a>` tags for non-Pro tiers in Block_Serializer

v1.48.0

Features

  • aistrip always-on SEO rules for anonymous (None) tier

v1.47.0

Features

  • campaignsmake pre-generation Pro-only on Free + fix client POT extractor
  • pricingpoint Free upgrade CTA at portal + sync feature lists across www/web/portal

Fixes

  • client,webpolish free-tier keyword/authority teasers and route unlock intents to /billing
  • close Free-tier value leaks in meta prompts, internal-link injection, and image format
  • drop pregen rollout banner, retire cadence-sync flag gate, hide Free-tier cap warning
  • pluginmint progress runId for Free tier so Run-now lights up the strip without reload

v1.46.0

Features

  • ui,webtop-bar portal shell + workspace-first navigation

Fixes

  • ui,webportal shell polish + Select dropdown + role-based nav
  • webhide Members tab + sidebar link for editors and viewers

v1.45.0

Features

  • client,webcontext-aware upgrade flow with wizard resume links

v1.44.1

Fixes

  • billing,functions,clientmeter stock-served runs + retire usage_logs

v1.44.0

Features

  • i18ntranslate the 643 newly-extracted SPA strings (de/es/fr)

Fixes

  • clientde-block none-tier campaigns teaser, lead with Generate Post
  • clientmake AppErrorBoundary's nav-reset opt-in
  • i18nextract SPA strings + regen .pot via TS-aware scanner

v1.43.1

Fixes

  • clientbreak Visuals render-loop, reset error boundary on nav
  • functionswire recent titles into stock pre-gen dedup context
  • pluginlog skipped campaigns in cadence sync

v1.43.0

Features

  • clientuseLicense().hasWorkspace + flip 7 hook gates + AI Engine cap restrictions (Phase 1.8 PR7b)
  • functionsbootstrapAnonymousInstall endpoint + anonymous-bootstrap rate limiter (Phase 1.8 PR6)
  • functionsflip free + none tiers to BYOK-only; flatten anti-abuse cap to 100/site/mo
  • functionsPhase 1.8 foundation — Workspace + AnonymousInstall types, anonymous-aware bearer middleware, endpoint classification
  • plugin,client,functionssuppress fresh-install banners and add "Forget this site" flow
  • plugin,functionsanonymous-install bootstrap + claim flow + structuraConfig surface (Phase 1.8 PR7a)

Fixes

  • clientgate workspace-keys + wp-users queries on license; render unlicensed teaser on Visuals
  • pre-publish polish — unblock None tier end-to-end, harden error/block paths, dashboard cleanup
  • wwwhide HeroEyebrow rule on mobile so the label aligns left

v1.42.0

Features

  • ui,webadd CodeBlock component and use it for the activation key

v1.41.0

Features

  • per-activation scoping for visual styles, personas, and AI keys
  • web,functionsportal viewers for personas + visual presets, plus binding tests

Fixes

  • clienttype the had_prior_activation bootstrap flag on StructuraConfig

v1.40.1

Fixes

  • clientgate Channels routes by per-site seat assignment
  • functionsstock pre-gen now uses sync prompt builder for full SEO parity
  • pluginmeta-box image regen — reset apply button + body-image new_url

v1.40.0

Features

  • functionsstock pre-gen failure insurance — timeout, daily cap, rich incidents

Fixes

  • functionsre-sign stock-image URLs at consume time, not write time
  • pluginmeta-box image regen — trim loaders, support body-from-placeholder
  • pluginpersist pregeneration_enabled toggle through the validator

Performance

  • clientswap AppLoader → PageLoader on route loaders, deduplicate AI Engine settings query

v1.39.1

Performance

  • plugin,clientbootstrap settings on page load to skip first-paint roundtrip

v1.39.0

Features

  • clientpersist new-campaign draft across navigation
  • freeze plugin → cloud surface for wp.org submission
  • functionsPhase 4.5 follow-up — auto-attach metered overage item on subscribe
  • functionsprovider fallback for interview/suggestion calls
  • plugin,clienthumanize provider error toasts in suggestion flow

Fixes

  • ciwporg-zip workflow — replace multi-line sed with head/tail splice
  • clientpreselect recommended model in provider setup wizard
  • clientwrap multi-pick answers as chips in interview review
  • firestoreadd COLLECTION_GROUP index override for members.userId
  • functionsroute add-on assignment funnel reads/writes through workspaces (Phase 3.3 leftover)
  • functionsroute stock refill through canonical resolver to support BYOK
  • pluginbump cloud-discovery cURL timeouts from 120s to 240s

v1.38.0

Features

  • functions,webPhase 4.4c — portal cycle-usage widget

v1.37.0

Features

  • functions,webPhase 3.7 Pass C — workspace rename
  • functions,webPhase 3.7 Pass D — workspace ownership transfer
  • functions,webPhase 3.7 Pass E — multi-workspace switcher

v1.36.0

Features

  • client,functionsPhase 3.7 — wp-admin "this site is part of workspace X"
  • client,plugincycle-quota site-wide banner + delete legacy Campaign_Repository
  • clientPhase 4.4b — wp-admin Cycle Usage widget
  • functionsPhase 3.4 — hoist personas to workspace root
  • functionsPhase 3.4 — hoist visualSettings to workspace root
  • functionsPhase 4.1 — per-tier × audience quota config
  • functionsPhase 4.2 — per-generation usage metering + nightly rollup
  • functionsPhase 4.3 — Stripe metered overage reporting cron
  • functionsPhase 4.3a — metered prices + Stripe Meters in the catalog
  • functionsPhase 4.4a — cycle usage view + getUsageAnalytics extension
  • plugin,functionsPhase 1.0h — retire AS image chain across both surfaces

Fixes

  • aihonour resolver's provider override in executeCloudSuggestion
  • functionsroute campaigns store through workspaces path

v1.35.0

Features

  • plugin,functionscloud-only generation Phases 3-6 — retire BYOK adapters

v1.34.1

Fixes

  • pluginregen-image modal — multi-provider picker, 60s timeout, prompt prefill
  • wwwxerx url

v1.34.0

Features

  • wwwadd "Why not Koala/SEOWriting AI?" sibling comparison on home
  • wwwexpose the "20+ point SEO protocol" as a real disclosure list
  • wwwGDPR/EU trust strip in footer
  • wwwoutcome-framed pricing CTAs + box SERP claim against autobloggers
  • wwwsticky mobile CTA on pricing page

Fixes

  • aipreserve user-picked orientation for OpenAI image gen
  • functionswipe lib/ on prebuild to prevent stale orphan re-deploys
  • wwwremove brand duplication in &lt;title&gt; tags + noindex thin blog archives
  • wwwsitemap hygiene + meta description audit across 4 locales

v1.33.3

Fixes

  • functionsmake keyword + authority discovery work end-to-end

v1.33.2

Fixes

  • functionsmount BYOK_MASTER_KEY on every function that resolves BYOK keys

v1.33.1

Fixes

  • clientunblock provider setup wizard's Configure step on cloud-only heartbeat
  • tests,i18nunblock CI workflows on main

v1.33.0

Features

  • functions,pluginforward AI key save through cloud, retire wp_options storage
  • functions,webadd workspace credential library endpoints + portal page
  • functionsactivation-scoped credential bindings + resolver rewrite

v1.32.0

Features

  • personas,licenses,clientauto-seed default "House voice" persona on activation

Fixes

  • clientseed Single Post form from connected provider, not Gemini
  • personas,plugin,clientrequire author on save and stop ghost upserts

v1.31.0

Features

  • ai,billingcloud-only-gen Phase 2 — resolver + rate limit
  • aicloud-only-gen Phase 2 — wire resolver into text engine
  • plugin,licensescloud-only-gen Phase 3 — gated plugin cutover
  • schedulercloud-only-gen Phase 2 — image path + dispatcher catch
  • workspacescloud-only-gen Phase 1 — workspace credentials store

Fixes

  • licenses,plugin,clientactivation cycle no longer self-deactivates

v1.30.0

Features

  • emails,spectier+audience in over-cap warning + retire pricing-v2 §4.5
  • workspaces,channels,pluginPhase 3.3 — UUID activation + surface discriminator
  • workspaces,permissionsPhase 3.1 + 3.2 — workspace tenant root + RBAC
  • workspaces,pluginPhase 3.5 — API tokens + Bearer auth middleware
  • workspaces,webPhase 3.7 Pass A — member role + remove
  • workspaces,webPhase 3.7 Pass B — invite-by-email + acceptance route
  • workspaces,webPhase 3.7 walking skeleton — workspace settings page
  • wwwimprove mobile menu
  • wwwrefine pricing toggle layout + recommend BYOK for agencies

v1.29.0

Features

  • catalog,web,i18nlock Cloud Pro Individual + BYOK Agency + Cloud Agency prices
  • functions,client,pluginper-tier campaign-count cap (BYOK abuse prevention)
  • functions,clienttier policy — auto-pause on "none" + per-tier provider gating
  • functionsPhase 1.0j — UUID-keyed activations + read-path cutover
  • pluginadd model switch when regenerating images
  • web,www,packages/ui,i18ntwo-grid pricing UI + JustThePluginSection 2-column refactor

Fixes

  • catalogmatch products by (plan_id, audience), not plan_id alone
  • clientsilence "Active license required" toast storm on disconnected installs
  • pluginpersist authority + keyword bank to cloud campaigns

v1.28.1

Fixes

  • pluginbody image regeneration

v1.28.0

Features

  • pluginadd body image regeneration feature

Fixes

  • pluginsingle post gen
  • update indexes

v1.27.4

Fixes

  • pluginimage generation

v1.27.3

Fixes

  • pluginbroken endpoints
  • pluginindexnow channel verification
  • wwwlanguages

v1.27.2

Fixes

  • pluginpersona ID

v1.27.1

Fixes

  • pluginsingle post generation

v1.27.0

Features

  • pluginconnect generations and posts

v1.26.2

Fixes

  • plugincampaign ID in post meta

v1.26.1

Fixes

  • plugintask runner

v1.26.0

Features

  • suggestionadd tracing logs for request, brand content, and blueprint composition

Fixes

  • pluginschema for stock posts
  • plugintask runner

v1.25.0

Features

  • pluginlink new headless-mode + IndexNow surfaces to docs.structurawp.com
  • ship IndexNow keyfile verify + headless onboarding

Fixes

  • channelsgenerate PKCE pair on OAuth init (X login was sending empty code_challenge)

v1.24.0

Features

  • pluginadd side identity to settings, allow headless mode

Fixes

  • pluginpost generation

v1.23.2

Fixes

  • pluginscampaign auto-cancellation
  • wwwsitemap link
  • wwwsitemap link

v1.23.1

Fixes

  • build scripts

v1.23.0

Features

  • add resend for sending emails
  • cloud pre-generation pipeline
  • cloud pre-generation pipeline, part 2
  • docsadd missing languages support
  • docsadd sitemap.xml and robots.txt for indexability
  • pluginadd stock logic
  • pluginmove image generation to cloud + buckets

v1.22.0

Features

  • move campaigns, personas and visuals to the cloud
  • pluginmigrate most of entities to cloud
  • wwwadd more json+ld schemas, add search tool
  • wwwupdate features page

Fixes

  • docsbroken links
  • wwwadd redirect, improve 404 template
  • wwwadd visuals
  • wwwinternal links in blog posts
  • wwwtranslations, homepage visuals

v1.21.5

Fixes

  • strip content bug

v1.21.4

Fixes

  • add debug lines

v1.21.3

Fixes

  • add debug lines

v1.21.2

Fixes

  • anthropic models for managed tiers

v1.21.1

Fixes

  • pluginsplit content insertion into 2 phases

v1.21.0

Features

  • pluginadd page builders support

v1.20.0

Features

  • functions,plugin,clientprogress-stream — CampaignRun writer, status API, drawer UI
  • functions,webadmin-log-triage — incidents store, listIncidents endpoint, /admin/incidents dashboard
  • plugin,clientplugin-quiet-mode — Debug_Mode gate, Dashboard widget, legacy Logs surfaces retired
  • pluginadd campaign runs
  • wwwadd favicon from LogoIcon mark
  • wwwadd support page
  • wwwsharded sitemap, blog taxonomy, and post-page polish
  • wwwsupport form with mail + rate limiting

Fixes

  • wwwopen per-page locale gates so /de /es /fr render

v1.19.0

Features

  • docsrefactor docs
  • pluginadd Site Health probes for background-task blockers
  • wwwadd missing translations

Fixes

  • pluginstop serializing $campaign through Action Scheduler args

v1.18.0

Features

  • plugin,clientdiagnose image tasks; hide debug logs by default

Fixes

  • functionspreserve serverTimestamp sentinel in generations writer

v1.17.0

Features

  • clientlocalize enum labels and default disclosure text

Fixes

  • functionsharden generations store writes
  • pluginsubstitute plan-default image provider when configured one is text-only

v1.16.0

Features

  • channelssurface activation-domain mismatch as a global advisory

Fixes

  • channels and agency tier appearance
  • pluginremove citation prop

v1.15.0

Features

  • aiextract brand palette and route logo images through multimodal Gemini

Fixes

  • docs links
  • image visual style
  • plugindrop data-howto-name from action-step &lt;ol&gt; to satisfy Gutenberg
  • render naked URLs as clickable anchor tags in post body
  • wwwpin @exodus/bytes &lt;1.15 to unbreak blog route on Vercel
  • wwwswap isomorphic-dompurify for sanitize-html to fix Vercel ERR_REQUIRE_ESM

v1.14.0

Features

  • www,uiadd blog pagination with shared Pagination component
  • wwwrestructure header/footer nav + persistent language switcher
  • wwwtheme + language switchers in footer

Fixes

  • openai blocks schema
  • openai blocks schema
  • plugin,functionsrequire explicit text/image provider + fix OpenAI image 400
  • www,uipricing page light-mode polish + live currency in matrix
  • wwwawait params in every App Router route (Next.js 15)
  • wwwpremium cta button color on hover

v1.13.0

Features

  • add comparison pages
  • plugin,wwwmark FAQ + HowTo sections for headless extraction
  • wwwadd /vs/koala-ai comparison page (EN)
  • wwwadd auto-generated /changelog page from release-please CHANGELOG.md
  • wwwadd reusable FaqSection + HowTo JSON-LD schema
  • wwwport persona switcher demo to /features
  • wwwrestore SEO protocol and approach comparison composites on /features

Fixes

  • price IDs
  • wwwtighten homepage hero scale and drop broken footer links

v1.12.3

Fixes

  • post model and openai schema

v1.12.2

Fixes

  • cidrop PHP 8.0 match so Patchwork can tokenize on 7.4
  • pluginre-stub get_post_meta with when() so forwarder tests see the override

v1.12.1

Fixes

  • ciunblock release pipeline on release-please merges

v1.12.0

Features

  • ai,plugin,clientrestructure SEO rules into always-on tier map + HARD REQUIREMENTS band
  • docs,wwwadd branded error boundaries

Fixes

  • clientunblock managed-tier dashboard + restore PHP-first license flow
  • docsremove Nextra i18n array to unblock runtime
  • plugin,clientpricing-v2 gaps — Agency badge + entitlement-aware Channels visibility

v1.11.0

Features

  • add agency tier; introduce www project
  • aiper-plan default models for managed tiers
  • billingdeclarative Stripe catalog sync tool
  • billingsynthesize bundled add-on entitlements from plan metadata
  • clientAgency tier feature gates and per-post model picker
  • uilift pricing composites to @structura/ui/pricing
  • web4-tier pricing UI with currency toggle and Agency volume strip
  • wwwbuild real homepage + pricing pages for /en
  • wwwscaffold Next.js marketing site workspace

Fixes

  • build process
  • docsalign deps with workspace overrides so frozen install works

v1.10.0

Features

  • channelsadd X (Twitter) integration

Fixes

  • channelswire OAuth client secrets into integration registry

v1.9.0

Features

  • channelsadd LinkedIn integration — OAuth, AI adaptation, publishing (Phase 3+4)
  • channelsadd per-campaign bindings and company page posting
  • channelsadd publishable dispatch, frequency control, and LinkedIn image posting
  • only post published posts on linkedin

v1.8.0

Features

  • adminadd Entitlement health dashboard panel (spec §11.7)
  • channelsadd Email, Telegram, WhatsApp integrations (Phase 7)
  • channelsadd expired-connections admin banner (Phase 7)
  • integrations store + per-add-on entitlements (Phases 1-6)

Fixes

  • licensesrepair checkActivationLimits cron (spec §11.5.4)

v1.7.1

Fixes

  • magic link login

v1.7.0

Features

  • add integrations
  • channelsscaffold Integrations Store foundation (Phase 0)
  • make email templates multilingual

Fixes

  • integrations
  • integrations
  • typesunblock tsc -b after Phase 1 channels work
  • web app translations

v1.6.0

Features

  • add claude support

Fixes

  • improve prompts

v1.5.0

Features

  • adjust translations

v1.4.0

Features

  • make disable empjis option enabled by default
  • refresh campaigns index page
  • refresh single post creation page
  • split providers

v1.3.0

Features

  • change create campaign flow

v1.2.2

Fixes

  • keywords and domains discovery

v1.2.1

Fixes

  • keywords/sources exploration language

v1.2.0

Features

  • add more langs, translate customer portal

v1.1.0

Features

  • add German (de_DE + de_AT) translations for plugin

v1.0.13

Fixes

  • release workflows

v1.0.12

Fixes

  • merge release workflows to fix GITHUB_TOKEN trigger limitation

v1.0.11

Fixes

  • update lockfile after firecrawl-js removal

v1.0.10

Fixes

  • checkout redirect for existing users
  • self-updater error