Skip to content

Join the Seedly owners community →

Docs

Changelog

Release history and platform updates for Seedly Sites.

Last updated

A record of major updates and improvements to Seedly Sites. The most recent changes appear first.


v2.0.5 (September 2026) - Setup fixes for Windows and Railway#

Cut 24 September 2026.

Setup fixes, from watching a buyer set Seedly Sites up on Windows. Nothing changes on your published sites.

Before You Upgrade#

  • Nothing to run. There is no database change and no new setting. The changes are to the setup wizard and the handbook, which matter when you set up a new instance

Changed#

  • The live setup checks your Railway project for you, after linking and again after the rebuild, and names a missing, extra or misnamed service, or a start command, watch paths or other build setting Railway filled in
  • Creating the database tables now comes after the rebuild, where it can work on a new project, and the migration prints [migrate] lines so you can see it ran

Fixed#

  • Resuming the setup can no longer start over by mistake. A resume command cut off at the colon is refused with the whole command to paste, instead of starting again at the first step, and a resumed run says where it is picking up first
  • Running the GitHub step again no longer fails with "Name already exists"
  • Git's name and email are asked for before the first commit, and a missing GitHub CLI, Railway CLI or Wrangler stops the setup with clear instructions
  • The media bucket step skips a bucket that already exists and says R2 must be switched on first
  • The handbook gains the Windows PowerShell setting, installing the GitHub CLI, and a troubleshooting entry for each setup error

v2.0.4 (September 2026) - License version 1.2#

Cut 19 September 2026.

A license update and nothing else. The software is the same as 2.0.3.

Before You Upgrade#

  • Nothing to run. There is no code change, no migration and no new setting, and there is nothing to redeploy

Changed#

  • The license moves to version 1.2. LICENSE.md in your download now says a license ends if the amount paid for it is refunded in full, or is finally reversed through a chargeback or other payment dispute that we do not win. A partial refund of that amount, a dispute that is still open, and a dispute we win do not end a license. Everything else in version 1.1 is unchanged, and sites already delivered to clients stay theirs.

v2.0.3 (September 2026) - A switched-off block stops counting, everywhere#

Cut 18 September 2026.

Fixes to the CMS, the builder and the build and intake tools, most of them the same rule: switching a block off is how you take something off a page, so nothing should keep counting a block you switched off. Your published sites change only when you next deploy them, and then only by a smaller stylesheet.

Before You Upgrade#

  • Nothing to run. There is no migration and no new setting. Update the CMS, and redeploy a site when you want its smaller stylesheet

Fixed#

  • The link audit, the Outline's heading warnings and the page SEO analysis leave switched-off blocks out. A broken link inside a switched-off block is no longer reported, a page whose only inbound link is switched off now shows as an orphan, switching off a second H1 clears "Multiple H1s", and switched-off text, headings and images no longer count in the content and SEO analysis or the Pages list score.
  • Duplicate ids, the stock hero photo, the reviews theme and the AI agent skip switched-off blocks. The visible copy of a duplicated id keeps it, the hero photo goes on the first visible section, the site's reviews theme comes from the first visible reviews block, and the AI editing agent no longer offers or inserts sections you switched off in __inventory.
  • The build's checks and compose stop counting switched-off copy. The repetition check, seedly compose, the copy-similarity advisory and the contrast self-repair all leave switched-off blocks out, and the check for copy that points at a form now notices when the only form on the page is switched off.
  • A re-rolled build no longer switches back on the blocks it switched off. An element still carrying an [AI-PROMPT] brief, and an unbacked financing button, stay switched off after the sameness check re-rolls a build.
  • Migration keeps each copy's own switched-off setting, and the builder canvas no longer shows structured-data markup inside a switched-off section.
  • The intake form refuses a file sent where it expects text, instead of saving the words "[object File]". The client can simply submit again.
  • Six unused rules are gone from every site's stylesheet, about 1 KB before minifying, from each site's next deploy.

v2.0.2 (September 2026) - The local sandbox starts again#

Cut 18 September 2026.

Two fixes, both in the CMS. Your published sites do not change, there is no database change, and there is nothing to run.

Before You Upgrade#

  • Nothing to run. There is no migration and no new setting. Update the CMS; there is no need to redeploy your sites

Fixed#

  • The local sandbox answered every page with an error. npx pnpm m6:dev starts the CMS with next dev, and on 2.0.0 and 2.0.1 every CMS page, /admin and the portal included, answered 500 with UnhandledSchemeError: Reading from "node:http". Your production CMS was not affected: a production build of the shipped code does not compile the Edge copy of the file involved. The CMS starts its scheduler from src/instrumentation.ts, which Next also compiles for the Edge runtime in development, where node:http does not exist. The scheduler is now imported only inside a Node-runtime branch, the form Next documents, so the Edge build leaves it out. It starts on your production CMS exactly as before
  • The UTM persistence help text described form fills that never happen. Under Settings > Analytics, it said the campaign parameters feed "forms (hidden fields)" and CRM form iframes. The published site fills no form field itself, and it adds the parameters to a CRM form embed only when CRM embed attribution is on in the CMS admin's Site Settings and its hosts are listed. The text now says what the setting does: it holds the parameters for the visit, pushes them to the page's dataLayer, and passes the utm_* tags to your first-party analytics. The feature itself is unchanged

v2.0.1 (September 2026) - A switched-off block stops counting against you#

Cut 17 September 2026.

Two fixes, both the same rule: switching a block off in the builder takes it off the page, so the things that read your pages should stop counting it. Nothing about how you build a site changes, no page you have written is altered, and there is no database change.

Before You Upgrade#

  • Nothing to run. There is no migration and no new setting. Update, then deploy a site when you want the blog-archive fix on it

Fixed#

  • A deploy could be blocked by a block you had already switched off. Before a site deploys, its published pages go through a content check, and a content error stops the deploy. That check read every block on the page, including the ones switched off in the builder, so a page whose only flagged block was one you had switched off reported Deploy BLOCKED with nothing left to fix. The build could hand you this on its own: when a template's copy slot came back unfilled, the build switched that element off and then reported a content error about it. The check now skips a switched-off block and everything inside it, both at deploy time and during a client build. A block that is still on the page is checked exactly as before and still stops the deploy
  • Template packs are unaffected. A switched-off block still ships inside a pack with its copy intact, so the template quality checks, the pack export and the pack seed all keep checking every block
  • A blog archive could publish with no main heading. If you point your blog archive at one of your own pages, the listing heading is promoted to the page's main heading whenever your template does not carry one. That test counted a heading you had switched off, so an archive whose only main heading was switched off published with no main heading at all. Switched-off headings no longer count, and a heading that is switched on still suppresses the promotion, as before. This one changes published HTML, so it reaches a site the next time you deploy it

v2.0.0 (September 2026) - Published sites that match the builder, review widgets, and the template packs in your download#

Cut 17 September 2026.

Read this one before you update. Your clients' published sites will look different after you deploy them, and that is what makes this a major version. The differences are corrections: colours you had already chosen in the builder were not reaching the published page, and now they do. Nothing you have written changes, and no live site changes until you press Deploy on it, so you can deploy one site, look, and then do the rest. This release also adds optional connected review widgets, ships the seven template packs inside your download for the first time, and moves the scheduled jobs into your CMS.

Before You Upgrade#

  • Back up Postgres, then run the migration step in your update checklist. This release adds two database tables and a set of optional columns. It is safe on a site that already has data, and nothing you have entered changes
  • Take packages/core, packages/builder and packages/render from the new download whole, rather than picking individual files out of them. They moved together
  • Run the install step. A dependency is pinned forward for a published advisory, and your own security check flags it until you do

After You Upgrade#

  • Run this once, after your cms service is back up. Until you do, both your CMS and GitHub run the scheduled jobs, so GitHub keeps spending the Actions minutes you wanted back and your backup job runs twice

    npx pnpm run setup:scheduler
  • Leave App Sleeping off on the cms service and keep it at a single replica. A sleeping CMS runs no scheduled jobs, and each extra replica would run the backup again

  • Deploy one site first and look at it before you deploy the rest: a section with a coloured photo overlay, any divider you set to a non-default colour, the header of a site with no logo image, and a service-area or locations page. Everything should be closer to what the builder has been showing you. If something looks wrong rather than corrected, stop before deploying the rest

  • On sites you built from a template pack before this version, check your headings. The packs used to set a fixed near-black on many headings, and that setting did nothing until now. From your next deploy those headings paint near-black instead of your client's heading colour, which on a dark band can be hard to read. Open the heading in the builder and set Color to None to hand it back to the brand. The packs in this download no longer set it, so sites you build from now on are unaffected

  • If you pointed anything at an element inside your header or footer by its ID, re-point it after you deploy. See Breaking below

Your Published Sites Will Look Different#

  • The Heading Color control reaches the published page. Six of the eight colours in a heading's Color menu did nothing on the published site. All eight work now
  • A map pin marked active is no longer treated as switched off. Where it was the only pin, the map did not come up empty. It fell back to the site's stored locations and drew a map you had not built. Pins now follow the same switched-on and switched-off rule as the rest of the platform
  • Section overlays follow your client's brand colour. A pack that tints a photo with a translucent colour was publishing the pack's colour rather than the one you set. Plain black and white darkening layers behind hero text are deliberately left alone
  • The Divider Color setting works on the published page. Icon dividers ignored it and always drew grey, and the Secondary colour did nothing on any divider style
  • Your site name is visible when you have no logo. The text fallback was pinned to your secondary brand colour and could publish almost invisible against its own header. It now takes the colour of the header it sits in
  • Some brand-colour touches that were doing nothing start working. The tinted panel that stands in for a post with no featured image, the tint and hover on a post's tag pills, a hover on the social links on an author page, and a hover on slideshow dots. All decoration, and nothing moves
  • Service-area cards carry the business name and phone number. On six of the seven packs the per-city cards published with a blank heading and a phone link that dialled nothing. They now carry the real name and a working phone link, and the full "Areas we serve" list is no longer repeated inside every city card

Breaking#

  • Elements in your header and footer now get their own ID prefix. A style written in the footer builder could reach into the page body and restyle it, which is how a heading ends up white on a white band. Styling you wrote against a header or footer element carries over untouched, because the rule and the element are renamed together
  • What does not carry over, and only if you did it yourself: a hand-written link that jumps to an element inside your header or footer by its ID, a custom CSS rule in Site Settings that targets one, or a script that looks one up by ID. Nothing errors and no build fails; the link simply stops jumping and the rule stops matching. Links and rules aimed at the page body are unaffected, and so is the "skip to content" link. None of the template packs hand-write such a link. If you styled the built-in header's mobile navigation toggle, it is now hc-tpl-nav-toggle rather than tpl-nav-toggle

Connected Review Widgets#

  • A Reviews element can now be set to Connected instead of Manual. Paste the link to a listing and the platform is worked out from the link itself; 105 are recognised, including Google, Facebook, Yelp, Trustpilot and the BBB. Reviews then arrive on their own, with the reviewer's photo and a link back to the original. You choose Grid, Carousel or List, how many show at once, an optional aggregate-rating header, and whether a carousel advances by itself, which is off by default
  • Once the page carrying the widget has been deployed, new reviews appear on it without another deploy
  • It is optional, and it costs money. Connected reviews run on Zembra, a separate company you open an account with and fund yourself. Connecting a listing spends credits, and each connected listing spends credits again every 30 days for as long as it stays connected, whether or not anyone visits the site. Chapter 10 of your handbook works the numbers through, and Zembra's free sandbox lets you try the whole flow on dummy data first. Reviews you type in by hand still work exactly as before, cost nothing, and need no account
  • Disconnect every source before you remove ZEMBRA_API_TOKEN. A cancellation only reaches the provider while the token is set, and it now only counts once the provider itself confirms it. If you connect anything, set up an operator alert channel; your setup check warns you when a token is set and no channel is. The Test connection button on your Setup page reports whether the token works and your credit balance

The Template Packs Ship in Your Download#

  • Cedar, fresh, grit, surge, swift, vista and warm are in your copy now. They were not before, which is why earlier notes described packs you could not open. Your own packs are supported as well, and the quality checks run against them. The ember and chiro packs are gone; neither ever shipped, so nothing in your copy is affected
  • 27 buttons across the template library that had never had a link set now go somewhere. They are routed by what they say, so a "Get a Quote" button goes to your contact page and a "Call Now" button dials the site phone

Your Scheduled Jobs Move Into Your CMS#

  • Your CMS now runs the scheduled jobs itself. The timed GitHub workflows in your download could use up more than a free GitHub Actions allowance in a month, and running out also disables the portal Deploy button until the allowance resets. Once you have run npx pnpm run setup:scheduler, every timed workflow skips itself and a skipped job bills nothing, leaving a single watchdog that tells you if your CMS ever stops running the jobs. You can still start any workflow by hand
  • A workflow that was never yours to run is gone. cron-demo-reset resets the public demo we host. It had no function in your copy and is no longer in your download

Intake and Generated Sites#

  • The coverage list your client confirms is now actually kept. When a client types their service areas, the platform works out which are neighbourhoods of a larger town and can add a parent town the client never typed. That result was worked out and then dropped, so the coverage card never appeared. It is stored now and used only once the client has approved their plan. A town the platform added on its own carries a Remove button, and a removal survives the plan being recomputed. There is no undo; a removal is reversed by a change request, or by you clearing it
  • A malformed reply can no longer invent a service area or quietly lose one. Anything that is not a place name is now dropped, and a typed area that cannot be placed is reported as unplaced rather than lost
  • Switching off the cards a client left blank no longer switches off their neighbours. On some pages that took the whole blog section with it
  • An invented statistic, rating, or superlative no longer throws the whole build away. The build saves its pages as drafts and lists what it found on your review board, so you fix those lines before you publish
  • A build no longer reports problems in blocks it has already switched off, and a switched-off block's words can no longer become a page's search description
  • Your service areas now build real pages. The builder can repeat a block once per city or once per neighbourhood, and the renderer publishes the result
  • Each generated page gets its own title and meta description, written for that page
  • A client with no Google Business Profile is asked where they are. If they travel to customers, only the town is published and the street address stays private
  • A grouped list of service areas is read as places. A line like Marbury: Old Mill, Harbour Row on the intake form is no longer split at the commas into fragments
  • Team members and job openings in Site Settings. Five name-and-role slots and five job title-and-type slots, reachable as merge tokens
  • "Deployed" now means the site is really serving the pages you approved, and you can no longer walk an intake job past work that has not happened

Search Engines and Structured Data#

  • Switching a block off now takes it out of your page's structured data. A disabled block was still telling search engines it was there, including a switched-off review with the reviewer's name and a switched-off reviews block's star rating. Switching off a section now silences everything inside it. One deliberate exception: structured data you pasted yourself into an HTML block is not removed by disabling that block, so delete the block instead
  • An unfilled AI brief can no longer publish as your SEO text. A placeholder left in a page's SEO title, meta description, or social share title or description now falls back to a real value. A brief left in the page's own Title field is still used as written

Security#

  • Dependencies are moved forward for published advisories, each within its current major version, including one published while this release was being prepared (GHSA-9rgm-9g3h-6x36)
  • Two image-resizing endpoints the platform never used are switched off
  • Your shareable draft link no longer shows your client operator diagnostics, and a blog draft link no longer tells your client their post does not exist when the preview is simply unavailable

Also In This Release#

  • The builder's contrast warnings read the page the way the renderer does. They are still advisory and still never block a save or a publish
  • The license moves to version 1.1. It ships as LICENSE.md and applies to every license holder. One license covers one agency: if you run the platform so another agency can build and host sites for its own clients, that agency needs its own license. Your employees and hired developers may work on your copy for you, the sites and exports belong to you and your clients, and a release that ships later is included at no extra cost. Support is still not included
  • Dozens of setup fixes, found by walking the handbook and the setup program as a first-time buyer on a clean machine

v1.4.1 (September 2026) - Two dependency advisories, one of them in the page editor#

Cut 2 September 2026.

A security update, and you want it if you took 1.4.0. Two advisories were published against packages your download depends on after 1.4.0 went out, and neither was caused by anything in it. Nothing you have built changes and there is no migration.

Before You Upgrade#

  • Take package.json, pnpm-workspace.yaml and pnpm-lock.yaml from the new download, then run the install step in your update checklist. No migration and no configuration

Security#

  • The page editor is updated for a published advisory. The rich text editor you write page content in had a flaw where a specially crafted piece of pasted content could turn an internal property name into a real, executable attribute on the page. Pasting from an untrusted source was the realistic way to reach it. Fixed by moving the editor forward inside the same major version, so nothing about how it works changes
  • A URL parsing library used underneath the server is updated. It could be fooled about which host an address pointed at, through a form of internationalised domain name it failed to normalise first
  • If you are on 1.4.0, your own security check flags both until you update. It reads the same advisory feed we do, so a red result there is this and not something you broke

v1.4.0 (September 2026) - Editing a template changes the sites you build from it#

Cut 1 September 2026.

One change, and it closes a gap that quietly cost you work. Nothing to run, no database change, and your existing templates work as they are.

Before You Upgrade#

  • Nothing to run. Take the new download; there is no migration and no configuration

A Site Is Built From the Template You Edit#

  • Templates used to live in two places at once. There was the template you open and edit in the builder, and a copy of it inside your download that the site builder actually read. The template picker read the real one, so your edit showed up there, but the build read the copy, so the site came out the old way
  • The build now reads the template itself, header and footer included. What is saved on the template when you create a site is what the site is built from, and the picker and the build can no longer disagree
  • A template with an unfinished page is still used. You approve every site plan by hand, so there is no gate that refuses a page that looks incomplete. A page that does not validate is named in the build output and then used as saved. The checks that matter still run later, on the finished copy, and still stop a build before anything is written

Worth Checking on Your Own Templates#

  • A template with no page called service-template falls back to its home page for service pages
  • Any page you do not want in a template should be unpublished in the builder, because the build takes what is published

v1.3.1 (September 2026) - Site Settings saves again on existing sites#

Cut 1 September 2026.

A single fix, and you want it if you took 1.3.0.

Before You Upgrade#

  • Run the migration step in your update checklist. This release changes a database column. It is safe on a site that already has data, and nothing you have entered changes

Fixed#

  • Site Settings would not save on a site that existed before 1.3.0. Saving failed with an error naming the three unique selling point fields, even when you were editing something unrelated like your phone number. 1.3.0 marked those fields as required, and the migration that added them filled existing sites with a blank, which is exactly what a required field rejects. The three fields are no longer required. An empty slot was already safe on the page: a trust chip pointing at an unfilled slot drops out cleanly at publish
  • A new site no longer starts with placeholder trust points. Creating a site used to write "Sample trust point 1" through "Sample trust point 3" into Site Settings, only to get past the required flag. New sites now start with those fields empty, so placeholder copy cannot reach a published hero unnoticed

v1.3.0 (September 2026) - The builder and renderer catch up, and locations get neighbourhoods#

Cut 1 September 2026.

This one is mostly the builder and the renderer. The page-building engine had moved a long way ahead of what your download carried, and this release brings all of it across in one go rather than a feature at a time.

Before You Upgrade#

  • Run the migration step in your update checklist. This release adds database columns and one new table. It is safe on a site that already has data
  • Take 1.3.1 with it. On its own, 1.3.0 stops Site Settings saving on sites that existed before it (see v1.3.1)
  • Take packages/core, packages/builder and packages/render from the new download whole. They share the element model, so picking individual files out of them leaves you with a mismatch rather than a partial upgrade
  • Run the install step, which picks up a dependency pinned for a published advisory

New in the Builder#

  • Section dividers. A shaped edge on a Section's top, bottom or both, chosen from nine silhouettes, coloured from your brand tokens, with its own height on phones
  • Show and hide a field across every item in a container. Grids, sliders and other repeating containers have Display toggles, and the item list shows a preview of each entry
  • A Section can fill the remaining viewport height, useful for a hero that should reach the fold on any screen
  • Grid Image Fill, so a panel image bleeds edge to edge through the card padding
  • Max Width on the Text element, matching Heading
  • A per-element CSS target helper that shows you the selector to write custom CSS against

Locations, Selling Points, and Tokens#

  • A location can hold cities, and each city its neighbourhoods. The flat list you already have is kept in step automatically, and export and import carry the whole tree
  • Five fixed slots for selling points. The Generate from brand DNA form takes up to five, and leaving a middle slot empty no longer slides the later ones up
  • The facts you enter once are now merge tokens. Industry, years in business, customers served, primary service area, financing, guarantees, licences and awards, alongside the selling points

Fixed#

  • Inspector style controls that silently did nothing. Several were being overridden by the stylesheet and never reached the page
  • Grid images are sized by the column they sit in, and Max Width caps apply on tablet and above only, so an element goes full width on phones
  • Breadcrumbs inherit their colour instead of being fixed to grey, and no longer carry a default margin
  • Slideshows no longer freeze the canvas while selected, two on one page no longer fight over dot styling, and the navigation can sit below the slides
  • A Row's layout preset now sets its column widths
  • A ported site no longer copies the source site's font onto elements, where it fought your own brand settings
  • Your first test run passes on a fresh install. One test read a folder that only exists in our own working copy

Security#

  • A dependency with a published advisory is pinned to a fixed version. Running the install step is all you need
  • An SVG in your media library can no longer run script when it is opened. Files you have already uploaded keep working, and legitimate SVG logos keep rendering

v1.2.0 (August 2026) - A contact form and a careers form for every location#

Cut 13 August 2026.

Each location can now carry its own contact form and its own careers form, so one page serves every location and each shows the right one. It also fixes a contact page that shipped with no form and a quiet data-loss bug in the location screens, and closes a gap worth knowing about if you give clients an Administrator login.

Before You Upgrade#

  • Run the migration step in your update checklist. This release adds two database columns. Nothing you already built changes

After You Upgrade#

  • Re-paste any map embed that went missing. See the fix below. The original paste was discarded, so there is nothing to recover, but it sticks this time
  • Replace the old "Contact form" box on pages you already built from a pack. The fix changes what a pack produces from now on and does not reach back into existing pages. Replace that box with an HTML element holding {{location.contactForm}}

Security#

  • The Map embed and Reviews embed boxes on a location are now agency-operator only. A client with an Administrator login could previously paste a script there that ran inside your own builder session, with your access. Your saved embeds still work exactly as before. A client who wants one changed asks you, or you paste it for them

A Form for Every Location#

  • Two new boxes on every location, Contact form embed and Careers form embed, with two matching merge tokens, {{location.contactForm}} and {{location.careersForm}}. Put the token in an HTML element on a page bound to a location, and each location shows its own form. Build the contact page once instead of once per location
  • Paste either the form's full web address or its full iframe code. An address is wrapped in a frame for you, titled with the form and the location name and loaded only when the visitor scrolls to it. Iframe code is kept exactly as you typed it
  • Paste the whole address, including https://. Browsers hide that part, and a shortened address saves without complaint and then shows no form on any location
  • A location you leave empty simply shows no form there. You can also name a location by number, the same way the other location tokens work, so {{location.1.contactForm}} is your primary location's form
  • Both boxes are agency-operator only. Embed code goes onto the page exactly as pasted, so anything in it runs with your access when you next open that site in the builder

Fixed#

  • A site built from a template shipped a contact page with no form. The spot a pack marks for a form used to become a plain box reading "Contact form", connected to nothing. It now becomes the {{location.contactForm}} field, so whatever you paste into a location's contact form embed appears there. A mailing-list signup marker is handled separately and stays a neutral placeholder for you to wire up. In this release a careers page built from a pack also received the contact form; {{location.careersForm}} works when you place it by hand
  • Pasting a map embed into Add or Edit Location saved nothing. Those screens ran what you pasted through a filter meant for tracking scripts, which removes iframes, and still reported success. Every embed box on a location now stores exactly what you paste

v1.1.1 (August 2026) - Custom CSS that was being thrown away, and an update that keeps your edits#

Cut 10 August 2026.

A hardening release. Three things were quietly wrong, and one of them was eating work.

Before You Upgrade#

  • Set SUPER_ADMIN_EMAIL on your instance first. The locked super-admin identity used to fall back to a built-in value and no longer does. If that variable is empty after you upgrade, the gate guarding portal user management refuses everyone, so the Users screen goes away for you as well as for everybody else. Setting it to your own owner login brings it back, and nothing else on the platform is affected. You can check in advance rather than finding out afterwards, because the doctor now reports an unset value as a hard failure

    npx pnpm run setup:check --target=prod

Your Update Can No Longer Overwrite Work You Committed#

  • Every download now carries a fingerprint of every file we shipped. The update helper used to work out what you had customized by asking git, and git only reports work you have not committed yet. The update playbook tells you to commit before updating, so the sequence that lost work was the one the manual recommends. Your working tree looked clean, so nothing looked wrong
  • It now compares by content instead. A file that still matches what we shipped is stock code and is safe to replace. Anything else is yours and is kept. Whether you committed makes no difference, and it works with no git repo at all
  • Every uncertain case keeps your copy rather than overwriting it, including a file we never shipped, a file that cannot be read, and a Windows line-ending rewrite
  • One thing worth knowing about the timing. The helper compares against the fingerprints that shipped with the version you are on, and versions before this one have none, so the protection starts with the update after this one. Updating from an older version, the helper says so plainly instead of implying you are covered

Custom CSS That Was Silently Discarded#

  • CSS typed into an element's Advanced tab now applies whether or not you filled in the ID field. Custom CSS is confined to the element you wrote it for, and it was confined by hanging the rules off that element's HTML id. The ID field is blank by default, so an element you had not named had nothing to hang off and its whole CSS box was thrown away without a word. Elements now carry an automatic handle of their own. Fill in the ID field when you want a name of your own to link to, not to make styling work
  • Two other settings had the same blind spot and start working on any section where you left the ID blank. The section Shape, which is the wave divider, and the smaller background image phones are served in place of the full-size one. That second one means some pages get lighter on phones after their next deploy, with no visible change
  • You do not need to edit anything. CSS that was being discarded starts taking effect the next time each site is deployed, which is worth a look on pages where you wrote CSS, gave up on it, and worked around it another way

Security#

  • The media library now accepts images and PDFs only, and checks the file itself rather than what it is labelled as. It previously accepted any file type at all, which matters because clients upload to it during intake. Two of the image formats it used to accept reach a parser inside the CMS framework that can be made to loop forever on a malformed file, and no fixed version of that parser is available, so refusing those formats at the door is the only way to close it. The check reads the file's actual contents, so a file renamed to look like a photo no longer gets through, and SVGs are screened for harmful content before they are stored. If you have a workflow that uploaded something unusual, such as a video or a font, it will now be refused
  • The Image Gallery leaked its Advanced CSS onto the rest of the page. Every other element rewrites that box so its rules can only reach the element you wrote them for. The gallery did not, so a gallery rule quietly restyled the page around it, and text that closed the style block early could run as a script when the page was opened in the shared editor preview. Gallery CSS is now confined the same way every other element's is
  • Twelve dependency advisories cleared by pinning six transitive packages forward, each staying inside its current major so no breaking upgrade rides along. Distinct advisories in the tree fall from 89 to 61, and high-severity ones from 32 to 17

Also In This Release#

  • An intake job opened by your CRM can arrive with the client's details already filled in. When your CRM posts to the intake webhook on payment it can include what it already knows, and those values pre-fill the intake form instead of asking the client to type them again. Name, website, industry, timezone, brand colour and a chosen template are understood, anything else is ignored, and the client can still change every one of them
  • A throw while rendering the admin no longer produces a raw 500 with no way back. There are now error boundaries at the root, at the admin segment, and a global last resort, all rendering one shared screen
  • Saving your exclude-my-visits list now records which account saved it. The save worked and your list was correct, but it was written without naming the account that made it, so anything asking who changed a setting saw it as an automatic change by the platform. Nothing about the list or how it filters your analytics changes
  • You can run a public demo on one shared login without visitors locking each other out. Name the account in DEMO_USER_EMAIL and its sign-in details, profile, role and API key all refuse to change, two-factor setup is refused outright, and it cannot delete media or blog taxonomy (a reset restores names, never the image bytes). Visitors get a short friendly explanation rather than an error. Leave the variable unset, which is the default, and none of it is active

v1.1.0 (August 2026) - Every business detail as a token, and a canvas that shows its wiring#

Cut 1 August 2026.

A release about the details a client site repeats everywhere: the tokens that fill them in, seeing which fields are wired to what, and a proper table element.

Seeing What Is Wired#

  • A Tokens switch in the builder panel. A filled-in token looks exactly like text somebody typed, so there was no way to tell a bound field from a literal one without opening every element. The switch flips the canvas between the two views. It starts on, so you open a site seeing what is wired before you edit
  • A {} reference beside it listing every token you can use, grouped by where it reads from, click to copy. Generated from the platform itself, so it can never offer a token that does not work

Locations Got the Rest of Their Tokens#

  • Opening hours, a day at a time. {{location.hours.monday}} through sunday, each filling with that day's range or the word Closed
  • Postcode, suite number, and service cities, as {{location.postalCode}}, {{location.address2}} and {{location.serviceCities}}
  • Every location token has a numbered form, social links and hours included, so {{location.2.hours.monday}} is your second location's Monday hours regardless of what the page is bound to

A Table Element#

  • Pricing grids and service comparisons without a custom HTML block. Header-row toggle, four looks, comfortable or compact density, per-column alignment any cell can override, and a phone behavior that either scrolls sideways or stacks each row into a card. Publishes as a real semantic table. The builder now offers 49 element and block types

Corrections Worth Knowing About#

  • Addresses now include the suite number and postcode. {{location.address}} was building its line from street, city and state only, leaving out parts you had entered. An address that does not match your Google Business Profile listing works against you in local search. Existing pages pick this up on their next deploy
  • Cloned sites now arrive fully set up. The clone command created its site by a route that skipped the setup step, so a cloned site came up with no Settings record, no privacy policy and no terms. Sites cloned before this release can be repaired without touching anything already there
  • Merge tokens work in SEO fields and llms.txt, so title tags and social cards fill themselves in
  • A scheduled publish time no longer moves when you save the page

v1.0.0 (July 2026) - Generated sites in the client's voice, unique by design#

The first buyer release, cut 23 July 2026.

A wave of additions to how new client sites get built: a third way to create a site, generated copy that sounds like the client, sites that are unique to each client, and gates that keep generated copy honest. Those additions landed on a platform that was already finished, and the rest of this entry lists what that platform did, because all of it shipped in v1.0.0 too.

Three Ways to Build a Site#

  • Clone a live site. A new third way to create a site, alongside porting and generating: make a plain, near-exact copy of a live site into a tenant as editable drafts, without keyword research or rewritten copy
  • Generate matured. The generate-from-brand-inputs flow now runs from a guided client intake questionnaire and builds a keyword-grounded page plan (a tight set of pages worth ranking) rather than a raw services-by-locations cross-product

Copy in the Client's Voice#

  • Generated copy is now written to sound like the client, drawn from a few sentences they supply at intake plus simple tone dials, so a generated site reads like the business owner rather than a generic template
  • Optional tone reading from the client's own site and their Google reviews, used for style only and never turned into quoted phrases or stated facts
  • A per-client "Does this sound like you?" review before the site is built

Unique by Design#

  • Every generated site now gets its own structure - layout, color rhythm, spacing, typography, imagery, and photography - within brand-safe, accessibility-checked bounds
  • Each build is checked against your prior builds and automatically re-rolled if it comes out too close to one you already made, so two clients built from the same template pack never receive a recognizably identical site
  • The same client always rebuilds to the same site, so edits and approvals stay stable

Honesty Gates#

  • Generated copy can no longer ship a statistic, rating, or superlative the client did not actually supply; a build that would invent one stops with a plain-English reason
  • The built-in template packs can never ship a real reviewer's name or a source business's identity, so a generated site cannot quote a stranger or route leads to someone else's inbox
  • Generic, AI-sounding phrasing is flagged for review

A New Builder Element#

  • Before / After image slider. A new element for the visual builder that stacks two images with a draggable divider your site visitors slide across to compare a before and an after, either horizontally or vertically. The builder now offers 46 element and block types

Analytics and SEO#

  • Heatmap screenshots now refresh automatically after each deploy, so click, scroll, and attention maps stay lined up with the current layout
  • Analytics now stores visitor IP addresses only as a one-way hash, never in raw form, and UTM tracking respects cookie consent
  • Local-business structured data now uses the correct business subtype for a much wider range of industries, not just home and trade services

The Platform It Was Built On#

Seedly Sites ran real client sites in production before it ever went on sale. This is what the platform already did on the day v1.0.0 shipped, alongside everything above.

The Platform#

  • Multi-tenant CMS: unlimited client sites (tenants) managed from one operator login, with per-tenant pages, blog, media, redirects, tracking scripts, locations, and settings
  • WordPress-style roles (Administrator, Editor, Author, Contributor, Subscriber) plus per-tenant role overrides and a separate deploy permission, strictly enforced per tenant
  • White-label delivery: branded client login, no powered-by badge on published sites, custom domain per client
  • Operator portal: dashboard, per-site management, activity log, backups, and metrics

The Visual Builder#

  • Drag-and-drop builder on a Section, Row, Column hierarchy with a full element and block library, including a local-business pack (NAP, hours, service area, service, click-to-call, map)
  • Native style fields throughout: per-breakpoint column widths, section styles and mobile-first padding, heading and text controls, responsive visibility
  • 21 built-in section presets plus a saved-blocks library for your own reusable sections
  • Header and footer built in the same builder, with a sticky-header option and mobile drawer navigation
  • Builder-editable system templates: 404, blog archive, and single post

Content, SEO, and Analytics#

  • Pages with drafts, scheduled publishing, password protection, an internal-link picker, and a content and SEO analysis panel
  • Blog with categories, tags, rich-text editing, and author profiles with real author archive pages and structured data
  • Per-page SEO fields, local-business structured data, automatic sitemaps and robots controls, redirects with a 404 monitor, and broken-link and orphan-page detection
  • First-party, consent-gated Website Analytics Dashboard: click maps, scroll depth, attention maps, campaign and UTM attribution, bot watch, and experimental A/B tests (off by default)

Publishing and Hosting#

  • Static rendering to one Cloudflare Pages project per client site, provisioned automatically, with media on R2
  • Manual deploys with a per-page readiness gate; publishing never silently changes a live site
  • Per-site sitemap, robots rules, and redirects regenerated on every deploy
  • Platform preview URLs kept out of search engines so only the client's real domain ranks

Migration#

  • The migration pipeline: crawl an existing site and reproduce it closely in the builder, with a deterministic content-parity gate, a visual-difference signal, and a triage board for review
  • Ports land as drafts and never publish or deploy automatically

Billing#

  • Native Stripe billing per tenant: hosted checkout, customer portal, an operator billing dashboard, and configurable non-payment enforcement (freeze editing or suspend the site), with per-tenant overrides

Setup and Operations#

  • Guided setup with Pixl: a local sandbox first (no accounts required), then provisioning for Railway, Cloudflare Pages, R2, and GitHub, with a doctor command that diagnoses problems in plain English
  • Numbered setup handbook, operations playbooks (backups and disaster recovery, updating, data export), and a command and environment-variable reference
Was this page helpful?