{"id":331879,"date":"2026-09-18T18:40:48","date_gmt":"2026-09-18T18:40:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/spectare-personalisation\/"},"modified":"2026-09-18T18:40:19","modified_gmt":"2026-09-18T18:40:19","slug":"spectare-personalisation","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/spectare-personalisation\/","author":23522888,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.11.3","stable_tag":"1.11.3","tested":"7.1.1","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Spectare Personalisation","header_author":"Spectare","header_description":"AI-driven personalisation for WordPress. Spectare reads referrer and UTM signals and assembles a different experience for every visitor, silently, without asking them anything.","assets_banners_color":"09090b","last_updated":"2026-09-18 18:40:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/spectare.ai\/guide\/wordpress","header_author_uri":"https:\/\/spectare.ai","rating":0,"author_block_rating":0,"active_installs":0,"downloads":38,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.11.3":{"tag":"1.11.3","author":"nigemchugh","date":"2026-09-18 18:40:19","revision":3702570}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3702570,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3702570,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3702570,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3702570,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"spectare\/slot":{"name":"spectare\/slot","title":"Spectare Slot"},"spectare\/zone":{"name":"spectare\/zone","title":"Spectare Zone"}},"tagged_versions":["1.11.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3702570,"resolution":"1","location":"assets","locale":"","width":1389,"height":868},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3702570,"resolution":"2","location":"assets","locale":"","width":1389,"height":868},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3702570,"resolution":"3","location":"assets","locale":"","width":1280,"height":900}},"screenshots":{"1":"Spectare blocks in the editor: drop a slot or zone where personalised content should appear.","2":"The settings page: your organisation slug, API key, and the toggles that control the plugin.","3":"A page assembled by Spectare: personalised hero, content, and call to action rendered in zones."}},"plugin_section":[],"plugin_tags":[2353,2487,456,36134,10685],"plugin_category":[55],"plugin_contributors":[281520],"plugin_business_model":[],"class_list":["post-331879","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-dynamic-content","plugin_tags-marketing","plugin_tags-personalisation","plugin_tags-personalization","plugin_category-seo-and-marketing","plugin_contributors-nigemchugh","plugin_committers-nigemchugh"],"banners":{"banner":"https:\/\/ps.w.org\/spectare-personalisation\/assets\/banner-772x250.png?rev=3702570","banner_2x":"https:\/\/ps.w.org\/spectare-personalisation\/assets\/banner-1544x500.png?rev=3702570","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/spectare-personalisation\/assets\/icon-128x128.png?rev=3702570","icon_2x":"https:\/\/ps.w.org\/spectare-personalisation\/assets\/icon-256x256.png?rev=3702570","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/spectare-personalisation\/assets\/screenshot-1.png?rev=3702570","caption":"Spectare blocks in the editor: drop a slot or zone where personalised content should appear."},{"src":"https:\/\/ps.w.org\/spectare-personalisation\/assets\/screenshot-2.png?rev=3702570","caption":"The settings page: your organisation slug, API key, and the toggles that control the plugin."},{"src":"https:\/\/ps.w.org\/spectare-personalisation\/assets\/screenshot-3.png?rev=3702570","caption":"A page assembled by Spectare: personalised hero, content, and call to action rendered in zones."}],"raw_content":"<!--section=description-->\n<p>Spectare reads where each visitor came from (referrer, UTM parameters, page context) and silently assembles a personalised version of your page from a library of content blocks called atoms. No surveys, no cookies, no asking visitors who they are.<\/p>\n\n<p>You write your content once as atoms: a pricing block, a feature explanation, a case study, a FAQ. Spectare picks the right 3 to 5 atoms for each visitor and slots them into your page in milliseconds.<\/p>\n\n<p><strong>How it works<\/strong><\/p>\n\n<ol>\n<li>A visitor arrives on your site. Spectare reads their referrer URL, UTM parameters, and page content.<\/li>\n<li>An AI classifies their likely audience (developer, executive, manager) and buyer stage (awareness, consideration, decision).<\/li>\n<li>Spectare selects the most relevant atoms from your library and assembles them into named slots on the page.<\/li>\n<li>The assembled content is cached so repeat visitors are served instantly.<\/li>\n<\/ol>\n\n<p><strong>Two ways to personalise<\/strong><\/p>\n\n<p>The plugin supports two integration paths. You can use either, or both on different pages.<\/p>\n\n<ul>\n<li><strong>Option A: client-side slots.<\/strong> The Spectare widget script fills named placeholders in the browser after the page loads. Simplest to set up, and safe with any page cache because the personalisation happens client-side.<\/li>\n<li><strong>Option B: server-side zones.<\/strong> PHP calls Spectare with your API key and renders personalised components into the HTML before the page is sent, so there is no flash of default content. Pages using a zone automatically send a <code>Cache-Control: no-store<\/code> header so caching plugins cannot serve stale personalised HTML.<\/li>\n<\/ul>\n\n<p><strong>What this plugin does<\/strong><\/p>\n\n<ul>\n<li>Injects the Spectare widget script onto every page for client-side slots (optional, can be disabled)<\/li>\n<li>Provides a Gutenberg block (Spectare Slot) and a <code>[spectare_slot]<\/code> shortcode for client-side slots<\/li>\n<li>Provides a Gutenberg block (Spectare Zone) and a <code>[spectare_zone]<\/code> shortcode for server-side zones<\/li>\n<li>Optionally serves an agent entry point at your-domain.com\/llms.txt (off by default), generated from your Spectare content: a curated map of what you offer, so an AI agent reading your site extracts your facts accurately from a few fetches instead of scraping every page<\/li>\n<li>Adds a settings page under Settings \u2192 Spectare for your organisation slug, base URL, and API key<\/li>\n<\/ul>\n\n<p><strong>Client-side slots (Option A)<\/strong><\/p>\n\n<p>Slots are named placeholders the widget script fills in the browser. Slot names map to positions in your assembled layout:<\/p>\n\n<ul>\n<li><code>primary<\/code>: the main content area, highest priority atom<\/li>\n<li><code>supporting<\/code>: secondary content, one or more blocks<\/li>\n<li><code>secondary<\/code>: lowest priority, often a FAQ or comparison<\/li>\n<\/ul>\n\n<p>Use the Spectare Slot block in Gutenberg or the shortcode in the classic editor:<\/p>\n\n<pre><code>[spectare_slot name=\"primary\"]\n[spectare_slot name=\"supporting\"]\n[spectare_slot name=\"secondary\"]\n<\/code><\/pre>\n\n<p>You can reserve vertical space to prevent layout shift while content loads:<\/p>\n\n<pre><code>[spectare_slot name=\"primary\" height=\"200\"]\n<\/code><\/pre>\n\n<p><strong>Server-side zones (Option B)<\/strong><\/p>\n\n<p>Zones are rendered by PHP before the page is sent, using your API key. Each zone renders a different kind of personalised component: hero banners at the top, body content in the middle, social proof and calls to action further down. There are four zones:<\/p>\n\n<pre><code>[spectare_zone zone=\"hero\"]\n[spectare_zone zone=\"body\"]\n[spectare_zone zone=\"proof\"]\n[spectare_zone zone=\"cta\"]\n<\/code><\/pre>\n\n<p>Server-side zones need your API key in Settings \u2192 Spectare (find it in your Spectare admin under Settings). Any page using a zone sends <code>Cache-Control: no-store<\/code> automatically.<\/p>\n\n<p><strong>Requirements<\/strong><\/p>\n\n<p>A Spectare account is required. Sign up at <a href=\"https:\/\/spectare.ai\">spectare.ai<\/a>. Spectare is free to start with a 14-day trial; paid plans start at $19\/month. See <a href=\"https:\/\/spectare.ai\/pricing\">spectare.ai\/pricing<\/a> for current plans and limits.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the Spectare service (spectare.ai, or your own base URL if you self-host) to personalise your pages. It sends and receives data in the following ways:<\/p>\n\n<p><strong>Widget script.<\/strong> When auto-inject is on and your organisation slug is set, the plugin loads <code>spectare.js<\/code> from the Spectare service on your public pages. The script sends the visitor's referrer, UTM parameters, current page URL, and (in the visitor's own browser storage) their recent page history on your site to the Spectare API to classify intent and fetch personalised content. No account data, names, or email addresses are collected, and Spectare sets no cookies by default.<\/p>\n\n<p><strong>Server-side zones.<\/strong> Pages using <code>[spectare_zone]<\/code> call the Spectare assembly API from your server, sending the visitor's referrer, UTM parameters, and page URL, authenticated with your API key. If you enable the returning-visitors option, the visitor's last three page paths on your own site are included from a first-party cookie.<\/p>\n\n<p><strong>Conversion reporting.<\/strong> When WooCommerce or a supported form plugin completes an order or submission, the plugin reports the goal name, type, and (for orders) the total and currency to the Spectare API. No customer personal data is sent.<\/p>\n\n<p><strong>Agent entry point.<\/strong> If you enable llms.txt serving, the plugin fetches your generated llms.txt from the Spectare API and serves it on your domain.<\/p>\n\n<p>These calls go to the Spectare service: <a href=\"https:\/\/spectare.ai\/privacy\">privacy policy<\/a>. No data is sent to Spectare until you enter your organisation slug in settings.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Download the plugin zip from your Spectare admin under Settings, or from the WordPress plugin directory.<\/li>\n<li>In your WordPress dashboard, go to Plugins \u2192 Add New \u2192 Upload Plugin and upload the zip file.<\/li>\n<li>Click Install Now, then Activate Plugin.<\/li>\n<li>Go to Settings \u2192 Spectare and enter your organisation slug (found in your Spectare admin under Settings). For server-side zones, also enter your API key.<\/li>\n<li>Add a Spectare Slot block (client-side) or a Spectare Zone block (server-side) in the Gutenberg editor, or use the <code>[spectare_slot]<\/code> or <code>[spectare_zone]<\/code> shortcode wherever you want personalised content to appear.<\/li>\n<\/ol>\n\n<p>That is all. Spectare handles everything else automatically.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20to%20write%20code%3F\"><h3>Do I need to write code?<\/h3><\/dt>\n<dd><p>No. The plugin handles script injection and slot rendering. You write your content atoms in the Spectare admin and the plugin takes care of the rest.<\/p><\/dd>\n<dt id=\"what%20is%20an%20atom%3F\"><h3>What is an atom?<\/h3><\/dt>\n<dd><p>An atom is one focused piece of content: a feature explanation, a pricing block, a FAQ, a case study. You write atoms in the Spectare admin. Spectare assembles the right combination for each visitor.<\/p><\/dd>\n<dt id=\"how%20many%20atoms%20should%20i%20write%3F\"><h3>How many atoms should I write?<\/h3><\/dt>\n<dd><p>Ten is enough to see meaningful personalisation. The recommended starting set covers your core feature, your main differentiator, pricing, a common objection, a competitor comparison, a developer how-to, a customer outcome, a pricing FAQ, your data handling stance, and your integration story.<\/p><\/dd>\n<dt id=\"does%20spectare%20use%20cookies%20or%20track%20personal%20data%3F\"><h3>Does Spectare use cookies or track personal data?<\/h3><\/dt>\n<dd><p>No cookies are set and no personal data is collected. Spectare reads only the HTTP referrer header, UTM parameters already present in the URL, and the text content of the current page. Nothing is stored on the visitor's device.<\/p><\/dd>\n<dt id=\"should%20i%20use%20slots%20or%20zones%3F\"><h3>Should I use slots or zones?<\/h3><\/dt>\n<dd><p>Use client-side slots (Option A) if you want the simplest setup and your pages are served from a cache: personalisation happens in the browser, so it is safe with any caching plugin or CDN. Use server-side zones (Option B) if you want the personalised content baked into the HTML with no flash of default content, for example on a landing page where above-the-fold speed matters. Zones need an API key and send a no-store header, so the page is not cached. You can mix both: zones for the hero, slots lower down.<\/p><\/dd>\n<dt id=\"can%20i%20use%20spectare%20with%20a%20page%20builder%3F\"><h3>Can I use Spectare with a page builder?<\/h3><\/dt>\n<dd><p>Yes. Any builder that supports shortcodes (Elementor, Divi, WPBakery, Beaver Builder) can use <code>[spectare_slot]<\/code>. The Gutenberg block works natively in the block editor.<\/p><\/dd>\n<dt id=\"what%20if%20i%20want%20to%20load%20the%20script%20manually%3F\"><h3>What if I want to load the script manually?<\/h3><\/dt>\n<dd><p>Disable auto-inject in Settings \u2192 Spectare \u2192 Auto-inject widget. Then add the script tag yourself:<\/p>\n\n<pre><code>&lt;script src=\"https:\/\/spectare.ai\/spectare.js\" data-org=\"your-slug\" async&gt;&lt;\/script&gt;\n<\/code><\/pre><\/dd>\n<dt id=\"what%20is%20the%20agent%20entry%20point%20%28llms.txt%29%20feature%3F\"><h3>What is the agent entry point (llms.txt) feature?<\/h3><\/dt>\n<dd><p>Spectare generates an llms.txt file from your published content and the plugin can serve it at your-domain.com\/llms.txt. It is a curated entry point that maps your content, so an AI agent reading your site extracts accurate facts from a few fetches instead of guessing from a scraped page, and it keeps agent crawl cost down as pay-per-crawl arrives. It also documents your qualify endpoint, so an assistant helping someone can send them on to a page built for their intent. It is off by default: turn it on with the \"Serve llms.txt\" setting. Once on, it updates automatically as you edit content, and \"Refresh llms.txt\" pulls the latest immediately. Only published atoms are included, never drafts. Requires pretty permalinks (Settings \u2192 Permalinks, any option other than Plain).<\/p><\/dd>\n<dt id=\"does%20this%20slow%20down%20my%20site%3F\"><h3>Does this slow down my site?<\/h3><\/dt>\n<dd><p>The Spectare script loads asynchronously and does not block page rendering. Personalised content fills slots after the page is visible. Cached assemblies (repeat visitors with the same intent profile) are served in under 100ms.<\/p><\/dd>\n<dt id=\"what%20wordpress%20versions%20are%20supported%3F\"><h3>What WordPress versions are supported?<\/h3><\/dt>\n<dd><p>WordPress 5.8 and above. The Gutenberg block requires the block editor introduced in WordPress 5.0, but the shortcode works in any editor version.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.11.3<\/h4>\n\n<ul>\n<li>All script and style output now travels through the WordPress enqueue system: the zone\nstylesheet is an inline style enqueued in the head, the conversion-attribution snippet an\ninline script enqueued in the footer, and the import page script an admin enqueue scoped\nto its own page. No raw script or style tags remain.<\/li>\n<li>Shortcode fallback content is passed through wp_kses_post on return.<\/li>\n<\/ul>\n\n<h4>1.11.2<\/h4>\n\n<ul>\n<li>The Plugin URI now points to the plugin guide at spectare.ai\/guide\/wordpress, distinct from\nthe Author URI, as the directory requires.<\/li>\n<\/ul>\n\n<h4>1.11.1<\/h4>\n\n<ul>\n<li>Plugin Check pass: settings fields now escape at the point of output, the UTM reads and the\nDONOTCACHEPAGE convention constant carry documented sniff exemptions, and the renderer\nfallback notice only logs under WP_DEBUG.<\/li>\n<\/ul>\n\n<h4>1.11.0<\/h4>\n\n<ul>\n<li>WordPress.org directory release. The build distributed through the directory updates via\nWordPress.org only; the self-hosted update channel is not present in it.<\/li>\n<li>New \"External services\" section in this readme documenting every call the plugin makes to\nthe Spectare service and what data travels with it.<\/li>\n<li>Tested against WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.10.0<\/h4>\n\n<ul>\n<li>Zone pages now tell Spectare which zones they placed, detected from the page's own\nshortcodes and blocks. The assembled content is then composed only from components those\nzones can render, so a page with just a body zone gets a fuller body instead of a hero\nand call to action it never shows. Pages the plugin cannot read (page builders, widgets)\nbehave exactly as before.<\/li>\n<li>Conversions on zone pages now credit the hero image that was shown, so image selection\ncan learn which images convert on WordPress sites.<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Zones now respect per-component zone placements set in your Spectare settings. Previously a\nzone override saved in Spectare was silently ignored on WordPress, which rendered every\ncomponent in its default zone. If you set zone overrides, components may move to the zone\nyou actually chose after this update.<\/li>\n<li>The llms.txt feature is now described as what it is: an agent entry point. A curated map of\nyour content so an AI agent reading your site extracts accurate facts from a few fetches,\nrather than a visibility promise.<\/li>\n<\/ul>\n\n<h4>1.8.2<\/h4>\n\n<ul>\n<li>The Spectare logo now appears on the settings page, on update rows and in the plugin\ndetails window, so the plugin is recognisable at a glance in a busy admin.<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>Supporting content now renders as a compact card: the title, a one-sentence summary, and the\nfull text one tap away. Pages read as pages rather than columns of full prose, and nothing\nbecomes unreachable.<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>Form conversions. Submissions through Gravity Forms, WPForms and Contact Form 7 now report a\nlead conversion to Spectare automatically, with no thank-you page or URL goal needed. Rename\nthe goal with the spectare_form_goal_name filter, or disable with spectare_track_forms.<\/li>\n<li>Click goals. Clicks on phone numbers, email links and booking platforms (OpenTable, Tock,\nDesign My Night, SevenRooms, Resy, Eventbrite and others) count as conversions, since those\njourneys never end on a page a URL goal could match. On by default; switch off in settings.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Automatic updates. The plugin now checks spectare.ai for new versions and updates through the\nnormal WordPress update screen. This is the last version you install by uploading a zip.<\/li>\n<li>WooCommerce order tracking. When WooCommerce is active and your API key is set, every paid\norder reports a conversion to Spectare with the real order total and currency, so the\nanalytics and the learning loop see what actually sells. No configuration needed; disable\nwith the spectare_track_woocommerce filter.<\/li>\n<li>The comparison table now carries proper header scope attributes for screen readers.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>The announcement zone added in 1.6.0 was missing from the block editor's zone list and from the\nsetup instructions, so the only way to use it was to type the shortcode by hand. It is now\noffered like every other zone.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>New announcement bar. A single line above the rest of a personalised section, for one\ntime-limited fact worth knowing first: a member priority window, the last days of a run,\nunder-12s free this month. Place it with [spectare_zone zone=\"announce\"].<\/li>\n<li>It only appears when your content actually states such a fact and carries the dates it is true\nbetween, so it disappears on its own when the offer ends rather than sitting there out of date.<\/li>\n<\/ul>\n\n<h4>1.5.4<\/h4>\n\n<ul>\n<li>Longer content in a personalised section was cut off after four lines, mid-sentence, with no\nway for the reader to see the rest. The shortening was meant for a narrow column beside another\nblock, and sections are laid out full width, so it was hiding content for no reason.<\/li>\n<\/ul>\n\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>Personalised sections can now hold your own content as a fallback. Write it between the tags,\nfor example [spectare_zone zone=\"hero\"]Your normal hero copy[\/spectare_zone], and it is shown\nwhenever there is nothing personalised to show: if the connection fails, if you have not\npublished content for that visitor yet, or before the page finishes loading. Previously those\nsituations left a gap and there was no way to say what belonged there.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>A personalised section containing a content block this version of the plugin does not know\nhow to draw used to leave a gap, with nothing in the logs to say why. It now draws the block\nas a content card and records a note, so an out-of-date plugin degrades visibly rather than\nquietly dropping content.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>The primary button in a call to action block was white on a white background, so on most\nthemes it was invisible. It now uses your brand colour, which you can set in Settings.<\/li>\n<li>New \"Brand colour\" setting. Personalised sections already inherit your theme's background and\ntext colour; this is the one colour Spectare picks, used for links, labels and the primary\nbutton. Previously it could only be changed by overriding a CSS variable, which worked or did\nnot depending on the order your stylesheets loaded in.<\/li>\n<li>Improved the contrast of the faintest text colour, which fell below the accessibility minimum\non light themes.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Atom content written with paragraphs, lists, bold or headings rendered as one unbroken block\nof text in server-rendered zones. It is now converted to HTML, matching every other way\nSpectare content is displayed.<\/li>\n<li>Added the styles that markdown content needs, including the three code styles that were\nmissing, so an atom containing code no longer renders unstyled.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Security fix. The page URL is sent to Spectare and shapes the personalisation, but was not\npart of the key used to cache a zone's assembly. Because that URL includes the query string,\ntwo visitors on the same page with different query strings shared one cached entry, so one\nvisitor could be served content assembled for another. Found by a security review. Zone\nassemblies now cache per page URL as well as per referrer, campaign and visit history.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Server-rendered zones can now personalise for returning visitors. Zones are rendered on your\nserver, which cannot see the page history Spectare keeps in the visitor's browser, so a\nreturning visitor previously looked new to them and got your default content. Enable\n\"Returning visitors in zones\" in Settings to store the visitor's last three page paths in a\nfirst-party cookie on your own domain, which your server passes to Spectare. Off by default,\nbecause it adds a cookie: check your cookie policy before enabling. Slots have always\npersonalised for returning visitors and are unaffected either way.<\/li>\n<li>Zone assemblies are cached per visit history as well as per referrer and campaign, so two\nvisitors with different histories no longer share a cached zone.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Atom body text in server-rendered zones is now clamped to four lines instead of printing\nthe full atom. Long atoms were rendering as a wall of prose beside structured components.\nSet full on an atom in the assembly to print the whole body.<\/li>\n<li>Zone assemblies are now cached for an hour instead of a minute. At one minute the cache\nexpired between visitors on lower traffic sites, so most visitors paid a cold blocking\nrender and billed a personalisation. Filter: spectare_assembly_cache_ttl.<\/li>\n<li>The zone request timeout is now 15 seconds instead of 20. This call blocks the page render,\nso it stays bounded, but it has to sit above a cold assembly rather than below it: a cold\nmiss is a full model call and can take 9 to 13 seconds. With the hour-long cache above, at\nmost one visitor per hour per traffic source waits that long. Filter:\nspectare_assembly_timeout.<\/li>\n<li>A failed zone request is remembered for 30 seconds, so a slow or unavailable backend costs\none visitor the timeout rather than every visitor until it recovers. Filter:\nspectare_assembly_fail_ttl.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added content import (Settings \u2192 Spectare Import): scan your published pages, pick which to import, and Spectare rewrites them into focused content atoms saved as drafts for review. Nothing is published automatically. Reads raw Gutenberg blocks where available and falls back to a heading split for classic\/page-builder content. Requires your Spectare API key.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added an agent entry point: the plugin serves an llms.txt at your domain root, generated from your published Spectare content, so an AI agent reading your site extracts accurate facts from a few fetches.<\/li>\n<li>Added \"Serve llms.txt\" toggle (off by default) and a \"Refresh llms.txt\" button in Settings \u2192 Spectare.<\/li>\n<li>llms.txt is cached locally and refreshes automatically as your content changes. Requires pretty permalinks.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added server-side Zone blocks: the [spectare_zone] shortcode and Spectare Zone Gutenberg block render personalised components in named zones (hero, body, proof, cta) via server-side assembly.<\/li>\n<li>Added an API key setting (Settings \u2192 Spectare) required for the server-side zone path.<\/li>\n<li>Pages using [spectare_zone] now send a Cache-Control: no-store header automatically to prevent caching plugins from serving stale personalised content.<\/li>\n<li>Reorganised the settings Quick start into Option A (client-side slots) and Option B (server-side zones).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Auto-inject of Spectare widget script via wp_enqueue_scripts.<\/li>\n<li>Gutenberg block (Spectare Slot) with slot selector, custom name, and reserved height options.<\/li>\n<li>Shortcode [spectare_slot] with name and height attributes.<\/li>\n<li>Settings page with organisation slug, base URL, and auto-inject toggle.<\/li>\n<\/ul>","raw_excerpt":"AI-driven personalisation for WordPress. Spectare assembles a different page experience for every visitor based on referrer and UTM signals.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/331879","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=331879"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nigemchugh"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=331879"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=331879"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=331879"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=331879"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=331879"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=331879"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}