Zum Inhalt springen

Release-Notes

Was ausgeliefert wurde,wann und warum.

Jedes Release, nach Version gruppiert. Features oben, Fixes darunter, jeder Punkt verlinkt auf den Commit, der ihn eingeführt hat. Automatisch aus dem Repository generiert — kein Marketing-Spin, keine fehlenden Einträge.

v2.20.0

Diff auf GitHub ansehen

Features

  • aiaccept a BYOK model tier on the generation path (rollout-tolerant) 82bca3a
  • aiextract shared @structura/model-catalog with tier-based resolution daf3de4
  • campaignspersist + thread the BYOK model tier through generation c9c7a11
  • clientmove GSC prompt to a dismissable dashboard banner; scroll the property picker 8f00a5c
  • clientTop/Standard tier picker on campaign create/edit 6c325d6
  • clientTop/Standard tier picker on single-post-gen + create steps 308da8f
  • functionsprime inputSnapshot on portal single-post runs 4019d47
  • model-catalogadd live provider model-sync script c86178b
  • model-catalogbump models to live-confirmed ids 57db590
  • pluginforward model tier (top|mid) on campaign + single-gen 49e13ba
  • runs,webadd provider/model rows to the Run-again modal 972e41b
  • runsconfirm before "Run again" with a run summary 8f71ccd
  • runsrebuild the Run-again modal to the design handoff fc5bf36
  • Top/Standard tier picker for image regeneration c6242f3
  • web"Run again" on the portal run receipt 4af6030
  • webtier-based BYOK model picker (Top/Standard) on campaigns 2041e8e

Fixes

  • billingguard against a duplicate active product shadowing a plan afcd195
  • campaignsstop "Run again" crashing on a schedule-less snapshot a741783
  • clientcorrect the wp.element JSX-runtime shim (React [#130](https://github.com/yuriy-vasilyev/structura-core/issues/130) crash) f9ea0f7
  • clientscope the wp-admin Personas page to this site's bound voices 2301075
  • clienttier badge shows the plan only, not the retired audience suffix af00e17
  • onboardingbind seeded House voice for non-AI tiers + workspace-aware seed flag 495c58d
  • onboardingdurable server-backed onboarding-dismissed flag 9dc0353
  • pluginself-heal a revoked anonymous bearer instead of 401-looping forever 5537d73
  • runsshow draft-aware label on the single-post run header 633502e
  • webdraft-aware run receipt label for WP posts a7f7e6f

v2.19.0

Diff auf GitHub ansehen

Features

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

v2.18.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.17.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.16.0

Diff auf GitHub ansehen

⚠ 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 77d318a
  • headlessrelease the Headless surface to everyone — remove the dogfood gate 723f1ec
  • portalreal Xerx mark + wider integration-help dialog e91ad9f
  • portaltrack outbound xerx.io clicks from the integration-help surfaces 43f7296
  • portalXerx integration-help banner + lead dialog on the Headless surface 2bafb2f
  • videoyear-long video retention with self-healing download links 3e161ea
  • web+wwwshare links live on the vanity host share.structurawp.com 947da4d
  • webpost export (MD/HTML/DOCX) + Share-preview dialog for headless posts 528feef
  • wporgplugin directory listing assets — icon + banner ad540ca
  • www"Works with your stack" platforms band + Content API feature card e903914
  • wwwdrop "WordPress sites" from the Xerx builtBy credit f3d4005
  • wwwfooter bottom-bar cleanup — cookies to Legal, Xerx credit f7c2039
  • wwwplatform-neutral copy across EN landing pages e75d5f4
  • wwwport the multi-platform reposition to de/es/fr e510ae8
  • wwwpublic share-preview page at /p/{token} 99ac174
  • wwwrename the product descriptor to "autonomous blog engine" 5a84288
  • wwwreposition homepage copy to two-paths (WordPress or Content API) 359a831
  • wwwscrub "WordPress-only" concessions from EN vs pages 2e32254
  • wwwtwo-paths copy for features, pricing, and channels pages e601d70

Fixes

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

Chores

  • pin next release to 2.16.0 23ab942
  • videoretire the Shotstack renderer e1ccab5

v2.15.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.14.1

Diff auf GitHub ansehen

Fixes

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

v2.13.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.12.0

Diff auf GitHub ansehen

Features

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

v2.11.0

Diff auf GitHub ansehen

Features

  • client,pluginvideo styling moves onto the visual preset (wp-admin surfaces) 155e7a0
  • clientper-platform caption packages on the video Ready row ada09cc
  • clientRegenerate on ready videos behind a quota confirmation 2e30e25
  • clientVideo channel UI in wp-admin — premium store card, config modal, activity lifecycle, quota, gates 2ed99d2
  • discoverylocalize explicit topic seeds + thin-pool augmentation 438dcea
  • functions,typesStripe price-metadata video entitlement + per-site video quota 24a4896
  • functions,websuper-admin "Regenerate (sandbox)" via Shotstack's free stage env c9e1f09
  • functions'your video is ready' owner email (en/de/es/fr) 10ca259
  • functionsallowedActivationIds on the workspace member model 8a0ac29
  • functionsbackfill channel adapt bodyText from generations store b6991be
  • functionscaption placement + palette accents in the video EDL 3f9b93a
  • functionsconfigurable Shotstack environment (stage sandbox vs v1) 11b9994
  • functionsdisconnected flag on cycle rows + discount on billing overview d4dab6c
  • functionsfan headless posts out to channels f8a6718
  • functionsfan out channels when a review post is manually published 4573530
  • functionsfirst-render feedback batch — useful scripts, safe captions, brand mood, persona voice, real filenames, run milestone 210893d
  • functionsjoin video jobs into channelsListEvents + video category 2d6bd88
  • functionskaraoke captions — word-synced chunks + SRT sidecar c4cedcc
  • functionslive video quota snapshot for the meter UI be33d3a
  • functionsmake the video channel credential-installable 58dc8d1
  • functionsmember access-change notification emails 4399422
  • functionsmode:'video' usage metering + cloud_pro quota gate af3241a
  • functionsmotion-graphics video assembly — branded cards, numbered step headlines, pipeline seam c5a1b69
  • functionsopen the Video channel in the store (drop comingSoon) 6888069
  • functionspage ops on permanent video render failures 912087c
  • functionsper-platform social paste packages for the Video channel 7746f11
  • functionsprefer preset.videoArtDirection in the video adapt art-direction resolver 16ea20a
  • functionsrunVideoSynthesis worker + video channel wiring a0ad246
  • functionsship boundVisualPreset digest on channelsListConnections 77a23af
  • functionsShotstack EDL builder for the video channel e295346
  • functionssite-access endpoint + restricted activation listing 5f390a1
  • functionsstock-served headless posts get channels dispatch + owner email + persona stamp aba1f65
  • functionssuppress owner-signup artifacts for invite-driven signups 076ce5d
  • functionsthread invite-time site scope through invite → accept 6d4e412
  • functionsTTS, Pexels, and Shotstack clients for video synthesis 742cafc
  • functionsvideo job metadata for the activity UI + kinetic preset 21e877d
  • functionsvideo retry/regenerate endpoint (bearer + portal) e708d6e
  • functionsvideo synthesis orchestrator 8525694
  • functionsvideo worker resolves style/placement/accent from the bound visual preset b1dea82
  • functionsvideo-ready email deep-links to the post view Channels tab a157043
  • functionsvideo-script prompt template, parser, adapt-fn factory e23f7f7
  • functionsVideoIntegration (adapt→script, publish→enqueue) 7129207
  • functionsvisual suggest pass also drafts videoArtDirection + extracts brand palette e6b88f3
  • functionsvoice personas + video connection settings wire fields 7ebe6fc
  • functionsworkspace-aware headless gate for operate-on-site endpoints 9107b50
  • getHeadlessAccess honors workspace-aware gating for the post editor 21c9dbc
  • rulesscope activation reads to the member's allowedActivationIds 7976e7b
  • typesadd video styling fields to VisualPreset (packages/types + functions twin) 06fa24f
  • uishared VideoChannelGlyph mark (9:16 frame + play wedge) 14f887b
  • uiTabs size=xs + stretch — in-card platform switcher variant 1a69dc7
  • uivideo-channel primitives — ProgressBar, QuotaMeter, MediaLightbox, PresetRadioCard, Badge dot, Select adornment f252d52
  • uivideo-visuals primitives — VideoStylePreview, PlacementRadio, SectionGateTeaser, PaletteSwatches f68c9af
  • web,clientCaptions (.srt) download on ready videos 9da9982
  • web,uiportal single-post detail view per design handoff 6ff56e1
  • webbilling display modes — unmetered usage, renewal variants, site states d0a9ffa
  • webbrand-derived preset swatches + site-named default presets 84811f1
  • webmove video styling into Visuals — preset editor #video section, slimmed channel dialog, wizard row b72f43a
  • webper-doc site subscriptions for restricted members 1fcd9c8
  • webper-platform caption packages on the video Ready card ed84134
  • webRegenerate on ready videos behind a quota confirmation 8f9c2c6
  • webrestructure site Channels page into Store/Connections/Activity tabs 523cc44
  • webrestyle Channel Store to the board's uniform card grid + local channel glyphs ed2c8ba
  • website access controls on the Members page and invite dialog e92f5ad
  • webVideo channel UI in the customer portal (store, config, activity, quota) 503ea49

Fixes

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

v2.10.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.8.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.7.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.6.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.5.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.4.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.3.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.2.1

Diff auf GitHub ansehen

Fixes

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

v2.2.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.1.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v2.0.0

Diff auf GitHub ansehen

⚠ 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) 46bb8f5
  • channelsmanage channels from the portal for non-WP surfaces 4065d5f
  • competitorsthread campaign language through the plugin suggestion path 85cbdcb
  • keywordsdrive gap analysis from the campaign's competitor list 639a4ab
  • migratemigrate a WordPress blog into a headless site bdd9446
  • onboardingadd the image-medium switcher to the wizard Visuals step 9e0ee8c
  • onboardingseed a site-specific persona even in a populated workspace 5bc57e0
  • plugincampaign Competitors step + campaign-scoped persistence cf25707
  • pluginremove site-level keywords + authorities (now campaign-scoped) a1e4026
  • seo-intelDFS-first multi-seed keyword discovery with smart-model re-rank 150fa5d
  • setupland SEO step prefilled, drop redundant step-1 description 6f868e4
  • webcampaign Competitors step (portal) — language-aware augmentation 1955f5a
  • webremove site-level keywords + authorities (now campaign-scoped) 3b8e2e2

Fixes

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

v1.89.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.88.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.87.0

Diff auf GitHub ansehen

Features

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

Fixes

  • headlessadd ascending publishedAt indexes for backward paging f8cb66a

v1.86.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.85.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.84.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.83.0

Diff auf GitHub ansehen

Features

  • functions,webAI-guess transparency notes + pipeline fixes from live run 54a1d9f
  • functions,webclose plugin-parity gaps — stock/run control, key testing, channels store, billing + chunk fixes 334afb5
  • functions,webheadless campaign engine — full surface parity e932656
  • functions,webheadless campaigns consume pre-generation stock ec4417d
  • functions,webpersona + visual-preset CRUD in the portal fb3fb35
  • functions,webportal-triggered WP generation — Run now + single post f306cb9
  • functions,webv3 paid billing — plan hero, cycle meters, payment method, invoices 228ed6f
  • functionsactivation-reminder cron, personal sender, localized greeting 958ebf5
  • functionscreateHeadlessSite callable (dogfood-gated) 7d2f5eb
  • functionsdurable headless image storage + upload endpoint (Tier-2 [#7](https://github.com/yuriy-vasilyev/structura-core/issues/7)b) c3f3449
  • functionsfeed real site context to headless generation (+ slug foundation) 8ea87ec
  • functionsgenerate on headless — store posts instead of webhooking WP (Tier-2 [#8](https://github.com/yuriy-vasilyev/structura-core/issues/8)) cf32ad4
  • functionshard maxSites gate on createHeadlessSite d4eac63
  • functionsheadless auto-pilot scheduler backend (Tier-3 [#19](https://github.com/yuriy-vasilyev/structura-core/issues/19)) 42db678
  • functionsheadless block→HTML renderer (Tier-2 [#6](https://github.com/yuriy-vasilyev/structura-core/issues/6)) b4bae8f
  • functionsheadless categories/tags archives + pagination 4a792d5
  • functionsheadless editor backend + image-block rendering (Tier-3 [#2](https://github.com/yuriy-vasilyev/structura-core/issues/2)a) 33ddb55
  • functionsheadless image normalization core (Tier-2 [#7](https://github.com/yuriy-vasilyev/structura-core/issues/7)a) 5d22126
  • functionsheadless read endpoint + publish action — Tier 2 complete ([#9](https://github.com/yuriy-vasilyev/structura-core/issues/9)) 28bd0b0
  • functionsheadless run-now + posts list backend (Tier-3 [#1](https://github.com/yuriy-vasilyev/structura-core/issues/1)a) 1229f03
  • functionsheadless surface type foundation + dogfood gate 2916f11
  • functionsimport existing posts into a headless site (Tier-3 [#3](https://github.com/yuriy-vasilyev/structura-core/issues/3)a) 54ff40c
  • functionssend a free-tier welcome email on signup 868209f
  • headlessrelease gate toggle (Firestore flag, no deploy to flip) ca57d59
  • ui,webshared Stepper component — one wizard strip everywhere 1df1b62
  • ui,webshared zod form-validation layer — required fields highlight in place f44ab29
  • web,functionsplan-tier gating for invites + AI providers; show stats for free 4ee25a4
  • web,functionsplugin-parity campaign UX — catalog dropdowns, AI Engine, campaign tabs 34dc871
  • web,functionsportal two-world redesign — site world, wizard, campaign flow ac53ce1
  • webblock-list editor + image paste for headless posts (Tier-3 [#2](https://github.com/yuriy-vasilyev/structura-core/issues/2)b) e0fa4a6
  • webclearer Download Plugin card — drop "Pro", add free/paid note 5c307c1
  • webConnect a site CTA in Overview empty state e35fc9a
  • webexplicit free-activation CTA on Subscription page 53cbc97
  • webheadless auto-pilot schedule UI — GA scheduler complete 2f677a3
  • webheadless integration instructions — Tier 1 complete 50e0969
  • webhome attention slot — failed-run / all-paused / nothing-scheduled states 8f7f9a1
  • webimport UI for headless sites — Tier 3 complete ([#3](https://github.com/yuriy-vasilyev/structura-core/issues/3)b) ca6d313
  • webminimal Add-Site portal UI (dogfood-gated) 4ce31b8
  • webmove headless site management to the Sites page 0c11d98
  • webone-click legacy schedule → campaign conversion 07948a1
  • webper-site headless area — generate → review → publish (Tier-3 [#1](https://github.com/yuriy-vasilyev/structura-core/issues/1)b) 4c24212
  • webremove coming-soon surface waitlist from the Overview ff42f68
  • webschedule-pulse home header — posts this week + next-post derivation 747cd31
  • websurface archive + pagination routes in the headless guide 8227927
  • webv3 workspace pages redesign — keys, personas, presets, members, billing, settings, account b387680
  • www/autoblogging landing page + /vs/machined-ai comparison 610e4f8
  • wwwadd missing pages fd317c0
  • wwwadd Structura vs. AI Buster comparison page 15e6cfa
  • wwwper-locale blog sources — de/es/fr blogs empty until their content campaigns launch 2945a72

Fixes

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

Reverts

  • wwwback out marketing/www files swept into c3f344955 7cb4151

v1.81.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.80.0

Diff auf GitHub ansehen

Features

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

v1.79.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.78.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.77.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.76.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.75.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.73.0

Diff auf GitHub ansehen

Features

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

Fixes

  • clientnamespace persisted localStorage per activation dbdc391

v1.72.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.71.0

Diff auf GitHub ansehen

Features

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

Fixes

  • ai-enginedialogs unusable inside onboarding wizard + auto-default sole provider aafdc65
  • growthsurface Telegram rejection reason in Send-test + consistent button cf76820
  • onboardingblock Finish until complete instead of jumping to a step f861cea
  • onboardingconnect wizard personas to the shared library + prefill logo from custom_logo 4c415e0
  • onboardingFinish setup dead-ended after reload — persist validity + route to gaps d4b260b
  • onboardingmodals invisible, loader spacing, empty visual draft, step-5-submit flow bd03fde
  • onboardingpositioning/keyword AI-draft truncated — cap thinking budget, raise output cap 5155513
  • onboardingReact [#310](https://github.com/yuriy-vasilyev/structura-core/issues/310) — finishedRef useRef called after loading early return cabd532
  • onboardingwiden the wizard container on the Personas step 144dd4d
  • onboardingwizard logo stacked vertically — variant-swap classes clobbered LogoFull's flex 1811a02
  • personaskeep New/Templates buttons in the Personas page header 8b511de

Performance

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

v1.70.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.69.1

Diff auf GitHub ansehen

Fixes

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

v1.69.0

Diff auf GitHub ansehen

Features

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

v1.68.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.67.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.66.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.65.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.64.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.63.0

Diff auf GitHub ansehen

Features

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

Fixes

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

Reverts

  • channels/promptsrestore original LinkedIn + X social prompts 153c87c

v1.62.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.61.1

Diff auf GitHub ansehen

Fixes

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

v1.61.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.60.1

Diff auf GitHub ansehen

Fixes

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

v1.60.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.59.0

Diff auf GitHub ansehen

Features

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

Fixes

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

Reverts

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

v1.58.1

Diff auf GitHub ansehen

Fixes

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

v1.57.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.56.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.55.0

Diff auf GitHub ansehen

Features

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

Fixes

v1.53.1

Diff auf GitHub ansehen

Fixes

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

v1.52.3

Diff auf GitHub ansehen

Fixes

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

v1.52.2

Diff auf GitHub ansehen

Fixes

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

v1.52.1

Diff auf GitHub ansehen

Fixes

  • channels,billingOAuth redirect_uri + launch chrome + channels load race ([#97](https://github.com/yuriy-vasilyev/structura-core/issues/97)) ee4955b

v1.51.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.49.0

Diff auf GitHub ansehen

Features

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

v1.47.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.46.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.44.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.43.1

Diff auf GitHub ansehen

Fixes

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

v1.43.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.41.0

Diff auf GitHub ansehen

Features

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

Fixes

  • clienttype the had_prior_activation bootstrap flag on StructuraConfig 3229ecd

v1.40.1

Diff auf GitHub ansehen

Fixes

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

v1.40.0

Diff auf GitHub ansehen

Features

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

Fixes

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

Performance

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

v1.39.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.37.0

Diff auf GitHub ansehen

Features

  • functions,webPhase 3.7 Pass C — workspace rename 8c656a9
  • functions,webPhase 3.7 Pass D — workspace ownership transfer 2dd2cf2
  • functions,webPhase 3.7 Pass E — multi-workspace switcher 6656fbe

v1.36.0

Diff auf GitHub ansehen

Features

  • client,functionsPhase 3.7 — wp-admin "this site is part of workspace X" c14509e
  • client,plugincycle-quota site-wide banner + delete legacy Campaign_Repository 359f94e
  • clientPhase 4.4b — wp-admin Cycle Usage widget 86e1845
  • functionsPhase 3.4 — hoist personas to workspace root 4dcc0f2
  • functionsPhase 3.4 — hoist visualSettings to workspace root 2134bfa
  • functionsPhase 4.1 — per-tier × audience quota config 096c18a
  • functionsPhase 4.2 — per-generation usage metering + nightly rollup 4405e39
  • functionsPhase 4.3 — Stripe metered overage reporting cron a0f3111
  • functionsPhase 4.3a — metered prices + Stripe Meters in the catalog f26a959
  • functionsPhase 4.4a — cycle usage view + getUsageAnalytics extension 963aa1a
  • plugin,functionsPhase 1.0h — retire AS image chain across both surfaces 7e8bef5

Fixes

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

v1.34.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.33.0

Diff auf GitHub ansehen

Features

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

v1.32.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.31.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.30.0

Diff auf GitHub ansehen

Features

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

v1.29.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.25.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.20.0

Diff auf GitHub ansehen

Features

  • functions,plugin,clientprogress-stream — CampaignRun writer, status API, drawer UI 82d95f9
  • functions,webadmin-log-triage — incidents store, listIncidents endpoint, /admin/incidents dashboard 9c7f25a
  • plugin,clientplugin-quiet-mode — Debug_Mode gate, Dashboard widget, legacy Logs surfaces retired 3738e9d
  • pluginadd campaign runs d9594bc
  • wwwadd favicon from LogoIcon mark 1bff0ec
  • wwwadd support page 06943dd
  • wwwsharded sitemap, blog taxonomy, and post-page polish 6d90afb
  • wwwsupport form with mail + rate limiting 16f0746

Fixes

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

v1.18.0

Diff auf GitHub ansehen

Features

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

Fixes

  • functionspreserve serverTimestamp sentinel in generations writer e69423b

v1.17.0

Diff auf GitHub ansehen

Features

  • clientlocalize enum labels and default disclosure text 10b1c43

Fixes

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

v1.15.0

Diff auf GitHub ansehen

Features

  • aiextract brand palette and route logo images through multimodal Gemini 4bcbc8a

Fixes

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

v1.14.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.13.0

Diff auf GitHub ansehen

Features

  • add comparison pages 8916ac0
  • plugin,wwwmark FAQ + HowTo sections for headless extraction 00159e6
  • wwwadd /vs/koala-ai comparison page (EN) 3d5c3ac
  • wwwadd auto-generated /changelog page from release-please CHANGELOG.md 6964ddf
  • wwwadd reusable FaqSection + HowTo JSON-LD schema 8a4127e
  • wwwport persona switcher demo to /features 10ff6d1
  • wwwrestore SEO protocol and approach comparison composites on /features 191b89f

Fixes

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

v1.12.2

Diff auf GitHub ansehen

Fixes

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

v1.12.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.11.0

Diff auf GitHub ansehen

Features

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

Fixes

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

v1.9.0

Diff auf GitHub ansehen

Features

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

v1.8.0

Diff auf GitHub ansehen

Features

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

Fixes

  • licensesrepair checkActivationLimits cron (spec §11.5.4) ea0d0a0
Changelog — Structura