New public developers page documenting both ways to drive Mondovo programmatically: the AI-assistant connector (Claude, ChatGPT, Claude Desktop — included on every plan, no API key needed) and the REST API for headless automation (Agency add-on), with curl examples, rate limits, error codes, and billing notes. A machine-readable OpenAPI 3.1 spec is now served too. **Where:** mondovo.com/developers (linked from the homepage footer, the connector guide at /connectors, and Dashboard → Settings → API Keys). Spec at /api/v1/openapi.json. **How to test:** Open /developers logged out — the page should load with connector setup steps, all 7 REST endpoints with curl examples, and a working link to /api/v1/openapi.json (valid JSON, no auth prompt). From the API Keys card in organization settings, the "developer docs" link should open the page. **Watch for:** The OpenAPI spec is hand-authored — if an endpoint's request or response shape changes, the spec must be updated in the same commit or the docs drift.
Pro workspaces can now add extra live-site slots directly from the billing page — no need to wait for a publish. A prepaid slot is billed like any extra live site ($20/month, prorated today), and your next publish uses it automatically at no new charge. Unused slots can be removed anytime (no refund; billing stops at your next renewal, same as taking a site offline). **Where:** Dashboard → Organization → Billing → "Live sites" card (left column). The publish confirmation also says when a site will use a prepaid slot instead of adding a new charge. **How to test:** 1. On a Pro (Stripe) org, open the billing page — the Live sites card shows "X of Y paid site slots in use". 2. Click "Add site slot", confirm — a prorated charge is applied and the slot appears as "Prepaid slot — ready for your next publish". 3. Publish a new site: the consent step says it uses a slot you already paid for (no new charge), and after publishing the slot is consumed. 4. Buy another slot and remove it with the trash icon — the subscription quantity drops immediately. 5. On a free org the card shows "Upgrade to Pro"; on a comped internal org it shows included-slot headroom with no buy button. **Watch for:** double-clicking Add/Remove (must never double-charge or double-decrement), two simultaneous publishes racing for one prepaid slot (one claims it, the other bills normally), and monthly credit grants counting prepaid slots (+150/month each, since they are paid).
Text lines grouped inside one block (e.g. a title stacked over a caption, or the rows of a stat card) are now editable line-by-line instead of being merged into a single combined field. **Where:** Design editor → click a text element in the preview → Quick edit **Two improvements:** - **Clicking a line** selects just that line — the Quick edit field shows only that line's text, with its own style preserved. Clicking the thin gap between lines snaps to the nearest line. - **Selecting a block, column, or whole section** that holds several lines now shows one edit field per line ("Heading", "Text", …) — each saves independently — instead of one textarea over the concatenated text. This works at any grouping level (up to ~30 lines), so a hero section lists all its text lines rather than merging them. **How to test:** Open a design with a card or section that stacks differently-styled text lines. Click the title → only the title is editable. Then select the surrounding block, column, or the whole section → the panel lists each line as its own field. Edit one and Save; the others are untouched. **Watch for:** Lines whose text is computed (e.g. "128 sources · $420k at stake" built from separate values) can't always be matched to a single source string — those route through the section AI to apply, which is expected. Selecting a very large region (a whole page, or a section with 30+ text lines) keeps the previous section-level behavior rather than listing every line.
Connecting an external API now lets you match its fields to what each section shows, and auth-aware buttons can detect users of your own login system, not just Mondovo's. **Where:** Site editor → Settings → Data Sources, or the AI assistant / refine chat. **How to test:** 1. Settings → Data Sources → Add Data Source → enter a REST endpoint → **Test Connection**. 2. On the mapping step, pick the section to fill. Your API's fields now appear with a suggested match to each section field (e.g. `post_title → title`, `attributes.unit_price → price`) — adjust any row, and expand "Preview one item" to see exactly what the section will receive. Save and **Publish**. 3. Or ask the assistant: "connect my products from https://… and map unit_price to price". It tests, proposes the mapping, and connects it. 4. If a section shows a blank or wrong value later, ask "fix the price mapping on my products data source" — no need to rebuild it. 5. Auth-aware buttons for your OWN app: ask the assistant "how does logged-in detection work?" It explains the options, including two that need no backend change — pointing at a cookie your app already sets, or a value it already puts on the page. **Watch for:** - Fields whose names already match are left unmapped on purpose — they pass straight through. - Data still populates at **publish time**. Republish or **Sync Now** after changing a mapping. - Detecting your own app's users via a "who am I" URL requires that endpoint to allow your site's address with credentials (CORS). The cookie/value options avoid that entirely. - This release also fixes a bug where external data source content did not appear on published sites at all — connected sources now render as expected.
When setting up billing for a site failed during publishing, the error was mislabeled as a generic "Compiling Code / Unexpected Error" with no mention of billing. It now shows a clear billing message so you know what actually went wrong. **Where:** Site editor → Publish Changes → the consent step on a per-site plan **How to test:** Publish a site whose billing setup fails; the error dialog should read "Billing Setup Failed" with a billing-specific message, not "Failed during: Compiling Code". **Watch for:** The error dialog still appearing, and never labeling a billing failure as a compilation error.
Clicking a section in the editor now puts its text fields right at the top where they used to be, instead of a wall of background controls. Backgrounds moved behind a single "Background" row, and picking one finally previews live. **Where:** Editor mode → click any section in the preview **How to test:** Select a section and confirm its content fields are the first thing you see. Click "Background" at the bottom of the panel to open the background surface, pick a colour, gradient or texture, and confirm the preview updates instantly before you hit Apply. Click "Back" to return to the content. Right-click a section → Background should open the same surface directly. **Watch for:** Any background overlay appearing on a section you only selected and never edited (nothing should preview until you pick something); the Apply button committing a look you never saw previewed; the Back button not returning to the content fields.
Three upgrades to section design swapping: a "Swap design" button now floats over the preview whenever you select a section (or click anything inside one) — no more hunting for the hidden hover icon; the gallery grid now shows designs from businesses like yours first (a restaurant site sees restaurant sections at the top); and you can simply ask the AI assistant — "show me other hero layouts" opens the design picker on the right section. **Where:** Site editor → click any section on the canvas (pill appears bottom-center), or ask the assistant **How to test:** Click inside any section in the editor preview — a "Swap design — {Section}" pill should appear at the bottom of the canvas and open the picker. On a restaurant/real-estate/SaaS site, confirm the top gallery results match the industry. In the assistant, type "show me other testimonial designs" — the picker should open scoped to the testimonials section. **Watch for:** The pill covering site content it shouldn't (it hides while the picker is open); assistant opening the wrong section for ambiguous names; industry ordering pushing visually better cross-industry designs too far down.
When you swap a section's layout, you now browse real, rendered section designs from our template gallery — with a search box to describe the style you want (e.g. "dark luxury") — instead of gray schematic wireframes. Picking a design adapts its layout and styling onto your own text, images and brand colours; nothing is copied verbatim, so your site stays unique. **Where:** Site editor → select a section → Swap layout **How to test:** Open any section's Swap layout. The "Designs from our gallery" grid should show real screenshots for common sections (hero, testimonials, footer…). Type a style description in the search box and watch results re-rank. Click a design — a preview adapts it to your content — then "Use this layout" to apply. Wireframe "layout ideas" still appear below, and are the main grid for rare section types with no gallery inventory. **Watch for:** A picked design should keep YOUR text, images and colours (only structure/styling changes); missing thumbnails or an empty gallery grid on common section types; search returning unrelated sections.
When you asked the design chat for something your site can have as its own page — a blog, a store, a booking area — it offered to drop a preview section onto the page you were looking at, but clicking that offer just repeated the same reply instead of adding anything. The offer now does what it says. **Where:** Site editor → design chat (the chat beside your design preview) **How to test:** Ask "add a blog page so I can write and manage articles myself", then click the "Add a blog section to this page" suggestion that comes back. The section should appear in the preview within a minute or so. **Watch for:** The new section landing in a sensible spot (not after the footer), the rest of the page staying exactly as it was, and the original request still pointing you to your dashboard for the real page.
Before you've settled on a final design, asking the design chat to "add a blog page" (or any other real page) used to randomly do one of two different things — sometimes correctly offering a preview section, sometimes going ahead and creating a real page early. It now consistently offers the preview-section suggestion until you've chosen your design and moved into the build phase. **Where:** Site editor → design chat, on sites where you haven't yet picked a working design **How to test:** On a fresh design-phase site, ask "add a blog page" a few times — it should consistently reply with the out-of-scope explanation and a section-preview suggestion, never create a real page. **Watch for:** Sites that have already moved into the build phase should still create real pages as expected — this only affects the earlier design-picking stage.
White-label agencies can now embed a footer credit — like "Made with ♥ by Your Agency" linking back to your own website — on every client site they publish. **Where:** Dashboard → Organization → White-Label Branding → "Client-site footer credit" (requires the white-label add-on) **How to test:** Enable the white-label add-on, turn on the footer credit, set the text (use `{heart}` for a heart icon) and your website URL, and save. Open a client site in the editor — the credit bar appears at the bottom of the preview. Publish the site and confirm it shows on the live page linking to your URL. **Watch for:** The bar should only appear for orgs with the white-label add-on; text should render exactly as typed (HTML is escaped), and the link must be https.
Tell the AI editor "make the hero glow blue", "add a subtle grid background to this section", or "make the headline decode in as you scroll" — and it applies the real, tested effect instead of improvising code. **Where:** Editor mode → select a section or heading → type the request in the AI chat **How to test:** Select the hero and ask "give the hero a glowing texture background"; select a heading and ask "make this decode in on scroll". Confirm the effect applies cleanly and matches what the Background / animation panels produce. **Watch for:** An effect being applied to an ordinary copy edit (it should NOT — plain edits stay plain); the wrong element being targeted; a request that's ambiguous getting a clarifying question instead of a guess.
When asking the assistant to add something to a collection that already exists (like writing a blog post when the Blog Posts collection is already set up), it could previously reply with confusing internal text instead of a clear next step. It now explains plainly that nothing was added yet and how to add it as a new item. **Where:** Site dashboard assistant chat. **How to test:** - On a site with an existing Blog Posts collection, ask the assistant to "write a blog post" in a way that routes to collection setup rather than item creation. - The reply should read as plain English with no code-like text (no tool names, parentheses, or `collection_type=` syntax). **Watch for:** Any assistant reply containing tool/function names, underscores-as-code, or route syntax visible to the user.
When you ask the site assistant to add an item to a collection that isn't set up yet, it now points you to the collections you actually have instead of guessing at unrelated page sections. **Where:** Site editor → assistant chat (e.g. "Add a recipe to my recipes collection") **How to test:** On a site that has a real collection (like Blog Posts) but no "recipes" collection, ask the assistant to add a recipe to a recipes collection. It should decline and mention your existing Blog Posts collection, rather than listing homepage sections or offering to create a collection you already have. **Watch for:** The assistant listing homepage content sections (Portfolio, Team, etc.) as if they were collections, or offering to create a collection that already exists.
Selecting a section in the editor canvas now opens its Background controls again, and right-clicking anywhere inside a section offers a Background option. **Where:** Site editor → Edit site → Edit mode → click a section (or right-click any element inside one) **How to test:** Open a site, enter Edit mode, and click the hero section. The right panel should show an expanded "Background" block with the texture, look, tint and intensity controls. Right-click the hero headline — the menu should include "Background", and choosing it should select the hero and jump to those same controls. Repeat on a lower section (About, Menu, Contact) and confirm the controls target that section, not the hero. **Watch for:** Controls that open but target the wrong section; a "Background" menu item that does nothing; the panel staying closed on pages whose sections live in a single page file rather than separate block files.
Design edits that failed to save because the database was briefly slow now retry automatically, and if they still can't save you'll see a plain "please try again" message instead of a raw technical error. **Where:** Site editor → Tweaks / Style panel (and any save that updates your design) **How to test:** Change a palette or style and click Apply. On a normal save nothing changes. If the backend is momentarily slow, the save quietly retries once before showing any error. **Watch for:** Any save-failure toast that still exposes internal system names or a millisecond timeout value — those should now always read as a friendly "taking longer than expected, please try again."
When you ask the assistant to write a blog post (or add any item) and that collection already exists, it now replies in plain language instead of showing a confusing internal instruction — and makes clear nothing was created so you can add the item as a draft. **Where:** Site editor → assistant chat (dashboard "write a blog post" style requests) **How to test:** On a site that already has a Blog Posts collection, ask the assistant "Write a short blog post titled 'X'". If it offers to create the collection and you confirm, the reply should clearly say the collection already exists and that you can add it as a new item (saved as a draft) — with no developer jargon or tool syntax in the message. **Watch for:** Any reply that still shows raw text like `add_collection_item` or `collection_type="blog"`, or a bare "Confirmed: Create Collection" with no follow-up explanation.
You can now pull content straight from your own API into a site section, ask the assistant to set it up for you in plain English, and show different buttons to visitors who are already signed in. **Where:** Site editor → Settings → Data Sources (new). Or just ask the AI assistant, e.g. "pull my pricing from my backend at https://…". **How to test:** 1. Open a site → Settings → the new **Data Sources** section under "Forms & Data". Previously this was only reachable by typing a URL — it now appears in the sidebar. 2. Click **Add Data Source**, enter a public REST or RSS endpoint, test the connection, and bind it to one of your site's content sections. 3. Or open the AI assistant and say "connect my pricing from https://…". It will list your bindable sections, test the endpoint, show you a sample of the real data, and connect it after you confirm. 4. Republish the site — the fetched data is baked into your pages. 5. For logged-in visitors: ask the assistant (or refine chat) to "make my sign-up button say Go to Dashboard for logged-in visitors". **Watch for:** - Data is fetched **when you publish**, not continuously in the visitor's browser. If new data doesn't show, republish or hit **Sync Now**. - The assistant only connects public endpoints. If yours needs an API key or bearer token, set it up in Settings → Data Sources — never paste secrets into chat. - Binding a section that already has a data source is rejected; disconnect the old one first. - Logged-in detection works automatically on your site's own address — its Mondovo subdomain or your connected custom domain. If buttons don't swap, make sure the site has been published and the custom domain is connected in Settings → Domain.
Asking the design chat to add a page (like "add a blog page") while you're still comparing designs now always responds the same way — it confirms the page can be added once you pick a design, and offers to drop that section onto the page you're viewing right now. Previously it sometimes did that and sometimes jumped straight to a page-plan card, which was confusing. **Where:** The AI chat on a site's Design screen (while comparing design options, before choosing one). **How to test:** Open a site that's still in the design/compare stage, open the design chat, and type "add a blog page so I can write and manage articles myself." You should get a short reply explaining the blog gets added once you choose a design, plus an "Add a blog section to this page" button. Try it a few times — the response should be the same every time. **Watch for:** A "Proposed plan" card appearing instead of the reply + button, or the response differing between attempts.
After saving a site as a personal template and then archiving it, trying to save that same site as a template again was silently blocked. It now works as expected. A few related rough edges were also cleaned up: My Templates now only shows templates that belong to your current workspace, and template cards with a broken thumbnail now fall back to a placeholder instead of a broken image icon. **Where:** Dashboard → My Templates (and the "Save as template" action in the site editor) **How to test:** Save a site as a personal template, archive it from My Templates, then save the same site as a template again — it should succeed instead of showing an error. **Watch for:** Switching workspaces should immediately update which templates you see in My Templates.
Applying a hero background to a hero that already has a full-width photo used to do nothing visible — the new texture was painted behind the photo. It now sits on top of the photo, and the live preview matches what you get after applying. **Where:** Site editor → Edit mode → right-click the hero → Background **How to test:** Open a site whose hero has a full-width background photo, pick a texture, look at the live preview, then click "Apply hero background" — the applied result should look the same as the preview. **Watch for:** The headline and buttons must stay fully visible and readable after applying, on both photo heroes and plain colored heroes.
Applying a textured hero background no longer washes out the secondary button or headline text. **Where:** Site Editor → select the Hero section → Background panel → pick a texture / Look → Apply hero background **How to test:** Apply a hero texture with the "Colorize" look, then check the hero — the headline, sub-headline, and both CTA buttons ("Book Your Table" and "View Menu") stay fully legible over the darker background. **Watch for:** Removing the hero background should return the hero to its original light styling with normal dark text (no leftover forced-light text).
The agency footer credit now has a per-site override: hide it on a specific client site, or give that site its own text and link — right from the editor's "Add to site" add-ons, or by asking the assistant. **Where:** Site editor → "Add to site" → **Agency footer credit** (white-label add-on required). Or tell the AI assistant "hide the footer credit on this site." **How to test:** With the white-label add-on enabled, open a site in the editor, open "Add to site", choose Agency footer credit → Hide → publish → confirm the credit is gone on that site while your other sites still show it. Try "Show" with custom text/link and confirm the override renders. Remove the override to revert to the agency default. **Watch for:** Only agency staff can change it (end clients in the portal can't). Custom links must be https. The credit still requires the white-label add-on to appear at all.
Starting a new site no longer borrows the business name from your account — the name and description you type in the first intake question are what the site is built around. **Where:** Your website → New site (the "What's your business or site name?" intake) **How to test:** Start a new site under an account whose name differs from the business you're building (e.g. an account named after an older site). Type a completely different business name and description, then check the site title and the plan the assistant drafts. **Watch for:** The site title, the assistant's follow-up questions, and the drafted sections should all reflect what you typed. Previously they could silently take on the account's name and even its industry — a bookshop could come back planned as a yoga studio.
Your saved templates are now more than exact copies: when you start a site from one you can personalize it for a different business on the spot, refresh a template to match how its source site looks today, and removing a template now fully cleans up behind itself. **Where:** Dashboard → Inspirations → My Templates **How to test:** 1. Open Inspirations and find a saved template under "My Templates". 2. Click "Use template" — a new step asks whether to use it as-is or personalize it. Fill in a business name, industry, and a one-line description, then "Personalize & create". The new site opens with the business name merged in, and the copy rewrites itself in the background (progress banner on the design surface). 3. Click "Use template" → "Use as-is" — you get an exact copy, no rewriting. 4. Open a template's ⋮ menu → "Update from current site" → confirm. The template's snapshot is replaced with the source site's current design; sites you already created from it are unchanged. 5. Remove a template from the ⋮ menu — it disappears from the list and its stored snapshot is cleaned up. **Watch for:** - Personalized spin-ups that never finish "tailoring" (banner stuck) — the rewrite is designed to settle back to a working verbatim copy on any failure. - "Update from current site" on a template whose original site or design was deleted should show a clear message, not a generic error. - Phone/email entered in the personalize step should appear in the new site's contact details.
Footer links that pointed at pages the site never got (Services, Pricing, Careers, FAQ…) are now removed when a site is published, and a Privacy Policy link that pointed at the wrong address is repointed at the real page instead of disappearing. **Where:** Any published site — the footer of every page. **How to test:** Publish (or re-publish) a site whose footer lists pages that were planned but never created, then open the live site and click every footer link. **Watch for:** A footer link that still 404s; the Privacy Policy or Terms link missing from the footer bar; a footer column disappearing entirely when its links were valid.
Publishing a site now guarantees its footer links point to pages that actually exist — no more dead "Privacy Policy", "Terms", or "Shop" links returning 404 on the live site. **Where:** Any published site — visible in the site footer. **How to test:** Publish a site whose footer lists legal or navigation links, then open the live URL and click each footer link. Every internal link resolves to a real page; Privacy Policy and Terms pages are always present. **Watch for:** Footer links to pages you never built should simply not appear; external links, email/phone links, and on-page anchors are left untouched.
Select a section (or right-click it) in the editor to open a new Background panel — pick a pattern, gradient, image, or one of six new tintable hero textures, and see it applied live before you commit. **Where:** Editor mode → select any section → the "Background" panel in the right sidebar (or right-click a section → Background) **How to test:** Open a site in the editor, click the hero section, expand Background, try a hero texture with a blend "Look" (Colorize/Flood), a tint, and a mouse interaction; adjust intensity; click Apply. Confirm the live preview matches the applied result and your headline stays readable. **Watch for:** Background covering the hero text after Apply; the mouse-follow effect running on touch devices or when reduced-motion is set (it should stay off); preview not clearing when you deselect the section.
You can now save a whole site — or a single design concept — as a personal template, then start new sites from it anytime. One "Save this design…" action lets you choose between saving an exact copy (Template) or just the look — colors, fonts, feel (Style, formerly called a design skill). Saved templates live in a new "My Templates" section, and each account can keep up to 10 active templates. **Where:** Design gallery → wand icon on any design card → "Save this design…"; Site editor → Settings → General → "Save as template…"; Dashboard → site card menu → "Save as template…". Saved templates appear at Dashboard → Inspirations → "My Templates". **How to test:** 1. Open a site's design gallery, click the wand icon on a design card, and pick "As a Template" — name it and save. 2. Go to Dashboard → Inspirations and confirm the template appears under "My Templates" with a preview image. 3. Click "Use template" and confirm a new site is created with the same design and content, landing in the design view. 4. From the same modal, pick "As a Style" and confirm it appears under Organization → Styles. 5. Try the dashboard card menu and site Settings entry points for whole-site saves. **Watch for:** Saving the same design twice should show a friendly "already saved" message, not an error page. After 10 active templates, new saves should explain the limit. New sites made from a template must keep their images working even if the original site is later deleted. Agency outreach template counts and lists must not include personal templates.
Ask the editor to make a paragraph or heading light up as you scroll and its words now brighten from dim to full in reading order — a highlight that sweeps through the text as the section scrolls into view. **Where:** Site editor - select a paragraph/heading, then use the refine chat. **How to test:** Open a site in the editor, click a body paragraph or heading, and type a request like "highlight the text as I scroll" or "make the paragraph light up on scroll, word by word". Publish or preview and scroll the section into view - the words should brighten in order. On a device with reduced-motion enabled, the text simply shows at full brightness with no animation. **Watch for:** It only applies to plain-text elements (a single string of words). If the selected element contains nested links, bold spans, or other markup, the editor declines and asks you to pick a simpler text element rather than risk breaking the layout.
Clicking a section in the editor shows the Section Library again, and "Explore Alternatives" now swaps the section you actually clicked — including sections that live in their own file on multi-page sites. **Where:** Site editor → click any section on the canvas → Properties panel → Section Library **How to test:** Open a site, click a section (hero, testimonials, contact), expand "Section Library", generate or pick an alternative, preview it, then apply. Repeat on a multi-page site where the section belongs to a separate block file. **Watch for:** The Library block not appearing at all; a preview or apply that changes a different section than the one selected; a preview that leaves the rest of the page looking wrong.
A Style can now be backed by a built-in visual effect — so applying it makes a precise, tested change to the section or element you selected, instead of asking the AI to interpret a design note. **Where:** Dashboard → Styles → New Style (pick a "Built-in effect"); then the design chat in the site editor → Apply a Style. **How to test:** 1. In Dashboard → Styles, click New Style, give it a name, choose a Built-in effect (e.g. "Hero background" or "Scramble text"), add a short description, and save. 2. Open a site in the editor, click a section or element in the preview to select it, then open Apply a Style and pick your new effect Style. 3. Send. The effect is applied straight to the selected section/element — no design generation step. **Watch for:** The effect Style chip stays disabled until you have a section/element selected. Effect Styles apply on their own — you can't combine one with a regular Style or a typed request in the same send. If you send without a selection, you get a prompt to select a section first (never a silent no-op).
You can now take a live site offline without deleting it — freeing up a publishing slot on your plan while keeping the site fully editable and ready to republish anytime. **Where:** Open the site, go to Settings → Advanced → "Take Site Offline". **How to test:** Publish a site, then open Settings → Advanced and click "Take Site Offline". Confirm the dialog. The public link goes offline, the slot is freed, and the site stays editable. Click Publish again to bring it back with one click. **Watch for:** The site's address and all your content/design should be preserved after taking it offline. The "Site Limit Reached" message now points you to this feature instead of only offering to upgrade or delete a site.
Changing your site's primary colour, fonts, corners or density from Tweaks could report "Applied" and then quietly keep the old look — on sites that had explored several design variations, the save was too big for the server to accept and was dropped without any warning. **Where:** Site editor → Tweaks (top toolbar) → Palette **How to test:** Open a site that has several designs, pick a different Primary colour, click Apply, then hard-reload the editor. The new colour should still be there. **Watch for:** If a save genuinely fails now, you'll see a clear "Failed to apply…" message in the activity feed instead of a false success.
Add a terminal-style animated glyph background to any section, and a decode-on-reveal effect that resolves a heading out of random characters. **Where:** Editor - select a section, open Background - "Character field" (Drift or Reveal mode); or right-click a heading, "Add animation" - Text - "Scramble / Decode". **How to test:** Select a hero or any section, pick Character field, toggle Drift/Reveal, adjust density/churn/speed/intensity, and Apply - the canvas paints behind your content and follows your brand color. For Scramble, right-click a heading, choose Scramble / Decode, and confirm the letters decode into the real word. **Watch for:** Content hidden behind the field (should never happen - the canvas sits behind text); the effect running on touch or reduced-motion devices (it should show a single static frame / final text instead of animating); a heading that stays scrambled after the animation finishes.
Applying a style Tweak, background pattern, animation or hover effect in the editor now records its own entry in Version History, so Undo reverts exactly that change instead of an unrelated earlier one. **Where:** Site editor → apply a Tweak / Background / Animation, then use the Undo button in the activity feed. **How to test:** Apply a background pattern to a section, click Undo, hard-reload the page — the pattern should be gone. **Watch for:** Undo reporting success while the change is still visible after reload.
Referencing one of your own past designs while planning a new site used to show a plain text pill ("V1" / "V2") with no way to search or preview. It's now a searchable screenshot grid with a large live preview pane — arrow keys to flip between designs, a poster image while the preview loads, and a clear "Use this design" button. **Where:** New-site planning chat → "+" → "Reference another design". **How to test:** Open the design-reference picker, search for a past site by name, arrow through a few results, and confirm the preview updates correctly before selecting one. **Watch for:** The picker is scoped to your own designs and copy is intentionally honest that it matches look & feel, not exact graphics — it doesn't promise pixel-identical output.
Picking a section type in the editor no longer fires an AI request instantly — it opens a quick review step so you can shape the request first. **Where:** Site editor → left rail → "+ Add section" → pick a type (e.g. Gallery) **How to test:** Click "+ Add section", choose Gallery. Confirm a review panel opens with an editable description, layout thumbnails (with an "Any layout" default), and a placement selector (Before the footer / Top / End). Nothing generates until you press "Add section". "Back" returns to the list; "Describe your own…" still opens the free-text chat. **Watch for:** A click on a type sending a message immediately (regression), or the review panel firing on open.
Writing a blog post, menu item, or product whose title matches one you already have now just works — the new item quietly gets a numbered web address (e.g. `-2`) instead of failing. **Where:** Dashboard assistant ("write a blog post…"), the "New item" button in any collection, and CSV import. **How to test:** With an item already titled "Test Post QA", ask the assistant to write another post titled "Test Post QA" and click Confirm. A new draft is created instead of an "already exists" error. **Watch for:** The original item keeps its address; the new one gets the next free suffix. Manually typed web addresses that collide are still flagged so you don't overwrite a page by accident.
When you selected an element on the page and then asked to add a new section (e.g. "add a blog section"), the new section could get placed *inside* the selected section — most often the hero — which broke the responsive layout on mobile and desktop. New sections now always land as a proper top-level block on the page, positioned near where you were pointing. **Where:** Site editor → select any element → ask the assistant to add a new section. **How to test:** Open a generated site, click/select the hero (or any section), then request "add a blog section" (or FAQ, gallery, etc.). Confirm the new section renders full-width as its own block in the page — not squeezed inside the hero — and that the page still looks correct at mobile width. **Watch for:** A new section appearing clipped/overlapping inside the hero, horizontal scrollbars at narrow widths, or the new section not rendering at all.
The site assistant can now add items to existing collections: "write a blog post about spring wedding trends" or "add a Margherita pizza to the menu" creates the row (as a draft by default) instead of dead-ending with an explanation. Published items appear on the site automatically. **Where:** Site dashboard (portal) assistant chat **How to test:** On a site with a blog collection, ask the assistant to "write a short blog post about X". It should preview/confirm, create the post as a draft, and tell you it's a draft you can publish. Check the post appears in the Blog collection table. Asking to add to a collection that doesn't exist should refuse and list the collections that do exist — never silently create one. **Watch for:** Items landing published without the user asking; the assistant putting content into the wrong fields for the collection's schema; the tool being used for inline content (services/testimonials) where add_content_item is correct.
When you ask the assistant to write a blog post or add a collection item, it now saves the item as a draft for you to review instead of publishing it live unless you explicitly ask to publish. **Where:** Site dashboard assistant chat → "write a blog post…" / "add a…" to any collection. **How to test:** Ask the assistant to "Write a short blog post titled X about Y" and confirm the Add Item card. The new post should be saved as a draft (hidden from the live site); it should only go live if your request explicitly said to publish or go live. **Watch for:** New items being created as "published" for a plain write/add request — they should be drafts unless you asked to publish.
If you asked the assistant to add an item to a collection you'd mis-named (e.g. "recipes" when your site actually has "Blog Posts"), it would quietly offer to create a brand-new, redundant collection instead of pointing out the one you probably meant. It now names your existing collections first and checks whether one of those is the right home for the item before ever proposing a new one. **Where:** Dashboard assistant chat — asking to add an item to a collection. **How to test:** With a "Blog Posts" collection already on the site, ask the assistant to "add a recipe to the recipes collection." It should mention "Blog Posts" and ask if that's what you meant, rather than jumping straight to creating a new collection. **Watch for:** If you genuinely have no collections yet, the assistant still offers to create one — this only changes behavior when at least one collection already exists.
When the AI assistant adds a blog post or other collection item, the confirmation card now clearly states whether the item will be saved as a draft or published live immediately — so nothing goes on your site without you seeing it first. **Where:** Dashboard assistant chat → "Add Collection Item" confirmation card **How to test:** Ask the assistant to "write a blog post titled X". Before confirming, the card shows the item title and either "saved as a draft" or a "will be PUBLISHED immediately" warning. **Watch for:** A publishing item should always show the live-publish warning; a normal add should read as a draft.
When you ask the assistant to "write a blog post" on a site that already has a Blog Posts collection, it now always adds the post as a draft item instead of occasionally re-running a "set up the collection" step that already existed and quietly did nothing while still saying "Done". **Where:** Site dashboard assistant chat → "Write a short blog post titled …". **How to test:** On a site with an existing Blog Posts collection, ask the assistant to write a post with no mention of publishing. It should create a draft item you can review; it should never reply "Done — created collection" without a new post actually appearing in the Content list. **Watch for:** A "Done" reply where no new draft row appears in the collection, or a new post going live without you asking to publish.
Setting up a new collection (like a blog) could non-deterministically end up with only the listing page or only the individual post/item page, but never both — a save-timing bug let the second write silently erase the first. Both pages now reliably persist together. **Where:** Adding a Blog/collection page from the Pages tab or via the assistant. **How to test:** Create a new "Blog" collection page and confirm both the `/blog` listing page and an example `/blog/[slug]` detail page exist and render afterward. **Watch for:** Any collection setup where the listing page loads but individual items 404, or vice versa.
Managing repeatable content (blog posts, menu items, listings) no longer hides two levels deep behind a "Functions" label. Sites with collections now show them directly in the dashboard's left menu (e.g. "Blog Posts" right under Site), blogs get a proper schema (title, excerpt, body, cover image, author, date) instead of a bare title+description form, and the interface explains how drafts and publishing work. **Where:** Site dashboard (portal) left rail; Content Library; dashboard Home card; command palette (Ctrl/Cmd-K → "blog"); Add Collection modal → "Blog posts" preset **How to test:** On a non-commerce site with a blog collection: (1) the left rail shows a "Blog Posts" entry after Site — clicking it opens the posts table directly; (2) with no runtime features the hub rail item reads "Content", not "Functions", and lands on the Content tab; (3) dashboard Home shows a "Your content library" card with an item count and a Manage button; (4) Ctrl/Cmd-K, type "posts" → "Content Library" appears; (5) Add Collection modal offers a "Blog posts" preset; creating it yields fields title/excerpt/body/cover image/author/date; (6) the empty collection state shows the one-line drafts-and-publishing explainer and the button reads "New Blog Post". **Watch for:** Rail overflow on small heights with 2 promoted collections; commerce sites must be unchanged (Products stays the promoted entry, no extra collection items); sites with zero collections must keep the historical 8-item rail byte-for-byte.
Generated sites with a blog now get a real Blog listing page, so the "Blog" nav link and "Read the Blog" button open a proper articles hub instead of silently re-loading the homepage. **Where:** Any newly generated site whose plan includes a blog. **How to test:** Generate a blog-intent site (e.g. "a consultant's site with a blog"), then open Pages — a "Blog" page is listed — and click the site's Blog nav link. **Watch for:** The Blog page should render even for a brand-new, empty blog (a friendly empty state), and the nav link must resolve to it rather than the homepage.
Starting a logo or creative generation in Brand Studio and then switching to another tab used to risk losing track of that generation's progress. It now persists in the background, so switching away and coming back shows the current status or finished result instead of a reset state. **Where:** Dashboard → Brand Studio → Create tab **How to test:** Start a generation, switch to another tab or section of the app, then return to Brand Studio — the generation should still be running or show its completed result. **Watch for:** A generation that was in progress before a full page refresh should still pick back up correctly.
Assistant suggestions about site issues now speak plain language ("Connect your Quote Request form") instead of technical labels ("Form not connected: quote_request", "Missing popup: Opens MobileMenu"), and two false alarms were removed entirely: mobile menus and other UI toggles are no longer reported as missing popups, and forms wired up through a popup in another part of the site are no longer reported as disconnected. Anything that can't be phrased in plain words is hidden rather than shown. **Where:** Site editor (portal) → Assistant panel suggestion chips, and the site health / launch checklist recommendations **How to test:** Open a site whose header uses a mobile menu toggle and whose quote form is connected via a popup button — the assistant panel should show no "Missing popup" or "Form not connected" chips. On a site with a genuinely dead button (href="#"), a chip like "Make the \"Get a Quote\" button work" should appear. **Watch for:** Real disconnected forms must still be flagged (now worded "Connect your … form"); genuinely missing popups (a modal setter with no modal anywhere) should still appear as "Fix the … popup".
Cash-on-delivery orders now complete even when the store's live address isn't in the payment redirect allowlist. **Where:** Storefront checkout on a COD-only store — /checkout, "Place order". **How to test:** On a COD-enabled store with no online payment gateway, add a product, go to checkout, fill in contact and shipping details, and click Place order. The order should confirm and redirect to the order-confirmation page. **Watch for:** The buyer should never see "return_url is not an allowed origin for this site" on a COD order. Prepaid (online payment) checkout still validates the redirect origin as before.
When a generated site includes a managed collection (like a blog), its listing page is now guaranteed to exist — even if the AI page generation hits a limit — so navigation links to it never lead to a blank page. **Where:** Any generated site with a Blog or other collection (nav/footer links to `/blog`, `/products`, etc.) **How to test:** Generate a site with clear blog intent, let it finish, then open the Blog link in the nav. You should land on a real Blog listing page (showing an empty state until you add posts), not the homepage. **Watch for:** A listing route that silently re-renders the homepage, or a nav link that goes nowhere.
New collections created with the "Add Collection" preset (like Blog Posts) now correctly display their published items on the collection's listing page. **Where:** Your site's collection listing page (e.g. `/blog`) **How to test:** Add a collection, publish an item, then republish the site — the item now appears on the listing page, not just on its own detail page. **Watch for:** A listing page stuck on its "currently being compiled / no items" empty state even though items are published and their individual detail pages work.
Writing a blog post no longer happens in a tiny 5-line box: long-form fields get a tall auto-growing editor with a word count and a Write/Reading toggle that previews your paragraphs. The assistant also got smarter about collections — it now knows each collection's actual fields (wrong field names get a helpful correction listing the real ones), and it can update existing items ("change the price of the Margherita to 12") with safe matching that asks for clarification instead of guessing when titles are ambiguous. **Where:** Content Library item editor (any long-text field); site dashboard assistant chat **How to test:** (1) Open a blog post's Body field — the editor should be tall, grow as you type, show a word count, and the Reading toggle should show paragraph breaks. Short description fields stay compact. (2) Ask the assistant to "update the [item] in my [collection] and set [field] to X" — it should confirm, patch just that field, and leave others intact. Ask it to update an item whose title matches several rows — it should list them and ask which one instead of picking. **Watch for:** Formatting characters (** or #) showing on the live site if typed — the editor is intentionally plain text; autosave regressions in the item editor; the assistant updating the wrong row or wiping fields it wasn't asked to change.
Applying a design skill now asks where it should go — apply to the design you're viewing, or create it as a new variation for side-by-side comparison — and then actually does it (previously it dead-ended in a "I'll build this as a new variation" message that never applied anything). The "Apply a design skill" menu shows only skills (no more variations/pages/sites mixed in), and picking a skill gives immediate feedback: the composer placeholder announces what will be applied, color-token skills instantly preview on your site, and the send button explains it will apply the skill. The picker also renders correctly in light mode instead of a dark unreadable panel. **Where:** Site editor → Assistant panel → "+" menu → "Apply a design skill" (also the @ dropdown's Design Skills section) **How to test:** 1. Open a site in the editor with the light theme active. 2. Click "+" in the composer → "Apply a design skill" — the dropdown should be light-themed and list ONLY design skills. 3. Pick a color/visual skill — a chip appears, the placeholder says "<skill> will be applied — add details, or just send", and the site preview tints with the skill's palette. 4. Hit send with no text — a choice card appears: "Apply to this design" vs "Create as new variation". Pick "Apply to this design" — code changes should land on the current design. Repeat and pick "Create as new variation" — the fork flow should start (base picker, then generation). 5. Type "@" manually — the full dropdown (skills + variations + pages + assets + sites) still appears. **Watch for:** Dark mode regressions in the @ dropdown; skills failing to apply when combined with typed text; the variation suggestion still appearing when a skill chip is attached; the skills-only picker showing other sections after typing to filter.
Applying a bold design skill (like Neobrutalism) could produce headlines so large they broke words mid-line, overflowed on mobile, and footers whose columns wrapped into an orphan row. Every skill application now carries a responsive execution contract: display type must be fluid with a hard cap (fits at 360px, never breaks words), restyled grids/footers must keep their mobile collapse behavior, and the result is checked at mobile/tablet/desktop widths. The skill compiler also rejects unbounded size superlatives ("oversized") in new skills, and the Neobrutalism starter skill now pins a concrete fluid headline size. **Where:** Site editor → Assistant → "Apply a design skill" (both apply-to-this-design and create-as-new-variation) **How to test:** 1. Apply the Neobrutalism skill to a site with a long hero headline (e.g. "Architecting the Future of Global Finance") and pick "Create as new variation". 2. The generated hero headline should be dramatic but fit: no mid-word breaks on desktop, no horizontal clipping on the mobile preview. 3. Check the footer: link columns should stay balanced on desktop (no lone wrapped column) and stack cleanly on mobile. **Watch for:** Skills now rendering too timidly (cap too aggressive); the contract text leaking into user-visible chat responses; two stacked skills duplicating the contract block (expected, harmless).
Design Skills now lives under Settings, and you can create a skill from scratch or rewrite an existing one's direction — not just save one from a design. **Where:** Settings → Organization → **Design Skills** tab (the old top-nav "Design Skills" link now redirects here). **How to test:** 1. Go to Settings → Design Skills. 2. Click **New skill**, pick a type (Visual / Motion / Voice), describe the look in plain words (colors, fonts, mood, do's and don'ts), and save. It appears under "Your skills". 3. On one of your skills, click **Edit direction**, revise the description, and update. 4. Open a site, and in the design chat apply the skill to steer an edit toward that look. **Watch for:** A skill created from a vague description may come back with a heads-up note (e.g. mixed concerns were trimmed) — that's expected. Skills shape AI edits in the design chat, not your first draft.
Skills created by saving or duplicating a design had no authored notes, so opening "Edit direction" showed an empty box — easy to mistake for "nothing to edit." It now starts from the skill's current compiled direction so you're revising real text, with a note explaining where it came from. **Where:** Settings → Design Skills → open a skill → Edit direction. **How to test:** Save a skill directly from a design (no notes written), then open Edit direction — it should be pre-filled with the current direction, not blank. **Watch for:** The box still opening empty for a design-derived skill.
After quickly finalizing a design, some sites incorrectly sent you back to the design-choice screen instead of into your site's Mission Control dashboard, because the app was checking a signal that finalizing never actually set. **Where:** Opening a site right after using the fast "finalize" option during design selection. **How to test:** Fast-finalize a design and reopen the site — it should land in Mission Control, not bounce back to design selection. **Watch for:** Older sites finalized before this fix still use a legacy fallback check and should be unaffected.
A one-time repair fixed collection listing pages (like a Blog or Menu page) on a small number of existing sites that were built before a related fix landed — they were stuck showing no items even though the underlying posts or items already existed. **Where:** Any published site's Blog, Menu, or other collection listing page. **How to test:** - This was a one-time backend repair for already-affected sites, so there's no new UI to test. - If you previously saw an empty listing page despite having items in the Content Library, confirm it now shows those items. **Watch for:** A collection listing page (Blog, Menu, Properties, etc.) still showing an empty state despite the Content Library having published rows of that type.
Applying a template could occasionally leave headings unreadable — dark text sitting on a dark background — because the automatic contrast fixup missed some muted dark colors, and in rare cases it over-corrected softly-muted light text into solid black. Also fixed clicking a second template quickly cancelling the first adaptation still in progress. **Where:** Site editor → apply/adapt a template. **How to test:** Adapt a template with a dark section using muted dark text (e.g. slate-700 on navy) — text should be legible. Click two different templates in quick succession — the first should keep running to completion rather than getting silently cancelled. **Watch for:** Dark-on-dark text after adaptation; a template adaptation that never finishes because a later click cancelled it.
Adding a new section (especially a gallery) no longer duplicates the page footer or drops a pop-up over the page on load. **Where:** Site editor → "+ Add section" → add a Gallery or any section "before the footer" **How to test:** Add a section to a page and confirm the new section lands directly above the single existing footer — not after it, and with no second footer appearing in the Structure tree. Add a gallery and confirm it renders as a normal grid; clicking a thumbnail opens the image viewer, and the page is NOT covered by an overlay when it first loads. **Watch for:** Two "Footer" entries in the Structure tree, a new section sitting below the footer, or a gallery/lightbox that appears open on page load and blocks the page.
On sites that plan a blog, the AI-generated homepage no longer invents fake "latest posts" cards with made-up titles and dates. The homepage blog preview is now wired to your real blog collection and stays empty (with a tidy placeholder) until you publish your first post — so everything you see on the homepage is something you can actually edit or remove from Content Manager. **Where:** Any newly generated site that includes a Blog page or a blog/"latest insights" homepage section. **How to test:** Generate a site whose plan includes a blog. Confirm the homepage "from the blog" section either is omitted or shows a graceful empty state, and that no fabricated posts appear. Publish a post and confirm it flows into that section, each card linking to /blog/your-post-slug. **Watch for:** Any hardcoded post cards on the homepage, or preview cards linking to a bare /blog instead of a per-post URL — those would indicate the contract was ignored.
Two follow-up fixes to "add a section" from chat: when the selected block appears on more than one page, the new section could land on the wrong one; and if the page didn't have a spot to slot it in, the new section could silently disappear instead of showing up somewhere. **Where:** Site editor → select any element → ask the assistant to add a new section. **How to test:** On a page that shares a section with another page (e.g. a CTA block used on both Home and About), select it while viewing About and ask to add a new section — it should appear on About, not Home. Also try adding a section on a page with an unusual layout; it should still render somewhere rather than vanish. **Watch for:** A newly added section appearing on the wrong page, or not appearing at all.
When you paste a URL to redesign and the scrape succeeds, the intake no longer re-asks about your look, tone, location, or page structure — those come from the scan. The intake card also now waits for that scan to finish before appearing, so it doesn't ask questions the scan is about to answer; a safety timer lets it show anyway if the scan stalls for more than a few minutes. Separately, a card with many required questions could previously drop one to stay within the usual question limit — required questions are now always kept, even if it means a slightly longer card. **Where:** New-site chat (planning flow) → paste a site URL to redesign. **How to test:** Paste a real site URL to redesign; once the scan finishes, the intake card should skip questions the scan already answered (look, tone, location, layout). If the scan takes unusually long, the card should still appear after a few minutes rather than hang indefinitely. **Watch for:** Questions already answered by the scan still showing up; the intake card stuck waiting forever on a failed scan; a required question missing from the card.
The "reference a design" question in the new-site intake card could fall back to a plain text list of outside brands (Apple, Stripe, Linear…) whenever the visual picker came up short — asking you to recall and type a brand name instead of just picking a screenshot. That text fallback is gone: the picker now always falls back to featured/recent gallery templates (on-industry first) so you always get something to click, and if nothing usable is found the question is skipped entirely rather than shown as text. A few other intake questions were also tightened so they don't get silently dropped or repeat ones you already answered. **Where:** Creating a new site → intake preference card, "Reference a design" and general question set. **How to test:** Start a new site with a sparse pitch (a few words) and confirm the reference-design question always shows clickable screenshots, never a text list of brand names to type. **Watch for:** Very niche industries with almost no gallery templates — the question should be omitted cleanly rather than showing an empty picker.
Previously a site whose plan included a Blog page almost never got an actual manageable blog collection (17 blog-intent sites existed; only 1 had one) — the dashboard had nothing to promote and the "blog you manage from your dashboard" promise went unkept. Generation now detects a blog page/section in the plan and stands up the blog collection (with its listing page and navigation) automatically, empty and ready to write. **Where:** Site generation; then the site dashboard left rail ("Blog Posts") and Content Library **How to test:** Generate a site whose plan includes a Blog page (e.g. "a consultant site with a blog"). After generation completes, the dashboard rail should show "Blog Posts", opening an empty posts table with the full schema (title, excerpt, body, cover image, author, date). Re-running generation must not duplicate the collection. A site with no blog in its plan must get nothing. **Watch for:** Blog collections appearing on sites without blog intent (over-triggering from unrelated sections); starter junk posts being seeded (there should be zero); duplicate Blog listing pages after regeneration.
The "pick a design you like" step now ranks style options that fit your industry first, with clearer per-style descriptions. "Decide for me" now works even on the style picker, where free-text answers aren't valid — you can still hand the choice to AI. **Where:** New-site chat (planning flow) → the "Pick a design you like" question. **How to test:** Start a new site in a clear industry (e.g. a restaurant) and reach the design question — on-industry styles should appear first. "Decide for me" should be present and work. **Watch for:** Off-industry styles ranked first, or "Decide for me" missing from the style picker.
Clicking a template in the gallery or on the public templates page now opens the real, interactive live preview first instead of a recorded scroll-through clip. The clip is still there — one toggle away — for templates that have one. **Where:** Admin → Gallery, and the public Templates page — click any template card. **How to test:** Open a template with a recorded clip; it should open on the live preview with a Preview/Video toggle. Open one without a clip; it should just show the live preview. **Watch for:** The toggle not appearing when a clip exists, or the live preview failing to load.
After picking a design and starting the full site build, you used to be stuck watching a progress screen for the whole build (which can take several minutes for a store with cart/checkout) with no way forward. As soon as the build starts, you're now taken straight into the editor, where a status banner tracks the build's progress in the background. **Where:** New-site flow → after choosing a design → "Build my site". **How to test:** Pick a design and start the build. You should land in the site editor almost immediately, with a build-in-progress banner, instead of waiting on the progress modal until the build finishes. **Watch for:** The editor loading before the build has actually started; the progress banner not updating or not clearing when the build finishes.
Fixed a bug where the checkout page could show "Your cart is empty" even though the header mini-cart displayed the item and the cart was saved. **Where:** Published storefronts — the /checkout page. **How to test:** Add a product to the cart on a published store, then open /checkout. The item, totals, tax, shipping and discount fields should appear. **Watch for:** The checkout summary matching the header mini-cart on first load, with no need to refresh.
Fixed the washed-out "Completed intake form" pill (and file-attachment chips) so they're readable in the chat, and the mobile plan sheet now opens as a simple list by default with a toggle to the visual wireframe. **Where:** New-site chat (planning flow) → chat transcript; on mobile, tap the "Plan ready" pill to open the plan sheet. **How to test:** Submit the intake form and confirm the "Completed intake form" pill and any attached PDF/image chips are dark-on-light and legible. On a narrow screen, open the plan sheet — it should show the list view first, with a List/Wireframe toggle in the header. **Watch for:** Any low-contrast (light-on-light) text on the pill or chips; the mobile toggle failing to switch views or losing drag-to-reorder.
When you ask the design chat for a site feature like a blog or booking ("add a blog page so I can post articles"), it now confirms your site supports it, explains when the page gets added, and offers a one-click pill to add a preview section to the current page — instead of only saying the request belongs on your dashboard. **Where:** Client editor design chat (and build editor chat) — ask for a feature page like "add a blog page I can manage myself" **How to test:** On a design-phase site, type "add a blog page so I can write articles" in the design chat. The reply should confirm blogs are supported, mention the page gets added after you pick a design, and show an "Add a blog section to this page" pill. Clicking the pill should add a blog section to the current page. A pure page-management request like "delete the About page" should still get the plain redirect with no pill. **Watch for:** The pill failing to send when clicked; feature affirmations appearing on non-feature requests (rename/delete page); awkward grammar in the reply for multi-word features (e.g. "online store").
When the planner asks which design you like, it now shows real screenshot previews of matching styles — labelled with a plain-language name and a quick descriptor — and ranks styles that fit your industry first. **Where:** New-site chat (planning flow) → the "Pick a design you like" question. **How to test:** Start a new site in a clear industry (e.g. a restaurant) and reach the design question. Options should render as screenshot tiles with a readable label and a short hint (e.g. "Light · Editorial · Airy layout"), with on-industry styles surfaced first. "Decide for me" stays available; the free-text "Other…" option is gone (it never made sense here). **Watch for:** Broken/missing preview images, options labelled with raw slugs (e.g. "Cinematic Ai Tech"), or the "Decide for me" pill disappearing.
Generated ecommerce pages (like Cart) could render their header/footer without actually importing them, crashing the page with a "Header is not defined" error. Also fixed FAQ sections incorrectly being treated as empty when using the standard content format. **Where:** Published ecommerce/catalog storefronts — Cart and product listing pages, and FAQ sections. **How to test:** Publish an ecommerce store and open the cart and product listing pages; they should render normally with header/footer intact. Check a page with an FAQ section renders its questions. **Watch for:** A blank or crashed cart/listing page, or an FAQ section rendering with no questions.
Customer accounts (password login, registration, and password reset) on published stores could fail because the browser's cross-origin security check couldn't identify which store the request belonged to, and portal sessions weren't set up to survive across your custom domain. **Where:** Any published store with customer accounts enabled — login, sign up, and password reset. **How to test:** On a published store with a custom domain, register a customer account, log out, then log back in. Try "forgot password" too. **Watch for:** Login/signup/reset failing silently or with a generic network error.
Opening a collection page (like Products) directly, right while its catalog was still being set up, could leave the item table permanently stuck with no fields — because it only looked at the schema available at the moment it first loaded. **Where:** Client portal → site editor → Pages → a catalog collection (e.g. Products). **How to test:** Open a catalog collection page during/shortly after a new site's catalog is being built; the table should pick up its fields once the schema is ready instead of staying empty. **Watch for:** A collection table showing no columns or an unusable item editor.
The planner's inline question card could silently drop a required question (like business name or location) when there were more mandatory questions than fit in one card, and a stuck site-analysis or slow reply could leave the chat waiting indefinitely. Required questions are now always included, a stalled analysis times out and lets you continue, and retrying a slow reply no longer risks a duplicate message. **Where:** New-site chat (planning flow) — the inline intake card, and pasting a URL to redesign. **How to test:** - Start a new site with a pitch likely to trigger several required questions (business name, location, structure) — all of them should appear in the card, even beyond the usual cap of three. - Paste a site URL to redesign; if analysis takes unusually long, the intake card/plan should still become available after a few minutes rather than hanging forever. - If a chat reply is slow and retries, you should get exactly one reply — never a duplicate. **Watch for:** an intake card missing an expected required question; a redesign flow stuck on "analyzing your site"; a duplicated assistant reply after a retry.
The planner now asks its quick questions inline in the chat conversation (a few at a time) instead of hiding them in a side panel — so it's obvious what to answer next, and your answers are collected as a tidy recap in the "Answers" tab. **Where:** New-site chat (planning flow). **How to test:** Start a new site and describe your business. The preference questions appear as a compact card in the chat on both desktop and mobile, capped at about three at a time. Answer them, then open the "Answers" tab to see the recap and an "Edit answers" option. The "Preview Plan" button stays clickable the whole time (it just softens to an outline with a hint while questions are still open). **Watch for:** The Preview Plan / Generate button ever becoming disabled while questions are pending (it must never be); the questions card not scrolling to its first question; duplicate cards appearing in both the chat and the Answers tab.
Single-SKU products (those created without size/color variants) can now be added to cart and purchased — previously checkout stalled on "Calculating total…" and showed a "variant_key required" error, blocking the sale. **Where:** Any published store's product page → Add to Cart → Checkout, for a product that has no variants. **How to test:** Open a product with no variants, add it to the cart, go to checkout, fill in contact + shipping details, and place the order. The summary (subtotal, discount, shipping, tax, total) should calculate and the order should go through. **Watch for:** Products that DO have variants should still require a variant selection; out-of-stock variants should still block checkout.
If one page on your site had a syntax problem (for example, a generated product-category listing), publishing the entire storefront was blocked. Publish now automatically attempts to repair just the broken page(s) and re-checks them before giving up — so the rest of your site isn't held hostage by one page. **Where:** Client portal → site editor → Publish. **How to test:** Publish a site with one intentionally broken page; publish should attempt an automatic repair and succeed if the repair works, only failing (with the same error as before) if the page truly can't be fixed. **Watch for:** Publish taking noticeably longer, or a genuinely broken page still incorrectly getting published.
Starting a new site by pasting a URL to redesign now always shows a clickable next step, and it survives a page refresh. **Where:** New Site → planning chat → first message like "Redesign https://example.com (a …)" **How to test:** Create a fresh site, send a redesign-from-URL as the first message, wait for the reply. You should see the "Is this your site?" confirm card (or an intake form), never just text with nothing to click. Reload the page — the card is still there. **Watch for:** A first-turn assistant reply that shows instructional text but no card or buttons, or a card that disappears after refresh.
When you redesign an existing site, the planner now mirrors that site's actual sections and page structure instead of dropping in a generic template — and it waits for the analysis to finish before drafting the plan, so the plan is grounded in real content. **Where:** New-site chat (planning flow) → paste a site URL and choose to redesign it. **How to test:** Paste a real site URL and pick the redesign path. The plan should recognizably follow the source's section order and page structure, and the planner should hold off until the site analysis has landed rather than proposing a plan immediately. The intake questions should skip things the analysis already captured (style, location, structure). **Watch for:** A generic vertical template replacing the source's layout; the plan drafting before analysis completes; re-asking for details the scrape already established. On a thin/single-page-app site that can't be read well, it should ask for structure rather than inventing sections.
Adapting a gallery template to your content is now more reliable and no longer blocks the editor. **Where:** Design view → Template Gallery → "Generate Adapted Preview" **How to test:** 1. Open a site's Design view and adapt a template from the gallery. 2. Confirm you get a small "Adapting…" progress chip near the top and can keep editing other designs while it runs. 3. When it finishes, the new design (e.g. D3) appears and its preview shows that design — not a previous one — without needing a refresh. 4. Check the adapted design's hero and feature sections render real images, and that no section has dark text sitting on a dark background. **Watch for:** a newly adapted design briefly showing another variation's layout; empty/black image areas where a photo should be; low-contrast headings/labels on dark sections; the adaptation trapping you behind a full-screen "Almost there…" wait.
On stores that don't sell in dollars, the product page showed the right currency but the cart, totals and checkout buttons still showed a dollar sign — same number, wrong symbol. Every money value on the storefront now uses your store currency. **Where:** Your live store — product page, cart drawer, floating cart badge, discount line, and the Pay Now / Place Order buttons. Course listings too. **How to test:** Set your store currency to something other than USD (Settings → Payments), open your published store, add a product to the cart and open the cart drawer. The symbol next to every amount should match the one on the product page. **Watch for:** Any remaining dollar sign next to a non-USD amount, especially on discount badges and the checkout button label.
The buyer-facing cart now displays configured tax (e.g. GST) and shipping as their own lines, so the total shown matches what's charged at the payment gateway. **Where:** Your published store → cart (`/cart`) and the slide-out cart drawer **How to test:** Configure a tax rate and shipping rate on your store, add a product to the cart, and open the cart. The summary should list Subtotal, Shipping, Tax, and a Total that adds them up — instead of only subtotal minus discount. **Watch for:** Carts with legacy (non-catalog) products keep the simple subtotal-only summary; shipping shows "Calculated at checkout" until a delivery address is entered on the checkout page.
Importing items from a CSV now lets you decide up front whether they arrive as drafts or go live on your site right away — the same choice the Shopify import already offered. **Where:** Site editor → Content → your collection (e.g. Products) → Import items → CSV **How to test:** Upload a CSV, map your columns, then set "Imported items land as" to "Published (live immediately)" and import. The new items should appear on your storefront listing page (e.g. All Products) after publishing. Repeat with "Draft (review first)" and confirm they stay hidden until you publish them from the items list. **Watch for:** Items imported as drafts are intentionally hidden from the live site — the dialog now says so. If published items still don't appear on a listing page, check that they show a green "Published" badge in the items table.
Fixed a contact record bug where chat conversations from a shared widget could show up under the wrong site, cart buyers with no form submission or booking were missing from the Contacts list, and opening the Product feeds card no longer silently creates and enables a public feed — enabling feeds is now an explicit action. **Where:** Client portal → Contacts, and Client portal → Settings → Product feeds **How to test:** - Open a contact's detail view and confirm only conversations tied to this site's widgets appear - Complete a checkout with no prior form/booking and confirm the buyer shows up under Contacts - Open Settings → Product feeds on a site that has never enabled feeds and confirm it shows "not configured" instead of an active feed URL, until you explicitly enable it **Watch for:** Contacts list missing buyers, feed URLs appearing enabled without an explicit opt-in, or a contact showing another site's chat history.
Deleting a design from the variations gallery could remove a neighbouring design instead, leaving the one you deleted still on screen. **Where:** Site builder → Design variations gallery → delete a design card **How to test:** On a site with several designs (especially one where a generation was interrupted at some point), delete a design and confirm that exact design disappears and the others are untouched. Refresh to confirm it stayed deleted. **Watch for:** A different design vanishing, the deleted design reappearing after refresh, or the design counter disagreeing with the number of cards shown.
A small number of older designs were saved in a broken form and showed "preview can't be displayed" instead of the design. Opening one of these now automatically rebuilds it from the saved data, so the design appears normally. **Where:** Site editor → design switcher → select the affected design **How to test:** Open a design that previously showed a preview error. It should load and render every section. Switch away and back — the repair is saved, so it stays fixed. **Watch for:** Sections rendering empty, a design that still shows the preview error after a reload, or a switch that hangs on "Repairing saved design...".
Publishing could fail with "pages could not be prepared for publishing" when a site's starting navigation or footer data was blank — it was overwriting your saved edits (like a custom header button label) with nothing. Your saved content now always wins over a blank starting value. **Where:** Site editor → Publish **How to test:** - Open a site whose header button (navigation CTA) has custom text - Publish the site - Confirm publish succeeds and the header button still shows your custom text on the live site **Watch for:** "N pages could not be prepared for publishing" errors, or a header/footer button reverting to blank or default text after publishing.
New sites wire the header button to the navigation CTA you can edit, instead of baking in a fixed label that ignored your changes. **Where:** Site editor → Pages → header section, and the navigation settings where the CTA label lives. **How to test:** Generate a new site, open the navigation settings, change the call-to-action text, and reload the preview — the header button should show your new wording. **Watch for:** Older sites generated before this change may still show a fixed header button; regenerate the header or edit it directly to pick up the new wiring.
When you ask the design assistant to create a new variation, the chat now shows a live "working" indicator for the whole build instead of a one-off message that looked like nothing was happening. **Where:** Site editor → Design surface → chat assistant (any "create a new variation" prompt or suggested-action chip) **How to test:** Open a design with variations, type a change that the assistant offers to build as a new variation (or click a suggested "Create variation" chip), and confirm a spinner/progress line stays visible at the bottom of the chat until the new variation is ready. **Watch for:** The indicator should appear immediately on confirm and clear exactly when the variation finishes generating — not before.
Buyers and leads are now one record, and store owners get a prioritized "what needs doing" list the moment they open Home. **Where:** Site editor → Home (for stores) and Customers / Leads → Inbox (any site) **How to test:** 1. Open a contact from either the Customers view or Leads → Inbox → Contacts. You now see one card with the person's lifetime value, order history, form submissions, chat conversations, notes, and activity — no matter which list you opened it from. A badge marks them as a Customer or a Lead. 2. On a store site's Home, an "Action needed" panel sits at the top listing concrete jobs: unfulfilled paid orders, cash-on-delivery payments to collect, return requests to review, and unread messages — each with a count and a one-click link to the right screen. When there's nothing to do, it shows a calm "all caught up" line. 3. If a publish fails, the top of Home says so plainly with the reason and a "Try again" button — never a silent "Draft". **Watch for:** the order/COD/returns counts should match the Orders screen; clicking a row should land on the matching filtered tab; non-store sites' Home should look unchanged except for the clearer failed-publish message.
Every merchant price field now shows the currency symbol and a live "= ₹4,999.00 on your storefront" preview as you type, so it's obvious whether you're entering ₹4,999 or a much larger amount. **Where:** Product editor price, variant grid (bulk-apply + column), discount codes, shipping rates, and Cash-on-Delivery limits. **How to test:** Open a product in your store, edit the Price — as you type 4999 you'll see "= ₹4,999.00". Type 499900 and the preview immediately reads "= ₹4,99,900.00", making an accidental extra-zeros entry easy to catch. **Watch for:** The number you enter is always in whole currency units (rupees/dollars), never paise/cents — the preview confirms the amount.
Shipping rates now have proper form fields for the common cases — no more hand-typing JSON. **Where:** Site editor → Settings → Shipping → open a zone → Add / edit a rate **How to test:** - Flat rate: set Price to 0 and "Order subtotal at least" to 2000 to offer free shipping over 2,000. - Price bands: pick "Price bands (by order total)" and add rows like "0 to 50 → charge 5", "50 to blank → charge 0". - Weight bands: pick "Weight bands (by cart weight)" and enter gram ranges with a charge each. - Power users can still click "Advanced: edit JSON" to edit the raw conditions object. **Watch for:** the simple form and the Advanced JSON view should describe the same rate — toggling between them must not lose your bands or thresholds.
Currency settings showed the wrong base currency for stores priced outside US dollars, and gave you no way to correct it. The base currency now reflects your actual store currency, and you can change it yourself. **Where:** Site editor → Settings → Currency **How to test:** Open a store priced in rupees (or euros, dirhams, pounds). The base currency should read INR rather than USD. Change it with the dropdown, confirm the warning, and check that the storefront, quotes and checkout all follow. **Watch for:** Changing the base currency relabels existing prices instead of converting them — 1,499 stays 1,499. Re-check your product prices after switching. Cached exchange rates are refetched against the new base, so give the rates table a moment to repopulate.
If your site has a store, the left menu is now built around running your shop: Orders, Products, and Customers are right there instead of buried inside other tabs, and Orders shows a badge for anything still waiting to be fulfilled. **Where:** Open any store site in Mission Control — the left rail now leads with Orders, Products, and Customers. Everything else (Leads inbox, other features) is a click away under "More." **How to test:** Open a store site, click Orders (see the unfulfilled badge), Products (your catalog), and Customers (your buyer list). Then open Settings — all store setup now lives in one "Store" section: Payments (incl. cash on delivery), Shipping & Returns, Tax/GST, Currency, Discounts, Fulfillment, and Product Feeds, with a setup-progress checklist at the top. **Watch for:** Non-store sites are unchanged. Old links to any of these screens still work.
Gallery template cards were showing only a static image — the hover scroll-through preview never started. Hovering a template card now glides through the full page design as intended. **Where:** Templates gallery (/templates), the template picker in the site builder, and template suggestion cards **How to test:** Open /templates, hover any template card — the preview should scroll slowly down the page design and ease back when you move the mouse away **Watch for:** Cards staying frozen on hover; previews that jump instead of gliding; scrolling continuing after the mouse leaves
When you tap an image on the canvas and ask the voice assistant to change it, it now acts on that exact image instead of asking you to describe it. **Where:** Site editor → Design view → voice mode (microphone button) **How to test:** Start voice mode, tap an image in the editor canvas, then say "replace this image". The assistant should change the image you tapped without asking which one you mean. Try it with a non-hero image and with several images selected at once. **Watch for:** The assistant asking "which image?" after you've already tapped one, or the change landing on the hero image instead of the one you selected. Selection resets after each change, so re-tap before the next request.
On the Mission Control screen (where you manage pages rather than edit the canvas), voice mode no longer asks you to "tap" an element that can't be tapped there. It now asks you to describe the image or element you mean and acts on that. **Where:** Site editor → Mission Control (Home / Pages) → voice mode (microphone button) **How to test:** From Mission Control, start voice mode and say "replace the hero image". The assistant should ask you to describe which image (or accept your description) and make the change — it should never tell you to tap or select an element, because there is nothing to tap on that screen. The canvas Design view is unaffected: tapping still targets the exact element. **Watch for:** The assistant asking you to "tap" or "select" an element while on Mission Control, or looping without ever making the change.
Clicking "Add page" and continuing through the page planner used to silently do nothing if you were in the full-canvas editor. It now opens the Page Planner correctly no matter where you started from. **Where:** Site editor → Pages → Add page **How to test:** From the full-page (non-Mission-Control) editor view, click "Add page", fill in the page purpose, and click Continue. The Page Planner should open and let you finish creating the page. **Watch for:** "Add page" quietly closing with no new page and no error message.
Rescheduling a booking with "Override availability" now updates the card to the correct new time range immediately, instead of pairing the new start time with a stale old end time until you reload. **Where:** Mission Control → Bookings tab → pencil "Edit date/time" on a booking → check "Override availability" → set a new time → Save changes. **How to test:** On a site with no availability rules configured, edit a pending booking (e.g. 11:15 AM – 11:45 AM), enable "Override availability", change the start to 3:30 PM, and save without reloading. The card should immediately read "3:30 PM – 4:00 PM" (the 30-minute duration is preserved). **Watch for:** A card showing an end time earlier than the start (e.g. "3:30 PM – 11:45 AM"), or the range only correcting itself after a manual page reload.
The "Service Requested" dropdown on booking/appointment pages was showing up empty and required, which meant customers couldn't submit a booking at all. It now automatically fills in from the services you've already added to your site. **Where:** Public site → Booking/appointment page → "Service Requested" field **How to test:** Open a published or previewed booking page for a site that has services listed under Services. The "Service Requested" dropdown should list those services, and submitting the booking form should work. **Watch for:** A booking page where "Service Requested" is still empty even though the site has services configured.
Clicking "Request Review" on a completed booking now shows a clear message when Google review requests aren't set up yet, instead of silently doing nothing. **Where:** Mission Control > Features > Manage bookings > Bookings tab, on a completed booking card. **How to test:** On a site with no Google review automation configured, mark a booking complete and click "Request Review" — you should see a message prompting you to set up Google review requests in Automation settings. With review requests configured, clicking it shows a confirmation that the request was sent. **Watch for:** No feedback at all after clicking, or an error that mentions internal terms instead of pointing you to Automation settings.
The template gallery can now be filtered by look — mood, light or dark, dominant color, typography, whitespace, and motion — and every template shows its Design DNA plus a row of similar looks. **Where:** Templates gallery (`/templates`) and the "Browse all templates" picker inside the site builder chat. There's also a new "Start from a design" button on the first-time builder screen. **How to test:** 1. Open `/templates`. Above the grid, use the new "Look & feel" filters (style chips, Light/Dark, color swatches, typography, whitespace, motion) and confirm the grid narrows. 2. Click a template card's "View details" to open its detail view. Confirm the "This design's DNA" panel shows a color palette, font pairing, style keywords, and feel, and that a "More with this look" row appears when there are similar designs. Click a similar thumbnail — it swaps the selection. 3. In the site builder chat empty state, click "Start from a design" — the template gallery opens with the same look filters. Confirm the preview pane shows the DNA panel and similar-looks row. **Watch for:** Templates that haven't been analyzed yet must still appear when no look filter is active, and look-filter options that no template matches should be hidden — the whole filter bar should disappear if nothing has been analyzed. The DNA panel and similar-looks row should quietly hide (not error) when there's no data.
Saving a site's chat widget configuration for the first time no longer fails with a "Failed to create widget" error. **Where:** Site editor > Leads > Automation > Settings > Widget Setup **How to test:** Open Widget Setup for a site that has never had a chat widget, adjust any values, and click Save Changes. The widget config should save and the Deploy tab should generate embed code. **Watch for:** A red error banner on save, or the settings not persisting after a page reload.
Fixed a data-loss bug where a new product/content item could silently drop its Description (or split its fields across a duplicate row) if you added an image or made another edit within a second of typing. **Where:** Site editor → Features → Content → open any collection → New item (Content tab) **How to test:** Create a new item, type a Description, then immediately paste an image URL + Enter (or star an image) before the "Edits autosave." indicator settles. Reload the page and reopen the list — the item should appear once, with both the description and the image intact. **Watch for:** Duplicate rows for the same item, an item whose Description column shows "—" after reload, or fields landing on different copies of the same item.
Double-clicking an existing item's title in a content collection now reliably opens the full item editor again, so you can get back to images, variants, size guide, SEO, and settings after closing it once. **Where:** Mission Control > Features > Content > any collection (Products, Menu Items, Team, etc.) **How to test:** Open a collection with saved items, double-click an item's title — the full editor drawer should open (single-click still starts an inline rename). **Watch for:** A double-click that only selects text in the rename box instead of opening the editor.
Adding a new page that includes a payment button no longer strips it out — the button now shows up and works as expected instead of silently vanishing or crashing the page. **Where:** Site editor → Pages → Add page (any page with a payment/checkout button) **How to test:** Add a new payment-collection page to a site. Open it and confirm the payment button renders and is clickable, instead of a "block not available" message or a blank/crashed page. **Watch for:** Any newly added page whose payment or other platform-provided button is missing or replaced with a placeholder.
When you add a page that collects a payment (for example "pay your outstanding balance"), the Pay Now button now starts a real checkout through your configured payment provider instead of opening a generic contact form — and the page no longer makes security or compliance claims it can't back up. **Where:** Site editor → page switcher → Add page → describe a page where customers pay. **How to test:** Add a "pay your balance" style page, generate it, then open the new page and click the Pay / Checkout button — it should start a payment link to your configured provider (Settings → Payments), not open an appointment/contact form. **Watch for:** A "Pay Now" button that opens a lead form instead of checkout, or fabricated badges like "256-Bit SSL Encryption" / "HIPAA Compliant Processing" appearing when no such guarantee exists.
On AI-generated payment pages, the main "Pay Your Balance" button sometimes linked to the appointment-booking page instead of the on-page payment section — so visitors got sent away from the only place they could actually pay. The generator now points the payment CTA at the on-page pay button, and a save-time safeguard corrects any that still slip through. **Where:** Any generated payment-collection page (e.g. a "pay your balance / pay your invoice" page). **How to test:** Generate a site with a payment/pay-balance page, open it, and click the hero "Pay" button — it should scroll down to the payment button on the same page, not navigate to the booking/contact page. **Watch for:** A separate, clearly-labelled "Book an appointment" link may still point at the booking page — only the payment CTA is redirected to the on-page pay section.
On sites that reuse a single shared hero component across pages, an AI-generated payment page's "Pay Now" hero button could still link to the appointment-booking page instead of scrolling to the on-page payment section — because the shared hero ignored the per-page link override the page tried to pass it. Generated hero components now read that override, so the payment CTA goes where it should. **Where:** Any generated payment-collection page (e.g. a "pay your balance / pay your invoice" page) whose hero is a shared component. **How to test:** Generate a site with a payment/pay-balance page, open it, and click the hero "Pay" button — it should scroll down to the on-page payment button, not navigate to the booking/contact page. **Watch for:** The homepage's hero button is unchanged — it still points at its normal booking/contact link; only pages that explicitly pass a different CTA destination are affected.
Saving a payment provider as active now automatically deactivates any other active provider, matching what the Settings panel already promised. **Where:** Site editor → Settings → Payments **How to test:** Configure and save Stripe (it becomes Active), then configure and save PayPal. Only PayPal should show the "Active" badge now; Stripe flips to "Configured". Reload to confirm exactly one provider is Active. **Watch for:** Two "Active" badges after saving a second provider, or a provider you just deactivated silently reactivating.
Rescheduling an appointment now keeps its original length instead of collapsing it to a zero-minute slot. **Where:** Site editor → Bookings → Edit date/time **How to test:** Take a booking that runs, say, 9:00–9:30. Edit its date/time — including with "Override availability" turned on for sites that have no availability rules yet — move it to a new time, and save. The rescheduled booking should still be 30 minutes long (e.g. 10:00–10:30), not 10:00–10:00. **Watch for:** A rescheduled booking whose start and end times are identical, or duration-aware views showing the appointment as zero-length.
Sites with online scheduling or booking requests now show a "Manage bookings" button that opens the appointments dashboard, so you can view, confirm, complete, cancel, or reschedule the bookings customers make. **Where:** Mission Control → Features. On an active "Online Scheduling" or "Booking Requests" feature, click "Manage bookings" (booking-request forms show it inside the Forms & Lead Capture picker). **How to test:** Activate a booking feature on a site, open Features, click "Manage bookings", and confirm the bookings list loads with view/confirm/complete/cancel/reschedule actions. **Watch for:** The action should appear alongside (not replace) "Manage Items" / "Edit form"; the bookings dashboard lives under the Bookings tab.
Your store can now feed its products straight into Instagram & Facebook Shopping and Google Shopping — kept up to date automatically — plus export a Shopify-ready catalog file. **Where:** Site editor → Growth → Marketing → Strategy (the "Product feeds" card appears for stores with products) **How to test:** 1. Open a site that has products and go to Growth → Marketing → Strategy. 2. In the "Product feeds" card, copy your feed link. Optionally set a brand name and a Google product category, then Save. 3. Paste the link into Meta Commerce Manager (Data sources → Add products → Scheduled feed) or Google Merchant Center (Products → Feeds → Add feed → Scheduled fetch). 4. Click "Download Shopify CSV" to get a Shopify-format export of the catalog. 5. Use "New link" to rotate the feed link if it was ever shared by mistake. **Watch for:** The feed only lists published products from a published site. Products on sale should show both the original and sale price. Product variants (size/colour) each appear as their own item grouped under the parent product.
Clicking Add to Cart on a published product detail page showed "Product is missing an id — cannot add to cart" and the cart stayed empty, blocking the whole buyer flow. Product pages now carry the identity of the product they were built from, so items add to the cart correctly. **Where:** Your published storefront — any product detail page, plus the same page in the editor preview. **How to test:** Publish a site that has products, open a product page, choose any options, and click Add to Cart. The cart count should increase and the item should appear in the cart and carry through to checkout. **Watch for:** Existing published sites need to be republished once to pick this up — the product page is built at publish time. If a product page still shows the error, republish the site and reload.
Every commerce block on a published site — cart drawer, mini-cart, checkout, funnel checkout/upsell, pay and subscribe buttons, booking deposits and digital-product buy buttons — now displays prices in the store's own currency instead of always defaulting to US dollars. **Where:** Any published storefront using cart/checkout/payment components on a non-USD store (INR, EUR, GBP, etc.). **How to test:** Publish a site whose currency is not USD, add a product to the cart, and open the cart/checkout — prices should render with the correct currency symbol. **Watch for:** A price showing "$" (or no symbol at all) on a non-USD store, or two different currencies inside the same checkout summary box.
Returning customers who are signed in to a store no longer have to retype their details at checkout — their name, email, and phone are filled in automatically, and the shipping address defaults to the one from their most recent order. **Where:** The checkout page of any published store with customer accounts enabled. **How to test:** Sign in to a published store as a customer who has ordered before, add an item to the cart, and open checkout. The contact step shows a "Welcome back" note with your details filled in; the shipping step defaults to your last order's address. Every field stays fully editable, and guests (not signed in) see the usual empty form. **Watch for:** Published sites need a republish to pick up the new checkout behavior. Anything the customer starts typing must never be overwritten when the prefill lands. Guests and stores without customer accounts should be unchanged.
Running Fix All in the Responsive Check panel now shows one consistent progress count, and fix status messages no longer hide behind the top toolbar. **Where:** Site editor → design view → Responsive Check panel → Fix All **How to test:** Open a site with responsive issues spanning more than one section file, click Fix All, and watch the header/progress bar. The counter now reads a single running "X of total" (e.g. 3 of 17) instead of one number in the message and a different one in the bar. Any "Fixed" / "Could not fix" toast appears just below the toolbar rather than overlapping the design tabs. **Watch for:** Progress counts that restart per section, or a status toast clipped by the top toolbar.
When a page can't be prepared during publishing, you now see a short, plain-language message naming the affected page instead of a raw technical error. **Where:** Mission Control → the "publish attempt failed" banner, and the retry dialog. **How to test:** Trigger a publish that fails on a page; confirm the banner and the retry dialog show a readable message (e.g. "1 page could not be prepared for publishing: /contact") with a Try Again action — not a stack trace or internal component name. **Watch for:** Any raw error text, stack traces, or internal names still leaking into the banner or dialog.
The design-variation tabs at the top of the editor now let you delete a design directly from the hover card, alongside the existing pin option. **Where:** Site editor - Design view - hover any design tab (D1, D2, ...) **How to test:** Hover a non-original design tab. The hover card shows both the pin ("Add to board") and a trash icon. Click the trash icon, confirm, and the design is removed. **Watch for:** The original/base design must not offer a delete option; deleting asks for confirmation before removing.
The hover card on the design tabs (D1, D2, …) no longer disappears while you are reaching for the pin or delete buttons — it now stays open as long as your pointer is on it and only closes once you move away. **Where:** Site editor - Design view - hover any design tab **How to test:** Hover a design tab, pause to read the caption, then move down to click the pin ("Add to board") or the trash icon. The card should remain visible the whole time and only dismiss after you leave it. **Watch for:** An abandoned card (pointer moved off without the card noticing) must still auto-dismiss so it never lingers over the canvas.
Some sites showed "The Faq section couldn't be displayed here" instead of the actual FAQ content — that's now fixed. **Where:** Any published or previewed site with a FAQ / Help Center section. **How to test:** - Open a site whose homepage includes a FAQ section. - Confirm the FAQ content (questions, search box, category filters) renders normally instead of an error placeholder. **Watch for:** FAQ sections that previously failed to render should now show their questions and answers; search and category filtering within the section should still work.
Fixed a bug where a FAQ section could show a blank/broken area instead of your questions and answers. **Where:** Any published or previewed site with a FAQ / Help section that includes a search box or category filter. **How to test:** Open a site whose FAQ section has a search bar, view it in the design preview and after publishing — the questions render and the search box works instead of the section disappearing. **Watch for:** FAQ sections that appear empty, or a preview error mentioning a help/search component.
FAQ and Help Center sections now reliably show their questions even when the site's content was stored under a differently-named field than the section expected. **Where:** Site Editor → any page with an FAQ / Help Center section **How to test:** Open a site whose FAQ section previously appeared blank (or reload/refine one). The questions and answers now display instead of an empty or errored section. **Watch for:** A truly content-free FAQ (a site that genuinely never had questions written) will still show an empty state by design — regenerate or refine that section to populate it.
Newly generated multi-page sites no longer ship menu links that lead to a "page not found" error. **Where:** Site header/navigation on generated sites (e.g. Shop, About, Contact menu items) **How to test:** Generate a new multi-page site and click each menu item — every link now lands on a real page instead of a 404. **Watch for:** A menu that used to show links to pages the builder never created (Shop, About, Contact) — those broken links are now removed so the menu only shows pages that actually exist.
Show the right photos for the color a shopper picks, and add a size guide to any product — no rebuild required. **Where:** Site editor → your store collection (e.g. Products) → open an item → "Content" tab for images, "Size guide" tab for the guide. On the live product page, images now follow the selected option and a "Size guide" link sits by the size picker. **How to test:** 1. Open a product that has variant options (e.g. a Color axis with values, set up under the "Variants" tab). 2. On the "Content" tab, upload a few images. Each image now has a small "tag to option" dropdown — tag some images to a specific color (e.g. "Navy"), leave others as "All options". 3. Open the "Size guide" tab. Build a table (add rows/columns like Size / Bust / Waist) or switch to "Text" for a written guide. Optionally click "Use as default for all products" to reuse it across the whole collection. 4. Publish, open the product page, and change the color option — the gallery should lead with the images tagged to that color, and general shots follow. Click "Size guide" to see the modal. **Watch for:** - If no image is tagged to the selected option, the gallery should still show your general images (never go blank). - Color options render as color swatches only when the value is a real color name (e.g. "navy"); custom names like "Emerald" stay as text buttons. - A product's own size guide always wins over the collection default.
Customers can now request a return on an order, and you can approve, receive, and refund it — all from your store's Orders area. **Where:** Site editor → Orders → Returns tab (approve/reject, mark received with per-item restock, issue refund). Set your policy in Settings → Shipping → "Returns & refunds" (return window, whether refunds include shipping, and your ship-back address). Customers request returns from their account: an order shows a "Returns" link with an item picker and a status timeline. **How to test:** 1. In Settings → Shipping → Returns & refunds, set a return window (e.g. 7 days), choose whether refunds include shipping, and fill in your ship-back address. Save. 2. On your published store, place and pay for an order, then (in the editor) mark it fulfilled. 3. As the customer, open your account → the order → Returns → pick item(s), quantity, and a reason, and submit. 4. In the editor, open Orders → Returns → approve it (add ship-back instructions), then "Mark received" (untick any damaged items so they don't go back into stock), then "Issue refund" — the amount is pre-filled with returned item value + tax (shipping per your policy), and you can edit it. 5. For a cash-on-delivery order there's no online gateway, so the refund is recorded as a manual refund with a reference note you enter. **Watch for:** You can't return more of an item than was ordered (minus anything already returned), and requests outside the return window are declined. Restocked items are added back to inventory; damaged items you leave unchecked are not. A full refund moves the order to Refunded and revokes any digital download links; a partial refund shows as Partially Refunded. Exchanges aren't supported yet — the customer copy suggests refunding and reordering.
You can now turn on Cash on Delivery even if you haven't connected a payment provider yet, so you can start taking orders while your gateway paperwork is still in progress. **Where:** Site editor → Settings → Payments → Cash on Delivery **How to test:** On a store with no payment provider configured, open Settings → Payments, toggle Cash on Delivery on, set optional min/max order amounts, and save — it saves without asking you to add a provider first. Then on the published storefront, add an item and check out: the only payment option shown is "Cash on Delivery", and placing the order succeeds. Add a provider later and both "Pay online" and "Cash on Delivery" appear. **Watch for:** With no provider connected, "Pay online" should never appear at checkout; the prepaid path should still show a clear message if someone tries to pay online without a gateway.
Your store's sales now show up right inside the dashboard — no external analytics tool needed. **Where:** Site editor → Analytics (a new Store Revenue section appears for stores) **How to test:** Open a site that has products or a cart, go to Analytics, and scroll to Store Revenue. Pick a date range (7 / 30 / 90 days) and confirm the net revenue, orders, average order value, cash-on-delivery outstanding, and refunds tiles update, along with the revenue-over-time chart, top products, discount usage, and conversion row. **Watch for:** Money should always show in your store's own currency; stores selling in more than one currency are listed separately (no fake conversion). Brochure sites without a store should not see the section at all.
Stores set up outside the US were showing prices with a dollar sign — an Indian store's ₹2,499 product could appear as "$2,499.00" on the product page while the same product showed a rupee amount on the listing page. Your store's currency now follows through to every price a shopper sees, and to what they're actually charged at checkout. **Where:** Any published store — product pages, category/collection listings, cart and checkout. **How to test:** Open a store whose business currency isn't USD, then view a product page and the listing page it links from. Both should show the same currency symbol for the same product, and the amount at checkout should match what's displayed. **Watch for:** A price still showing the wrong symbol after publishing — republish the site so the store currency is baked into the new pages. If a product row was given its own currency, that still wins over the store default. Stores with no currency set continue to show USD.
Gallery template cards come alive: hover (or focus) a card and its preview smoothly scrolls through the entire page, so you can see the full design without opening it. It falls back to the familiar static preview wherever a full-page capture isn't available yet, so nothing you rely on changes. **Where:** Public Templates gallery (`/templates`); the "Browse templates" gallery and matching-template suggestions inside the new-site builder; the design picker. **How to test:** Open `/templates` and hover a card — the preview should scroll down through the design and ease back when you move away. Try the same on the template suggestions and the "Browse templates" gallery in the site builder. On a phone, scroll a card into view and it plays one slow pass on its own. **Watch for:** Cards with no full-page preview should look and behave exactly as before (static image). With "reduce motion" enabled in your OS, cards should not scroll — they gently crossfade instead. Nothing should jump or shift layout, and hovering many cards at once should stay smooth.
Applying a Template Gallery design to your site no longer fails with "Gallery template not found" for the newest templates. **Where:** Site editor → Template Gallery → click any template to preview/apply it with your content **How to test:** Open the Template Gallery, search for a category (e.g. "Technology"), click one of the recently added templates, and confirm it adapts into a new design instead of showing the "Adaptation failed" error. **Watch for:** Any remaining templates that still show "Adaptation failed" — they should now start a background adaptation (progress bar), not reject immediately.
Your store's currency is now the single source of truth for what customers see and what they're charged, and the payment settings screen tells you immediately if your gateway is set to a different one. **Where:** Site editor → Settings → Payments **How to test:** Open Payments and expand any provider. The currency picker now starts on your store's own currency instead of always defaulting to US Dollar, and shows "Matches your store currency" underneath. Change it to a different currency and a warning appears explaining that amounts aren't converted — save, and the warning stays until you resolve it. **Watch for:** A store whose prices are in one currency but whose gateway is set to another. Amounts are never converted between the two, so a 1,000 order in your store's currency would be charged as 1,000 of the gateway's currency. Your storefront keeps displaying and charging your store's currency, so the warning is telling you the gateway setting is the thing to fix. Also worth checking: funnel upsells now always charge in your store's currency, even on stores where the checkout previously fell back to US Dollar.
Shared design-board links now use the same neutral domains as site previews — your own preview domain when you've connected one, or the platform's shared domain otherwise — instead of the platform's app address. **Where:** Any client's Boards → open a board → Share panel → copy link (also the board link returned over the API/MCP). **How to test:** Share a board and copy the link. For an agency with a connected preview domain it should read like `preview.youragency.com/board/…`; otherwise it uses the shared neutral domain. Open the link logged out — the board should render, and votes/comments should still submit. **Watch for:** Boards shared before this change keep working at their old address too. If a copied link ever shows the platform app domain for an org with a connected preview domain, that's a regression.
White-label agencies can now add their own Google sign-in credentials to any site themselves, so their clients' customers see the agency's brand on the "Continue with Google" screen — no support ticket needed. **Where:** Dashboard → Organization → White-Label Branding → Customer sign-in branding → "Bring your own Google sign-in" **How to test:** 1. On a white-label-enabled organization, open the White-Label Branding page and scroll to "Customer sign-in branding". 2. In "Bring your own Google sign-in", pick a site and click Configure. 3. Follow the in-modal steps, copy the exact redirect URL(s) shown, register them in your Google Cloud OAuth client, then paste your Client ID and Client secret and save. 4. Confirm the site row now reads "Your brand", and that reopening shows the secret is never displayed back. 5. Use Remove to revert a site to the default sign-in. **Watch for:** the modal must show the redirect URI that matches the site's live sign-in host (your verified dashboard domain when connected, otherwise the shared host); saving must reject a malformed Client ID or secret with a clear message; a non-owner/admin or a non-white-label org must not be able to open or use the section.
Customers can now choose to pay in cash when their order arrives, instead of paying online at checkout. **Where:** Site editor → Settings → Payments → Cash on Delivery. Turn it on and (optionally) set a minimum and maximum order amount. New COD orders show up in Orders with a "COD — Awaiting Payment" badge. **How to test:** 1. In Settings → Payments, enable Cash on Delivery (a payment provider must already be configured) and Save. 2. On your published store, add a product to the cart and go to checkout. 3. On the Review step, pick "Cash on Delivery" and place the order — you land on the confirmation page showing the amount to pay on delivery (no online payment). 4. In the site editor, open Orders → the new order → "Mark payment collected" once you receive the cash (moves it to Paid), or "Cancel & restock" to cancel and return the items to stock. **Watch for:** COD should only appear at checkout when it's enabled and the cart total is within any min/max limits you set. Stock is reserved the moment the COD order is placed, and returned if you cancel it. The customer gets a confirmation email that states the amount due on delivery (not a payment receipt).
You can now create and manage promo codes for your storefront checkout directly from Settings — percentage or fixed-amount, with optional usage limits, minimum order and expiry. **Where:** Mission Control → Settings → Discounts **How to test:** Open Settings → Discounts, click "New code", enter a code (e.g. AERA10), pick Percentage, set the value, and Create. The code appears in the list with its usage count. Toggle Active/Inactive or delete from the same row. On your published storefront, enter the code at checkout to confirm it validates. **Watch for:** Duplicate code names are rejected (each code is unique per site); percentage codes are capped at 100%; expiry must be after the start date.
Importing a CSV into a collection like Products no longer fails with a confusing internal error — the importer now recognizes every collection shown in your Content settings. **Where:** Mission Control > Features > Content > (pick a collection) > Import > CSV upload **How to test:** Open a collection, click Import, upload a CSV, map the columns, and click Import — the rows are created and the dialog closes. **Watch for:** If a collection genuinely isn't set up yet, you now get a plain-language message telling you to add it in Content settings first, instead of a raw technical error.
The Currency, Tax, and Shipping settings sections existed but were hidden from the Settings sidebar and reset to General if you linked directly to them — they're now visible and reachable like any other setting. **Where:** Mission Control → Settings → Currency / Tax / Shipping **How to test:** - Open Mission Control → Settings and confirm Currency, Tax, and Shipping appear in the sidebar. - Click into each and confirm the section loads instead of bouncing back to General. **Watch for:** Settings sections that exist in code but are missing from the sidebar or reset on direct link.
Design Skills now work when applying a skill from a mobile device, and several rough edges in the skill picker were smoothed out — hover previews no longer flicker unexpectedly, other open panels no longer get closed by mistake, and error messages no longer show internal details. **Where:** Site editor → chat input → type @ for Design Skills (also available on mobile chat). **How to test:** - On a mobile-width browser window, open the site editor chat and apply a design skill — it should work instead of being unavailable. - Type @ in the chat, hover a skill to preview it, then move away — the preview should only trigger on deliberate hover, not while you're still typing. **Watch for:** Skill preview overlays interfering with other open panels, or raw error text appearing in toasts.
You can now save and apply named design directions ("skills") while editing your site. Type @ in the editor chat to pick a skill — four starter skills ship out of the box (Editorial Serif Luxe, Glass Depth, Cinematic Reveal, Warm Local Voice) — and hovering a visual skill instantly previews its palette and typography on your own site before you commit. Applying a skill runs a real AI restyle with full undo. You can also bottle a design you love: "Save design direction as a skill" on any design variation turns it into a reusable skill, and every skill is managed from the new Design Skills page in your dashboard. **Where:** Site editor → chat input → type @ (Design Skills section), or the + menu → "Apply a design skill". Management: Dashboard → Design Skills. Save-as-skill: design gallery → variation card action. **How to test:** Open a site with code in the editor, type @ in the chat, hover "Editorial Serif Luxe" (site preview should recolor/refont instantly and revert on mouse-out), select it (chip appears above the input), add "apply to the hero only" and send; after the AI applies, use Undo to revert. Then visit Dashboard → Design Skills and duplicate a starter skill. **Watch for:** Hover preview is a rough token preview (label says so) — gradients/textures don't retint until you apply. Copy-type skills can't be combined with a selected element yet (tooltip explains). If a clarifying question comes back, answering it should keep the skill active on the follow-up.
Opening a direct link to QR Codes or Engagement used to silently land you on Marketing Strategy or Leads instead — those links now open the correct view. **Where:** Mission Control — QR Codes (Marketing hub) and Engagement (Leads sub-nav), including links from the ⌘K command palette. **How to test:** - Open the ⌘K command palette and jump to "QR Codes" — the QR code manager should appear, not Marketing Strategy. - Do the same for "Engagement" — the Engagement view should appear, not the general Leads list. **Watch for:** Any deep link into Mission Control landing on the wrong tab.
A cleared or missing refund amount could be silently treated as a full refund by the payment provider, and Cash on Delivery orders could get stuck showing "paid" instead of "fulfilled" after collection. Both are now fixed, along with checkout correctly blocking submission when no payment method is configured. **Where:** Mission Control → Orders (refunds, COD orders) and your storefront's checkout. **How to test:** - Issue a partial refund on an order and confirm only that amount is refunded, not the full order. - Mark a COD order as collected after shipping and confirm it reaches "Fulfilled". - Try checking out on a store with no payment method enabled and confirm you're blocked with an explanation instead of a broken submit. **Watch for:** Refund amounts not matching what was entered, or COD orders stuck at "Paid" after collection.
When you pick an Inspirations design built for a different kind of business (say, an auto-repair design for your bakery), the copied site now replaces the industry-specific photos with ones that match what you do — alongside the copy rewrite. Same-industry picks keep the design's original photography, since it already fits. This also fixes a timing bug where edits syncing in the background could undo the tailoring right after the site was created. **Where:** Dashboard → Inspirations → "Use as base" → fill in a business from a different industry than the design **How to test:** 1. Pick a design from a clearly different vertical than your business (e.g. an auto-repair design) and fill in the form as a bakery. 2. After landing on the design page, the hero and section photos should show your industry, and the chat message should mention how many photos were swapped. 3. Repeat with a business in the SAME industry as the design — photos should stay exactly as the designer chose them. **Watch for:** - Logos, icons, and videos must never be swapped. - If no suitable stock photo is found for a spot, the original photo stays — never a broken image. - The copy rewrite must still land even if photo swapping fails.
Picking a design from the Inspirations gallery now opens a quick form — your business name, a one-line description, and one or two questions tailored to that design — and the copied site arrives already rewritten for your business instead of showing the template's placeholder content. The chat on the design page opens mid-conversation, ready to keep refining. **Where:** Dashboard → Inspirations → hover a design → "Use as base" **How to test:** 1. Open Dashboard → Inspirations and click "Use as base" on any design. 2. Fill in a business name and short description (e.g. "Mario's Trattoria — wood-fired pizza in Austin"), answer the design-specific questions, and submit. 3. You land on the design page with the preview visible and a "tailoring" progress note; within a minute the headlines, descriptions and section copy reflect your business, and the chat shows a welcome message summarizing what was set up. 4. Repeat with "Skip — just give me the template" — you should get the design exactly as-is, like before. **Watch for:** - Closing the form without submitting should create nothing (no new client or site rows). - If the rewrite fails, the site must still land normally with the original template copy — never an error screen. - Menus or listings backed by catalog data should keep their items intact (only headings/copy elsewhere change). - Designs approved before this release get their questions backfilled; a design with none still asks name + description.
After a publish that didn't complete, Mission Control no longer shows your site as a plain "Draft" — it now clearly flags the failure, explains why, and offers a one-click retry. **Where:** Mission Control → Overview (the site status badge under your business name) **How to test:** Open a site whose last publish failed. The badge reads "Publish failed" (or stays "Live" with a notice if a previous version is still up), a red panel shows the reason, and a "Try publishing again" button reopens the publish dialog. **Watch for:** A failed first publish must not link a live-site URL (there isn't one yet); a failed re-publish of an already-live site should keep the "Live" badge because the previous version is still serving.
When the AI assistant adds a brand-new section to a page, it now shows up in the preview and the Structure rail right away instead of silently staying hidden. **Where:** Site editor → assistant chat / "+ Add section" **How to test:** Open a page, use "+ Add section" (or ask the assistant to add a section like Testimonials). When it reports the change was applied, the new section should render in the preview and appear as a new row in the Structure rail — no reload required. **Watch for:** A section that the assistant says it "Applied" but that never appears; the new section rendering blank; the Structure rail count not increasing by one.
The internal "Ask AI" Platform Assistant bubble was leaking onto shareable site previews served on preview domains — it now stays on the dashboard only. **Where:** Any preview link (e.g. `preview.yourdomain.com/{site}/preview`, draft subdomains, agency preview domains) **How to test:** Open a shareable preview link for a site. Confirm the "Ask AI" / Platform Assistant bubble is NOT present. Then open the dashboard and confirm the bubble still appears as before. **Watch for:** The bubble missing on the real dashboard, or still showing on any preview/published-site host.
When you asked Refine for a detailed restyle or applied a design skill, some of those changes were being silently undone by a safety check meant to catch unrelated edits — the confirmation said "done" but the page looked unchanged. Refine now recognizes an intentional redesign and leaves the full result in place, and always tells you honestly when nothing actually changed. **Where:** Site Editor → Refine (detailed prompts, design skills). **How to test:** Ask Refine for a substantial visual change (e.g. "make this look more premium") — the resulting page should reflect the request, and the confirmation message should describe what changed. **Watch for:** A Refine confirmation that says success but the preview looks identical to before.
Design gallery thumbnails that failed to load now offer a one-click Retry instead of getting stuck. **Where:** Site editor → Design gallery (the grid of design variations) **How to test:** Open a site's design gallery. If a card ever shows "Preview unavailable" (or a broken thumbnail), a Retry button now appears — clicking it re-loads just that preview. Previews also auto-retry in the background after a transient load failure. **Watch for:** A card stuck on "Retrying…" with no recovery, or the Retry button missing when a preview genuinely failed.
When you start a site with a vague idea ("a consultancy, we want to make money"), the chat now spends a couple of turns understanding what your business actually is, who it's for, and what the site should cover — before showing the detailed intake form. If you ask it to brainstorm ("give me some directions"), it stays in idea-generation mode until you pick one. Clear ideas ("ecommerce store for shoes", "family lawyer in Austin") go straight to the form as before. The chat is also now honest when a website you point it at can't be reached — it says so immediately instead of pretending it read your site, and research about a same-named but different company can no longer influence your questions or content. **Where:** Client editor → new site → blueprint chat (first few turns) **How to test:** (1) Start a new site with "a consultancy, trying to make money" — expect 1-2 clarifying questions about the concept before any form. (2) Start with "ecommerce store for shoes" — expect the intake form right away. (3) Say "help me brainstorm what this site could be" — expect 2-4 direction options and no form until you choose. (4) Give it a dead/parked domain to rebuild — expect "I couldn't reach <domain>" instead of "I'll use your current site's content". **Watch for:** Clear pitches getting stuck in clarification questions (should never exceed 2 extra turns); the intake form never appearing (it must always arrive after at most 2-3 turns unless you're actively brainstorming); brainstorm mode triggering when the user didn't ask for ideas.
Choosing "Manage connections" from the "+" menu in the preview editor used to bounce you out to a settings page instead of opening the connections modal where you were. It now opens in place, matching the chat composer's behavior. **Where:** Site editor → preview → "+" menu → Manage connections. **How to test:** Open a site in the editor, click "+" in the preview toolbar, choose "Manage connections", and confirm a modal opens without navigating away. **Watch for:** The same "Manage connections" item in the chat composer should keep working as before.
Some AI models occasionally returned a design as one wrapped bundle instead of separate page files; when that happened, every section of the variation showed "Preview couldn't be displayed" instead of your design. The regenerate flow now recognizes and unpacks that bundle the same way the rest of the platform already does, so the design renders normally. **Where:** Design page — regenerating a variation. **How to test:** Trigger a regenerate on a design variation; the result should render normally rather than showing a render-failure message for every section. **Watch for:** Any variation still showing "Preview couldn't be displayed. Something in this design failed to render." after a regenerate.
When you add a page that repeats something your site already has, the planner now offers to make it a collection instead of another one-off page — your choice, never automatic. **Where:** Site editor → add a page (the plan card in the assistant chat / Page Planner) **How to test:** 1. Open a site that has a collection (e.g. Services) and ask to add a page that fits it, like "add a Physiotherapy page". On the plan card you'll see "Add Physiotherapy as a Services item" alongside "Create a custom page". Accepting adds it as an item. 2. On a site with several similar hand-made pages (e.g. three service pages), ask to add another. The card offers "Turn Services into a collection" — accepting creates the collection with an item for each, and leaves your existing pages in place so nothing is lost. 3. Dismiss the suggestion and it won't nag you again for that pattern this session; the normal custom-page flow continues. **Watch for:** The suggestion should only appear when the pages genuinely share a layout; pages that need different layouts should not be nudged. Converting must never delete your existing pages.
The editor's "+ Add section" button now opens a menu of ready-made section types instead of a blank prompt — pick one and the section is generated for you. **Where:** Site editor → left rail (page structure) → "+ Add section". **How to test:** 1. Open a site in the editor and look at the left rail's page structure. 2. Click "+ Add section" — a menu opens listing section types the current page does not already have (testimonials, FAQ, pricing, team, gallery, and more), ordered by what suits the business. 3. Click a type (e.g. Testimonials) — the assistant composes a request and generates that section, placed before the footer. 4. For types with layout options, click the small arrow on the row to preview layout thumbnails and pick one; the chosen layout is passed along to the generator. 5. Prefer to phrase it yourself? Use "Describe your own…" at the bottom for a free-text prompt (the previous behavior). **Watch for:** section types you already have should not appear in the menu; picking a type should show a normal "thinking" indicator and add the section to the current page.
Creating a campaign from a mixed prospect selection could silently drop the project association if the prospects didn't all belong to the exact same project. Campaign creation now uses the project shared by the whole selection consistently, and switching filters quickly in the prospects list no longer shows results from the filter you already moved away from. Adding prospects to a campaign also now surfaces the real error message if it fails, instead of a generic one. **Where:** Agency dashboard → Prospects and Campaigns → New Campaign. **How to test:** Select prospects from a single project and create a campaign — the campaign should retain that project. Switch quickly between prospect filters/scopes and confirm the list doesn't flash results from a filter you've already left. **Watch for:** A new campaign missing its expected project association, or the prospects list showing a stale/incorrect set after fast filter switching.
Agency prospect lists are now full projects — group prospects, see project members, search and filter your workspace, and archive projects you're done with, instead of one flat prospect list. **Where:** Dashboard → Agency → Prospects. **How to test:** Open Agency → Prospects, create a new project, add prospects to it, and confirm you can search, filter by active/archived, and see project membership. **Watch for:** Converting a prospect to a client should still work and now links back to the created client project from the prospect's quick actions.
Photos your site generates or backfills used to sometimes render with garbled, unreadable text or fake signage baked right into the image — now every photo slot (aside from screenshots and logos, where text is the point) is generated with an explicit "no text" instruction, and any backfilled photo is rewritten into a real scene description instead of a caption. **Where:** Any AI-generated photo on a generated site — hero images, feature photos, gallery shots, and any image added later to fill a missing slot. **How to test:** Generate a new site or trigger an image backfill on an existing one, then check the resulting photos for legible-looking but nonsensical text or signage baked into the image. **Watch for:** Screenshots and logo images intentionally still allow text — only photographic/scene imagery should be affected.
When you asked the AI to replace the images in one specific section, it could silently regenerate images elsewhere on the page (or report success while nothing changed) if that section had no replaceable photos. **Where:** Design editor, refinement chat **How to test:** Open a design, ask the AI to "replace the illustrations in the How it works section." If the section uses icons rather than photos, the AI now tells you that directly and suggests changing the icons instead — it will not regenerate images in other sections. **Watch for:** A scoped image request ("replace the images in the testimonials") should only ever affect that section.
The automatic code-repair pass used to sometimes report an extra "fix" that never happened, and in a rare case could copy one design variation's code into another empty variation slot. Both are fixed — auto-fix now reports only real fixes and never writes one variation's code over another. **Where:** Site editor → any screen that runs auto-fix on a site with multiple design variations **How to test:** Trigger auto-fix on a site with more than one variation (especially one where a variation has no code of its own yet), then check that the fix count matches the actual fixes shown and that each variation still shows its own design afterward **Watch for:** A variation's design suddenly looking identical to another variation, or the fix count in the auto-fix summary being higher than the number of fixes listed
Hovering over a block with multiple text fields used to show a count (e.g. "Click to edit 3 text fields here") that could disagree with how many fields the edit panel actually listed. The hint now just says "Click to edit the text fields here". **Where:** Site editor → hover over a section with grouped text (e.g. a heading with a subheading). **How to test:** Hover a multi-field text block and confirm the hint no longer shows a number. **Watch for:** N/A — purely a wording cleanup.
Switching between designs on a phone now shows the full design immediately — no more blank panel and description popup flashing for a few seconds first. **Where:** Site editor on mobile → the D1/D2/D3 design switcher above the preview. **How to test:** Open a site with multiple designs on your phone, keep the chat collapsed, and tap between D1, D2, D3. The new design should fill the screen right away. **Watch for:** A genuine result you're waiting on (e.g. a refinement finishing while the chat is closed) should still surface its status pill — only the design's own rationale/welcome blurb is suppressed on switch and first load.
The Content Manager in the site editor is now fully responsive on phones — it opens full-screen with the section picker collapsed as a searchable dropdown on top and each editable field stacked vertically below. **Where:** Site editor → Site → Pages → "Edit Content" (Content Manager) **How to test:** On a phone (or a narrow browser window under 768px), open a page's Content Manager. Confirm it fills the screen, the "Section ▾" dropdown at the top expands to a searchable section list, and the fields stack in a single column. **Watch for:** The search box placeholder should read "Search sections or text…" in full (previously it was cut off), and the desktop two-column / side-drawer layout should be unchanged.
Hovering a design tab (D1/D2/D3…) shows a small preview card — it could occasionally get stuck floating over the page until you hovered another tab. It now closes by itself after about 3 seconds, so it never lingers over your design. **Where:** Site editor → design tabs in the top toolbar (D1, D2, D3…) **How to test:** Hover a design tab and keep the mouse still — the preview card appears, then disappears on its own after ~3 seconds. Move off the tab and hover it again — the preview shows again. **Watch for:** The preview flickering (closing and instantly reopening) while the mouse stays on a tab, or the card refusing to reappear after moving away and hovering back. Pinning a design to a board from the hover card should still work — the card must stay open while the board picker is open.
Reordering sections from the editor's left rail previously failed with "page structure is out of sync" on modern multi-component sites (where a page is assembled from imported section components). It now reorders those pages correctly. **Where:** Site editor → left "Structure" rail → drag a section (or Alt+↑/↓). **How to test:** On a multi-section page, drag a section above/below another; the order updates and persists. Header/footer stay locked. **Watch for:** Pages with conditionally-rendered sections still fall back to the safe "Rescan" prompt rather than guessing.
Clicking a heading-and-subheading block in the editor now shows each piece of text as its own field instead of fusing them into one box. **Where:** Site editor → click a text block (e.g. a heading with a paragraph under it) → Properties panel **How to test:** 1. Open a site with a section that has a heading plus a supporting paragraph. 2. Click the block (not precisely on the heading — anywhere in the text column). 3. Confirm the panel lists the heading and the paragraph as separate, labeled inputs — each saving on its own — with an "Edit all fields in this section" link to widen scope. 4. Edit one and save; confirm only that piece changes. **Watch for:** A selection that still shows a single box combining two pieces of text; a heading edit that also overwrites the paragraph; clicking a whole section no longer showing its layout/section controls.
Clicking a block with multiple text fields on catalog-style content (restaurant menus, property listings, and similar) used to collapse back into one fused edit box instead of showing each field separately, because that content's values live outside the page blueprint. Those fields now resolve correctly and show as separate, editable entries. **Where:** Site editor → click a multi-field text block on a menu/listing/catalog section. **How to test:** Open a restaurant or real-estate site, click a menu item or listing block with multiple text pieces, and confirm each field is listed and editable separately. **Watch for:** The "Edit all fields in this section" fallback link should still appear and work when you want to widen the edit scope.
Draft previews on a site's own domain could throw a browser console error because they were incorrectly loading the platform's own app configuration file. Preview pages no longer reference it. **Where:** Any draft preview link, especially on a custom/site-host domain. **How to test:** Open a draft preview on a site-host URL and confirm no manifest-related error appears in the browser console. **Watch for:** Regular admin/app pages should be unaffected — only preview surfaces changed.
Some forms showed a red "Form config missing" banner that never went away, even after using auto-fix — caused by how the platform read the form's ID when the form's code had certain expressions before it. Forms now load correctly regardless. **Where:** Site editor → Forms tab, or any page with a form block. **How to test:** Open a site with a form that previously showed the "Form config missing" banner; confirm it now renders the form fields instead. **Watch for:** Forms that legitimately have no configuration should still show a real (not phantom) missing-config warning.
When a collection was auto-created from your site content (for example "Services" or "Menu Highlights"), its name could get pluralized twice, showing up as "Serviceses" or "MenuHighlightses" in the editor. Auto-generated collection names are now derived correctly the first time, so they read naturally. **Where:** Site editor → Collections, and anywhere a collection name is shown (page switcher, content panel, section labels). **How to test:** Create a site whose content includes an auto-generated collection (e.g. services or menu highlights) and confirm its name reads "Services" / "Menu Highlights", not a doubled plural like "Serviceses". **Watch for:** Any auto-generated collection name still showing a doubled "-es"/"-ses" suffix.
On shorter laptop screens, the editor's top bar could sit on top of the Collections manager's header and block clicks on its Close (X) button, leaving Escape or clicking the backdrop as the only way out. The Collections manager now always renders above the top bar, so Close works everywhere. **Where:** Site editor → Collections manager (opened from the page switcher, a collection-backed section, or the assistant panel's database icon). **How to test:** Open the Collections manager on a laptop-height window and click the Close (X) in its header — it should close immediately. **Watch for:** The Close button still being unresponsive, or the manager appearing behind other editor UI.
On some site-creation paths, videos you pasted or specified could be wrongly treated as unverified and removed from the generated site. Your provided videos are now correctly recognized and kept. **Where:** Creating a new site with a pasted or specified video. **How to test:** Start a new site referencing a specific hero/background video and confirm it appears in the generated result instead of being silently dropped. **Watch for:** Videos the AI invents on its own (not provided by you) should still be filtered out as before.
The editor's left-rail section list now labels structural regions by their role. Previously a footer whose first column heading was e.g. "SHOP" showed up in the rail as "Shop"; it now correctly reads "Footer" (and headers/navs read "Header"/"Navigation"). **Where:** Site editor → left "Structure" rail. **How to test:** Open a site whose footer has column headings (Shop/Support/Contact). The last rail row should read "Footer", not the first column's heading. **Watch for:** Regular content sections still take their name from their heading as before.
Managing collection items (products, categories, menu items) now opens a full-width Collections manager instead of a narrow side-panel tab. Every "Manage" action — on a collection in the page switcher, in a section's content panel, or via the database icon in the assistant header — opens the same manager, already focused on the collection you picked. **Where:** Site editor → page switcher (top of the left rail) → Manage icon on any collection; or click a collection-backed section → Manage; or the database icon in the assistant panel header. **How to test:** Open a catalog site (restaurant/pharmacy), click the page switcher, hover a collection row, click the Manage icon. The full-width manager should open focused on that collection; add or edit an item and close — the preview should refresh with the change. **Watch for:** the manager opening unscoped (first collection selected) when launched from a specific collection; preview not refreshing after edits; the old narrow "Catalog" tab reappearing in the assistant panel (it was removed).
When you paste a detailed brief, the intake now skips questions your pitch already answers, adds a "Global / Online-only" option for reach, and stops surfacing your own font/image/video links as "reference" cards. **Where:** Start a new site and paste a detailed prompt into the chat, then open the intake form. **How to test:** Paste a brief that states it's a global/online product with a clear tone (e.g. "premium, understated"). The form should NOT ask "what city are you based in?" or re-ask "how should it sound?", and pasted asset URLs should not appear as reference cards. **Watch for:** Thin one-line pitches should still get the full, thorough intake — suppression only kicks in when the pitch genuinely covers an axis.
The editor's left rail now lists every site element you've added (announcement bar, pop-ups, WhatsApp bubble, and more) so you can see, edit, remove, and control where each one appears — instead of only being able to add new ones. **Where:** Open a site in the editor. The left "Structure" rail has a "Site elements" section at the bottom. **How to test:** 1. Add an announcement bar from "Add element". 2. It now appears as a row with its name and an "All pages" badge. 3. Click the row to edit its settings. 4. Open a different page from the page switcher, then click the eye icon on the announcement bar row to hide it on just that page — the preview drops it there and keeps it on your other pages. 5. Use the "Show on…" control to choose All pages, all except certain pages, or only specific pages. 6. Click the ✕ to remove an element (with a confirm). **Watch for:** The cookie banner intentionally has no page controls — it always shows site-wide for compliance. Hiding an element on one page should never affect the others, and the editor preview should match what will publish.
On phones and tablets the site editor preview now behaves like a real preview — tapping or double-tapping just scrolls and interacts with your site instead of accidentally opening an inline editor. Opening the AI chat now fills the screen instead of squeezing into a cramped half-and-half split. **Where:** Site editor (mobile) — open a site, tap the pencil/"Full design editor", then tap around the preview or open the chat. **How to test:** On a phone (or a mobile browser emulator), open the editor, double-tap a heading in the preview — nothing should switch into edit mode. Tap the chat button — the chat should open near-fullscreen. **Watch for:** On desktop, double-click-to-edit and the right-click menu should still work exactly as before (only touch devices are affected).
Some generated designs shipped a fullscreen mobile menu with no way to close it — the only close control was the hamburger toggle, which the opaque menu painted over. The site now detects this and adds an always-visible close (X) button inside the menu, and new sites are guided to always include one. **Where:** Site editor, mobile view — open the hamburger menu on a phone-width preview. **How to test:** On an affected site, open the mobile menu; if it lacks a close button the code-issue panel flags it and one-click Fix adds a close (X) inside the overlay. Re-open the menu and confirm the X dismisses it. **Watch for:** Menus that already have a working close button (or whose menu sits below the header so the toggle stays tappable) should NOT be flagged.
The editor's left rail now shows your whole site as a tree — every page (and collection, like a restaurant Menu) as a top-level row, with the current page's sections beneath. Click a page to jump to it. On desktop, the old page dropdown in the top bar steps aside in favor of the tree — but it stays available whenever the rail is collapsed (or on mobile), so page switching is never lost. **Where:** Any multi-page site in the site editor — the left "Structure" rail. **How to test:** Open a site that has more than one page (e.g. a restaurant with a Menu, or any site with an About page). The rail shows a "Pages" group (and "Collections" if you have any) above the section list; clicking a page navigates to it, and the current page's sections appear below. Collapse the left rail — the top page dropdown should reappear so you can still switch pages. **Watch for:** Collections should appear once (as e.g. "Menu"), never as a raw `[slug]` template row; the design D1/D2/D3 switcher is unchanged; single-page sites look exactly as before; collapsing the rail on desktop should bring back the page dropdown instead of losing page navigation.
Fixed a blank white band that appeared below the footer in the editor's live preview, so the preview now ends exactly at your website and uses the full height. **Where:** Site editor — the live preview canvas next to the chat. **How to test:** Open any site in the editor and scroll the preview to the bottom. The website should end at its footer with no empty white rectangle beneath it. **Watch for:** The preview should still scroll smoothly to the footer and fill the available height on both narrow and wide windows.
The page switcher dropdown at the top of the editor's left rail used to list pages in whatever order they were created. It now shows them in the same order they appear in your site's header navigation (Home first), so the list matches what visitors actually see. **Where:** Site editor → page switcher (top of the left rail). **How to test:** Open a site with several pages and confirm the page switcher order matches your header navigation, Home listed first. **Watch for:** A page missing from the switcher, or the order not matching your site's nav — it should fall back to Home-first ordering rather than dropping a page.
Collapsing the editor's left side rail used to remove your only way to switch pages on desktop — the page dropdown now reappears whenever the rail isn't showing the page list, so you can always get to another page. **Where:** Site editor — collapse the left rail (or use on mobile). **How to test:** Open a multi-page site in the editor, collapse the left side rail, and confirm a page dropdown appears at the top so you can still switch pages; expand the rail again and confirm the dropdown is hidden in favor of the page tree. **Watch for:** No way to switch pages after collapsing the rail, or the dropdown and page tree both showing at once.
The Pages list in the editor now shows your pages in the same order as your site's navigation (Home first), and folds catalog collections the same way the page switcher does — so the two lists always agree. **Where:** Site editor → left sidebar → Pages; and the page switcher at the top of the editing rail. **How to test:** Open a site with several pages and a collection (e.g. a menu or products catalog). Confirm the Pages sidebar lists pages in your header-navigation order with Home first, that the listing page for a collection no longer appears as a separate row, and that this order matches the page switcher. **Watch for:** A page missing from the list, a collection's listing page becoming unreachable (it should open from the collection's template row), or the two lists showing a different order.
An image-privacy filter had been dropped during an earlier rewrite, so images explicitly marked as not shareable could still be pulled into other sites' product, gallery, and avatar slots — for example, a pharmacy's product grid showing an unrelated website screenshot. The filter is restored, and image matching for product/avatar/gallery slots now also requires the right image type and a closer match before falling back to stock or AI-generated photos, instead of accepting a loose cross-type match. **Where:** Any site generation or regeneration that fills product, gallery, or avatar image slots. **How to test:** Generate or regenerate a site with product/gallery/avatar slots (e.g. a pharmacy or ecommerce site) and confirm every image is topically related — no unrelated website mockups, ad creatives, or other sites' photos. **Watch for:** A product/gallery/avatar slot showing an obviously unrelated image (e.g. a screenshot of a website, or another business's photo).
Photo matching for specific slots like products, testimonial avatars, and galleries used to sometimes pull an unrelated image (like a website screenshot) from the same shared photo pool as generic hero images — those slots now require a closer, same-type match, falling back to a fresh photo or AI-generated image instead of a mismatched one. **Where:** Any generated site with product, avatar, or gallery photo slots (e.g. e-commerce, catalog, or testimonial sections). **How to test:** Generate or regenerate a site with product cards or testimonial avatars and confirm the images shown genuinely match the slot (real product-style photos for products, people for avatars) rather than an unrelated stock or mockup image. **Watch for:** A product card showing an unrelated image (like a website mockup or generic graphic) instead of a product-style photo.
Asking to redesign a selected hero illustration could, in some cases, spend a credit generating a new graphic and then fail to apply it — while still reporting "Done" as if the change had succeeded, making it look like the request was ignored. That case is now detected up front and deferred to the normal design pipeline, which redesigns the hero without depending on the illustration's exact structure. **Where:** Site editor — selecting a hero illustration/graphic and asking to redesign it. **How to test:** Select a hero illustration and ask to redesign it; the change should actually apply (or clearly fail), never report success while leaving the illustration untouched. **Watch for:** A "Done" response after a hero-illustration redesign request where the illustration visibly didn't change.
When regenerating a design variation, the platform now double-checks the AI's output is a real, renderable design before saving it — if something comes back malformed, it fails with a clear error instead of silently storing a broken page that would show as a blank or unreadable preview. **Where:** Design page — regenerating a design variation. **How to test:** Trigger a regenerate on a design variation and confirm it either produces a normal, renderable design or reports a generation failure — it should never leave a variation with a corrupted, unrenderable page. **Watch for:** A variation that renders as a blank page or shows raw code/text instead of your design after a regenerate.
Asking the AI to replace the illustrations in a section whose visuals are icons (not photos) now updates those icons directly instead of stopping with a "no images found" message. **Where:** Site editor - chat with the AI ("replace the illustrations in the How it works section with different visuals") **How to test:** Open a site whose "How it works" / process section uses icon graphics, ask the AI to swap the illustrations, and confirm the icons change. **Watch for:** The request should reach the code-editor and swap the icons; it must NOT regenerate photos in other sections, and a genuinely photo-less, icon-less section should still return the honest "nothing to replace" message.
On phone-width screens the Responsive Check panel overflowed the edge, clipping its Fix buttons. Separately, fixing several issues in a row could pile up multiple overlapping, sometimes blank, notification toasts. Both are fixed: the panel now fits mobile widths, and fix notifications update in place instead of stacking. **Where:** Site editor → Responsive Check panel (mobile view). **How to test:** Open the Responsive Check panel on a phone-width preview and confirm it fits on-screen with usable Fix buttons; fix two or more issues in a row and confirm you see one updating notification instead of a pile of toasts. **Watch for:** Long issue titles should truncate cleanly rather than pushing buttons off-screen.
Some generated designs have a marquee, ticker, or auto-scrolling card strip that was silently frozen in place, clipping off the later cards entirely — that only happened on designs where the AI wrote its own theme styling, and it's now fixed so those strips animate and scroll as intended, both in the editor preview and on your published site. **Where:** Any generated site section that scrolls logos, testimonials, or cards horizontally (marquee/ticker-style sections). **How to test:** Open a site with a scrolling card/logo strip section and confirm the cards continuously scroll instead of sitting still with extra cards cut off at the edge; check both the editor preview and the published page. **Watch for:** A scrolling strip that looks frozen, or trailing cards you can never scroll into view.
The editor's left rail now leads with a searchable page switcher that always names the page you're on, replacing the flat Pages/Collections lists — so the rail focuses on the current page and its sections. **Where:** Site editor → left rail (top of the page-structure panel) **How to test:** Open a multi-page site in the editor. Click the page name at the top of the left rail — a popover opens with a search box and grouped results (Pages, Collections, Landing). Type to filter, use arrow keys + Enter to pick, or click a row to switch pages. Collections show an item count and a Manage button that opens the collection editor. "Add page" appears in the popover footer only for a working (published/build) site — it is hidden while comparing design options. **Watch for:** Page navigation must still work while comparing designs; section drag-reorder must still work; single-page sites should still show a clean sections-only rail.
Agencies working through the MCP connection can now make a client's presentation board public and get back a clean, no-login share link — without opening the app. The link uses the agency's own branded domain when one is set up, so the platform domain is never exposed. **Where:** MCP tools (Claude / any MCP client) — new `share_board` tool, alongside `list_boards` and `pin_design_to_board`. **How to test:** Pin a design to a board via MCP, then call `share_board` with the board id (or a site id) and read back the `share_url`. Open it logged-out to confirm the board renders. Call again with `rotate: true` to confirm the old link stops working, and `enabled: false` to turn sharing off. **Watch for:** A share link that points at the platform domain instead of a configured white-label domain; a returned link that 404s; sharing that can be toggled on a board belonging to another organization.
Short styling edits like "make background dark" now apply reliably instead of occasionally erroring out on large, animation-heavy sections. **Where:** Site editor → select a section → ask the assistant for a background/color change (e.g. "make background dark", "darken the background", "make it lighter"). **How to test:** Open a generated site, focus a rich section (like a hero with animations), and send a terse background or color change. It should apply as a targeted edit and preview correctly, with the rest of the page untouched. **Watch for:** Any styling change that instead rewrites the whole section, drops other sections, or returns "I couldn't safely apply that change." Structural requests (new layouts, adding elements, matching styles across sections) should still take the fuller path.
The chat composer in the site builder stayed white even when the editor was switched to dark mode. It now follows the editor's theme like the rest of the chat panel. **Where:** Site builder — the chat/message box at the bottom of the assistant panel. **How to test:** Switch the editor to dark mode and open the site-builder chat; the message composer should be dark, not white. **Watch for:** A white chat input box while the rest of the editor is in dark mode.
Pasting an image or asset link that contained a date-like number in its filename could get that number picked up as your business phone number during intake. Asset links are now excluded, so only real phone numbers you type get captured. **Where:** Start a new site → chat/intake, when pasting an asset URL alongside your pitch. **How to test:** Paste a pitch that includes an asset URL with digits in the filename (e.g. a dated filename) and confirm the intake does not fill in that number as your contact phone. **Watch for:** A real phone number you type or paste directly should still be captured correctly.
You can now rebuild any section in a different layout without describing it — pick from a grid of layout thumbnails and see it applied live. **Where:** Site editor → left rail. Hover a section row and click the layout icon, or open a section and click "Swap layout" in its panel header. **How to test:** 1. Open a site in the editor (design or build phase). 2. Hover a section in the left rail (not the header/footer) and click the layout icon — or select the section and click "Swap layout" in the panel header. 3. In the picker, click a layout thumbnail. A preview of that layout builds using your existing text, images and colours. 4. Click "Use this layout" — the section updates in the preview and the change is saved to your version history. 5. Try "Surprise me" for a few fresh ideas, and check the "From your other designs" row when the site has more than one design. **Watch for:** the preview should keep the same wording, photos and colours as before — only the arrangement changes. If a layout can't show a piece of content it warns you before you apply. Applying should survive a reload and appear as a new entry in version history.
Changing a site's theme from dark to light now recolors section backgrounds that were hardcoded dark, so the whole page follows the new theme instead of stranding a few sections dark. **Where:** Site editor - change the theme via a prompt (e.g. "change the theme to light"). **How to test:** On a dark-themed site, ask the assistant to switch to a light theme. Every section background should turn light, while intentionally dark UI mockups (device/console previews) stay dark. **Watch for:** A section that stays dark on an otherwise-light site, or a decorative dark mockup that incorrectly turned light.
Clicking a design variation that failed to generate used to silently snap back to your previous design with no explanation. You'll now see a clear message explaining the design couldn't load and that your current one is unchanged. **Where:** Site editor → design/variation switcher. **How to test:** Try switching to a variation that never finished generating (no code); confirm a toast explains the failure instead of the view just reverting silently. **Watch for:** Successful design switches should be unaffected.
On a site where everything is a collection — a restaurant with only a menu, a store with only products — asking the assistant to change an item could pop up a confirmation card and then fail after you clicked Apply, because that content lives in your Content Manager rather than on the page itself. The assistant now recognises this before it asks, and just tells you where to make the change. **Where:** Site editor → AI assistant chat, on a site whose content is entirely collection-backed (products / menu / listings, with no inline sections). **How to test:** Open such a site and ask the assistant "change the first product title to X". It should reply with plain guidance pointing you to the right section — no confirmation card, no error. **Watch for:** Regular inline content (contact details, services, team, FAQs) must still be editable by the assistant exactly as before — those should still show a preview-diff confirmation and apply cleanly.
Clicking Undo could get stuck showing "Undoing…" indefinitely if the version restore ran into a slow connection, with no error and no way to recover short of leaving and coming back. Undo now gives up after 30 seconds, shows a clear "please try again" message, and resets the button so you can retry right away. **Where:** Site editor → any inline Undo control (Activity Strip, chat feed, mobile undo pill) **How to test:** - Trigger an undoable change, then click Undo under a slow or interrupted network connection - Confirm the button eventually reports a timeout error instead of staying on "Undoing…" forever, and becomes clickable again **Watch for:** The Undo button remaining stuck on "Undoing…" with no error after a slow or dropped connection.
Picking "Light" or "Dark" in the intake form could still be silently overridden if your pitch or reference text mentioned a theme (e.g. "dark charcoal background") — the site would generate in the wrong mode. Your explicit choice now always wins. **Where:** Start a new site → intake form → "Light or dark?" question. **How to test:** Choose "Light", but describe a dark-themed reference in your pitch or notes. Generate the site and confirm it comes out light. **Watch for:** Choosing "Let the design decide" should still allow the AI to pick a theme based on your description.
When generating a new design variation, the option to base it on an existing variation you liked was supposed to be available but was silently disabled for every site. It's now shown wherever the editor can actually honor the choice. **Where:** Site editor → generate a new design variation, choice-of-base step **How to test:** On a site with two or more design variations, start generating a new one and confirm you're offered the option to base it on a specific existing variation rather than only the option to make something different **Watch for:** The "base on another variation" choice missing entirely, or being offered but then silently ignored (the new variation looks unrelated to the one you picked)
Opening the AI assistant on a site you haven't generated a design for yet could throw an error instead of loading normally. **Where:** Client portal → any new site created but not yet generated → assistant chat panel **How to test:** Create a new site, skip generating a design, and open the assistant chat right away — it should load and respond normally instead of erroring out **Watch for:** The assistant failing to open or responding with a generic error on a brand-new, ungenerated site
Asking the AI assistant about a site before you've generated its design — roughly a third of all sites at any given time — could cause it to fail partway through with a generic "something went wrong" error instead of answering normally. Actions that require actual code to edit (like editing a page or replacing an image) are now correctly hidden until a design exists, so the assistant won't promise an edit it can't make. **Where:** Client portal → any site without a generated design yet → assistant chat (including WhatsApp/headless assistant conversations) **How to test:** Create a site, skip generating a design, then ask the assistant a question about the site (e.g. "what pages does this site have") — it should answer normally instead of erroring midway **Watch for:** The assistant failing mid-response or offering to edit a page/image on a site with no generated design
Retrying a stuck campaign in the outreach wizard could create a second, duplicate campaign, and testing an email sending connection with a wrong password could permanently block you from ever adding that same address again. Both are now fixed — retries resume the same campaign, and a failed connection test leaves nothing behind. **Where:** Dashboard → Agency → Campaigns → New campaign (and Sender accounts setup) **How to test:** - Start creating a campaign, let the targets step fail or interrupt it, then retry — confirm only one campaign is created, not two - Try connecting a sender email account with an intentionally wrong password, see the connection fail, then try again with the correct password — confirm the second attempt succeeds instead of reporting a generic error **Watch for:** Duplicate campaigns appearing after a retry, or a sender email address that can never be added again after one failed connection attempt.
When a preview build stopped early — because you hit your plan's preview limit, or cancelled — the wizard used to leave those prospects spinning on "queued" forever while the header cheerfully said "Build complete", and it would still let you continue with prospects that had no preview. **Where:** Growth → New campaign → step 3 "Build previews" **How to test:** Start a campaign with 3+ prospects and run the build. Every prospect now ends on a clear final state — built, failed, or skipped with the reason. If any preview didn't build, the header says so instead of showing a green "Build complete", and Continue stays locked until every prospect has a result. **Watch for:** A prospect row that stays on "queued" after the build finishes, or a green "Build complete" while the list still shows failures.
The guided campaign flow used to add every prospect you ticked in step 1 to the campaign — even ones whose preview site failed to build and ones you turned down in the review step. Those businesses got a real email pitching a website with no link in it. Now only approved previews are emailed, and anyone left out is named on screen before you create the campaign. **Where:** Growth, then New campaign (steps 4 "Review" and 5 "Email & create") **How to test:** Pick several prospects, build previews, then approve only some of them in the review step. The summary on the last step should show "Will be emailed" matching only the approved ones, with the rest listed under a reason (no preview site, not approved, rejected, or missing email). Continue stays disabled until at least one preview with an email address is approved. **Watch for:** A prospect you did not approve appearing in the campaign's target list on the next screen. Also watch for an email going out with the words "take a look:" and nothing after it — sending now refuses outright when the preview link it promises does not exist, and the target is left pending with an explanation instead.
You can now edit your site's address (the subdomain or path it will be reachable at) directly from Settings, with live availability checking as you type. Once a site is published, its address is locked — moving it would break every link people already have — but up until then you're free to pick exactly the address you want. **Where:** Site editor → Settings → Domain **How to test:** - Open a draft (unpublished) site's Settings → Domain - Edit the address field and confirm it checks availability as you type, flagging taken or reserved names - Save a new address and confirm it takes effect - Publish a site, then confirm its address field becomes locked with an explanation **Watch for:** An address field that lets you type something already taken, a locked site whose address can still be changed, or a saved address that doesn't match what actually loads.
Starting a new site from a gallery template ("use as starting point") could leave it without its own web address, so the Share Preview link handed out a temporary, less trustworthy link instead of the site's real one. Cloned sites now get a proper address immediately, and renaming a site before it goes live keeps that address in sync (with the old link still working). **Where:** Gallery → clone a template as a starting point, then Site editor → Share Preview **How to test:** - Clone a template from the gallery to start a new site - Open Share Preview and confirm the link shown is the site's own address (something like `your-business-name.fullyloadedsites.com/preview`), not a long temporary link - Rename the site before publishing it, then check Share Preview again — it should update to match the new name, and the old link should still redirect correctly **Watch for:** A Share Preview link that still looks like a long temporary token URL, or an address that never updates after a rename
Updating your email or phone number could blank out the contact section of your site with an error. It now updates cleanly, and sites already affected repair themselves. **Where:** Site editor → ask the assistant to update your business email/phone, then view the homepage contact section **How to test:** Open a site whose contact section shows several contact cards (e.g. one per department), update the business email and phone, and reload the preview — the cards should still be there and the new details saved **Watch for:** A contact section that renders empty, or contact cards disappearing after a details update
Two fixes from end-to-end testing of the new-account flow. First, describing your business on the dashboard's "What are we building today?" screen now drops you into a chat that immediately starts working on your brief (previously the message could sit unanswered). Second, we no longer treat our auto-generated working title (like "Naples Italian Restaurant") as your real business name — if you didn't name your business, the intake form asks for it instead of a made-up name leaking into your site's header, tab title, and footer. **Where:** Dashboard (empty workspace) → prompt box → site builder chat; also the homepage prompt. **How to test:** 1. In a workspace with no sites, describe a business WITHOUT naming it and submit. 2. You land in the builder with your description already being processed. 3. The intake form asks "What's your business called?" (phrased for your industry). The auto-title shown in the header is a working label, not your brand. 4. Describe a business WITH a name — the question is skipped and your name is used. **Watch for:** Multi-workspace accounts — the site must be created in the workspace you're currently viewing, not another one you belong to.
"New design ready" rows have been removed from the "Needs your attention" area — those same sites already show up as cards further down with a "concepts ready" badge, so busy accounts were seeing the same sites listed twice. Attention now only surfaces failed publishes and other items that need a real decision, and the count of new form leads moved into a quiet stats line instead of taking up an attention slot. Hovering a site card's preview also now labels which design (D1, D2, ...) you're looking at. **Where:** Dashboard → home/portfolio view, top "Needs your attention" area and the stats line beneath it **How to test:** - On an account with several sites awaiting a design pick, confirm those sites no longer appear as their own rows in "Needs your attention" - Confirm a quiet stats line shows live site count, new leads in the last 2 weeks, and how many concepts are awaiting review, each clickable to filter the grid - Hover over a site card with multiple design previews and confirm each frame is labeled D1, D2, etc. **Watch for:** "Needs your attention" still showing concept-ready rows, the stats line missing or showing stale counts, or design labels not matching the design picker's numbering.
Draft site previews served from a site's own custom domain could fail to load properly — scripts like the chat widget, tracking, cart, and checkout would silently break — and the shareable draft link shown in Settings could be missing or show the wrong address. Draft previews now correctly load their required scripts regardless of which domain they're served from, and the draft link is always shown correctly. **Where:** Client portal → Settings (site address/draft link), and any draft preview served from a custom domain **How to test:** - Open a draft preview for a site with a custom or subdomain address and confirm the page loads fully with no broken widgets (chat, forms, cart/checkout if present) - Go to Settings and confirm the shown draft link is a real, working address (not blank or showing "null") **Watch for:** A draft preview that loads a blank or broken page, missing chat/tracking/cart functionality, or a draft link that's missing or malformed in Settings.
You can now reorder a page's sections by dragging the rows in the left "structure" rail — the page updates instantly, no AI prompt needed. **Where:** Site editor → left "structure" rail (the Section Navigator) **How to test:** 1. Open a site in the editor and expand the left structure rail. 2. Hover a section row — a grip handle appears. Drag it up or down; a blue line shows where it will land. Release to drop. 3. Or focus a row and press Alt+↑ / Alt+↓ to move it with the keyboard. 4. Confirm the preview re-renders in the new order and the change is undoable. **Watch for:** Header and footer rows are locked (not draggable). On sites whose sections live in separate component files, dragging is a safe no-op with a "page structure is out of sync — try Rescan" message rather than a broken layout.
The editor now shows your page as a list of sections and lets you edit any section's text and photos in one place, with the page updating live as you type. **Where:** Open any site's editor. On desktop, the new left panel lists every section on the page — click one to jump to it and edit all its content on the right. On mobile, open the chat and tap the list icon to pick a section. **How to test:** 1. Open a site in the editor and look at the left panel — your page's sections appear in order. 2. Click a section — the page scrolls to it and its headings, text, and photos appear as editable fields on the right. 3. Type in a text field — the page updates instantly; click away and the change saves automatically. 4. Click Replace on a photo to pick a new one. 5. Collapse the left panel with the arrow button; add site extras (announcement bar, popups) from "Site elements" at the bottom of the panel. 6. On a phone, open the chat bubble and tap the list icon to edit sections the same way. **Watch for:** Sections that were just added by the AI should appear in the list after the page reloads (use the refresh icon in the panel header if not). Fields inside hidden popups or collapsed accordions show a small "hidden" hint but remain editable. Bulk item work (adding or reordering menu items, testimonials, etc.) still opens the full Content Manager via "Manage all".
You can now edit individual sections of your site (text, images, and more) right from a phone. A new "Sections" view in the mobile chat panel lists your page's sections — tap one to edit its content, with the chat assistant still available underneath. We also fixed a positioning bug where the section rail could land under other on-screen controls and become unclickable. **Where:** Site editor on a phone → assistant panel → the list icon in the chat dock header **How to test:** - Open a site in the editor on a phone-sized screen (or resize your browser to ~390px wide) - Tap the list icon in the assistant chat dock header - Confirm you see a list of the page's sections; tap one to open its content editor - Edit some text or replace an image, and confirm the change appears in the live preview and survives a reload - Confirm you can navigate back to chat from the section editor **Watch for:** The sections list not appearing, section edits not saving, or the section rail/toolbar overlapping other controls on desktop.
Sharing a preview — from the editor, the assistant, a client portal, an agency's outreach email, a shared design board, or the public API — could still hand out an old-style temporary link instead of your site's actual web address, and one "View on site" link was broken outright. Every one of these surfaces now shares the same correct, current address, including sites forked from another site. **Where:** Site editor → Share Preview, assistant "share preview", client portal, agency Previews page, outreach emails, shared design boards, and the public API **How to test:** - Open Share Preview in the site editor for a site (including one forked/duplicated from another site) and confirm the link is the site's own address, not a long temporary URL - Send yourself a test outreach email with a preview link and confirm it opens the right site without asking you to log in - Open a shared design board and confirm the "view live" link is correct **Watch for:** A share link that requires logging in, points to the wrong site, or still looks like a raw temporary token URL
A behind-the-scenes data glitch could occasionally turn a list of items (like contact cards, menu items, or testimonials) into a broken format, causing that section to crash instead of displaying on the live site, preview, or published page. **Where:** Any published site or preview with a section that lists multiple items (contacts, menus, testimonials, etc.) **How to test:** Edit a site with a list-based section (e.g. a menu or testimonials section), save, and confirm the section still renders correctly in preview, SSR, and after publishing **Watch for:** A section that used to show a list of cards rendering blank or throwing a "not a function" style error
Asking the assistant to change certain page sections could report "Applied" while quietly discarding the edit — leaving the section unchanged no matter how many times you tried the same request. This affected sections whose code included a small helper alongside the main component. The assistant now either saves the change for real or tells you honestly that it couldn't, instead of falsely claiming success. **Where:** Site editor chat — ask the assistant to change a page section's styling or content **How to test:** - Pick a page section and ask the assistant to change something about it (e.g. a stat block or feature list with repeated sub-items) - Confirm the change actually appears in the preview and survives a reload - If the assistant reports it couldn't apply a change, confirm the section is left exactly as it was, with a clear explanation **Watch for:** A section that never visibly changes despite the assistant reporting success on repeated attempts
When AI-generated components used a repeating pattern with individual toggle or tab state (like an accordion or a set of tabs), a bug in our automatic error-fixing could sometimes give them the wrong starting value, so nothing appeared active or open when the page first loaded. **Where:** Any generated or adapted site with repeated components that each track their own open/active state (accordions, tab groups, expandable cards) **How to test:** Generate or adapt a site with an FAQ accordion or tabbed section and confirm the intended default item shows as open/active on first load, not blank **Watch for:** A tab group or accordion where nothing is highlighted/expanded by default, or the wrong item appears active
Opening the outreach campaign wizard could fail immediately with "Couldn't load your prospects and templates," blocking campaign creation entirely. A backend dependency issue was crashing several outreach features at once — campaigns list, follow-up emails, and email open/click tracking — and all are now fixed. **Where:** Top nav → Growth → Campaigns → New Campaign **How to test:** - Open the Campaigns section and click New Campaign - Confirm the prospect list and template list both load without an error - Confirm sender account setup, the campaigns list, and email tracking links all continue to work normally **Watch for:** Any error message about loading prospects, templates, or sender accounts when opening the campaign wizard
The Growth workspace now teaches its purpose, not just its next step — and creating your first template no longer requires finding a buried menu. What changed: - The Growth overview opens with a dismissible "How Growth works" panel: the 4-step play plus a concrete example (scan dentists in Austin → build 20 previews from one template → email each their own new site → close 2). Reopen it anytime via "How it works". - Every Growth page (Prospects, Templates, Previews, Campaigns) has a one-line explainer that expands to a few bullets — what the thing is, why it matters — and remembers when you collapse it. - A full **Growth guide** lives in the sub-nav: the objective, the play step by step with quota costs, plain-language definitions (prospect, assessment, template, preview, campaign, convert), what makes a good template, safe-sending rules, and honest expectations (typical run: 50 scanned → 20 previews → 20 emails → 3–5 replies → 1–2 deals). - **Templates suggest themselves**: with zero templates, the Templates page now shows your existing sites and a one-click "Save as template" on each — no more instructions pointing at the site editor's Settings menu. A "New from site" button offers the same picker once you have templates. **Where:** Top nav → Growth → any tab; the guide is the "Guide" link at the right of the Growth sub-nav. **How to test:** Open Growth fresh — the How-it-works panel should show; dismiss it and confirm the "How it works" link brings it back. Visit each tab and expand/collapse the explainer card (state should survive reload). Open the Guide. On Templates with no templates, confirm your real sites appear with screenshots and that "Save as template" creates one without leaving the page. **Watch for:** Explainer cards re-expanding on every load after being collapsed; the suggestions grid showing template snapshots or preview sites (it must only show your own real sites); one-click save failing on legacy monolithic sites without a clear message.
Creating an outreach campaign is now one guided flow instead of four separate tools, and two silent breakages in the preview pipeline are fixed. What changed: - "New Campaign" opens a 5-step wizard: pick prospects (hot leads first, search + filters) → pick a template → build all preview sites with live progress → approve them → write the email and create the campaign. Prerequisites never dead-end: no sender account? Connect SMTP right inside the final step. - Preview sites built for prospects are now viewable — "View site" opens the shareable preview render. (The old "Open in Editor" button pointed at a page that never existed.) - Outreach emails now carry a working preview link: the {{previewUrl}} variable was silently empty in every sent email because the link was never generated. Adding prospects to a campaign now creates their share links automatically. - Building previews from a template works again — creating templates and spinning up sites had been silently broken since a May data-model change (every attempt failed with "Template snapshot has no blueprint or files"). **Where:** Top nav → Growth → Campaigns → New Campaign (app.mondovo.com/dashboard/agency/campaigns/new) **How to test:** With prospects imported and a template saved, click New Campaign. Select 2–3 prospects (note the "No email — skipped at send" warning on prospects without one), pick the template, run Build previews and watch per-prospect progress, click View site on a built preview (should open the rendered site in a new tab), Approve all, fill the email step, and Create campaign — you should land on the campaign detail page with targets attached. **Watch for:** Build step stuck on "queued"; View site failing or opening a 404; {{previewUrl}} rendering empty in a sent test email; the wizard allowing Continue with no prospects/template; campaign created without its targets.
Picking a color, font, spacing or opacity value from the quick-edit popover would close the panel immediately and act like it worked, even when the change hadn't actually saved yet — or had failed outright. The popover now stays open and shows "Applying change…" until the save is confirmed, closes on real success, and tells you plainly if it didn't work so you can retry. **Where:** Site editor → click any element on the canvas → use the color/font/spacing/opacity quick-edit popover **How to test:** - Select an element and open the quick color picker, then click a swatch - Confirm the popover shows a brief "Applying change…" state before closing - Reload the preview and confirm the new color actually stuck **Watch for:** The popover closing instantly with no loading state, or a change that appears applied in the preview but reverts after a reload
The "Needs your attention" section on your dashboard now also flags when a client has picked a design on a shared design board but no site has been started from it yet, when a growth prospect is scoring as a hot lead, and when a site has new form submissions you haven't seen yet — each with a direct link to act on it. **Where:** Dashboard → "Needs your attention" section (top of the home screen) **How to test:** - Share a design board with a client, have them choose a design, and confirm a "Needs your attention" card appears linking to that board - Check a site with unread form submissions and confirm a card appears linking to that site's inbox - Confirm the growth pipeline's hot-lead count matches what shows up in the attention strip **Watch for:** Missing or duplicate attention cards, or a card linking to the wrong board, lead, or inbox.
The dashboard's attention area could show a new form submission both as its own row in the attention strip and as part of the "N new leads" summary count — the same lead counted twice, and the extra row could crowd out other things that actually needed a decision from you. **Where:** Dashboard → home/portfolio view → attention strip and pulse summary row **How to test:** - Have a site receive a new form submission - Open the dashboard and confirm the new lead appears only in the "N new leads in the last 2 weeks" summary line, not as a separate row in the attention strip above it - Confirm the attention strip still shows real decisions (failed publishes, pending design approvals, hot leads) without leads eating one of its slots **Watch for:** A lead appearing as its own attention-strip row, or the lead count and the strip disagreeing about whether a lead was already seen.
A specific kind of placeholder component (one written as a one-line arrow function) could get corrupted by the automatic code-repair pass, which produced code that no longer parsed and made the whole pass throw away every other fix it had just made — with no visible error. That case is now handled correctly, and a bad fix can no longer take the rest of the pass down with it. **Where:** Site editor → any screen that runs auto-fix **How to test:** Run auto-fix on a site containing a placeholder component written as a single-line arrow function with JSX (e.g. `const Button = ({ x }) => <button>{x.label}</button>`), alongside other genuine issues, and confirm all the other issues still get fixed **Watch for:** An auto-fix run that reports success but leaves obviously broken code untouched, especially when a site has a one-line stub component
For sites imported from an existing website, choosing "start from this version" when generating a new page variation was ignored — the new variation was always built from the original page instead of the one you picked. Picking a specific existing version now actually works. **Where:** Site editor → a page with multiple saved versions → generate a new version, choose which existing version to start from **How to test:** On an imported site with a page that has more than one saved version, generate a new version and pick an existing version (not the original) as the starting point — the result should keep that version's distinguishing details while applying your requested change **Watch for:** A new page version that looks like it came from the original page instead of the one you selected as the starting point
Your plan no longer limits how many pages you can publish. Build sites as large as they need to be — the page counter is gone from billing, and publishing will never again be blocked because of a page count. **Where:** Dashboard → Organization → Billing & Subscription **How to test:** Open the billing page. The Current Usage panel should show published sites, draft sites, AI refinements, AI images, function invocations, and team members — with no "Published Pages" row. Publish a site with more pages than your old plan allowed; it should go live without a payment prompt. **Watch for:** Any lingering mention of a page limit or page add-on, or a publish that still gets blocked with a "page limit reached" message.
When you paste a written brief with the copy for each section of a page, the chat now treats it as one change and asks whether to apply it to your current design or build it as a new variation — instead of quietly chopping it into unrelated per-section steps. **Where:** Site editor → design chat (the message box next to your preview) **How to test:** Paste a multi-section brief (headline, subheadline, CTAs, pricing spelled out per section) and send it. You should get a card asking "Apply to current design" or "Create as new variation" — not a multi-step plan. **Watch for:** Requests that genuinely target several sections ("add an illustration to each section") should still produce a multi-step plan. Only dictated copy briefs are exempt.
The recent renames (Design boards → Presentations, Agency → Growth) now carry through every screen, tooltip, empty state, and AI assistant reply — one feature, one name. **Where:** Presentations pages (dashboard overview and per-client), the pin-to-board buttons in the gallery/editor, site Settings → Growth Template, the pricing page, plan-upgrade messages, and the AI assistants' vocabulary. **How to test:** 1. Open a client's boards page — heading now reads "Presentations", and the empty state talks about presentation boards. 2. Hover the pin button on a design in the gallery — tooltip says "Add to a presentation board". 3. In a site editor, open Settings — the template section is "Growth Template" and saving points to Growth → Templates. 4. Ask the site editor assistant "where do I find my boards?" — it should answer with "Presentations", never "Design boards". **Watch for:** Any leftover "Design boards" or "Agency" labels in user-facing copy (routes like /dashboard/boards and /dashboard/agency intentionally keep their URLs).
Opening the shareable preview link for a site that hadn't been generated yet showed a server error instead of a clear "nothing to show yet" message. This affected a large share of in-progress sites. Those links now show a normal not-found page instead of crashing. **Where:** Any site's shareable preview link, before the site has been generated **How to test:** - Create a new site but don't generate it yet, then open its shareable preview link - Confirm it shows a friendly "nothing to show yet" page instead of a server error - Open the preview link for an already-generated site and confirm it still loads normally **Watch for:** A server error page when opening a preview link for a brand-new, not-yet-generated site.
Starting a site from Quick Start with a description that didn't name the business (e.g. "a family-run Italian restaurant in Naples FL") could end up with an invented brand name like "Bella Napoli" — quietly copied from Quick Start's internal working title into the actual business name, then spread to the homepage, SEO title, and footer. The system now only uses a name you actually typed; if you didn't provide one, you're asked for it in the intake form. **Where:** Quick Start site creation → chat / intake form business name question **How to test:** - Use Quick Start with a business description that never states a name (only type/location) - Confirm the intake form asks "What's your [business type] called?" instead of silently filling one in - Confirm no invented brand name appears anywhere on the generated site if you leave the name unanswered **Watch for:** A generated site with a business name that sounds invented and doesn't match anything you typed
Renaming a site in Settings could silently do nothing to its web address — the preview link kept pointing at the old name, with no error explaining why. This happened because the system was treating any site that merely had an address label as "already live," even when it had never actually been published. **Where:** Site editor → Settings → Domain, and Settings → general site rename **How to test:** - Create a new site (don't publish it) and let it pick up a default address from its name - Rename the site in Settings - Confirm the site's address updates to match the new name, and the "Share preview" link reflects the new address - Publish a site, then rename it, and confirm the address is now locked and does not change **Watch for:** A renamed draft whose preview link still shows the old address, or a published site's address changing when it shouldn't.
Select any element in the editor and its Replace, Insert Image, and Delete actions now sit right in the toolbar instead of hiding under collapsed "Advanced" and "Danger Zone" sections you had to expand first. **Where:** Site editor → click any element on the page → toolbar above the properties panel **How to test:** - Click a text block, image, or button on the page - Confirm Replace, Insert Image, and Delete icons appear directly in the header bar above the properties panel, with no need to expand anything - Click Delete and confirm it still removes the element as before **Watch for:** Missing icons for elements that don't support one of these actions (e.g. no Insert Image on a non-image element), or the delete action behaving differently than the old confirmation flow.
Clicking "Save as template" or "Adopt" more than once in quick succession could create duplicate templates and inflate their usage counts. Separately, a template adopted from the starter gallery could end up with a broken preview later if the original gallery site was regenerated or removed. Both are fixed. **Where:** Agency → Templates (save a site as a template, or adopt a starter from the gallery) **How to test:** - Click "Save as template" on a site and immediately click it again (or another card) before it finishes — confirm only one template is created and the other buttons stay disabled until the first save completes - Adopt a starter template from the gallery, then confirm its preview still renders correctly even if the original gallery starter changes later - Try adopting the same starter twice and confirm you get back the existing template instead of a duplicate or a confusing error **Watch for:** Duplicate templates appearing for the same source site, a raw database error instead of a friendly "already saved as a template" message, or a blank/broken preview on an adopted template.
A round of fixes to the section-by-section editor: sections no longer appear multiple times in the section list, clicking a section now reliably jumps to it, and the "Add element" menu no longer opens off the bottom of the screen. **Where:** Site editor → left section panel (desktop) or the section list from the chat (mobile) **How to test:** - Open a site with nested sections or repeated headings and confirm each section appears once in the list, not two or three times - Click through several sections in the list and confirm the page scrolls to each one, including after editing content - Near the bottom of a long page, open "Add element" and confirm the menu opens upward and stays fully visible - Type in a text field for several seconds and confirm it doesn't lose focus or drop keystrokes **Watch for:** Duplicate section entries in the rail, clicks that don't scroll anywhere, an Add-element menu clipped below the viewport, or typing that gets interrupted.
The editor now shows your page as a collapsible list of sections in a left rail — click any section to scroll to it and select it for editing, or collapse the rail to a slim strip. Adding new sections and site-wide add-ons (announcement bar, popups) now lives in the same place. **Where:** Site editor (desktop) → left rail. **How to test:** Open a site in the full editor on desktop, confirm the left rail lists your page's sections in order, click one to scroll/select it, and try collapsing the rail. **Watch for:** This is desktop-only for now; mobile editing is unaffected.
Requests like "add an illustration to each section" or "add an entrance animation to every section" used to silently do nothing on sites that were imported from an existing website, because the editor couldn't see their sections. It now recognizes each section on imported pages and can plan and apply changes across all of them. **Where:** Site editor → chat with the assistant on a site that was imported/extracted from an existing website **How to test:** Open an imported site, ask the assistant to make a change to every section on the homepage (e.g. "add a subtle entrance animation to each section"), and confirm it proposes a per-section plan instead of doing nothing or only touching one section **Watch for:** A whole-page request being silently ignored, or only a single section being affected when the request was meant for all of them
When you select an element to edit in the site editor, a breadcrumb now shows exactly where it lives on the page, and clicking the section name jumps you straight to that section's content editor. **Where:** Site editor → click any element on the page to open its editing controls **How to test:** - Open a site in the editor and click on an element inside a section (e.g. a button in the hero) - Confirm the context bar above the editing controls shows a breadcrumb like "Page ▸ Hero ▸ Button" - Click the section name in the breadcrumb and confirm it opens that section's content panel - Click "Page" in the breadcrumb and confirm it deselects the element **Watch for:** A missing or incorrect section name in the breadcrumb, or clicking the section crumb not navigating to the right section's content panel.
Selecting an element used to swap away your conversation with the assistant, so you'd lose sight of what it just did. A slim activity strip above the message box now always shows the latest result — with a one-click Undo — and the "editing about this element" indicator is now a compact chip instead of a bulky panel. **Where:** Site editor → select any element → AI assistant panel, above the message box **How to test:** - Ask the assistant to make a change, then click an element on the page to open its properties - Confirm a one-line status strip appears above the message box showing the result of your last request, with an Undo button - Click the strip to jump back to the full conversation - Select an element to include it in your next message and confirm it now shows as a small chip (name, type, and a clear button) instead of a large panel **Watch for:** The strip not appearing after a request finishes, Undo not reverting the right change, or the selection chip not clearing when you deselect.
When picking a web address for a draft or new site, the system was not checking against every published site already live at that address — so a new or older site could end up minting the same address as an existing customer's published site, sending visitors to the wrong place. Address checks now also account for already-published sites, closing that gap, and older sites that never had a shareable draft link now get one. **Where:** Any site's preview/draft link, and address selection during site creation or publishing **How to test:** - Open an older site created before shareable draft links existed and confirm it now has a working draft link - Attempt to create or rename a site to an address that's already used by a live, published site — confirm it's correctly rejected as taken **Watch for:** A draft preview link opening someone else's published site, or a site's draft link failing to load.
Actions that build or refresh your site's navigation menu (like adding a page) could crash if the site's design hadn't been generated yet, instead of simply showing an empty menu. **Where:** Client portal → Pages tab → add or manage pages on a site before generating its design **How to test:** Create a new site, don't generate a design yet, then add a page or trigger a navigation refresh — it should complete without error **Watch for:** Errors when adding pages or syncing navigation on a site with no generated design yet
The "Tweaks" button used to pop open a separate floating card over your site. It now opens a "Styles" tab inside the same assistant panel you already chat in, so switching between chatting and adjusting colors, fonts, and spacing feels like one continuous flow. **Where:** Site editor → toolbar → Tweaks button (opens the Styles tab in the assistant panel) **How to test:** - Open a site in the editor and click the Tweaks button in the toolbar - Confirm it opens a "Styles" tab inside the assistant panel (not a floating card) - Hover over a style option to preview it, then click to apply it - Confirm the panel returns to the chat view after the change is applied **Watch for:** The Tweaks button not toggling the tab correctly, or style previews not layering on top of your current design.
Agencies with no templates (or no sites at all) can now start from curated platform templates — and the suggestions are smart: they're ranked by who you're actually prospecting. What changed: - The Templates page and the campaign wizard now offer **starter templates** whenever you have none of your own. Each card shows *why* it's suggested — "Matches 12 of your prospects", "You recently scanned for 'plumbers'", "Related to your restaurant prospects" — based on the industries of your imported/scanned prospects and your saved scan territories. With no signals yet, the most popular starters show instead. - One click on "Use this template" adopts the starter as a real agency template (frozen copy, swappable business fields auto-detected) — in the wizard it's selected automatically and the campaign continues without leaving the flow. - The Templates page's "New template" picker now has two sections: **Your sites** and **Starter templates**. Starters you've already adopted show an "Added" chip instead of the button. **Where:** Top nav → Growth → Templates (empty state or "New template"), and Growth → Campaigns → New Campaign step 2 when you have no templates. **How to test:** In an org with prospects but zero templates, open Templates — starter cards should appear with match-reason chips that reflect your actual prospect industries. Click "Use this template" → it becomes one of your templates without leaving the page. Then start a New Campaign in a zero-template org and confirm step 2 offers the same starters and auto-selects after adopting. Adopt the same starter twice — no duplicate should be created. **Watch for:** Match reasons that don't reflect your prospects (e.g. restaurant suggestions for a plumbing-only prospect list); adopting failing with a raw error; the wizard step 2 dead-ending instead of showing starters; duplicate templates after double-clicking.
Starter template recommendations were supposed to highlight templates matching your prospects' industries, but a gap in how industries were recognized meant most templates couldn't be matched at all — so nearly everyone just saw generic "Popular starter" suggestions instead of ones tailored to their prospects. **Where:** Top nav → Growth → Templates (empty state) and Growth → Campaigns → New Campaign step 2 **How to test:** - In an org with prospects concentrated in a specific industry (e.g. mostly dentists), open the Templates starter suggestions - Confirm at least some cards show a specific match reason like "Matches N of your prospects" rather than every card saying "Popular starter" - Repeat in the campaign wizard's template step **Watch for:** Every starter template still showing only "Popular starter" for an org with industry-concentrated prospects; a template's industry label showing a raw internal value instead of a clean industry name.
When picking a starter template for a new prospect, the suggested industry tag sometimes showed a raw internal label (like "url-decision-intelligence-platform-oravia") instead of a readable name. On top of that, the suggestion ranking only looked at a subset of templates, so a perfectly-matching low-popularity template could be passed over for an unrelated popular one. **Where:** Growth → Templates, and Growth → Campaigns → New campaign → prospect step **How to test:** - Open Growth → Templates and Growth → Campaigns → New campaign - Check the suggested starter templates — any industry tag shown should be a readable name (e.g. "Plumbing"), never a slug with dashes, and templates with no clear industry match should show no tag at all - Confirm a strong industry match appears near the top of suggestions even if it has few past uses **Watch for:** A dash-separated or otherwise raw-looking label appearing on a suggestion chip, or an obviously-matching template being buried below unrelated popular ones.
Typing a description into the dashboard's quick-start prompt box and submitting it could silently do nothing — your message would appear in the chat, but no AI response ever came back. Quick-start now properly creates your site first and lands you in the builder, and it correctly uses whichever workspace you're currently viewing. **Where:** Dashboard → prompt box on the empty/getting-started screen **How to test:** - On a dashboard with no sites yet, type a business description into the prompt box and submit - Confirm you land in the site builder and the AI responds to your first message instead of the chat going silent - Switch to a different organization and repeat — confirm the new site is created in that organization, not another one **Watch for:** The prompt box appearing to accept your message but the builder never generating a response, or a quick-start site landing in the wrong workspace.
Submitting the guided intake form could silently overwrite the business description you'd already typed with a copy of the form's own questions and answers — and that description feeds your site's generated copy, design direction, and SEO summary, so the whole site suffered. **Where:** Site creation → intake form flow (fill out the guided questions after describing your business) **How to test:** - Start a new site, type a real multi-sentence business description, then continue through the intake form - After submitting the form, check that your original business description is still intact (not replaced with form-answer text like "here are my answers in full") - Confirm the generated site still reflects your original description **Watch for:** A business description that reads like a form transcript ("(you decide)", bolded question labels) instead of your own words; generated copy that ignores details you originally provided.
Selecting an element and asking for a simple style change (for example "change button color to purple") could come back with "I wasn't able to apply that change — the code came back unchanged", even though the right element was selected. The edit was being made correctly and then discarded before it reached your site. **Where:** Site editor chat — select any element on the canvas, then ask for a change. **How to test:** Open a site, click a button or heading inside a section, and ask to change its colour. The change should appear in the preview and persist after a reload. **Watch for:** Edits to elements that live in a shared block (header, footer, hero) or on a sub-page rather than the homepage — those were the ones most likely to silently do nothing.
Flipping a site's theme (for example dark to light) would repaint the background but leave some text using a fixed color that didn't change with it — leaving headings and other text invisible against the new background. Theme switches now re-check every piece of text against its actual background and automatically recolor anything that would become unreadable, while leaving intentionally colored text (like white text on a colored button) alone. **Where:** Site editor → Settings/Style → theme or color mode toggle, or ask the assistant to switch the site's theme **How to test:** - Open a site with a light theme and switch it to dark (or vice versa) - Check headings and body text throughout the homepage for any invisible or near-invisible text against its background - Confirm text intentionally placed on colored buttons or brand-colored blocks still looks the same as before **Watch for:** Text that's the same color as its background after a theme switch, especially headlines or stat numbers
Changing your active organization while building a campaign now restarts the wizard cleanly in the new organization, instead of carrying over a selection that no longer exists there. **Where:** Growth → Campaigns → New campaign, then switch organization with the org switcher. **How to test:** Start a campaign, select a few prospects, then switch to a different organization. The wizard returns to the Prospects step, the selection is empty, the counter reads "0 selected", and Continue stays disabled until you pick a prospect from the organization you're now in. **Watch for:** Continue being clickable with nothing selected; a footer that counts prospects you can't see in the list; a build step that offers "Build 0 preview sites" and then refuses to continue.
On sites that mix regular page content with a catalog like products or a menu, asking the assistant to edit a catalog item could make it try anyway, fail, and give you a clumsy "sorry, I can't do that" after wasting a turn. The assistant now knows upfront which parts of your content it can edit directly, so it goes straight to the right answer instead of attempting and failing. **Where:** Site editor → AI assistant chat, on a site with both inline content (contact, services, team) and catalog-backed content (products, menu, listings) **How to test:** - Open a site with both an inline section (e.g. contact) and a catalog section (e.g. products) - Ask the assistant to edit a product, then ask it to edit the contact details - Confirm the product request gets clear guidance without a failed attempt, and the contact edit still applies normally **Watch for:** The assistant attempting a catalog edit before explaining it can't, or inline edits (contact, services, team, FAQs) no longer working.
If you skipped the business name question in the guided intake form, the assistant would silently make one up and use it everywhere — the homepage, the browser tab title, and search results — even though the form promised leaving it blank was fine. Leaving the name blank now actually leaves it blank, and you're asked for it again before your site is generated. **Where:** Site creation → guided intake questions (business name question) **How to test:** - Start a new site from a description that doesn't mention a business name - When asked for the business name in the intake form, leave it blank and continue - Confirm you're prompted for the name again before generating, and that no invented name appears on the generated homepage, tab title, or search summary **Watch for:** A generated site with a business name you never provided, especially one that sounds plausible but wrong (e.g. a made-up brand name)
The small activity strip above the site preview could silently lose its Undo button as soon as anything else happened after your last change — even a simple status message — forcing you back into the chat tab just to undo. Undo now stays available and, when it's reverting something other than what's shown, it labels itself with what it will undo so you always know what you're about to revert. **Where:** Site editor → activity strip above the preview (appears after the AI assistant makes a change) **How to test:** - Ask the assistant to make a change, then send a follow-up message that doesn't change the site (e.g. a question) - Confirm the Undo button is still visible in the activity strip, and its label names the change it will revert if that's not the most recent message **Watch for:** The Undo button vanishing after any non-code-changing assistant reply; Undo reverting a different change than what's labeled.
Draft previews served on your site's own web address were loading with pieces missing, and the address itself was never shown to you. Both are fixed. **Where:** Site editor → Settings → Domain, and the draft preview link for any site. **How to test:** 1. Generate a new site and wait for it to finish. 2. Open Settings → Domain. You should now see the site's own address (e.g. `your-business.fullyloadedsites.com`) — not a blank field, and never the word "null". 3. Open that address with `/preview` on the end. The draft should load completely: images, pop-ups, forms and buttons all working. 4. Click through to an inner page, then use the browser's Back button. Everything should behave normally. **Watch for:** A preview that hangs on a spinner, or shows an error box mentioning an unexpected character. Also watch for any address containing "null", or a site on one of the newer domains being shown an address ending in a different domain than the one it actually lives on.
The dashboard no longer splits your work across Builds, Designs and Chats tabs. Every project is one card with a clear stage — Draft brief, Concepts ready, In production, Live — and a button that says exactly what you'll land in. New accounts start with a single question ("What are we building today?") instead of an empty management screen, and busy accounts get a "Needs your attention" feed that surfaces publish failures and fresh design concepts across all clients. **Where:** Dashboard (app.mondovo.com/dashboard). Header nav renamed: Design boards → Presentations, Agency → Growth, plus a new Inspirations link to the design gallery. **How to test:** 1. Log in with an account that has sites — you land on "My Sites" with stage filter pills (All / Drafts / Concepts / In production / Live) instead of tabs. 2. Check the "Needs your attention" section lists designs awaiting review and failed publishes; each links straight to the right place. 3. Search still works (including smart semantic matches), and grid/list toggle, rename, clone, delete, bulk move are unchanged. 4. On a build card forked from a design, check the "Built from a design · explore other concepts" link. 5. With a brand-new account (0 sites), the dashboard shows a prompt box — describe a business and it creates the site and drops you into the chat with your description pre-submitted. **Watch for:** Designs already used by a build are hidden from the default view (they appear under the Concepts filter, in search results, and via the build's lineage link) — make sure nothing seems "lost". Stage counts should match what each filter shows.
The Billing & Subscription page was showing an empty "Change Plan" section and a "Failed to load usage data" error. Both now load correctly. **Where:** Dashboard → Organization → Billing & Subscription **How to test:** Open the billing page for an organization that has at least one published site. The plan cards (Free, Starter, Pro, Growth, Partner) should render with the monthly/yearly toggle working, your current plan badged. The Current Usage panel should list published sites, draft sites, published pages, AI refinements, AI images, and team members instead of an error. **Watch for:** An empty plan grid, a "Failed to load usage data" message, or usage numbers that stay at zero for an org that clearly has published sites.
When importing an existing website fails (for example, it's temporarily unreachable), we now say upfront that we'll build from what you describe instead — with a prompt to paste your existing copy or retry the link — instead of leaving the failure looking like an unexplained error. **Where:** Site intake → "Clone my existing site" (URL import) **How to test:** Start a new site and provide a URL that can't be fetched (e.g. one returning a 503). The follow-up message should explain we'll build from what you share here, not just report that the fetch failed. **Watch for:** The retry/paste guidance missing, or the message still reading like a bare error.
The color question during intake no longer forces a pick from a handful of generic per-industry palettes — you now just say whether you want a light or dark look (or let us decide), and your actual colors are derived from your brand, logo, or reference at generation time. Colors stay fully editable afterward. **Where:** Site intake → preference questions → "Light or dark?" **How to test:** Start a new site through intake; confirm the color question is a simple light/dark/decide chip rather than a swatch palette picker, and the generated design's colors reflect your brand rather than a canned palette. **Watch for:** Picking dark mode but getting a light design (or vice versa).
Some sites showed a phantom "Contact Form" in their Forms list — one nobody created, with meaningless fields like "Field 1" and "Field 2" and a block of internal diagnostic text as its description. These were never real forms and could not be used; they were an artifact of the editor mistaking one of our own built-in components for a form you had authored. New sites can no longer pick these up, and the 51 existing sites that had one have been cleaned. **Where:** Site editor → Forms (Mission Control left rail) **How to test:** Open the Forms list for a site that previously showed a stray "Contact Form" with "Field 1"/"Field 2" fields. Only forms you actually created should be listed. Add a real form to a page and confirm it still gets picked up and listed correctly. **Watch for:** A genuine inline form on a page failing to appear in the Forms list, or a form you created disappearing from it.
Text and buttons that blended into their background — like a white "Book now" button on a white section — are now caught even when the background color comes from a surrounding section rather than the element itself. **Where:** Applies automatically during site generation and design edits — no action needed. **How to test:** Generate or refine a site and check that button and text colors always contrast with the surface behind them, including sections that set a background color on a parent container rather than the button itself. **Watch for:** A button or text that's still hard to read against its background, or a legitimate bordered/secondary button incorrectly flagged as low-contrast.
On phones, the "Undo last change" button could render on top of the "Ask AI for bigger changes" tip, covering its "Open Assistant" button and making both hard to use. The tips now sit above the floating controls, and they no longer run off the edge of narrow screens. **Where:** Site editor on a phone (or a desktop browser window narrower than 768px). **How to test:** Open a site in the editor on mobile, leave it idle for ~20 seconds so the "Ask AI for bigger changes" tip appears, and make a change so the "Undo last change" button shows. Both should be fully visible and tappable, stacked without covering each other. **Watch for:** Any tip card that gets clipped by the screen edge, or a tip that sits underneath the chat button, the undo button, or a status message.
Leads captured by your site forms are now labelled with real field names like `email`, `phone` and `company` instead of placeholders like `field_4` or garbled text pulled from example copy. **Where:** Site editor → Forms, and any form submission in your Inbox. **How to test:** Open a site with a contact or quote form, check the form's fields in the Forms panel, then submit a test enquiry and confirm the columns in the Inbox read as proper field names. **Watch for:** Forms you already created keep their existing field names — nothing is renamed, so past submissions stay intact. The improvement applies to forms detected from here on; regenerate or re-open a site's forms to pick it up.
The Growth (agency outreach) home page now teaches the workflow instead of just reporting on it, and generated preview sites can finally be approved or rejected before outreach. What changed: - The hub opens with a "next best action" banner — one computed suggestion based on where your pipeline actually is (e.g. "100 prospects haven't been assessed yet → Assess websites"). - Four numbered step cards (Find prospects → Build previews → Send outreach → Win clients) each show their live count and the action that unblocks them, including prerequisites like "Needs a template" or "Needs a sender email" that used to be discovered as dead ends deep inside sub-pages. - The pipeline funnel now shows real stages (Assessed, Email found, Preview built, Contacted, Won) and every row is clickable — it takes you to the filtered list where you act on that stage. Previously four of the six funnel rows could never be non-zero. - Every Growth page shares a persistent sub-nav (Overview · Prospects · Templates · Previews · Campaigns) — no more round-tripping through "Back to Agency". - Previews can now be Approved / Rejected (with Undo). The old button said "coming soon"; review status is now stored for real and the Pending/Approved/Rejected filters reflect it. - Prospect filters are shareable URLs (e.g. ?filter=unassessed), with new Unassessed and Has Email filters. **Where:** Top nav → Growth (app.mondovo.com/dashboard/agency) **How to test:** Open the Growth tab with prospects imported but nothing assessed — the banner should tell you to assess websites and link into the pre-filtered prospects list. Build a preview from a template, open Previews, click Approve, reload — the status should persist. Click each funnel row and confirm it lands on the matching filtered view. **Watch for:** Funnel rows showing zero after you've assessed prospects; Approve/Reject not persisting after reload; the sub-nav highlighting the wrong tab; deep-link filters not applying on first load.
The design gallery now lives inside your dashboard. Browse professionally designed sites, preview any of them, and click "Use as base" — we copy that design into a brand-new site in your workspace and drop you straight into the editor chat to make it yours. **Where:** Dashboard → Inspirations (top nav), or "start from a design you love" on a fresh account's home screen. **How to test:** 1. Click Inspirations in the dashboard header — the gallery opens inside your workspace (no more being sent to the public site). 2. Search ("restaurant", "law") and switch Popular / Newest / Featured. 3. Hover a design → Preview opens the live design; "Use as base" creates a new site from it and lands you in the design editor. 4. The new site appears on your dashboard as a concept ready to adapt. **Watch for:** "Use as base" copies the design's images into your own site's storage — the copy can take ~10 seconds on image-heavy designs; the button shows "Setting up…" while it works.
Site intake now always includes a "How should it sound?" question (Friendly & simple, Confident & modern, Professional & trustworthy, and more), and your answer reliably shapes the generated copy's voice — previously this question could be skipped, and even when answered wasn't always connected to the copy. **Where:** Site intake → preference questions → "How should it sound?" **How to test:** Start a new site, pick a tone like "Friendly & simple" during intake, and confirm the generated copy reads casually and plainly rather than defaulting to generic enterprise marketing language. **Watch for:** Copy still reading in a generic corporate register despite picking a distinct tone.
On phones, the intake questionnaire used to appear already scrolled to its footer, so it looked like it had ended and you had to scroll up to find the first question. It now opens on Question 1, and each section starts at the top as you move through it. **Where:** Create a site on a phone (or a narrow browser window) — enter your business name and description, then answer the questionnaire the assistant sends back. **How to test:** The form should land with Question 1 visible at the top. Tap Next through each section and confirm each one starts at its first question rather than at the buttons. Answering a question should never jump the page around. **Watch for:** The page jumping to the bottom of the chat while the form is open, a section opening mid-way down, or the form failing to come into view at all after the assistant sends it.
Requesting a new design variation now runs with the same intelligence as first-time generation: your feedback is translated into concrete design direction (an AI-authored design brief that deliberately diverges from every design you already have), requests like "video hero" or "simpler content" become real structural changes instead of being half-ignored, video/image heroes auto-fill from stock footage when you haven't uploaded an asset, and catalog sites (restaurants, real estate, etc.) keep using your real catalog items instead of inventing new ones. Variations also get their gallery screenshots and automatically retry on a backup model when the primary is overloaded. **Where:** Site editor → design gallery → "New variation" (both the quick text box and the describe modal), and variations created via connected AI tools **How to test:** On a site with 1–2 designs, ask for a new variation with "video hero and simpler content". The result should have a working background video in the hero (or an honest notice if no stock clip fit), visibly shorter copy, and a look clearly different from your existing designs. **Watch for:** Variations that still look like reskins of an existing design; a hero video that shows as a blank dark area (the new empty-media check should prevent this); catalog sections showing items that don't match your Content Manager items.
On iPhones and iPads, a brief network hiccup while a design's resources were loading could show a red error screen and roll the preview back to an older version — even though nothing was wrong with the design itself. The preview now recognises these as temporary loading failures, retries them, and shows a friendly "try again in a moment" message instead. **Where:** Site editor → any design preview, on an iPhone/iPad (or any browser on iOS). **How to test:** Open a site's design preview on iOS. Throttle or briefly drop the network while the preview loads. You should see the retryable "Preview didn't finish loading" message, not a red error, and the design should recover on retry rather than rolling back. **Watch for:** A design with genuinely broken code must still surface a real error — the friendly loading message should only appear for connection/loading failures, never for actual code problems.
A brief network hiccup while the preview loaded could leave Safari and iPhone users staring at a red "Preview Error" screen, even though nothing was wrong with their site. The preview now retries and recovers on every browser, instead of only on Chrome. **Where:** Site editor preview, on Safari or any browser on iPhone or iPad. **How to test:** Open a site in the editor on an iPhone or in desktop Safari and let the preview load. It should render the site; if a dependency is briefly unavailable it should retry and recover rather than showing a red error. **Watch for:** A red "Preview Error" screen that mentions a module or script failing to load. If one appears, it should now explain that it is a temporary network issue and that reloading will fix it, and it should no longer roll your design back or kick off an automatic repair.
When a design preview failed to load its resources, the editor showed a raw technical error instead of simply trying again. It now retries automatically, and if it still can't load you get a plain-language message and a Try again button. **Where:** Site editor and design pages — the preview panel. **How to test:** Open a site's design view on a flaky or slow connection (mobile Safari is the easiest way to reproduce). If the preview stumbles while loading, it should reload itself and come up normally rather than showing a red error block. **Watch for:** A red error panel containing technical text (dependency counts, package names, mentions of bundles). Nothing like that should ever reach the preview screen now — if it does, that's a regression.
Catalog-backed sections (products, menus, properties, listings) sometimes rendered as an empty grid in the design preview even though the items existed — they now stay filled while you switch designs, regenerate, or refresh. **Where:** Site editor, Design phase — any catalog section or listing page (for example an "All Products" page on a store site) **How to test:** Open a store or catalog site in the design editor, switch between designs (D1/D2), then open the products page. The product cards should be there every time, not just on the first load. **Watch for:** An empty catalog grid, or an item count that reads zero when the items clearly exist in your content library.
Previously, generating a new design by applying a different style ("See in Other Styles") could silently lose all progress if you closed the browser tab while it was working — despite the "this takes a minute" message suggesting it was safe to do so. That work now continues on our servers and lands as a new design automatically. **Where:** Site editor → Designs → "See in Other Styles" → pick a style. **How to test:** Start a style adaptation, then close the browser tab immediately. Reopen the site editor after a minute or two — the new design should appear in your Designs list without you having to redo anything. **Watch for:** A style adaptation that never completes or never shows up as a new design after closing and reopening the editor.
Typing a website idea into the prompt box on the homepage and hitting Generate now takes you straight into the site builder with your prompt already sent — instead of dropping you on the dashboard and making you type it again. **Where:** Homepage prompt box (the "Create a website for..." field), then Generate. **How to test:** From the homepage, enter something like "Create a website for a furniture company" and click Generate. You should land in the Site Builder for a brand-new site, with your prompt already posted as the first chat message and the assistant replying. Signing in (rather than registering) from that same flow should also resume the prompt instead of stopping at the dashboard. **Watch for:** Being redirected to the dashboard, an empty chat asking "What's your business or site name?", or a site that fails to get created.
If you describe your business without naming it (common when starting from the homepage prompt or the dashboard's "What are we building today?" box), the intake form now asks "What's your business called?" as its first question — instead of you discovering at the very end that Generate is blocked on a missing name. **Where:** The question form that appears after your first message in the site-builder chat. **How to test:** 1. Start a new site with a description that names no business (e.g. "a family-run Italian restaurant with online reservations"). 2. The intake form's first question asks for the business name. 3. Describe a business WITH a name ("a restaurant called Bella Napoli") — the question is skipped. **Watch for:** We never invent a name for you — leaving the question blank is allowed, and Generate still requires a name before it unlocks.
Renaming your workspace or changing its primary colour failed with a red error banner and silently reverted on reload. Both now save and persist. **Where:** Workspace settings → General **How to test:** Change the Organization Name and/or Primary Color, click Save Changes, then reload the page — the new values should still be there. **Watch for:** The error banner reappearing, the colour swatch resetting to blue after a reload, or the Organization Type field showing "Standard" instead of your actual workspace type.
Forms on your second design now work the moment it appears, instead of showing a red error box until you refreshed the page. Separately, buttons whose text matches their background colour — white-on-white, invisible — are now flagged automatically. **Where:** Design page → the D1 / D2 design switcher, and the Issues panel in the editor. **How to test:** 1. Generate a new site and wait for both designs to finish. 2. Click straight to D2 without refreshing, and scroll to the contact form. It should render its real fields — no red "Form config missing" box. 3. Switch back to D1 and confirm its form still renders too. 4. In the editor's Issues panel, a button styled with your theme's primary colour and matching text colour is now reported as low-contrast. **Watch for:** A form that renders on one design but not the other, or a design whose form fields differ from the ones you configured. Also watch for the Issues panel over-reporting contrast on buttons that only *hover* to a matching colour — that is correct styling and should stay unflagged.
Kicking off a new design now gives you a clear confirmation, and the "Generating…" indicator survives a page refresh so you always know a design is on the way. **Where:** Site builder → design page → "+ New" (generate a new design) **How to test:** Start a new design from the design page. You should get a confirmation explaining it takes a few minutes, runs in the background, and that your existing designs stay fully usable. Refresh the page while it's still generating — the "Generating…" tab and progress should still be there, and the new design should appear on its own the moment it's ready. **Watch for:** A refresh that drops back to a plain preview with no generating indicator, a "Generating…" tab that never clears, or a finished design that only shows up after a manual refresh.
Voice calls to your AI agent occasionally lost access to your site's real data and fell back to a generic, canned assistant that couldn't answer anything specific — this is now fixed, and the assistant rides out brief hiccups instead of giving up. **Where:** Voice calls to your site's phone number (and the Mondovo WhatsApp assistant number). **How to test:** - Call your site's voice agent number and ask something that requires real data (e.g. "what are your hours?" or "do you have any openings this week?") - Confirm the assistant answers using your actual site content, not a generic scripted response - If a request briefly fails, confirm the assistant treats it as a momentary hiccup ("having trouble reaching your account, try again in a moment") rather than acting like it has no way to look things up **Watch for:** The assistant reverting to a generic, tool-less persona for an entire call; answers that don't reflect the caller's actual site or account data.
Fixed a rare issue where a WhatsApp voice call placed during a platform update could lose access to its tools and be unable to answer questions for the rest of the call. **Where:** WhatsApp voice calls to any site with the voice bot enabled. **How to test:** - Place a WhatsApp voice call to a site with voice enabled during or right after a platform deploy. - Confirm the assistant can still answer business-specific questions instead of falling back to a generic, tool-less response. **Watch for:** A voice call that suddenly can't answer any business-specific questions for its entire duration — that would indicate the fallback persona is still being triggered.
The Site Assistant chat now reliably stays scrolled to the newest message, and reopening a chat lands you at the bottom ready to type — no more manual scrolling on mobile. **Where:** Site editor → Assistant panel (right rail and mobile sheet) **How to test:** Open a long existing chat on mobile — it should open at the most recent message. Send a prompt and watch the response stream in; the view should stay glued to the bottom instead of jumping. **Watch for:** Scrolling up to read earlier messages should still show the "New" jump pill and must not yank you back down mid-read.
Account Settings could not load your linked sign-in methods, and the account menu showed a plan you were never on. **Where:** Avatar menu → Account Settings, and the plan badge in the avatar menu itself **How to test:** 1. Open the avatar menu. The plan badge should match your actual subscription (Free, Starter, Growth, Pro, or Partner). 2. Click Account Settings and scroll to Linked Accounts. 3. Your existing sign-in methods should be listed with a "Connected" badge — no red error. 4. A provider you have already linked should never offer a "Link Account" button. **Watch for:** "Failed to load linked accounts" reappearing; a provider you use to sign in showing as "Not connected"; a plan badge reading "Enterprise" or any plan you do not pay for; the Current Plan on the Settings page disagreeing with the badge in the menu.
Follow-up fixes to the recent chat redesign: the copy button in AI chat now tells you when copying fails instead of doing nothing, and pages with custom letter-spacing (marketing pages, templates) no longer have it silently flattened. **Where:** Any AI chat panel (site editor assistant, dashboard assistant, blueprint chat); marketing/landing pages and site templates. **How to test:** 1. Hover an assistant message and click the copy icon — it should still copy normally and show the brief confirmation. 2. Visit a landing page or template that uses tighter/looser letter-spacing (e.g. a hero headline) — the custom spacing should render as designed instead of looking uniformly default. **Watch for:** Copy silently doing nothing with no error shown; headings on marketing pages or templates looking like default spacing when the design intends something tighter or looser.
The Mondovo assistant on our WhatsApp line can now actually work on your sites — check status, answer product questions, and make changes — with the same understanding it has inside the editor. **Where:** Message or call Mondovo's WhatsApp number. Link your number first from Dashboard → Settings → Account. **How to test:** 1. Link your WhatsApp number, then message the Mondovo number. 2. Ask about your sites ("what sites do I have?", "is my site published?") — you get real answers. 3. If you have more than one site, tap a site from the quick list to choose which one to work on, or just name it. 4. Ask for a change ("publish my site", "add an About page") — the assistant shows a summary with Confirm / Cancel buttons. Nothing happens until you tap Confirm. 5. Not linked yet? Ask a product question and you still get a helpful answer plus a one-tap link to connect your account. **Watch for:** Confirm buttons should run the action once and then expire; a stale or someone else's button must not do anything. Replies should read cleanly on a phone (no raw markdown), and the assistant must never mention how it's built.
The Mondovo assistant on WhatsApp is now built for working on the go: refer to any site by name, get a screenshot or a share link in the chat, check the numbers that matter, and even send a photo to use on your site. **Where:** Message Mondovo's WhatsApp number. Link your number first from Dashboard → Settings → Account. **How to test:** 1. Refer to a site by name ("show me the bakery site", "switch to Online Maximizer"). If two sites share a name, tap the right one from the list. 2. Ask to "see" or "preview" a site — you get a screenshot right in the chat, or a tappable preview link when there's no image yet. 3. Say "share the link" / "send this to my client" — you get a preview link with an "Open preview" button to forward. 4. Ask the on-the-go questions: "is it live?", "any leads today?", "how many visitors this week?", "did my domain verify?", "what's my plan and how many credits are left?", "show me version history". 5. Send a photo. With a caption ("use this as the hero"), you get a Confirm / Cancel summary. With no caption, you get quick buttons — Hero image, Save to library, or Cancel. The photo is saved to that site's library either way. **Watch for:** Every change still needs a Confirm tap and nothing runs until you tap it. A photo you send twice should only be handled once. If you haven't picked a site yet, the assistant asks which one rather than guessing. The assistant should never mention how it's built.
The Share Preview link couldn't be selected or copied reliably on mobile, and the copy button had no visible label. **Where:** Site editor → Share (toolbar Share icon) → Preview URL **How to test:** 1. Open Share Preview on a mobile device or narrow browser window. 2. Tap the Preview URL field — the full link should be selectable. 3. Tap "Copy Link" — it should show a labeled "Copied!" confirmation. 4. On a device that supports native sharing, a "Share" button should appear next to Copy Link and open the OS share sheet. **Watch for:** The Preview URL field not being selectable/tappable; the copy button showing only an icon with no confirmation; the Share button appearing on desktop browsers where it isn't supported.
The AI chat panels across the dashboard and site editor got a cleaner look — assistant replies now read more like plain text than chat bubbles, and you can copy any message with one click. Text sizing and spacing were also unified across every screen for a more consistent feel. **Where:** Any AI chat panel (site editor assistant, dashboard assistant, blueprint chat) and general dashboard/editor pages. **How to test:** 1. Open an AI chat panel and send a message — assistant replies should appear as clean, wide text rather than a narrow bubble. 2. Hover an assistant message and click the copy icon — the message text should copy to your clipboard with a brief confirmation. 3. Browse a few dashboard and editor pages — headings, labels, and body text should feel consistent in size and spacing. **Watch for:** Copy button failing silently, chat text overflowing its container on mobile, or inconsistent letter-spacing/text sizing on pages using custom fonts.
There were two different pages both called "Organization Settings", and the account menu mixed your profile in with features like Design boards. Features now live in the top nav, and all workspace settings live on one page with tabs. **Where:** Top navigation bar, and the avatar menu (top right) **How to test:** 1. Look at the top nav: Sites, Design boards, Agency, and Refer & Earn are now there, and the current section is highlighted. 2. Open the avatar menu. It now holds only Account, Workspace settings, Billing & credits, your organizations, and Sign Out. 3. Click Workspace settings. Tabs across the top: General, Team, Billing, Integrations, Advanced. 4. Check the Billing tab shows the plan you actually pay for. 5. Deleted sites and Leave/Delete organization now live under Advanced. API keys, Figma, and connected AI assistants live under Integrations. 6. An old `/dashboard/settings` bookmark should land on the Integrations tab. **Watch for:** A settings section you used that you can no longer find under any tab; the Billing tab naming a different plan than the badge in the avatar menu; a Figma or AI-assistant connection that returns you to a blank page after authorizing.
Changing to a lower plan used to count sites you had already deleted against your new plan's limits, telling you to "delete N sites" you could no longer even see. Deleted sites are now excluded from that check, and if usage can't be verified the downgrade is blocked instead of silently allowed. **Where:** Dashboard → Organization Settings → Billing → Change Plan **How to test:** Trash a few draft or published sites so your visible site count is under the new plan's limit, then attempt to downgrade — it should succeed without asking you to delete sites you can no longer see. **Watch for:** A downgrade being blocked for a plan-limit reason when your visible (non-trashed) site count is actually within the new plan's limits.
When a client's chosen design is applied to a different site, its catalog content (menu items, listings, product cards, etc.) now comes along, so the design lands with real content instead of empty sections. **Where:** Design Boards → "Mark as client's choice" → "make it live on {site}", when the picked design and the target are different sites. Also the same cross-site apply path used by the decision action. **How to test:** Pick a design that shows a catalog section (a restaurant menu, a properties/rooms grid, a product listing) as a client's choice and apply it to a different, empty site in the same workspace. Open the target site and confirm the catalog section shows the same items — with the same highlighted/featured picks and order — that the original design showed. Apply it a second time and confirm nothing duplicates. **Watch for:** If the target site already has its own items for that catalog, those are kept and the design uses them (it does not overwrite or duplicate). Highlighted items and their order should carry across. Images should appear immediately (they are referenced, not re-uploaded). Applying the design never fails just because content couldn't be brought over — the design still lands.
Generated sites can now feature a real ambient video in the hero — a slow cinematic pan, drifting clouds, ocean waves — sourced automatically from free stock footage, even without a connected video account. The clip is stored on our own CDN so published sites never depend on a third-party host. **Where:** Automatic during site generation. When the design calls for motion, the AI plans a single hero/atmosphere video slot; the platform fills it with a matching ambient clip (or falls back to a strong hero image when motion doesn't fit). **How to test:** 1. Generate a new site for a business where motion suits the brand (a cafe, a spa, a travel or real-estate site). 2. Open the design — the hero may show a muted, auto-playing, looping background video with a still poster image that displays until the clip loads. 3. Publish the site and confirm the hero video plays on the live site and the video URL points at our own storage (not pexels.com / pixabay.com). 4. If a video-capable creative account is connected, that account is still used first — stock video is only the free fallback. **Watch for:** A hero video that hotlinks a stock CDN instead of our storage; a stock photo landing in a slot that was meant to be video (or vice-versa); a 4K clip that makes the page heavy (clips are capped at 1080p); a missing poster image before the video loads; or a video slot appearing on sites where motion doesn't suit the design.
Searching your sites now matches each site on its own name instead of its folder's name, so a search for one brand stops pulling in every other site filed alongside it. **Where:** Dashboard → Builds / Designs / Chats tabs → the "Search sites" box **How to test:** Search for the name of a site that sits alongside other, differently-named sites. Only sites whose own name matches (plus smart matches on their content) should appear. Clear the search and confirm the full list returns. **Watch for:** A site you expected to find going missing — especially one still named "Untitled Site" or "New Site". Those are found by their content rather than their name, so they should still surface when you search the business name.
Organization owners can now permanently delete an organization from its settings page, with clear guardrails so it can never strand your account or destroy paid work. **Where:** Dashboard → Organization Settings → "Delete Organization" (owners only) **How to test:** 1. As the owner of a free-plan organization that has no active sites, open Organization Settings. 2. The "Delete Organization" card shows your plan and active-site count. Click Delete, type DELETE to confirm, and confirm. 3. You are switched to another organization and returned to the dashboard; the deleted org no longer appears in the switcher. 4. Try the same on an org that is on a paid plan, still has active sites, or is your only organization — the button is disabled with an inline note explaining exactly what to fix. **Watch for:** The button must stay disabled (and the note accurate) whenever the org is on a paid plan, has one or more active sites, or is the account's only organization. After deleting, the org must vanish everywhere it was listed, and you must never be left without a selected organization.
Hovering a design card on your dashboard now cycles through that site's design options again, and design thumbnails have returned to the gallery and to boards. **Where:** Dashboard → Designs tab (hover any card with more than one design) **How to test:** Open the Designs tab and hover a card for a site with two or more designs. The thumbnail should cycle every ~0.9s with dot indicators at the bottom. Leaving the card returns it to its resting image. The card's "N designs" pill should match the number of frames it cycles through. **Watch for:** Cards that stay on a single static image, thumbnails that render blank or white, hover cycling that snaps to a different design on the first frame, or a design count that doesn't match the number of frames shown. Sites generated before today may still show a single image until their previews finish regenerating.
You can now download a design board's screenshots and PDF in mobile (phone) view, not just desktop — so clients see exactly how each option looks on a phone. **Where:** A client's board → Export button → pick Desktop or Mobile, then Download screenshots (ZIP) / Download PDF. **How to test:** Open a board with a few pinned designs. Click Export, switch the device toggle to Mobile, and choose "Capture mobile screenshots" (takes a few seconds per design). Once done, export again in Mobile mode — the ZIP images and PDF pages render in phone proportions. Switch back to Desktop and confirm those exports are unchanged. **Watch for:** Mobile export only includes designs that have a mobile capture; any without one are skipped with a note. Mobile never falls back to the desktop image.
Design boards are now visible right from your dashboard instead of being tucked inside a client's menu. **Where:** Your dashboard — the user menu (top right) now has a "Design boards" entry, and any client card with saved boards shows a "Boards (N)" chip you can click straight through. **How to test:** 1. Open your dashboard. 2. If a client already has one or more boards, its card (or list row) shows a "Boards (N)" chip — click it to jump into that client's boards. 3. Open the user menu (top right) and click "Design boards" to see every board across all your clients, grouped by client, with thumbnails and shared / picked badges. Click any board to open it. **Watch for:** The overview always reflects the organization currently selected in the dashboard; switching organizations updates the list. Clients with no boards simply don't show a chip.
Correcting a design board is now effortless — the pin menu shows exactly which boards a design is already on, and you can move designs between boards or delete a whole board when it's no longer needed. **Where:** The pin (📌) button on any design in the gallery or shared preview; a client's Design boards page and any board's detail view. **How to test:** 1. Open a site's gallery, click the pin button on a design. The menu now shows every board with a checkmark on the ones this design is already on. Click a checked board to remove it; click an unchecked one to add it — the design can live on several boards at once. 2. After adding, the success toast has an "Undo" — click it to remove the pin you just made. 3. On a board, open a design's "Move to…" menu (folder icon) and pick another board. The design moves over with its label and presenter notes. If the target already has that design, it's simply removed from the current board. 4. On a board, open the "…" menu in the header and choose "Delete board". Confirm — it warns if the board is shared or has a recorded client choice — and you're returned to the boards list. A shared link to a deleted board stops working. **Watch for:** Checkmarks that don't match reality (a board that should be checked but isn't), an "Undo" that doesn't remove the pin, a move that drops the label/notes, or a deleted board still opening from its old share link.
Fixed a bug where a hero video slot could end up showing a broken video player instead of falling back to the poster image, and improved how the best stock video clip is chosen for a hero. **Where:** Automatic during site generation, for sites where the design includes a hero or atmosphere background video. **How to test:** 1. Generate a site for a motion-forward business (a video production studio, creative agency, or cinematic travel/hospitality brand). 2. Confirm the hero shows either a real playing background video or a clean static poster image — never a broken/empty video player. 3. Try a niche concept where stock footage has no close match; confirm it degrades gracefully to a poster image rather than a broken player. **Watch for:** A broken or blank video player in the hero, or a video that ignores the ideal clip length in favor of a longer/higher-resolution clip that doesn't loop as well.
The AI planning chat could occasionally show a raw, garbled reply instead of a normal message when the response had a small extra formatting glitch at the end. That case is now handled cleanly. **Where:** Site-planning chat (blueprint chat), any conversation turn. **How to test:** Have an extended back-and-forth in the planning chat across many turns; replies should always render as normal formatted text, never as raw unformatted text with stray characters at the end. **Watch for:** Any reply that still shows raw brackets/braces or looks unformatted — that's this same class of bug resurfacing.
Typing feedback on a shared design presentation could get interrupted mid-sentence — characters like +, -, and n were being caught by the presentation's zoom/navigation shortcuts instead of landing in the text box. Typing in the name or comment field now always works as expected. **Where:** Shared board link → Present mode → client feedback form **How to test:** Open a shared, presentable board as a viewer, start Present mode, and type a comment containing "+", "-", or the letter "n" — the characters should appear in the field instead of zooming the screenshot or toggling notes. **Watch for:** any remaining keyboard shortcut firing while a text field inside the presentation overlay has focus.
Fixed several issues that could cause the ambient hero video feature to silently fall back to a static image, or fail, on some sites — and motion-forward businesses now get it by default. **Where:** Automatic during site generation, same as the earlier cinematic hero video feature — most noticeable for video production, creative agency, and other motion-forward or atmosphere-led businesses. **How to test:** 1. Generate a site for a motion-forward business (a video production studio, creative agency, or cinematic travel/hospitality brand). 2. Confirm the hero shows a muted, auto-playing, looping background video with a poster image visible before it loads. 3. Publish the site and confirm the video still plays on the live version. **Watch for:** No hero video appearing on a clearly motion-forward site, or a design failing to save because a planned video slot never resolved.
Design screenshots that failed to capture under load (or on a site with many designs) used to get stuck missing permanently, since a single slow capture could time out the whole request before anything was saved. Capturing now retries transient timeouts and picks up where it left off across repeat visits, so previews fill in instead of staying blank. **Where:** Dashboard and gallery — design preview thumbnails **How to test:** Open a site with several design variations that haven't been screenshotted yet, and revisit the dashboard/gallery a couple of times — previews should progressively fill in rather than staying blank forever. **Watch for:** a design whose code doesn't compile — that one will correctly keep failing, since it's a real data problem, not a timeout.
You can now move one or many sites from one organization to another, right from your dashboard — with bulk multi-select. **Where:** Dashboard → hover any site card (or list row) and tick its checkbox. A "N sites selected" bar appears at the bottom → **Move to organization…** → pick the destination → **Move**. **How to test:** 1. Open the dashboard on an organization where you are an admin or owner. 2. Select one or more sites using the checkboxes (works in both grid and list view, on the Builds, Designs, and Chats tabs). 3. Click **Move to organization…**, choose another organization you also administer, and confirm. 4. Switch to the destination organization — the moved sites appear there with all their content, contacts, and settings intact. **Watch for:** - The destination picker only lists organizations you administer; you must be an admin or owner of both the source and the destination. - Everything tied to a site (its pages, images, forms, contacts, analytics connections) moves with it. Published sites keep their live URL. - If the destination organization would go over its plan's site allowance, you'll get a heads-up after the move.
Fixed a handful of bugs found while hardening the new organization delete and move-sites features: the Delete button could stay grayed out forever, a slow double-click on "Create site" could create two identical sites (and trigger AI generation twice), a deleted organization's name could never be reused, and splitting a client's sites into a new client could silently drop that client's logo. **Where:** Dashboard → Organization settings; Dashboard → "+ New Site" **How to test:** 1. Open Organization settings as an owner — the Delete button should become clickable normally (not stay disabled). 2. Click "+ New Site" rapidly twice in a row — only one site and one client should be created. 3. Delete an organization, then create a new one with the exact same name — it should succeed. **Watch for:** any org delete/move action returning a 500 instead of a clear reason; a split-off client missing its logo.
You can now add any design to a design board straight from the single-design editor — no need to switch to the gallery first. **Where:** Open a site in the editor (Focus Mode). Hover any design chip (D1, D2…) in the top toolbar, or use the pin button next to the design switcher for the design you're currently viewing. **How to test:** 1. Open a site that has more than one design. 2. Hover a design chip you are NOT currently viewing — its preview card now shows a pin on the right. Click it and choose one or more boards (or create a new one). 3. Click the pin button beside the design switcher to add the design you're currently viewing. 4. Open the client's Design boards to confirm the design landed on the board(s) you picked. **Watch for:** The board picker should stay open while you tick boards — moving your mouse onto it must not dismiss the hover card. Pins are always tied to the exact design you pinned, even after designs are reordered or deleted.
Your site editor's AI assistant can now collect designs onto a client's design board for you — just say "pin this design to a board" and it adds the design you're viewing, or "pin this to the Client Presentation board" to file it under a named board (it creates the board if it doesn't exist yet). You can also ask "what boards does this client have?" and it lists them with design counts and whether each is shared or decided. **Where:** Site editor → AI assistant chat (the assistant bar / rail). **How to test:** - Open a build's editor, ask the assistant "pin this design to a board named Client Presentation", then confirm the design appears on that board via the dashboard (client card menu → Design boards). - Ask "how many designs have I collected for this client?" / "list my design boards" and check the reply lists boards with counts, shared, and decided status. - Ask to pin the same design again and confirm it says the design is already on the board (friendly no-op, not a duplicate). **Watch for:** No board IDs or "variation" jargon in the assistant's replies; the pin should be attributed to you (not the org owner); pinning defaults to the design currently being viewed when you don't name one.
Fixed cases where dashboard search missed unnamed sites or cut off results too early, and where a design that already had a build was still shown as needing one. **Where:** Dashboard → Builds / Designs / Chats tabs → the "Search sites" box, and the Designs tab's Pending/Used split. **How to test:** - Search for a site still named "Untitled Site" or "New Site" using the name actually shown on its card (which may be its client's name) — it should now surface. - Run a broad search likely to match many sites and confirm results aren't capped too early. - Find a design that already has a live build and confirm it appears under "Used", not "Pending". **Watch for:** A design with an existing build still showing as "Pending" (which invites creating a duplicate build), or a site you expect to find missing from search results.
Presentation mode for design boards now lets you zoom into a design's screenshot, preview the live design at four device sizes, and export cleaner PDFs. **Where:** A shared board's presentation view (open a board and click "Present", or open a share link with presentation mode). PDF export from the board page. **How to test:** 1. Open a board and start Present. On a design's snapshot, scroll (or use the on-screen +/− buttons) to zoom in, drag to pan, and double-click or the fit button to reset. Arrow keys still move between designs; Esc first exits zoom, then closes the deck. 2. Switch a design to the live view and try the Desktop / Laptop / Tablet / Mobile buttons — the live preview re-renders at that width, scaled to fit the screen. 3. Export the board as a PDF and open it — there is no floating "Ask AI" bubble baked into the pages. **Watch for:** Zoom should never fight the keyboard (arrows move slides, not the image); the four device sizes should match what you see in the site editor; the exported PDF should contain only the board content.
Sites you create through the public API or a connected AI assistant (Claude, ChatGPT, etc.) now each get their own client — one client per site, exactly like the "+ New Site" button in the dashboard. Previously every API/assistant-created site was filed under whichever client was oldest in your account, so they all piled into a single client and the newest ones could go missing from listings. **Where:** Dashboard → your client list (each API/assistant-created site now shows as its own client), and any AI assistant connected to your account. **How to test:** Connect an assistant (or use your API key), create two sites, then list your sites — both appear, each under its own client named after the site. Listing sites now shows every site in your account, not just one client's. **Watch for:** Listing an assistant's/API's sites is now scoped to your whole account (organization), not a single client — new sites are always visible. Design boards now need a specific site or client to be named (there's no longer an implicit "default client"). Sites created before this change stay where they are; to consolidate the earlier ones, use the site-move (transfer) feature to move them to the right client yourself.
Background videos on generated sites now load faster, always play, and fall back to a tasteful ambient loop instead of a blank player when no perfect clip is found. **Where:** Any generated site that uses a hero or atmosphere background video. **How to test:** 1. Generate a site for a motion-forward business (e.g. a creative agency, cinematic hospitality brand) so the design plans a video hero. 2. Confirm the hero plays a real, smooth background video. 3. Regenerate or try a niche concept where stock has no match — confirm the hero still shows a moving ambient background (or a clean poster image) rather than an empty/broken player. **Watch for:** A hero video that fails to play, a play button sitting over a still that does nothing, or a "Placeholder Video" title — report these. Background videos should either play or degrade gracefully to a poster image.
Sites created through the public API or connected AI assistants now run the same conversion strategist as chat-built sites: an explicit goal drives the narrative, section flow, CTA rhythm, and coordinated copy — and the planner can design the full page architecture instead of defaulting to a single page. Callers can also state the site's conversion objective directly (e.g. "free trial signups from agencies"). **Where:** Sites created via the API / AI assistant integrations (create_site), visible in the generated design's copy and section flow. **How to test:** Create a site via the API with a section list but thin content and a `goal`. The generated homepage should show a coherent conversion arc (hero promise → proof → objection handling → action), CTAs matched to the stated goal, and no repeated angles across sections. Omit `pages` and the plan should include a full page map behind the navigation. **Watch for:** Chat-built sites regressing (their hero copy must NOT drift to generic phrasing — the planner must not overwrite chat-authored content), and API callers who pass a detailed section list still seeing their sections honored in order.
Some generated designs never loaded — the preview showed a persistent error and clicking around or waiting didn't help, because the design's code had been saved as one giant jumbled file that no amount of small patching could fix. The auto-repair system now recognizes this situation, fixes the underlying typo, and rebuilds the design into its proper sections automatically. **Where:** Site editor → Designs tab → any design that previously showed "Preview Error" **How to test:** Open a design that has been stuck on a persistent "Preview Error". Within one auto-fix cycle the design should load fully, with all sections editable individually. **Watch for:** Designs that load but show placeholder/empty sections afterwards, or section edits that target the wrong part of the page — that would mean the rebuild split the code incorrectly.
Clients viewing a shared design board can leave a 1-5 star rating and comments on each option — no login required — and your team sees a rollup of the results right on the board. **Where:** Any shared board link (`/board/…`) with voting or comments turned on in the Share panel. Results appear on each option's card in the agency-side board view. **How to test:** 1. Enable "Allow votes" and "Allow comments" in a board's Share panel, then open the shared link in a private window. 2. Rate an option and leave a comment; you'll be prompted for a name the first time. 3. Reload the link and confirm your rating still shows as selected. 4. Back in the agency view, confirm the option's card shows the average rating and comment count. 5. Turn voting or comments off individually and confirm the corresponding controls disappear from the client's view. **Watch for:** A client's own rating not surviving a page reload; feedback still visible after its toggle is turned off; being able to vote twice from the same visit.
You can now pin any design to a client's Design Board straight from the gallery, then arrange, label, and annotate the collected options on a dedicated boards page — the first step toward sharing them with a client. **Where:** Site editor gallery/explore view → pin icon on any design → pick or create a board. Client's boards live at their dashboard card menu → "Design boards". **How to test:** 1. Open a site's gallery, click the pin icon on a design, and add it to a new board. 2. Open the client's "Design boards" page and confirm the new board and item appear. 3. Open the board's detail page: drag to reorder items, rename an item's label inline, add presenter notes, and use "Open in editor" to jump back to that design. 4. Mark one item as the client's choice (record-only at this stage). **Watch for:** Reordering or renaming that doesn't persist on reload; the pin popover showing stale board counts after adding an item.
You can now gather promising designs from any chat or site onto a single per-client board, present them full-screen on a call, share a clean link so the client can rate options and leave comments, export the set as a ZIP of screenshots or a PDF one-pager, and mark the winner — optionally making it live on a site in one click. **Where:** Dashboard → open a client's card menu → **Design boards**. To add designs, use the **Pin to board** button on a design in the gallery, or the **star** on a design in the explore deck. **How to test:** 1. Open a site with multiple design variations. In the gallery, hover a design and click **Pin to board** (or star one in the explore deck). Pin a couple from different sites/chats for the same client. 2. Go to the dashboard, open that client's card menu, and choose **Design boards** → open the board. Reorder cards by dragging, rename an option, add presenter notes. 3. Click **Share**, turn sharing on, and enable ratings + comments. Open the share link in a private window (no login): rate a couple of options and leave a comment. 4. Back on the board, switch the sort to **Top-rated** to see the front-runner, and read the client's comments on each card. 5. Click **Present** to run the full-screen deck (arrow keys to move, toggle screenshot vs live preview). 6. Use **Export** to download a ZIP or PDF. 7. Click the star on a card → **Mark as client's choice**. Choose **Make it live on a site**, pick a site, and confirm — the design becomes that site's live homepage. **Watch for:** cards showing a shimmer/placeholder when a design's screenshot hasn't been captured yet (it fills in on a later load); the share link returning "Board not found" when sharing is turned off; the site picker in "Mark as client's choice" only listing that client's own sites; and "Top-rated" only reordering the view, never the saved order.
Previously, a design generated with a hidden code defect could be saved looking healthy and only fail when you opened it. Every generated file is now verified before saving; small defects are repaired automatically and instantly, and anything that can't be repaired is flagged for our monitoring instead of slipping through silently. **Where:** Site creation → generated designs (D1/D2 and additional variations) **How to test:** Generate a new site; both designs should open without preview errors. This is a prevention change — the visible effect is the absence of broken designs. **Watch for:** Generation taking noticeably longer than before (the check adds under a second normally), or designs saving with sections missing.
A board's Export button now works — download every pinned option as a labeled ZIP of images, or as a print-ready PDF deck with a cover page and one page per option. **Where:** A client's board detail page → Export button → choose "Download screenshots (ZIP)" or "Download PDF". **How to test:** 1. Open a board with a few pinned designs and click Export. 2. Download the ZIP and confirm each image is named after its option's label (e.g. "01-option-a.png"). 3. Download the PDF and confirm it has a cover page (board + agency name) followed by one page per option; include presenter notes if that toggle is on. 4. Try exporting a board where an option has no screenshot yet and confirm it's skipped with a note rather than breaking the export. **Watch for:** An export with zero exportable options should show a clear error rather than a broken empty file.
A trust-bar or logo-strip section could fail to display entirely when its logo list had been replaced by a single placeholder image instead of the expected list of logos. Generation and auto-repair now recognize this pattern and rebuild the list automatically instead of crashing the section. **Where:** Site editor → any design preview with a logo strip or "as seen on" trust-bar section **How to test:** Open a design whose trust-bar/logo-strip section previously failed to render. It should now display normally with its logos. **Watch for:** A trust-bar section showing no logos at all — that would mean the guard cleared the list instead of recovering it.
Background videos in the design preview now start playing on their own (muted) instead of showing a blank/grey box. **Where:** Site editor preview (any design whose hero or sections use background videos) **How to test:** Open a design that uses a background video in the hero, watch the preview — the video should begin playing automatically within a second. Scroll down to sections with videos further down the page; each should start playing as it comes into view. Switch away to another browser tab and back — playback should resume. **Watch for:** A hero that stays a static grey rectangle with no motion, or lower-in-the-page videos that never start until interacted with.
When a client picks a favorite from their design board, you can now apply that choice directly to a live site — no manual re-creation needed, even if the winning design came from a different site than the one you're publishing. **Where:** A board's detail page → mark an item as the client's choice → "make it live on {site}". **How to test:** 1. On a board, mark an option as the client's choice. 2. Choose to apply it to the same site it came from and confirm that design becomes the active one. 3. Choose a different site in the same client and confirm the design is copied over and made active there. 4. Try applying to a site outside the board's client and confirm it's rejected. **Watch for:** The client's choice should still be recorded even if applying it to a site fails for some reason — the decision and the "make it live" action are independent steps.
A section could show "couldn't be displayed here" when the design's saved content held a single value where the section expected a list (for example, a logo strip whose data had been replaced by one image). The preview's safety layer now catches this pattern and renders the section without the affected list instead of crashing it. **Where:** Site editor → any design preview with list-based sections (logo strips, stats, testimonials) **How to test:** Open a design whose section previously showed "The [section] couldn't be displayed here". The section should now render its heading and remaining content. **Watch for:** List items silently missing in sections that used to render them — that would mean the guard is hiding good data instead of just preventing the crash.
Design boards can now be shared with clients via a link, with two ways to view: a clean grid of options, or a full-screen presentation mode for walking through them live in a call. **Where:** A board's detail page → Share panel → toggle sharing on and copy the link. Add `?present=1` to the link (or use the in-app "Present" button) for the full-screen deck. **How to test:** 1. On a board with a few pinned designs, enable sharing and open the copied link in a private window. 2. Confirm the grid view shows each option with its label and a "View live" link, with no internal IDs or names visible. 3. Switch to presentation mode: step through options with the arrow keys or on-screen chevrons, toggle between screenshot and live preview, and switch the device frame between desktop and mobile. 4. As a signed-in team member (not a client), confirm you can also see presenter notes (press "n"); a client viewing the same link never sees them. **Watch for:** Presenter notes leaking into the anonymous client view; the presentation deck losing its place after toggling screenshot/live.
When a generated site includes a showcase of websites or templates (e.g. an agency's "sites we've built" gallery), the images are now real screenshots of curated sites built on the platform instead of generic stock photos or placeholder graphics. **Where:** Any generated site with a template/website showcase section — visible in the design preview and editor. **How to test:** Generate a site for a web agency or SaaS business whose brief includes a "showcase of sites/templates we built" section. After generation, the showcase cards should display actual website screenshots (recognizable page layouts), not stock photography of laptops/offices or gray gradient placeholders. **Watch for:** Duplicate screenshots across cards in one showcase (should be all-different), showcase images leaking into non-showcase slots (hero/team/product images must remain photos), and empty showcase images if the curated gallery pool is unavailable (should fall back to stock, never blank).
Asking the assistant to fix broken images now repairs every broken image on the design — including empty image slots and pictures referenced directly in the layout — instead of sometimes replying that it couldn't find anything to fix. **Where:** Site editor → Assistant → "fix all the broken images" (or click a broken image and ask) **How to test:** Open a design that shows gray boxes where images should be, ask the assistant to fix the broken images, and confirm the preview refreshes with real photos. If everything already loads, it now says so clearly. **Watch for:** A design where some images still render as gray placeholders after the fix, or the assistant reporting "nothing broken" while broken images are visibly on the page.
When your site describes an abstract idea, feeling, or an invented product name (like a coined feature or brand name), the AI now recognizes that stock photography can't capture it literally and sources a more fitting image instead of a random literal match. **Where:** Site generation and design assistant image sourcing — any section whose copy names a concept, capability, or made-up term rather than a concrete object. **How to test:** Generate or refine a site with a section describing an abstract capability or invented product name (e.g. a feature called "SPAX" or copy about "trust" or "spatial reasoning") and confirm the resulting image reflects the idea rather than a literal, unrelated stock photo. **Watch for:** A section naming a clearly concrete object (a coffee cup, a wrench, a storefront) getting an unnecessarily abstract or generic image instead of a literal one.
Asking the assistant to add a decorative effect "behind" an image (like a scan animation or a connecting line) could place it fully hidden underneath an opaque photo, making it look like nothing happened. The assistant now layers these effects on top of opaque images instead of burying them. **Where:** Site editor → Assistant → design chat (e.g. "add a scan animation behind this image") **How to test:** - Ask the assistant to add a decorative animation or line effect behind a photo - Confirm the effect is visible over/around the image rather than completely hidden - No need to re-ask — the effect should show up on the first try **Watch for:** A requested decorative effect that doesn't appear at all after the assistant says it applied the change.
The Style tab's Tweaks panel now has Elevation (Flat / Subtle / Raised / Dramatic shadow depth) and Border weight (None / Thin / Bold) controls alongside Corners and Density, so you can dial in a site's shadows and outline weight without touching code. **Where:** Site editor → Page Styles → Tweaks → Style tab **How to test:** - Open Tweaks → Style tab, hover then click through the Elevation options — cards should preview increasing shadow depth - Try Border weight → None on a site with underline-style or borderless inputs — hovering should NOT box those fields on all sides - Apply and confirm both changes persist after reload **Watch for:** Border-weight hover boxing an underline (`border-b`) or borderless input on all sides — directional dividers should keep their single-edge width.
Photos using blend effects (multiply, darken, screen, etc.) could crush to solid black or blow out to white when you swapped to a very dark or very light palette. The builder now detects when a palette would break a blend mode and neutralizes it automatically, so the image stays visible. **Where:** Site editor → Page Styles → Tweaks → Palette (affects any page with blended imagery) **How to test:** - Open a site with a hero image using a blend/tint effect, switch to a dark palette preset (e.g. "Midnight" or "Noir") — the image should stay visible, not disappear into a black rectangle - Switch to a light palette and confirm a light-crushing blend also stays visible - Publish and confirm the fix carries through to the live site, not just the preview **Watch for:** An image with a decorative blend effect that goes fully black or white after a palette change.
A timing issue during first-time signup could create two identical "My Workspace" workspaces for the same new account. Signing up now always lands you in a single default workspace. **Where:** Sign up → onboarding welcome screen (first workspace creation). **How to test:** Complete onboarding as a brand-new account, including retrying/refreshing the welcome step, and confirm only one "My Workspace" appears in the workspace switcher afterward. **Watch for:** Any new account ending up with two "My Workspace" entries, or onboarding failing to create a workspace at all.
The Palette tab now offers 12 curated whole-palette presets (primary + accent + background tone staged together in one click) and the Fonts tab shows 9 pairings as two-column cards rendering the real heading/body typefaces instead of cramped "Aa" chips. **Where:** Site editor → Page Styles → Tweaks → Palette / Fonts tabs **How to test:** - Open Tweaks → Palette, click a preset (e.g. "Midnight") — primary, accent, and background should all update together, while the individual Primary/Accent/Background controls still work as fine-tune overrides on top - Open Fonts — confirm each pairing card renders its own heading and body typeface - Pick a preset, then switch design variations — the preset highlight should clear rather than staying rung on a stale swatch **Watch for:** A background-tone swatch appearing highlighted when its color doesn't match what's actually staged.
In the site editor's style tweaks panel, picking a color palette could leave a background-tone swatch highlighted even though its color didn't match what was actually applied — and switching designs could leave a stale highlight from the previous variation. Highlights now always match what's really staged. **Where:** Site editor → Style tab → Tweaks → Palette and Background tone swatches. **How to test:** Pick a palette preset and confirm only the palette tile rings, not an unrelated background-tone swatch; then switch design variations and confirm old palette/tone highlights clear and resync to the new variation's colors. **Watch for:** A background-tone or palette swatch staying highlighted after picking a different one, or after switching variations.
When you switched between designs (e.g. D1 → D2) while an edit was still running on the first one, the "Just a moment longer…" processing message bled into the second design's fresh chat. The indicator is now tracked per-design: it stays on the design the edit was started on, disappears when you switch away, and reappears if you switch back while it's still running. **Where:** Site editor → Assistant panel, when switching between designs (D1/D2/…) mid-edit. **How to test:** On a site with 2+ designs, send an edit on D1, then immediately switch to D2 before it finishes. D2's chat should be clean — no "Just a moment longer…" card. Switch back to D1 while it's still running and the indicator should still be there. When it finishes, the result lands on D1. **Watch for:** The thinking indicator should not appear on the design you switched to; switching back to the busy design should restore it; on multi-page sites the indicator should also stay scoped to the page it was started on.
Some chat edits that only changed page content (not code) skipped saving a restore point, so Undo and version history couldn't bring back the version before that edit. Those edits now save a version like any other change. **Where:** Site editor → chat refinement → Undo / version history. **How to test:** Ask the assistant for a content-only change (e.g. rename a footer link or FAQ question) on a data-driven site, then open version history or hit Undo and confirm the prior version is restorable. **Watch for:** A content-only edit that applies successfully but doesn't appear as a restorable step in version history.
When you asked the voice assistant to make a design change, it would sometimes just say "I'm working on a fix" and then stop — you had to repeat yourself before it actually did anything. It now speaks its heads-up and runs the change in the same breath, so a single request gets acted on. **Where:** Site editor / design surface → Design Assistant → Voice mode (microphone button). **How to test:** - Start a voice session and ask for an AI design change (e.g. "make the trust section responsive on mobile" or "add a testimonials section"). - Confirm the assistant gives a short heads-up AND begins the change immediately — you should NOT have to ask a second time. **Watch for:** The assistant acknowledging a request ("I'm working on that", "let me update that") without the change actually starting; changes only firing after a repeated request.
Asking the assistant to redesign an entire section (or a repeating list like pricing cards) could be misread as "replace this one image" — spending an image-generation credit and then failing with "I generated the animated graphic but couldn't apply it," without ever doing the requested redesign. The assistant now recognizes whole-section requests up front and routes them to the normal redesign path instead. **Where:** Site editor → chat/refine on a selected section **How to test:** Select a whole section (or a dynamic list like pricing cards or steps) and ask the assistant to redesign it — it should apply a real redesign, not generate an unusable animated graphic. **Watch for:** Requests to swap a single icon or image should still route correctly to the image-replace path.
When cloning a design with modifications and asking to swap images for videos, the AI sometimes invented fake video files that don't exist — leaving the section as a blank black box. It now only uses your site's actual uploaded videos, and keeps the existing image in place if no real video is available. **Where:** Site editor → clone a design → describe modifications (e.g. "replace the hero image with a video") **How to test:** Upload a video to the site, then clone a design and ask to replace an image with a video — the real uploaded video should appear, never a blank/black placeholder. **Watch for:** If no video was uploaded, the request should keep the existing image rather than inserting a broken placeholder.
If a clone-with-modifications request took too long, the Review Sections modal could show a raw, confusing error like "Unexpected end of JSON input" instead of a helpful message. It now shows a plain-language message when this happens. **Where:** Site editor → clone a design with modifications → Review Sections modal **How to test:** Trigger a slow clone-with-modifications request that times out (or simulate a gateway timeout) — the modal should show a friendly, actionable message instead of a raw error. **Watch for:** Normal (fast, successful) clone requests should be unaffected.
Generating a second design variation could sometimes save with placeholder or missing images instead of real photos. Images for Design 2 are now generated and confirmed before the design is saved, so what you see is complete. **Where:** Site editor → Generate → Design 2 variation **How to test:** - Generate a new site with two design variations - Open Design 2 and confirm every image slot shows a real photo, not a placeholder or broken image - Repeat across a couple of different business types to confirm consistency **Watch for:** Design 2 showing empty or placeholder image boxes right after generation.
Some sections (e.g. a Header using certain navigation link patterns) could render blank in the editor's live preview even though the published site looked fine — caused by the preview loading a different, incompatible version of a shared library than the one used at publish time. The editor preview now matches publish exactly, so what you see while editing matches what goes live. **Where:** Site editor — live preview pane **How to test:** Open a site whose Header uses Next.js-style navigation links; the section should render normally in the editor preview instead of blanking out with a per-section error. **Watch for:** Any other section that previously appeared blank only in the editor (not on the published site) should now render correctly in both places.
When adjusting height settings pushed the spacing panel taller than your screen, the Apply and Cancel buttons could scroll out of view with no way to reach them — most noticeable right after swapping in a new image. The panel now scrolls internally while Apply/Cancel stay pinned in place. **Where:** Site editor → select any section/element → Spacing controls (opens automatically after replacing an image) **How to test:** - Replace an image on a section, then open its spacing/size controls - Expand the Height section until the panel would overflow the screen - Apply and Cancel should stay visible and clickable **Watch for:** The panel should still be draggable and cap its height to the viewport on small screens.
Fixed several issues with the "Recreate faithfully" vs "Use as inspiration" choice: choosing "Use as inspiration" no longer risks bleeding the screenshot's UI chrome into your generated photos, and a curated style you picked is no longer silently discarded by later chat messages. **Where:** Site Builder chat (client editor) — after uploading a website/UI screenshot and picking a recreate option. **How to test:** - Upload a screenshot, choose "Use as inspiration", and generate — photos should look like normal generated photography, not fragments of the uploaded screenshot. - Pick a curated style, then continue chatting about design details before generating — the chosen style should still be honored, not overridden. - Upload a logo first, then a design reference screenshot — confirm the logo stays the logo and the screenshot drives the reference matching. **Watch for:** Screenshot UI elements appearing in generated photos under "inspiration" mode, a chosen curated style reverting to a generic look after further chat, or a reference image not being picked up in generated variations.
Upload a screenshot of a website you like and the builder now recreates it far more faithfully — matching its light/dark rhythm, palette, typography, imagery, and (when you choose "Recreate faithfully") its exact section structure and order. **Where:** Site Builder chat (client editor) — attach a website/UI screenshot and describe your business. **How to test:** Start a new site, upload a full-page website screenshot, and say "recreate this design". A control appears asking **Recreate faithfully** vs **Use as inspiration** — pick one. Generate and compare D1/D2 to your screenshot: palette, section order, and imagery should closely match on "Recreate faithfully". **Watch for:** The choice control should only appear for actual website/UI screenshots — never for a logo, product, or team photo. On "Use as inspiration", the design should honor the look but adapt structure to your business.
When you recreate a site from an uploaded design screenshot, the generated photos now echo the subjects, framing, and treatment of the real photos in that reference instead of generic stock imagery. **Where:** Site Builder chat (client editor) — attach a website/UI screenshot as a design reference and generate. **How to test:** - Upload a reference screenshot with distinctive photography (e.g. moody, candlelit interior shots) and ask to recreate it - Compare the generated hero and section photos to the reference — subject, composition, and lighting/tone should feel like they belong to the same shoot **Watch for:** Only the reference's photographic imagery should be reproduced — its UI chrome, overlaid text, and buttons should never bleed into generated photos.
An unrelated edit (e.g. tweaking copy in one section) could sometimes cause the AI to also scramble the order of other sections on the page — for example moving Services above the Hero — without you asking for it. Edits that would reorder sections you didn't ask to move are now blocked, and the page is left unchanged instead. **Where:** Site editor — any AI refinement/edit request **How to test:** Make an unrelated edit request (e.g. "make the CTA button bigger") on a multi-section page — the section order before and after should be identical. Explicitly asking to "move the Services section above the Hero" should still work. **Watch for:** The error message about not being able to safely apply a change should only appear when an unintended reorder was actually about to happen, not for legitimate move requests.
Asking the design assistant to turn a selected image into a background video now opens the stock-video picker (or lets you upload your own) and wires the chosen, playable clip into the design — instead of silently doing nothing or leaving a play button that never plays. **Where:** Site editor → click any image in the preview → chat "replace this image with a video …" **How to test:** Select a hero/section image, ask to replace it with a looping background video. Confirm the stock-video picker appears, pick a clip, and verify the design updates to an autoplaying, looping video with a poster still. Re-open and confirm the video persists. **Watch for:** A request that gets answered with text but no picker; a picked video that doesn't apply on the second pass; a visible play triangle sitting on a static image with no actual video behind it.
The site-wide Tweaks panel (colors, fonts, corners, density) is now organized into three focused tabs — Palette, Fonts, and Style — instead of one long scrolling list. Changing something in one tab still stages alongside changes in another, and a single Apply commits everything at once. A small dot marks any tab with unsaved changes. **Where:** Site editor → Page Styles → Tweaks **How to test:** - Open Tweaks, change a color on Palette and a font on Fonts - Confirm both tabs show a pending dot, then hit Apply — both changes should land together - Check the Style tab on its own (short content) — the Apply/Reset footer should sit flush at the bottom of the panel, not float mid-panel **Watch for:** Switching tabs should never discard staged (not-yet-applied) changes.
Replacing an image with a video file larger than a few megabytes used to fail with a cryptic "Unexpected token" error instead of uploading. Videos now upload directly, the same reliable way stock videos already do, so larger files go through cleanly. **Where:** Site editor → click an image → Replace with video (upload) **How to test:** - Open the image replace modal and upload a video file a few MB or larger - Confirm it uploads successfully instead of showing a JSON/token error - Try an oversized image too — it should fail with a clear message, not a cryptic parsing error **Watch for:** A video or image upload failing with a raw error message like "Unexpected token" instead of a plain-language explanation.
On mobile you could scroll sideways past the edge of the dashboard and see a black empty area. The app shell now stays locked to the screen width and keeps a light background in device dark mode. **Where:** Dashboard and other logged-in pages, on a phone (especially with system dark mode on) **How to test:** Open the dashboard on a mobile browser with OS dark mode enabled, then try to swipe/scroll horizontally — the page should not move sideways and no black strip should appear. **Watch for:** The sticky top header and any pop-up dialogs should still behave normally.
Some older sites created before the current site setup were being redirected to the wrong place instead of opening in the design picker. Editor links now go straight to the design view in one step, keep your original settings (like a chosen style or prompt), and recover more gracefully if the page fails to load. **Where:** Client portal → opening a site from a bookmark, email link, or the site switcher. **How to test:** Open an older/legacy site through a saved link or the site switcher — it should land directly on the design picker, not bounce to Mission Control or take an extra redirect hop. **Watch for:** Legacy sites redirecting to Mission Control instead of the design picker, or losing query params like a chosen style/prompt on redirect.
When you asked the design chat to do something like check your domain, leads, or billing instead of edit the design, it now correctly hands you off to the Assistant every time — including on catalog-style sites (restaurants, listings, etc.) where this used to get missed. Previously, some paths (like voice input or one-click tweaks) could mistakenly mark a diverted request as a successful design change. On mobile, an "Open Assistant" button now appears right in the chat when a handoff happens. **Where:** Client portal → site editor → design chat (including mobile chat). **How to test:** In design chat, ask something clearly outside of design (e.g. "connect my custom domain" or "show me my leads") — you should get a message directing you to the Assistant, with an "Open Assistant" button on mobile, and it should not appear in your edit history as an applied change. **Watch for:** A site-management request being applied/counted as a design edit, or the handoff not triggering on catalog sites (restaurants, real estate, etc.).
The "Try different styles" link in the site-builder planner previously just closed the planner and left you on the same preview. It now reopens design generation so you can compare another look. We also removed a duplicate status badge next to the site switcher that repeated what the header already shows. **Where:** Design preview → "Build my site" planner → "Try different styles" link; site switcher next to the site name. **How to test:** Open a design you haven't built yet, click "Build my site" to open the planner, then click "Try different styles" — a new design variation should start generating instead of nothing happening. **Watch for:** The link doing nothing if you're already at the maximum number of designs for a site.
Any content collection can now become a private, per-customer area — clients sign in and see only their own documents, invoices, or status, and you manage it all from Mission Control. **Where:** Content Library → open a collection → the new **Portal** button. Assign an owner and visibility on each item in the item editor's Settings tab. Customers see their records in the **Records** tab at /account on your published site. **How to test:** 1. In Content Library, open a collection and click **Portal**. Turn on "Customers can see their own records of this type", optionally pick which fields the customer can edit, and save. 2. Open an item, go to the Settings tab, set Visibility to "Customer", and pick an Owner (search your customers by name or email). Optionally attach a private document. 3. On the published site, sign in at /account as that customer — a **Records** tab appears showing only their records, with any editable fields and a download link for the attached document. 4. Back in Mission Control, change the record and click **Notify customer** to email them that it was updated. **Watch for:** A record only appears for a customer when its visibility is "Customer" AND it has an Owner assigned. Private/internal records never show on the public site or in search. Editable fields are limited to the ones you allowlisted — anything else stays read-only for the customer. Attached documents are private and only reachable by the signed-in owner.
Five more creative accounts can now be connected alongside Magnific and Canva — Higgsfield and Runway (image & video generation), Recraft (design-grade images & vectors), HeyGen (avatar videos), and Ideogram (text-perfect graphics). Connect once and browse your existing assets, import them into your site, or generate new images and videos from your own account — no setup or keys required for any of the new providers. **Where:** Site editor → Settings → Integrations → Creative Accounts; also the wizard's Assets tab and the image-replace modal's Connected tab **How to test:** Connect an account via the popup sign-in, then browse and import an asset from the Connected tab; try generating an image from the prompt box. In the site assistant, ask it to list your connected assets. **Watch for:** Connect popup failing to reach the provider's sign-in; an empty asset grid right after connecting (first browse triggers one-time setup and may take a few extra seconds); video generation offered on providers that only do images.
The master "Allow customer login" switch in site settings could previously be overridden back on by other portal-enabled features. Turning it off now always wins, and the control is relabeled to make clear it covers all customer sign-in — bookings, orders, courses, and private records — not just one feature. **Where:** Site editor → Settings → Customer Portal → "Allow customer login" **How to test:** Turn "Allow customer login" off on a site that also has portal-enabled records or bookings. Sign-in should now return 404 and the portal blocks show nothing to visitors, even though other features are still portal-enabled. The dead-end "Activate Client Portal" button has also been removed from Mission Control's Apps view — portals are set up from the content type's own "customers can see their own records" toggle instead. **Watch for:** Existing sites that never touched this switch keep their previous behavior unchanged (login stays on automatically wherever a portal feature needs it).
Suggested next steps on your site dashboard can now be permanently dismissed with an X, and your choice is remembered — a suggestion you've dismissed or snoozed stays gone instead of reappearing. **Where:** Site dashboard (Overview) → Next steps panel. **How to test:** Open a site's dashboard, find a suggested next step (not a checklist item), and click its dismiss (X) control. It should disappear immediately and stay gone after a page refresh. **Watch for:** A dismissed suggestion reappearing after refresh (rollback should only happen if the dismiss request actually failed).
Sites using a carousel/slider component were failing to preview because the underlying carousel library was loading empty. It's now served from a reliable backup source until the primary one is repaired. **Where:** Site editor preview and published sites, for any design using a carousel/slider section. **How to test:** Open a site whose design includes an image or content carousel — it should render and function normally in the preview instead of throwing an error. **Watch for:** Carousels still failing to load or animate.
Fixed several issues with connected creative accounts (Canva, Higgsfield, Runway, Recraft, HeyGen, Ideogram): users who belong to more than one organization could see a working connection reported as "not connected," image requests could unexpectedly come back as a video (or vice versa), and the connections panel could get stuck on a loading spinner if a status check failed. **Where:** Site editor → Settings → Integrations → Creative Accounts, and the wizard/image-replace Connected-assets panels. **How to test:** As a user in multiple organizations, open Creative Accounts on a site belonging to your second organization — an already-connected provider should show as connected, not "not connected." If a status check fails, the panel should show an error with a Retry button instead of spinning forever. **Watch for:** Any provider still showing the wrong connection state for multi-organization accounts.
The site editor card was sometimes labeled "Resume editing" for sites the owner had never actually opened, and the "your site is ready" email could point back to Mission Control instead of straight into the editor. Both now show the accurate state. A handful of dashboard messages still referencing the old "Build full site" button were also updated to match the current "Build my site" wording. **Where:** Sites dashboard, site editor card, and the "your site is ready" email. **How to test:** Generate a fresh design and build it — the editor card should say "Edit site," not "Resume editing," until you've actually made a change. Follow the "site is ready" email link and confirm it lands directly in the editor. **Watch for:** Any dashboard copy still mentioning "Build full site."
Custom functions can now securely read and update your site's own records — like a customer's loyalty-points balance or an inventory count — unlocking server-powered apps such as loyalty programs and reservation managers. **Where:** Site editor → Functions → open a function → new "Data" tab **How to test:** 1. Create or open a function and, in the Data tab, grant it Read or Read & Write access to one of your content collections. 2. Ask the AI to build logic that reads or updates that collection (for example, "add points to the customer's loyalty account when they check out"). Try the "Loyalty Points Updater" template for a ready-made example. 3. Save and Deploy, run the function, and confirm the record changes in your Content view. **Watch for:** Changing a function's data access only takes effect after you Deploy. A function can only touch the collections you grant it — everything else is off-limits. A read-only grant can view records but not change them. Records a function creates for a specific customer stay private to that customer.
Sites brought in through design import were missing an internal marker the comparison screen relies on, so they'd sometimes drop straight into Mission Control instead of showing alongside your other design variations. Imported designs now carry that marker correctly, including after adding another variation to an imported site. **Where:** Client dashboard → import a design. **How to test:** Import an external design and confirm it opens in the design comparison view rather than Mission Control. Add another variation to an imported site and confirm the comparison view still reflects the newly active design. **Watch for:** Older imported sites created before this fix may still need a re-import to pick up the marker.
After you build your site, you now land straight in the editor looking at your homepage — instead of a setup dashboard — with a slim launch guide showing your three next steps. **Where:** Build a site (Build my site → planner) and finish the planner. **How to test:** 1. From a design, click "Build my site" and complete the planner. 2. Confirm you land in the editor showing the homepage (not the dashboard). 3. Check the slim launch strip along the top of the preview: Review your pages → Confirm business info → Publish. Each opens the right surface; the X dismisses it and stays dismissed after reload. 4. If you continue a build in the background, confirm page-creation progress still shows in the editor. 5. On the Overview, the main button reads "Edit site" until you've made an edit, then "Resume editing". **Watch for:** Reviewer / view-only users should still land on Mission Control, not the editor. The launch strip should disappear once the site is published.
Your site's form-notification emails are now tracked end-to-end — if a notification address stops receiving mail (bounced, marked as spam, or blocked), you'll see it instead of silently losing leads. **Where:** Site editor → Settings → Form Notifications (a red "Not delivering" badge appears next to any failing address, plus a warning banner). Failures also surface in the notifications bell. **How to test:** 1. Add a notification email under Settings → Form Notifications. 2. Submit the site's form. The alert now sends one message per recipient, so one bad address can no longer block delivery to the others. 3. If an address hard-bounces or is on the suppression list, its chip shows "Not delivering" with the reason, and your other recipients get a one-time heads-up email. **Watch for:** Delivery tracking covers sites using the built-in email sender. Sites connected to their own email provider send from that provider, so their delivery status is tracked in that provider's dashboard instead.
The editor chat and the dashboard helper now share one name — "Assistant" — and site-management requests typed into the editor are handed off to the right place instead of failing. **Where:** Site editor (build and design views) and Mission Control right rail. **How to test:** 1. Open a built site's editor (Mission Control → Editor). 2. In the chat, type a design edit like "make the hero background darker" — it should apply as usual. 3. Type a clearly site-management request like "publish my site", "connect my domain example.com", "delete the About page", or "show me my leads". The chat replies with a short plain message explaining that's handled by the Assistant on your dashboard, plus an "Open Assistant" button. 4. Click "Open Assistant" — you switch to Mission Control with the Assistant open and your original message prefilled, ready to send. 5. In the pre-generation design view (site/new), the same handoff shows the message only, with no switch button (there's no dashboard there yet). **Watch for:** - Ambiguous or borderline requests (e.g. "make the contact form send to my email", "add a Publish button to the header", "add a pricing section") must still go through the normal edit flow — they are NOT site-management and should apply as edits. - The handoff message must never mention internal tooling — just plain language pointing to "the Assistant on your dashboard". - Selecting an element or attaching an image and then typing should always be treated as an edit, never a handoff.
Your site dashboard now shows a single prioritized "Next steps" list instead of several overlapping cards (Primary Focus, Setup checklist, and launch readiness) that sometimes disagreed with each other. The most important step is highlighted, the next two are shown compactly, and the rest sit behind "View all". The AI assistant's recommendation chips now use the same wording as the list, so you'll never see the same task described two different ways. **Where:** Site dashboard (Overview) for a working site **How to test:** Open a draft site's dashboard — you should see one "Next steps" panel with a highlighted top step and a "View all (N)" toggle; no "Primary Focus" or "Action Queue" cards. Complete a step (e.g. confirm business info) and watch it move to Done. **Watch for:** Checklist actions that stop working (clicking a step should open the right screen — editor, settings, publish dialog), or a mismatch between the panel's wording and the assistant's recommendation chips.
Cleaned up the design-to-live journey so there's one Publish button per screen and one clear step to build your full site. **Where:** Mission Control Overview, and the design preview toolbar in the site builder. **How to test:** 1. Open a site's Mission Control before it's published — the only Publish button now lives in the top bar (the duplicate publish buttons on the welcome card are gone). 2. From a design preview, click "Build my site" — the planner opens immediately with no extra confirmation pop-up. The planner header shows "Takes about 1–2 minutes", and its footer has a "Try different styles" link that takes you back to your designs. 3. The editor entry now reads "Edit site" consistently (top bar, side rail, and the Overview card). **Watch for:** The planner should open on the first click of "Build my site"; the "Try different styles" link should return you to the design view without building.
Your site editor now speaks in plain language and shows where you are in the journey, so it's easier to know what you're looking at and what comes next. **Where:** Site editor (Mission Control) header and Site tabs; the design preview toolbar. **How to test:** 1. Open a site in the editor. In the top header, next to the site name, you'll see a compact **Design → Build → Live** indicator with your current stage highlighted (hover each step for a plain-words tip: "You're choosing a design", "You're editing your site", "Your site is live"). 2. Open the **Site** view. The two sub-tabs now read **Header & footer** (was "Shell") and **Popups & banners** (was "Overlays"). Their headings and empty states use the same plain wording. 3. Open the design preview of a site you haven't built yet. The same journey indicator appears beside the **Build my site** button; while it runs, the button reads **Setting up…**. 4. On a built site, open the **Designs** menu (was "Design Variations") next to the site name to switch between your designs. **Watch for:** the journey indicator should show **Design** for a site still choosing a design, **Build** for an unpublished built site, and **Live** once published. Header/footer and popups-and-banners tabs should open the same screens as before — only the labels changed.
Connected creative accounts now participate end-to-end: the planning chat knows what your accounts can do and proposes an asset kit (hero film, b-roll, product stills, graphics) for asset-heavy concepts — suggesting you pull from your existing assets before generating new ones. During site generation, the design engine can route a few signature slots (hero, brand visuals) to your connected accounts, including true video generation for cinematic heroes on video-capable accounts. **Where:** Blueprint chat during site planning; automatic during generation for connected organizations **How to test:** Connect a video-capable account (e.g. Runway or Higgsfield), then describe a video-storytelling site in the wizard chat — the plan should propose an asset kit and mention your account by name. Generate the site and check whether a signature image/video slot was fulfilled from the connected account (media library shows it tagged as generated). **Watch for:** The chat naming providers that are NOT connected; generation firing on the user's credits without the plan mentioning it; video slots appearing on image-only accounts; unconnected orgs seeing any behavior change at all.
Draft and in-design sites now open at a clear URL — `.../site/<id>/design` — instead of a confusing "new site" link that already had a site attached to it. Copy the address, bookmark it, or paste it into a chat and it takes you straight back to the design editor. **Where:** The design/variation editor for any draft site (Dashboard → open a draft, or the site switcher, or "Go back to design selection" from Mission Control). **How to test:** 1. Open a draft (design-phase) site from the dashboard — the address bar should read `/client/<clientId>/site/<siteId>/design`. 2. Reload the page and switch between design variations; the editor and the variation you picked should stay put. 3. Open an old-style link (`/site/new?siteId=...`) — it should redirect you to the new `/design` address, keeping any extra options (variation, etc.). 4. Open a published/build site — it should still land on Mission Control (`/mc`), and if you manually visit its `/design` URL it should bounce you to Mission Control. **Watch for:** Any redirect loop or flash between `/design` and `/mc`; a variation reset when reloading; a "new site" URL that fails to forward to `/design`.
Adding a collection page (menu, gallery, listings) no longer fails when that collection's content type already exists — the page now attaches to your existing content instead of erroring. Separately, the editor no longer shows "couldn't be saved" warnings caused by the platform's own background bookkeeping racing your edit — a save conflict is now only reported when something genuinely changed your site at the same time. Edit Mode also freezes animations that start after you enter it, so newly-appearing moving elements stay clickable. **Where:** Site editor → Add Page (collection templates); Design Assistant edits; Edit Mode. **How to test:** Add a collection page for a content type that already exists (e.g. re-add a gallery page) — it should succeed and use the existing items. Make several quick edits in a row — no spurious "couldn't be saved" warnings. **Watch for:** A collection page attaching to an unexpected existing content type of the same name; genuine concurrent-edit conflicts still showing the refresh warning (they should).
The Design Assistant now double-checks its own work: if an edit ends up substantially rewriting a section you didn't ask to change, that unplanned change is automatically reverted while your actual request is kept. Separately, clicking an image or icon nested inside a button or card now selects that specific element instead of the whole clickable wrapper, and elements like the announcement bar can now be selected directly too. **Where:** Site editor → Design Assistant edits and element selection. **How to test:** - Ask for a small change to one section on a multi-section page and confirm only that section changes - Click an image inside a linked card or button — the image itself should be selected, not the card **Watch for:** A completion message noting a change was reverted when it shouldn't have been — that would mean the safety check was too aggressive.
Improved how the Design Assistant decides what to edit when you've both selected an element on the page and typed a request. If your wording clearly points at a different section than what's selected, your words now win (people often forget something is still selected); if your request is vague ("make this bigger"), the selection wins. When multiple elements look identical (e.g. the same button text used twice), the assistant now recognizes the ambiguity instead of silently guessing the wrong one. **Where:** Site editor — Design Assistant chat, with or without an element selected. **How to test:** Select one section, then type a request naming a different section by name; the edit should apply to the section you named, not the one still selected. **Watch for:** Requests with genuinely ambiguous targets (identical-looking repeated elements) may prompt for clarification instead of guessing.
Asking the AI to add a background animation to a section could silently do nothing — the animation class was added but the motion itself was missing, so nothing moved. **Where:** Site editor → select a section → ask the AI to add or change a background animation **How to test:** - Select a section and request "add a background animation" - Confirm the animation actually plays after the change is applied, not just a static class name **Watch for:** Any custom animation added via a section edit that doesn't visibly move — the underlying motion definition may still be missing.
The "D1 / D2 / D3" buttons in the editor top bar now clearly read as design variations you can switch between. **Where:** Site editor top bar (the design switcher next to the gallery and "+ New" buttons) **How to test:** Open a site with multiple designs. The pill row now shows a "Designs" label; hovering a pill shows its full name ("Design 2") plus a short description of that design and a preview thumbnail. Screen readers announce "Switch to Design 2". **Watch for:** The "Designs" label is hidden on very narrow screens to save space; the per-pill hover name and thumbnail still appear.
When cloning a live site, the captured reference screenshot used to guide the design was being dropped instead of saved, so the editor never showed it and every later regeneration re-scraped the original site from scratch. **Where:** Site creation → "Clone a live site" → the design/variation editor. **How to test:** Clone a live site, then open the design editor; the reference screenshot of the original site should be visible instead of missing. **Watch for:** Regenerating variations for a cloned site should reuse the saved screenshot rather than re-fetching the source site every time.
When cloning an existing live site, the color palette from the scraped reference is now fully respected instead of occasionally being overridden by an auto-generated default palette that fought the original design. **Where:** Site creation → "Clone a live site" (via `source_url`, including through connected AI assistants). **How to test:** Clone a site with a distinctive color scheme (e.g. a dark-themed site); the generated site should keep those colors rather than drifting toward a generic default palette. **Watch for:** Non-color enrichment (sections, content, creative direction) still runs as before — only the palette step changed for clones.
You can now connect your Magnific and Canva accounts and pull your own assets straight into a site — during planning, while editing, or by asking the assistant. Import an existing design or creation, or generate a brand-new one on the spot, and it lands in your media library ready to place. **Where:** Site editor → Settings → Integrations → Creative Accounts (to connect/disconnect). Then use them in three places: the planning wizard's **Assets** tab, the **Connected** tab in the swap-image dialog, and by asking the AI assistant ("use my Canva logo", "generate a hero with Magnific"). **How to test:** Connect an account in Settings (Canva via popup sign-in, Magnific via API key). Open the planning wizard's Assets tab → your assets appear → click one to add it. In an existing site, click any image → Connected tab → pick or generate. Confirm the resulting image URL is a durable one (served from our CDN, not the provider). **Watch for:** Assets that fail to import (provider URL expired or unreachable) should surface a clear error, not a broken image. Sites with no connected account must behave exactly as before — generation and image swapping are unchanged. On-demand generation is rate-limited per hour.
Some connected AI assistants (Claude, ChatGPT, and other MCP clients) send the "contact info confirmed" flag as the text "true" instead of a real boolean, depending on their cached tool schema. That was being rejected outright, which blocked publishing a site through the assistant until the placeholder-contact warning was manually cleared. This value is now accepted in either form. The same update also carries an early version of the clone color-palette fix described separately (finished in a follow-up fix). **Where:** Any AI assistant connected via the Mondovo connector, publishing a site with a placeholder contact-info warning. **How to test:** Ask a connected assistant to publish a site after confirming the placeholder contact info is intentional; publish should proceed instead of getting blocked. **Watch for:** An explicit "false" value must still block publish as before — only the previously-rejected string "true" changed behavior.
Buttons and controls in the site editor's Design Assistant panel (change color, typography, layout, animation, and more) were rendering with low-contrast dark-on-dark text in dark theme, making them hard to read. They now use their intended dark-theme colors and match the clarity of light theme. **Where:** Site editor → open the Design Assistant / element panel → switch the editor to dark theme. **How to test:** Select any element, open the design controls, and toggle the editor theme to dark. The action buttons (Layout, Spacing, Opacity, Add animation, Add hover effect, Move up/down, etc.) and section headers should all be clearly legible. **Watch for:** Any editor panel text or button that still appears washed out or invisible in dark mode.
Sites created via a connected AI assistant sometimes flip from "planning" to "design" (variations generated) while you're still sitting on the design URL — that used to bounce you to Mission Control instead of the design/variation picker. **Where:** Client portal → opening a site link while its variations are generating (most common right after using a connected assistant like Claude or ChatGPT to start a site). **How to test:** Start a site through a connected assistant and keep the design tab open while variations generate; once they're ready you should land on the variation picker, not Mission Control. **Watch for:** Sites already forked into a working build should still open Mission Control as normal — only the still-exploring-designs state was affected.
Entering edit mode in the site editor pauses animations so the canvas holds still while you work — but an animation that started playing after you'd already entered edit mode kept moving. Edit mode now catches those too. **Where:** Site editor — edit/selection mode on any page with animated components. **How to test:** Enter edit mode, then do something that mounts a new animated component (e.g. switch sections or add one); the new animation should freeze along with everything else on the canvas. **Watch for:** Animations still moving briefly after entering edit mode, or animations failing to resume correctly after leaving it.
Entering edit mode pauses page animations so you can select and edit elements without them moving — but an animation that started playing after you'd already entered edit mode could keep moving. It's now caught and paused too. **Where:** Site editor — edit mode (click into a section to edit it). **How to test:** Enter edit mode on a section, then trigger something that starts a new animation (e.g. hover/scroll effect); it should freeze in place like everything else instead of continuing to animate. **Watch for:** Animations should resume normally once you exit edit mode.
A batch of trust fixes for the Design Assistant. Replacing an image now changes the exact image you clicked, even when the same picture is reused elsewhere on the page (previously the topmost copy — usually the hero — always won). If a change can't be saved, the chat now says so instead of showing "Done" while the edit silently vanishes on reload — this covers typed edits, voice edits, and assistant-driven edits. Pasting a video link that can't be used now gets an honest explanation instead of a silent success. Content Manager no longer shows "Saved" when a save was rejected. And when you have an element selected but your message names a different section, the assistant now follows a clear rule: your words win, and the decision is tracked so we can measure how often it gets targeting right. **Where:** Site editor → Design Assistant (chat, voice, and element edits); Content Manager. **How to test:** Click an image that appears twice on the page and replace it — only the clicked one changes. Select the hero, then ask to "change the footer links" — the footer changes, not the hero. **Watch for:** A "couldn't be saved" warning appearing after edits (that's the new honesty — previously those were silent losses); image replacements falling back to the AI path more often on pages with reused images.
The editor now quietly test-renders an AI edit in the background before putting it on your canvas. If the edit would crash the whole preview, it keeps your last working version on screen and tells you honestly instead of flashing a broken page or claiming success. **Where:** Site editor preview — any AI refinement/edit. **How to test:** Make an AI edit that produces code which fails to render (whole-page crash). The canvas should stay on your previous working design, you get a "couldn't preview that change — kept your last working version" notice, and auto-fix attempts a repair. An "Apply anyway" action lets you force the edit on screen if you want to see the error. **Watch for:** A valid edit being wrongly held back (the check is designed to let edits through on any uncertainty, so this should not happen); a noticeable extra delay before a successful edit appears (the check adds up to ~1s and only on edits). The check can be disabled platform-side if it misbehaves.
Some AI edits that failed to save (an image generation/replace failure, a compliance-toggle failure) were still reported to you as a successful edit, then quietly reloaded stale content — so the site looked unchanged with no explanation, or the Undo option appeared for an edit that never actually happened. **Where:** Site editor chat (Design Assistant) and the voice assistant in Mission Control. **How to test:** Trigger an edit that fails to persist (e.g. an image action that errors out); the chat should show a "couldn't be saved" message instead of a success message, and no Undo hint should appear for it. **Watch for:** Legitimate successful edits should be unaffected — this only changes behavior for edits that genuinely failed to persist.
An edit could get rejected with a "site was modified by another request" error even though nothing else had actually changed — a background process quietly re-saving search data right after your edit was tripping the same safety check meant to catch real conflicts. The editor now recognizes this specific harmless case and retries automatically instead of failing your edit. **Where:** Site editor — any AI edit or refinement. **How to test:** Make several edits in quick succession; they should persist normally without spurious "couldn't be saved" failures. **Watch for:** An edit still failing to save when you (or a teammate) genuinely changed the same content at the same time — that's a real conflict and should still be reported.
A recent update had broken the page-edit tool for AI assistants connected via API key — every call failed instantly instead of making the requested change. Also fixed: switching to a design variation with no saved files could leave the site unable to open in the editor. **Where:** Any AI assistant connected via API key, using the page-edit tool. **How to test:** Ask a connected assistant to make a change to an existing site's page — it should apply the edit instead of failing immediately. **Watch for:** The edit tool still failing on specific pages; a design variation refusing to open in the editor after switching to it.
Some AI edits were failing with a "Site was modified by another request" error even though nothing else had actually changed the parts of the site you were editing — a background sync task was tripping the conflict check against its own harmless write. Edits like this now save automatically instead of failing. **Where:** Site editor — any AI edit (Design Assistant chat). **How to test:** Make several edits in quick succession; you should no longer see occasional "couldn't be saved" errors caused by unrelated background updates. **Watch for:** Genuine conflicts (e.g. two real edits landing on the exact same content at once) should still correctly fail and ask you to retry.
A generated section's scroll-linked blur, color, or transform animation could freeze at its very first value, leaving that part of the page looking permanently blurred or dimmed even though the rest of the page animated normally. **Where:** Any AI-generated or edited section using a scroll-triggered blur/transform/color animation. **How to test:** - Generate or refine a section with a scroll-linked blur or color-fade effect - Scroll the page and confirm the effect animates smoothly instead of staying frozen at one value **Watch for:** A section whose animated property never changes on scroll — this is now flagged at generation time so it gets regenerated correctly.
Selecting a whole section (like the hero or a top navigation block) and asking the Design Assistant to "replace it with an animated SVG" no longer wipes out the section. Previously this swapped the entire section — heading, content, and layout — for a small decorative placeholder, which caused the top of the page to fail to render and show "This section could not be rendered and was isolated." **Where:** Site Editor - Design Assistant - "Replace with animated SVG" on a selected element **How to test:** Select a whole section (e.g. the hero/main area) and ask to replace it with an animated SVG. The assistant now declines with a clear message asking you to pick a specific image, icon, or placeholder inside the section instead. Selecting an actual image and replacing it still works. **Watch for:** "This section could not be rendered and was isolated" at the top of the preview after an animated-SVG replace — this should no longer happen.
Designs brought in from an external source are now hardened the same way our AI-generated designs are, so they render reliably in the editor — and if a design ever can't display, you get a clear, friendly message instead of a cryptic error code. **Where:** Site editor preview (any site created or extended from an imported design). **How to test:** Open a site whose design was imported externally and view it in the editor. It should render normally. If a design fails to render, the preview shows a short "This design could not be displayed" card with a Reload preview button — never a raw error link. **Watch for:** Imported designs that previously flashed a "Preview Error" / minified React error; they should now render, and existing imported designs have been repaired in place.
Uploading your own video for a hero or section background no longer fails with a confusing error on larger files. **Where:** Site editor → ask for a video background → the video picker → "Upload your own" tab **How to test:** Pick a real MP4/WebM/MOV up to 80 MB and upload it; it should attach and apply as the background. **Watch for:** Files over 80 MB should show a clear "too large" message (not a technical error).
When a site design took longer than usual to generate, the progress bar would freeze at 85% and show the same message for the rest of the wait, making it look hung even though generation was still running. It now keeps inching forward and rotates its status message until the design is ready. **Where:** Site editor / client portal, while a new design is generating. **How to test:** - Generate a design that takes a few minutes - Confirm the progress bar keeps moving past 85% (up to 89%) and the status text changes periodically instead of freezing **Watch for:** The bar reaching exactly 90% before the design is actually ready to save — 90% is reserved for the real "saving" step.
Opening a site that had just started generating design variations (common right after creating one via a connected AI assistant) could redirect you to Mission Control instead of the design/variation picker where those variations actually live. **Where:** Site editor — opening a site that's between planning and build (has variations but hasn't been forked into a working site yet). **How to test:** Open a site created via a connected AI assistant while it's in this in-between state — it should land on the design/variation picker, not Mission Control. **Watch for:** A design-phase site landing on the wrong screen, especially right after its variations finish generating.
When a section can't render in the preview, the isolation notice now names the exact section (e.g. "The Hero section couldn't be displayed here"), explains the likely cause in plain language, and offers "Try again" plus, when available, "Undo last change" — so you can recover in place instead of guessing whether an edit was lost. **Where:** Site Editor preview, on any page where a section fails to render. **How to test:** Open a site whose section throws at render. The banner should name the section, show a one-line cause, and offer Try again / Undo last change. "Undo last change" reverts the most recent edit; "Try again" re-renders the section. **Watch for:** The banner must never show technical details (error text, component or file names). The rest of the page should stay fully editable while one section is isolated.
When you have an element selected but your request clearly names a different section, the assistant already edited the section you named — it now also says so in its reply and offers a one-click option to redo the change against your original selection instead. **Where:** Site editor → Design Assistant chat, after an edit where your selection and your wording point to different sections. **How to test:** - Select one section (e.g. the hero) but type a request naming a different one (e.g. "update the footer links") - Confirm the footer changes, and the reply notes it edited the section you named, with a quick option to apply the change to your selection instead **Watch for:** The note appearing on edits where your selection and wording actually agree — it should only show up on a genuine mismatch.
The fix that stops edits from being reported as "done" when they actually failed to save (see the "Edits that failed to save now honestly say so" entry) now also covers edits made through connected AI assistants (Claude, ChatGPT) and the admin editor, and no longer charges you for an edit that didn't land. The contradictory combination of a "couldn't be saved" warning next to an Undo/redo option for the same edit is also fixed. **Where:** Any AI assistant connected via the Mondovo connector, and the admin site editor. **How to test:** Trigger an edit through a connected assistant that fails to persist — it should report failure and not consume a credit, with no leftover redo option for the failed edit. **Watch for:** This is a defense-in-depth extension of an existing fix — behavior for successful edits is unchanged.
Connected AI assistants (Claude, ChatGPT, and other MCP clients) can now hand Mondovo an image or video and get back a permanent link to use in your site — no more broken media from links that expire. **Where:** Any AI assistant connected to your Mondovo account via the Mondovo connector. **How to test:** Ask a connected assistant to add media from a link (e.g. "upload this video to my site and use it in the hero"). It calls the new upload tool, stores the file permanently, and can then place it with a normal edit. **Watch for:** Supported formats are images (JPG, PNG, WebP, GIF) and video (MP4, WebM, MOV up to 80 MB); links must be reachable and start with https. Already-connected assistants get this automatically — no need to reconnect.
Design variation tabs now always display in numeric order, and the mobile "change applied" bar no longer disappears while it is offering an Undo. **Where:** Site editor — the "Your designs" chip strip and the design gallery filmstrip above the chat; and, on mobile, the floating status bar that appears after the assistant applies a change. **How to test:** - Open a site with two or more designs. The tabs should read D1, D2, D3… left to right, even on sites where a second design finished generating first. - Click any tab — it still opens the correct design (ordering is display-only; likes, notes, and switching are unchanged). - On a phone with the chat collapsed, make an assistant change. When it completes, the floating bar with "Undo" now stays until you close it (X) instead of vanishing after a few seconds. **Watch for:** A tab that opens the wrong design (ordering must never change which design an action targets); the "Iterating on D#" label showing the wrong number; the mobile bar lingering when there is nothing to undo (that case should still auto-dismiss).
Hovering over a design tab in the editor no longer leaves its preview thumbnail floating over the canvas after switching designs or when a new design starts generating. **Where:** Site editor — the design tabs strip above the chat/canvas. **How to test:** - Hover a design tab to show its preview, then quickly switch to another design or start a new generation. - Confirm the preview thumbnail closes and doesn't remain pinned over the canvas. **Watch for:** A leftover preview image overlapping the editing canvas after switching tabs, or a preview that doesn't disappear when you move your mouse away.
Animated number/stat sections no longer break when a design uses the counter in its simplest form — the section renders normally instead of showing "This section could not be rendered and was isolated." **Where:** Site Editor preview and published sites, on pages with animated statistics/counters. **How to test:** Open a site whose hero or stats section shows animated numbers (e.g. "145,000+"). The section renders with the numbers instead of an isolation notice. **Watch for:** Numbers should count up when scrolled into view; string values (e.g. "Under 60") should display as-is.
On phones, undoing a design change no longer depends on catching a floating notification before it disappears — there's now an always-available Undo button that sticks around until you use it or make another change. **Where:** Site editor on mobile, with the chat minimized (the floating chat button, bottom-right). **How to test:** 1. Open a site in the editor on a phone-sized screen and minimize the chat. 2. Ask the assistant to make a change (e.g. "change the hero headline"). 3. When it applies, an "Undo last change" button appears just above the chat button and stays there. 4. The little result notification now fades on its own after a few seconds — but the Undo button remains until you tap it or make another change. 5. Tap "Undo last change" and confirm the change reverts. **Watch for:** The Undo button should disappear after a successful undo (or after a newer change replaces it), and should never linger on a change that can't be undone.
Asking the Design Assistant to enhance a section you selected — like adding a background animation, enlarging a heading, or tweaking the layout — now keeps the rest of that section intact instead of redesigning it from scratch. **Where:** Site editor → select a section (e.g. the Hero) → Design Assistant → ask for a small improvement. **How to test:** Select the Hero, ask to "add a subtle background animation". The existing headline, buttons, and prompt box should stay in place, with the animation layered behind them. **Watch for:** Headings being replaced with placeholder text, the prompt box or buttons disappearing, or an animation taking over the whole section — these should no longer happen for additive requests. Explicit "give this section a completely new look" requests still redesign it fully.
When a page section couldn't be rendered in the editor preview, the "This section could not be rendered and was isolated" notice could be hidden underneath the site's own header if that header used a fixed or sticky position — leaving you with no visible explanation and a confusing blank-looking area. The notice now always displays above the site's header and scrolls into clear view, so you can see it and keep editing the rest of the page. **Where:** Site editor preview — any page with a section that fails to render. **How to test:** Trigger a section render error on a page whose Header uses a fixed/sticky position, then scroll to that section in the preview. The red "could not be rendered" notice should be fully visible above the header, not hidden behind it. **Watch for:** The notice appearing cut off, invisible, or covered by the site header in any preview.
Editing the header or navigation could sometimes cause the AI to invent an unrelated content reference on the page. The editor's safety check correctly caught this, but instead of removing just the invented part, it was blocking your entire edit — so a legitimate navigation change could be lost. The editor now automatically removes the invented reference while keeping the rest of your edit intact, instead of discarding the whole change. **Where:** Site editor — editing the header or navigation menu. **How to test:** - Ask the editor to change something in the header/nav (e.g. "add a Contact link to the nav"). - Confirm the edit is applied and the page doesn't revert or show a blocked-edit message. **Watch for:** A nav/header edit failing to apply, or the page showing content that wasn't there before and wasn't asked for.
Clicking Undo in the editor could occasionally fail with a "Failed to undo - please try again" message, because it picked a version to restore that didn't actually belong to, or didn't exist on, the current site. Undo now only considers versions that genuinely belong to the current site and can be restored. If none qualify, it shows a clear message pointing you to the version history panel instead of failing with a generic error. **Where:** Site editor — Undo button (or Ctrl/Cmd+Z) after making an edit. **How to test:** - Make an edit in the editor, then click Undo. - Confirm the previous version is restored without an error. - If no restorable prior version exists, confirm you see a message directing you to the history panel rather than a generic failure toast. **Watch for:** The "Failed to undo - please try again" toast reappearing, or Undo restoring the wrong content.
When editing one part of a page (like a pricing block), the AI could occasionally rewrite the whole section and accidentally drop an unrelated section above it — such as the Hero — with no warning, leaving the page looking cut off after reload. The editor now checks that an edit doesn't remove any section you didn't ask to delete. If it detects an unrelated section would disappear, it blocks the save and shows a message instead of silently losing content. **Where:** Site editor — editing any section of a page. **How to test:** Ask the editor to change one section (e.g. "update the pricing text") on a page with multiple sections. Confirm all other sections (like the Hero) are still present after the edit is applied. **Watch for:** A section vanishing after an edit that wasn't meant to remove it; or a save being blocked even though you intentionally asked to delete a section.
Fixed a bug where pasting a YouTube or Vimeo URL into an empty hero media placeholder (e.g. "Add a video") would insert the raw URL as visible text at the top of the section instead of creating a playable embedded player. **Where:** Site editor → click an empty video placeholder → "Replace With…" → paste a YouTube or Vimeo URL **How to test:** - Open or create a site with an empty hero video placeholder (shows "Add a video") - Click the placeholder to open the Replace menu - Paste a YouTube URL (e.g. `https://www.youtube.com/watch?v=...`) - The placeholder should be replaced with a playable embedded video **Watch for:** Raw URL appearing as text at the top of the section, or the placeholder remaining empty after pasting
Fixed a bug where pasting a YouTube or Vimeo watch URL into a hero video element would store the URL as unplayable text instead of converting the video into a working embedded player. **Where:** Site editor → click on a hero video → "Replace With…" → paste a YouTube or Vimeo URL **How to test:** - Open a site with a hero video in the editor - Click the video to open the Replace menu - Paste a YouTube watch URL (e.g. `https://www.youtube.com/watch?v=...`) - The hero should display a playable embedded video, not an empty placeholder **Watch for:** Hero remaining empty or showing a broken video after pasting a YouTube/Vimeo URL
When you ask the AI to replace just a selected image or video, it will no longer accidentally remove the whole section (e.g. the entire hero) — if a media swap would delete the surrounding layout, the change is now refused and your section is left untouched. **Where:** Site editor → select an image/video in the preview → ask the AI to "replace this image with …" or "swap this for a video". **How to test:** Pick the hero image on a site, prompt "replace this hero image with a video". Confirm only the media changes and the hero text/buttons/layout stay in place. If the AI would have wiped the section, you now get a clear "I left the section unchanged — try selecting the image again" message instead of a deleted hero. **Watch for:** A legitimate small media swap being refused (it shouldn't — the guard only trips on large content drops). If a real swap is blocked, rephrase as "replace just this image with …".
Horizontal auto-scrolling sections and looping marquees now stop moving while you are editing, so cards no longer slide out from under your cursor when you try to select or change them. **Where:** Site editor → Edit Mode (and element selection). **How to test:** Open a site whose homepage has a horizontal auto-scrolling / marquee section, enter Edit Mode, and confirm the section stops moving and its cards are easy to click. Exit to Preview and confirm the scrolling resumes. **Watch for:** A section that stays frozen after leaving Edit Mode, or that fails to start moving again in Preview.
Clicking an image or media element in the editor now reliably selects the image, so the Design Assistant gets the right context and image editing options appear. **Where:** Site editor (Edit mode) — click any image, including images wrapped in a button, caption, or card link. **How to test:** Open a site in the editor, switch to Edit mode, and click an image that sits inside a button or a captioned card. The image should be selected with image actions (Replace image, AI edit) available, and the Design Assistant should describe an image — not text. **Watch for:** An image being treated as text ("clicked on text…"), image controls not appearing, or the image becoming impossible to re-select after the first click.
The Design Assistant used to say "Applied changes" even when an edit (for example, replacing the hero image with a video) was saved on the server but didn't visibly update the preview — leaving you staring at an unchanged page with no idea anything went wrong. **Where:** Site editor → Design Assistant chat (preview/canvas). **How to test:** Select a media element or section, ask the assistant to make a change that the live preview can't immediately reflect, and confirm the chat now tells you the change was saved and to refresh — instead of falsely reporting success. **Watch for:** A genuine no-op (the request didn't change anything) should still explain *why* nothing changed; only the "saved but not reflected on screen" case should ask you to refresh.
When you ask the AI to replace an image with a video, the canvas and the editor now agree on the media type instead of showing video-only controls over what still looks like a static image. **Where:** Site editor → select an image → ask the assistant to turn it into a video (or pick/upload a video for a section). **How to test:** Open a site, click an image, prompt "replace this image with a video", pick a stock video. The old image should be gone, the video should play (with a still preview before it starts), and the element's controls should match what you see on the canvas. **Watch for:** A leftover static image rendering on top of the video, or the editor showing "Replace Video URL / Autoplay / Loop" while the canvas still shows the old picture.
Asking the Design Assistant to replace a selected image with a video no longer fails with a "no visual change was made" message — the swap now applies as expected. **Where:** Site editor → select an image on the canvas → ask the Design Assistant to "replace this image with a video". **How to test:** Open a site, click a hero/section image, tell the assistant to swap it for a video, and confirm the video element appears in the preview instead of an error. **Watch for:** Genuinely empty or no-op refinement requests should still report that nothing changed; only real media swaps are now allowed through.
Carousels and image sliders kept advancing automatically in Edit mode, making it impossible to click and edit individual slides. The carousel now pauses while you're in Edit mode and resumes when you switch back to Preview. **Where:** Site Editor → Edit mode → any section with a carousel or image slider. **How to test:** - Open a site that has a carousel or slider section. Enter Edit mode. - The slides should stop advancing. Click on any slide to select and edit it. - Switch back to Preview mode — the carousel should resume auto-advancing. **Watch for:** Carousel that still auto-scrolls in Edit mode, or one that stops advancing entirely even after returning to Preview.
After switching between design variations in the editor, Content Manager edits would appear to save but never show up on the page. The editor was comparing the save target against an outdated snapshot of the URL, rejecting valid saves silently. Edits now apply correctly regardless of how many times you've switched designs in a session. **Where:** Site Editor → switch between D1/D2/D3 designs → Content Manager → edit a section → Save. **How to test:** - Open a site with multiple designs. Switch from D1 to D2 (or any other design). - Open the Content Manager and edit a heading or text block. Save. - The change should appear on the page immediately and persist on reload. **Watch for:** Content edits that vanish after saving, or changes that appear to save but show the old text on the live page.
Deleting a section or making targeted edits in the Content Manager looked successful but the changes didn't stick, and the "unsaved changes" warning sometimes stayed on screen after saving. Saves now carry the full change detail so the page updates and the warning clears as expected. **Where:** Site Editor → Content (Content Manager) → edit or delete a section → Save. **How to test:** - Open a site in the editor and open the Content Manager. - Delete a section and save. The section should disappear and the unsaved-changes indicator should clear. - Edit text in a section and save. The updated text should appear on the page immediately. **Watch for:** Section deletions that reappear on reload, or the unsaved-changes warning persisting after a successful save.
New sites sometimes showed their design options starting at D2 — the very first design (D1) was missing from the switcher even though it existed. **Where:** Site editor, the design switcher (D1 / D2 / D3 …) at the top-left. **How to test:** Open a site that has multiple designs. Confirm the switcher starts at D1 and every generated design is reachable. **Watch for:** Designs labeled out of order, or a design that exists in version history but has no tab to switch to it.
Asking the AI to "replace only this image with a warehouse worker" now changes just that image and leaves the rest of the section exactly as it was. **Where:** Site editor — click an image in the preview, then type an image-replacement request in the chat (e.g. "Replace only this image with a warehouse worker", "Update this image with a factory scene"). **How to test:** Select a specific image, ask to replace it with a different subject, and confirm the layout, spacing, animations, and surrounding content stay unchanged while only the targeted image swaps. **Watch for:** Size/crop/alignment requests (e.g. "make this image bigger") should still behave as code edits, not regenerate the picture.
If one section of your design hits a rendering error while you edit, only that section now shows a small "couldn't render — isolated" notice; the rest of the page stays visible and editable instead of the whole preview going to an error screen. **Where:** Site editor → live preview (any design) **How to test:** Open a multi-section design and edit a section. If an edit ever errors, confirm only that section shows the inline notice while the header, hero, and other sections keep rendering — and you can keep editing. **Watch for:** A section that should render showing the isolation notice unexpectedly (would indicate a real render error in that section, not a false positive).
When the AI assistant removes or edits an element on your page, the change now shows up in the preview right away — no refresh needed. **Where:** Site editor → Design Assistant → any instruction that edits or deletes a page element (e.g. "remove the hero section", "change the button text") **How to test:** - Ask the AI to delete a section or update a text element - Confirm the canvas reflects the change immediately after the AI reports "Applied" **Watch for:** The AI reporting success ("Applied") while the canvas still shows the old element — that would indicate the reload did not fire.
If an AI edit failed with a generic "couldn't generate" error, it often worked when you clicked again — a momentary provider blip. Those are now retried automatically (with a short backoff) so a single hiccup no longer surfaces as a hard failure. **Where:** Anywhere AI text is generated — Design Assistant rewrites, quick actions, refinements. **How to test:** Use an AI rewrite/refine action repeatedly. Transient failures should self-recover instead of needing a manual retry. **Watch for:** Genuine quota limits and invalid requests are not retried (quota still routes to the backup provider); only transient server/network errors retry.
Text you click in the editor is now always editable inline. Previously, some headings showed "this element isn't connected to editable content" and a "Make editable" button that could fail with "already in sync", leaving you stuck. **Where:** Site Editor → click any heading or paragraph → Quick edit panel (right rail). **How to test:** Click a heading that previously showed "Make editable"/"not connected". You now get an editable field pre-filled with the text — change it and Save. It updates whether or not the text was wired to your content. **Watch for:** Bulk "Manage all …" now appears only for collections (menus, services lists), not single headings. Genuinely non-editable items (synced from a data source) still point you to the Content Manager.
Clicking an image inside a card section (case studies, team members, stories) to replace it now reliably targets that specific card's image instead of accidentally updating the hero or a different section. **Where:** Site editor → click any card-row image (e.g. in a "Stories of Impact" or "Case Studies" grid) → Replace image **How to test:** - Open a design with a multi-card section that reuses a common placeholder image - Click one card image and swap it for a new photo - Confirm only that card's image changed, and the hero and sibling cards are unchanged **Watch for:** An image swap reporting success but the change appearing on the hero or a different card instead of the one you clicked.
Editing a section in the Content Manager could save successfully yet leave the page unchanged. The edit was written to the base content while the page rendered the active design's own copy, so the change was hidden. Edits now save to the active design and appear immediately. **Where:** Site Editor → Content (Content Manager) → edit a section → Save. **How to test:** Open a built site, change a heading or text in the Content Manager, Save. The change should be reflected on the page (and persists on reload). **Watch for:** Sites with multiple designs — each design keeps its own content; edits apply to the one you're viewing.
The site intelligence panel now includes conversion rate optimization (CRO) recommendations alongside content suggestions by default — highlighting layout, call-to-action, and trust-signal improvements that can lift visitor-to-lead conversion. **Where:** Site editor → Suggestions / Site Intelligence panel (any design or build-phase site) **How to test:** - Open a generated site in design or build mode - Trigger a site analysis (or wait for the next automatic scan) - Confirm CRO recommendations (e.g. CTA placement, trust signals, form friction) appear in the suggestions list alongside content recommendations **Watch for:** Duplicate recommendations between the CRO scan and the main content scan — these should be deduplicated automatically.
Fixed a case where clicking delete on certain sections appeared to do nothing — the section stayed on the page. **Where:** Site editor preview → click a section → Delete **How to test:** Open a design, scroll to a call-to-action style section whose wording matches the saved content (e.g. a "Book A Demo" CTA), delete it, then reload. The section should be gone and stay gone. **Watch for:** Sections that are rendered by a reusable component (CTA, contact, footer) — these previously cleared a hidden content field instead of removing the section, so the section re-rendered unchanged.
Saving in the Content Manager could pop a second "Content changed externally — Save & Update" banner right after you clicked Save, even though nothing changed externally. Saving now completes cleanly with no redundant prompt. **Where:** Site Editor → Content (Content Manager) → edit a field → Save. **How to test:** Open the Content Manager, edit a section field, click Save. The save should finish with no "Save & Update / Discard & Update" banner appearing afterward. **Watch for:** A genuine external change (switching designs, or another tab editing) should still show the "Save & Update" prompt — only the false post-save one is gone.
Replacing an image now works even on sections whose items are part of the page's built-in layout, where previously the swap could silently fail or revert. **Where:** Site editor → click any image in a card/list section (e.g. case studies, "stories", logos) → Replace Image. **How to test:** On a card-row section, replace one card's image, confirm it sticks after refresh, then replace a second card's image and confirm the first does NOT revert. **Watch for:** The replaced image reverting to the original after editing a different image, or a "success" message with no visible change.
Swapping an image in the editor now reliably shows the new image right away — and after a refresh — instead of silently keeping the old one. **Where:** Site editor → click any image in the preview → Replace image. **How to test:** Open a generated site, click a hero or section image, pick a new image, and confirm the canvas and a page refresh both show the new image. **Watch for:** An image that reports "updated" but visually stays the same, especially on hero/background images.
When two images on your page happened to share the same filename (e.g. both named "hero.png" but hosted on different domains), replacing one could silently corrupt the other. The swap is now precise — only the exact image you selected is updated. **Where:** Site editor → click any image → Replace Image **How to test:** - Open a design that has two images from different sources but the same filename - Replace one of them with a new image - Confirm the other image is unchanged after the swap **Watch for:** An image that was not selected changing after you replace a different image nearby
Asking the Design Assistant to turn a card section into a horizontally scrolling marquee no longer makes the cards disappear — the cards stay visible and scroll as intended. **Where:** Site editor → Design Assistant → "convert this section into a horizontal scroller / marquee" **How to test:** Open a site with a multi-card section, ask the assistant to "convert this into a horizontally auto-scrolling showcase," and confirm the cards remain and scroll instead of leaving only the heading. **Watch for:** Cards that collapse to zero width, or a section that shows only its heading with empty whitespace below.
The "Make Editable" action in the Quick Edit panel now reliably connects disconnected text even when that text lives inside a reusable block component rather than directly on the page — previously it would silently do nothing for those cases. **Where:** Site editor → click any non-editable text element → Quick Edit panel → "Make Editable" button. **How to test:** - Open a multi-file site in the editor. - Click a text element that shows "Make Editable" in the Quick Edit panel (it appears in block components like Header or Hero sections). - Confirm the action connects the text so it becomes editable, rather than showing "nothing to sync" or doing nothing. **Watch for:** The action silently failing on text inside block component files — that is now fixed.
When a selected text element can't be edited inline, the editor now shows an "Open Content Manager" button instead of a dead-end message. **Where:** Site Editor → click a text element that isn't directly editable → Quick edit panel (right rail). **How to test:** Open a site in the editor, click a decorative or unbound text element. Where the panel previously said only "Try Content Manager to edit this section" with no way to get there, you now see an "Open Content Manager" button that opens the Content Manager directly. **Watch for:** The button should appear only for non-editable selections; editable fields still show the inline Quick Edit form, and content-bound sections still show their "Manage all …" button.
The refinement pre-check that blocked AI edits before saving was too broad: content-dependent issue types (malformed content shapes, React-child type mismatches) were blocking edits on sites whose existing content happened to trigger the check, even when the edit itself was valid. Only undeclared event-handler references — a purely code-level issue — now block edits. A previously missed `export { X as default }` pattern that could break component imports is also now correctly detected and repaired. **Where:** Site editor → any AI section refinement (Design Assistant, chat, direct edits) **How to test:** - Open a site in the editor and make an AI-powered section edit - Confirm the edit saves and renders correctly without an unexpected "blocked" or retry message - Sites that previously had refinements spuriously retried should now save on the first attempt **Watch for:** Edits that should have been blocked (undeclared event handlers) being saved incorrectly; edits to sections using `export { X as default }` causing component import errors
Several recurring causes of the preview going blank after an AI-powered section edit — "React is not defined", library import errors, component shape mismatches, and bad export patterns — are now detected and repaired before the change is saved. If a repair isn't possible, the edit retries rather than overwriting the last working design. **Where:** Site editor → any AI section refinement (Design Assistant, chat, direct edits) **How to test:** - Open a site in the editor and use the Design Assistant to edit a section - Confirm the preview renders correctly after the edit - Try edits that historically caused crashes (sections using Lottie animations, icon libraries, or statistics counters) **Watch for:** Preview going blank after an AI edit; "React is not defined" or similar errors in the preview iframe console
Newly generated catalog detail templates (menus, products, properties) no longer include a "Premium Item" label or badge — the AI was echoing the internal placeholder name into visible UI chrome, shipping generic badge text on every detail page across sites. **Where:** Site editor → Pages → detail page (e.g. /menu/[slug], /products/[slug]) **How to test:** - Generate a new site with a catalog vertical (restaurant, ecommerce, real-estate) - Open a detail page in the editor - Confirm there is no "Premium Item" badge/ribbon/pill visible in the preview **Watch for:** Badge text that says "Premium Item" or matches the internal placeholder on detail pages of newly generated sites
Category or service listing pages (e.g. /solutions, /services, /menu) were showing an empty "no items found" state in published builds even when detail pages and individual items existed. The build worker now correctly links the item collection to the listing page so all rows appear on publish. **Where:** Published site → any category or service listing page (e.g. /solutions, /menu, /services) **How to test:** - Build a site with a service or catalog vertical (restaurant, real-estate, tech, etc.) - Publish the site - Visit the listing page (e.g. /solutions or /menu) and confirm all items appear as cards **Watch for:** Listing page still showing "no items found" after publish; individual detail pages loading correctly while the index page is empty
Opening a collection detail template page (e.g. /menu/[slug]) in the editor now shows the first real item's data right away instead of requiring a manual row switch to get past the placeholder sample. **Where:** Site editor → Pages → select a collection detail template page **How to test:** - Open a catalog site (restaurant, real-estate, ecommerce) in the editor - Navigate to a detail template page (e.g. `/menu/[slug]`) - Confirm the preview loads with a real item (title, price, image) without needing to switch rows manually **Watch for:** Preview stuck on placeholder text ("Sample 1 dish", $28) until the user manually selects a row in the row picker
When you asked the Design Assistant to swap an image for a video, it would sometimes reply "Done" without actually changing anything. It now tells you honestly what's possible and never claims an edit it didn't make. **Where:** Site Editor → Design Assistant chat (Edit mode). **How to test:** Select an image element, then ask the assistant to "replace this image with a looping professional video." It should explain that arbitrary image-to-video isn't available, and offer the real options — upload an MP4 for a scroll-scrub video hero, use a Ken Burns pan/zoom, or an animated particle background — instead of replying "Done." **Watch for:** Any "Done"/"I've replaced it with a video" response where the image is unchanged. The assistant must only confirm a media change after a tool actually applied it.
After clicking "Build Full Site," you can now clearly find your way back to the side-by-side Design Variations editor (D1, D2, D3, D4…) at any time. **Where:** In the top bar of your built site's dashboard — the chip next to the site name is now labeled "Design Variations" (it was previously the less obvious "Lineage"). **How to test:** 1. Open a design in the Design Variations editor and click "Build Full Site." 2. Once you land on the site dashboard, click the "Design Variations" chip in the top bar. 3. Choose "Open variations" next to the parent design — you'll go straight back to the D1/D2/D3/D4 side-by-side editor. **Watch for:** The chip only appears on built sites that were forked from a design. The "Open variations" link should land directly on the comparison editor, not the site dashboard.
Redesigning a section through the Design Assistant no longer crashes the preview when the new design uses icons. **Where:** Site editor preview, after applying a Design Assistant redesign to a section. **How to test:** Open a site, apply a redesign to a section that adds icons (e.g. the About section), and confirm the preview renders instead of showing a "Preview Error". **Watch for:** Any remaining "Dynamic require" preview errors after applying AI-generated design changes.
Adding an animated illustration to a section (for example the Contact Section) via the Design Assistant no longer crashes the preview with a runtime error. **Where:** Design Assistant → edit any section → apply an illustration/visual enhancement → Preview **How to test:** Open a design, edit a section with the Design Assistant, apply changes that add an illustration, then preview the page. The section should render with the illustration and no runtime error. **Watch for:** The whole preview going blank with an error after applying an illustration — that symptom is now fixed.
When opening a collection detail template page, the editor now shows a loading spinner until real item data is ready — eliminating a brief flash of the placeholder sample (e.g. "Premium Item", $28) before the actual row paints. **Where:** Site editor → Pages → select a collection detail template page **How to test:** - Open a catalog site in the editor - Navigate to a detail template page (e.g. `/menu/[slug]`) - Confirm you see the loading spinner briefly, then land directly on real item data — no flash of placeholder content **Watch for:** A momentary "Premium Item" or placeholder price flash before the real item appears on page load
AI section edits that produce code referencing a content field's sub-property (e.g. `item.value`) when that field doesn't exist in the page content now trigger an automatic repair and retry instead of being saved and crashing the preview. Applies to homepage refinements where the full page content is available for checking. **Where:** Site editor → Design Assistant or chat → homepage section edits **How to test:** - Use the Design Assistant to edit a statistics or counter section - Confirm the preview stays live after the edit - Check that the section renders with actual values rather than going blank **Watch for:** Statistics or counter sections going blank after an AI edit; "Cannot read properties of undefined" errors in the preview
A section-focused refinement could previously write one component's code into another file's slot (e.g. contact section code ending up in the theme styles file), causing layout corruption and lost styles that persisted across restores. A new file-identity guard now detects and reverts such mismatches automatically. **Where:** Site editor → AI refinement (any section-targeted edit) **How to test:** - Apply a refinement targeting a specific section (e.g. contact, pricing) - Confirm the preview renders correctly with no displaced or blank sections - Verify the theme/header/footer are unchanged after the refinement **Watch for:** Blank areas at the top of the page after a refinement, or a section appearing in the wrong position (e.g. a contact form above the header)
After saving new content (such as a regenerated section image), the editor now correctly shows the updated image without it briefly reverting to the previous one a moment later. **Where:** Site editor → Content Manager → update a section image → save. **How to test:** - Open a site in the editor, go to Content Manager, regenerate an image for a section, and save. - Confirm the new image stays visible in the preview after saving and does not flash back to the old one within a second or two. **Watch for:** The image reverting to the previous version immediately after a successful save — that behavior is now fixed.
Generated design variations no longer feel like they disappear after you start building — you can now switch between D1, D2, D3 and more directly from the site editor, even on builds that had no obvious way back. **Where:** Site editor header → "Design Variations" button (next to the site name) **How to test:** Open a site that was generated with multiple design variations and built. Click the "Design Variations" button in the top header. You'll see a "Switch design" row listing every variation (the current one is marked). Click another to switch your live design to it. **Watch for:** The button only appears for sites that have a parent design or that carry two or more of their own variations. Switching reloads the editor to repaint the newly selected design.
The Version tabs (Original / V1 / V2…) and the Generate button in the page editor toolbar no longer collide with the Desktop / Tablet / Mobile viewport controls, so every version action stays fully visible and clickable. **Where:** Site editor → open any build site → Site tab. Visible on pages that have multiple design versions. **How to test:** Open a page with two or more versions while the AI assistant panel is open (narrow editor width). Confirm the Original/Vn tabs and the Generate button sit on their own row below the page title and never sit underneath the viewport icons. **Watch for:** The version row should scroll horizontally if there are many versions, and the viewport/Edit Content/Images/Refine Design buttons should never overlap it.
When you ask the AI assistant to open or activate a page variation (V2, V3, etc.), it now actually selects it in the editor — previously the assistant would claim success but nothing would visually change. **Where:** Site editor → AI assistant chat → ask to "switch to the V2 variation of the About page" or "show me variation 3" **How to test:** - Open a site that has page variations (e.g. a page with a V2 or V3 design) - Ask the AI assistant: "Switch to the second variation of the homepage" - The variation bar should update and the editor should reflect the new design **Watch for:** The assistant responding with success but the variation bar not changing; the assistant navigating to a variation slug as if it were a separate page
Claude and ChatGPT can now ask Mondovo to generate a fresh design variation for an existing site — giving you a second (or third) design option without losing your current work. **Where:** AI assistant with Mondovo connector → "Generate a new design variation for my site" or "Give me another design option for [site name]" **How to test:** - Connect Mondovo to Claude or ChatGPT - Ask the assistant: "Generate an additional design variation for my [site name] site" - A new design variation should appear in the site editor alongside the existing ones, not replacing them **Watch for:** The new variation overwriting the existing design instead of appending; the assistant reporting success but no new variation appearing (poll the site after ~30 seconds)
The Mondovo connector for Claude and ChatGPT now exposes the same intake questions the in-app intake form asks — goal, audience, visual style, tone, color direction, and more — so your AI assistant can interview you before building, producing richer and more on-brand sites. **Where:** AI assistant (Claude, ChatGPT, etc.) with the Mondovo connector connected → ask it to "create a new site" or "help me set up a new site" **How to test:** - Connect Mondovo to Claude or ChatGPT via the Connectors page - Ask the assistant to create a new site for your business - The assistant should ask a series of intake questions (goal, audience, style, etc.) before building, rather than generating with a generic brief **Watch for:** The assistant skipping intake and generating a generic site immediately; connector needing to be re-added to see the new tool (reconnect if the tool isn't surfaced)
When both site designs generated at roughly the same time, a race condition caused them to both receive the number 1 — so the design picker showed two tabs labelled "Design 1". The second variation now always gets its correct number (Design 2 or higher), regardless of which AI model finishes first. **Where:** Site editor → design picker tabs (shown after generating a new site with multiple designs) **How to test:** - Generate a new site and wait for both design variations to appear - Confirm the tabs show "Design 1" and "Design 2" (not two "Design 1" tabs) - Switch between designs and confirm each shows a distinct layout **Watch for:** Both tabs still showing the same design number, or the second tab being missing entirely
Browser-based AI clients (claude.ai's "Add connector" flow, ChatGPT's custom connector UI) were hanging on "Checking connection" because the browser blocked the authentication challenge. The connector now works from the web — no desktop app or CLI required. **Where:** claude.ai or ChatGPT → add a custom connector pointing to Mondovo **How to test:** - In claude.ai, go to connector settings and add the Mondovo MCP URL - The connection check should succeed and prompt for sign-in — not hang indefinitely - Complete the OAuth flow and confirm the assistant can list and manage your sites **Watch for:** Connector still showing "Checking connection" or failing with a network error; the OAuth consent screen not appearing after the connection succeeds
In the site editor, clicking a catalog card — a dish on a menu, a property listing, a product — now navigates the preview to that item's detail page, showing the real content for that specific row. Previously clicking did nothing useful. **Where:** Site editor → preview panel → any catalog section (restaurant menu, product grid, property listings, etc.) → click an item card **How to test:** - Open a catalog-style site (restaurant, ecommerce, real estate) in the editor - In the live preview, click on any item card in a collection section - The preview should navigate to and render that item's detail page with its specific content (name, description, images) **Watch for:** Clicking a card that navigates to the listing page instead of the detail page; detail page showing wrong item or placeholder content
Clicking an announcement bar, WhatsApp button, cookie banner, or other floating site addon in the editor now selects that element — previously it selected whatever was behind it (usually the header or hero section), making addons appear impossible to click. **Where:** Site editor → preview → click on an announcement bar, floating button, or cookie consent banner **How to test:** - Open a site that has an announcement bar or WhatsApp bubble - Click directly on the addon in the preview - The correct element (the addon) should highlight and its settings should appear in the panel **Watch for:** The addon still being unselectable; clicking it selecting the header or hero section instead
When editing a collection detail page (e.g. a menu item, property, or product), the preview now shows the actual selected item's data instead of the template's placeholder sample — so every item in your row picker renders as itself, not as "Premium Item / $28". **Where:** Site editor → Pages → select a detail page (e.g. /menu/item-name) → row picker chip **How to test:** - Open a catalog site (restaurant, real-estate, ecommerce) in the site editor - Navigate to a detail page (e.g. `/menu/<item>`) - Use the row picker to switch between items — each item should preview with its own title, price, image, and description, not the same placeholder data **Watch for:** All items showing identical placeholder data in the preview regardless of which row is selected in the row picker
You can now connect your Mondovo account to Claude (claude.ai), ChatGPT, and other AI assistants as a connector — then build, find, edit, and publish sites just by chatting. **Where:** In your AI assistant's connector/integration settings, add a custom connector pointing at `https://app.mondovo.com/api/mcp/sites`. You'll be asked to sign in to Mondovo and approve access (and pick which workspace to grant). **How to test:** Add the connector, complete the sign-in + approval screen, then ask the assistant to "list my Mondovo sites" or "create a site for a plumbing business in Austin." It will create the site through Mondovo's own generator and share a preview link. **Watch for:** The assistant should only ever drive the builder — it can create, refine, and publish, but it cannot read or export your site's underlying code. If a connection stops working, remove and re-add the connector to refresh access.
The Connectors page now has a client selector — pick Claude, ChatGPT, Claude Code, Cursor, VS Code, or others, and see the exact command or configuration snippet for that specific client. No more guessing which settings file to edit or what format to use. **Where:** Connectors page (linked from the dashboard) → select your AI client from the dropdown **How to test:** - Navigate to the Connectors page - Select different clients from the dropdown (e.g. "Claude Code", "Cursor", "ChatGPT") - Each should show the exact setup steps, including copy-paste commands or JSON config snippets specific to that client **Watch for:** A client showing generic steps instead of its specific format; the dropdown not updating the instructions on selection
Sites using animation effects were showing a blank or crashing preview iframe due to a version mismatch in the animation library loaded by the preview. The preview now correctly loads the matching library version and animations render as expected. **Where:** Site editor → live preview panel (any site with motion or animation effects) **How to test:** - Open a site that uses framer-motion animations in the site editor - Confirm the live preview loads and animations play without errors - Check the browser console — no `SyntaxError` or missing export errors should appear **Watch for:** Preview iframe remaining blank or showing a white screen on sites with animation effects; console errors mentioning `activeAnimations` or missing exports
A new "Connected Apps" section in Settings lists all AI clients (Claude, ChatGPT, etc.) that have been granted access to your Mondovo account, with the ability to disconnect any of them. Disconnecting immediately revokes their access — they can no longer manage your sites until you reconnect. **Where:** Dashboard → Settings → Connected Apps **How to test:** - Connect at least one AI client via the MCP connector flow - Go to Dashboard → Settings and find the Connected Apps section - Confirm the connected client appears in the list - Click Disconnect and confirm the client can no longer access your sites through MCP **Watch for:** A disconnected client still appearing as connected; Connected Apps section not appearing in Settings; disconnecting one client accidentally revoking another
A dedicated Connectors page now explains how to link Mondovo to Claude, ChatGPT, and other AI assistants — with step-by-step instructions and the exact connector URL needed for each client. **Where:** Navigate to `/connectors` or find the Connectors link in your dashboard **How to test:** - Open `/connectors` in your browser - The page should list available AI clients and explain the OAuth connector setup flow - The listed connector URL should match `https://app.mondovo.com/api/mcp/sites` **Watch for:** Broken links or missing instructions for a specific AI client; the page not loading for non-logged-in users (it should be publicly accessible)
When you ask the design assistant for a comprehensive redesign, the response card now clearly invites you to generate a new variation — instead of saying "I'm redesigning…" which implied changes were already happening before you clicked anything. **Where:** Site editor → Design assistant chat (redesign intent suggestions that show a "Generate as New Variation" button) **How to test:** - Open a generated site in the site editor - In the design assistant, request a comprehensive redesign (e.g. "can you completely redo the layout in a modern style?") - Confirm the assistant shows a suggestion card that explains you need to click the button to generate — not a message implying it's already working **Watch for:** The card message reading "I'm redesigning…" or similar present-tense phrasing that suggests active work before the button is clicked
Sharing a preview link for a restaurant menu, property listing, or product catalog now shows the actual items — previously the shared preview displayed empty collection grids even though the published site rendered them correctly. **Where:** Site editor → Share preview link → view the link in a browser or share with a client **How to test:** - Generate a catalog-style site (e.g. restaurant with a menu section) - Copy the preview link from the editor and open it in a private/incognito window - Collection sections (menu grid, property cards, etc.) should show real items, not empty grids **Watch for:** Collection grids still appearing empty in the shared preview link while publishing works correctly
Some site improvement suggestions — particularly for CTAs, partial testimonials, and FAQ sections — were either never clearing after you added the content, or marking themselves complete instantly before you did anything. The verification logic now correctly tracks whether a recommended section is truly missing, so each recommendation clears when and only when you actually address it. **Where:** Site editor → Mission Control home (recommendations / action-queue cards) **How to test:** - Open a site that has a recommendation for a missing CTA, testimonials, or FAQ - Add the suggested content or section - Confirm the recommendation disappears from the action queue after your next publish or page refresh - Confirm no recommendation is already marked complete on a brand-new site that clearly lacks that content **Watch for:** Recommendations that refuse to clear after adding content, or that disappear before you do anything to address them
The site assistant's improvement suggestions now run a deterministic pre-scan of your site before recommending — so common gaps like missing testimonials, a thin FAQ, no clear call-to-action, an over-long navigation, or pages your industry typically needs (e.g. a Menu or Reservations page for a restaurant) are caught consistently instead of only sometimes. **Where:** Site editor → Mission Control home (the recommendations / action-queue cards) and the AI assistant's suggestions **How to test:** Open a generated site that's missing obvious sections (e.g. no testimonials and no FAQ). Trigger a refresh (publish, or add/remove a page), then check the Mission Control home — recommendations should call out the specific missing pieces with business-specific reasoning, and each should clear automatically once you add the content. **Watch for:** Generic or duplicated suggestions, recommendations for content that already exists, or items that don't disappear after you address them.
Changing the primary or accent color in the Tweaks panel now correctly recolors call-to-action buttons and links throughout the site. Previously the color change updated the theme file but button styles — written as fixed Tailwind utility classes by the AI — ignored it entirely. **Where:** Site editor → Tweaks panel → Colors → change Primary or Accent color **How to test:** - Open any generated site in the editor and open the Tweaks panel - Change the primary color to something visually distinct (e.g. indigo → rose) - Confirm that CTA buttons, "Book Now" links, and similar action elements update to the new color in the preview - Apply the change and confirm the updated colors persist after saving **Watch for:** Buttons that still show the old color after applying; structural elements (nav background, section fills) unexpectedly changing when only the button color should change
Replacing an image now gives you clear, real-time control over how it sits in its container — no more guessing or editing images externally first. **Where:** Site editor → click an image → Replace → image controls (Layout, Fit, Position/Focal point, Opacity, Scale, Blur) **How to test:** 1. Open a site in the editor, click an image, choose Replace, and pick any new image. 2. Use the new **Fit** control (Fill / Fit / Stretch) — the preview updates instantly to show how the image fills its box when dimensions don't match. 3. With Fill or Fit selected, use the **Focal point** grid to choose which part of the image stays in view when cropped. 4. Adjust **Blur**, **Scale**, and **Opacity** — every change shows live in the preview, and active settings appear as chips below it. 5. Hold the **"Hold to compare"** button to peek at the current image before applying. 6. Each layout/fit option has a one-line description and hover tooltip. **Watch for:** The preview should match the applied result on the live site; the focal-point grid should only appear for Fill/Fit (or overlay layouts); blur/fit should persist after Apply and after publishing.
When you ask the design assistant for a sweeping change — rebrand, relayout, new sections, and content edits all in one message — it now builds a new variation from your **complete** request instead of a shortened summary, so nothing you asked for gets dropped. **Where:** Site editor → Design assistant chat (the "Generate as New Variation" button shown for comprehensive redesign requests) **How to test:** Open a generated site, and in the design assistant send one long prompt that combines several changes (e.g. "switch to a dark modern theme, change the brand color to navy, swap the hero for a split layout, add a testimonials section, and rewrite the about copy"). Confirm the assistant offers a one-click "Generate as New Variation", and that the resulting variation reflects all the requested changes — not just one or two. **Watch for:** A variation that ignores parts of the request, or a handoff message that reads like a dead-end rather than a one-click action.
The embeddable chat widget on published sites is working again — it now loads, opens, and sends messages end-to-end. **Where:** Any published client site that embeds the chat widget; the script served at `/api/widgets/<id>/embed.js`. **How to test:** Open a published site with the chat widget, click the bubble, send a message — the widget should load with no console errors and complete the round-trip (get a reply). Check the browser console shows `[ChatWidget]` logs and no "Widget not found" warning. **Watch for:** "Widget not found" warnings in the console, the bubble never appearing, or messages that send but never get a reply (a `400 "Session signature required"` in the network tab).
The AI Design Assistant can now handle "create service detail pages and connect the cards" in a single operation — it no longer asks unnecessary clarifying questions or incorrectly tries to handle the link updates as a separate design change. **Where:** Site editor → AI chat → ask to "create service pages and link the Learn More buttons" (or similar combined create-and-link requests) **How to test:** - Open a site with a Services section on the homepage - In the AI chat, type "Create individual service pages for each service and link the cards on this page to them" - The assistant should immediately propose a page plan (no clarifying questions) with the new pages under the Services dropdown and a note about updating the homepage links - Click Create — the pages should be created and the homepage links wired up automatically **Watch for:** The assistant asking "which pages do you want to create?" instead of proposing immediately, or failing to include the link updates in the plan card's "Also update the current page" section.
The new-tab preview now has a page switcher, so you (and anyone you share the preview with) can review every page — even ones you haven't added to the site's menu yet. **Where:** Open a site preview in a new tab (the "Share" button → Open preview). The page switcher sits in the preview toolbar next to the site name. **How to test:** Create a multi-page site, then bulk-add a few pages without adding them to navigation. Open the preview in a new tab and use the page switcher to jump to the new pages. After a bulk add, the bulk-create dialog now also shows a "Suggest navigation" nudge that takes you straight to the AI nav helper. **Watch for:** Switcher missing on single-page sites (expected — it only appears when there's more than one page); selecting a collection should open its listing page.
When you ask the assistant to change your site and one of the edits can't be applied, it now tells you instead of reporting the whole change as finished. **Where:** Site editor → chat/assistant panel (when refining a page) **How to test:** Open a site in the editor and send a refinement request that includes a hard-to-place change (e.g. replacing text that doesn't exist verbatim). When part of it can't be applied, the reply drops the "Done:" framing and shows a short note about which edit was skipped and to try re-requesting it more specifically. **Watch for:** The warning should appear only when an edit genuinely failed after a retry — a normal successful refinement should read exactly as before, with no false "couldn't apply" notes.
Chat bubbles, newsletter popups, WhatsApp buttons, and Calendly booking buttons now appear as non-interactive overlays in the editor preview, so you can click and annotate any part of your page without them getting in the way. **Where:** Site editor → Preview pane (when site add-ons like newsletter popup, WhatsApp bubble, or Calendly float are enabled) **How to test:** - Open a site in the editor that has a newsletter popup, WhatsApp bubble, or Calendly float add-on enabled - In the preview pane, try clicking on page elements behind the add-on widget - Clicks should pass through to the underlying content and annotation mode should work normally **Watch for:** Add-on widgets completely disappearing in editor mode (they should still be visible at 50% opacity), or clicks still being intercepted by floating buttons.
Typing a message in the AI Design Assistant is now instant — keystrokes no longer caused the entire conversation panel to re-render, which created visible input lag for longer messages. **Where:** Site editor → AI Design Assistant → chat input **How to test:** - Open the AI Design Assistant in the site editor - Type a longer sentence (20+ characters) and observe the input field - Characters should appear immediately with no delay or stutter **Watch for:** Any sluggishness or dropped characters when typing in the assistant input, particularly on slower devices or when the conversation has many messages.
When using the AI to add or replace images on a design that wasn't your currently-active one, the content (product items, text) appeared to vanish and show placeholder text instead. The image pipeline was reading and writing to the wrong design's files. Both the saved files and the live preview now correctly target the design you were viewing. **Where:** Site editor → switch to a non-active design → Design Assistant → "add product images" or "replace images" **How to test:** - On a site with multiple designs, make Design 2 the one you're viewing (not Design 1) - Type "add product images" in the Design Assistant - The images should update in Design 2 and all product content should remain intact **Watch for:** Product content disappearing or showing placeholder text after an image prompt, or images from a different design appearing in the updated preview.
"Modify & Clone" no longer fails with "Failed to generate modified clone" when you clone a design that already has many pages — it now generates the new design and saves it. **Where:** Site editor → a design → **+ New → Clone a Design → Modify & Clone → Generate New Design** **How to test:** On a multi-page site, pick a design, choose Modify & Clone, select "Dark mode" (or type a style change), click Generate New Design. It should produce a "Review Sections" preview and, on Apply, add a new design variation. **Watch for:** Very large designs (many pages) taking longer than usual; the new design should still appear and be selectable.
"Modify & Clone" was failing with "Failed to generate modified clone" on sites with large, complete designs — the builder was unnecessarily reassembling all page files (sometimes 500KB+) even when the design already contained everything needed, hitting an AI token limit. The fix detects self-contained designs and uses them directly, avoiding the oversized prompt. **Where:** Site editor → a design → **+ New → Clone a Design → Modify & Clone → Generate New Design** **How to test:** - On a site with a large design (many sections and pages), choose Modify & Clone and request a style change - The cloned design should generate within the normal time and produce a valid new variation **Watch for:** "Failed to generate modified clone" errors or the operation timing out on sites with large, multi-section designs.
"Modify & Clone" was failing for multi-page sites whose designs use modular component files, showing "Failed to generate valid code after retry." The fix properly assembles just the homepage-relevant components instead of including every page file, so AI modifications stay within the allowed size and produce a valid new design. **Where:** Site editor → a design → **+ New → Clone a Design → Modify & Clone → Generate New Design** **How to test:** - Open a multi-page site that has multiple designs - Pick a design, choose Modify & Clone, select a style change (e.g. "Dark mode"), and click Generate New Design - The cloned design should appear in "Review Sections" and, on Apply, add a new variation **Watch for:** "Failed to generate valid code after retry" errors or the clone operation hanging indefinitely on multi-page sites.
When prompting the AI to add or replace images on a design that wasn't your currently-active design (e.g., Design 2 while Design 1 is active), the product content appeared to disappear and placeholder text showed across multiple sections. This happened because the image regeneration pipeline was reading and writing to the wrong design variation's files. **Where:** Design Assistant chat — prompts like "add product images" or "replace images" **How to test:** On a site with multiple designs, switch to Design 2 (non-active), then type "add product images" in the Design Assistant. The images should update correctly and the product content should remain intact. **Watch for:** Any AI image-replace that leaves the preview showing a completely different design's content, or showing placeholder text where product items used to be.
Saving content or switching designs no longer occasionally triggers a black "Application error" screen in the site editor — the editor now recovers gracefully when the site's design files are transiently unavailable. **Where:** Site editor (any site with multiple design variations or after saving content changes) **How to test:** - Open a site with at least two design variations in the editor - Save a content change or switch between designs several times - The editor should stay responsive — no full-screen "Application error" crash **Watch for:** The editor going completely blank or showing "Application error: a client-side exception has occurred" after saving; refreshing the page should still restore the editor correctly.
When the same placeholder image URL appeared in multiple sections across different pages, replacing the image on one page was also replacing it everywhere else. The fix restricts each replacement to the exact file where the image was found. **Where:** Site editor → click on an image → Replace Image **How to test:** - On a site with multiple pages (e.g. a restaurant with menu and FAQ pages), click an image in one section and replace it - Verify that only that one image changed and images in other sections or pages are unchanged **Watch for:** Multiple images changing unexpectedly after replacing a single image, or a replaced image reverting to a placeholder on a different page.
The progress bar during a full site build now shows an animated segment for pages actively being generated, so you can tell work is happening instead of watching a frozen bar for the first minute of every batch. **Where:** Site editor → Build Site → progress modal (shown while pages are generating) **How to test:** - Start a full site build from the site editor - Watch the progress modal — the bar should show movement and animated "in-progress" segments while pages are being created, not stay at 0% for a long stretch **Watch for:** The progress bar appearing fully frozen or stuck at 0% for more than a few seconds after the build has started.
After using the AI to refresh or regenerate images, clicking Undo now correctly brings back the images from before the refresh. Previously, the version snapshot was saved before the new images were applied, so Undo either skipped too far back or showed "Cannot undo — no previous version exists." **Where:** Site editor → Design Assistant → "regenerate images" or "add product images" → Undo button **How to test:** - Ask the AI to regenerate images on a design - After the images update, click Undo - The previous images should be restored correctly (one step back, not two or none) **Watch for:** Undo after image refresh reverting to an unexpected state, or showing "no previous version" when images were just changed.
When pasting a video URL into the Replace Image dialog's URL tab, the preview no longer briefly flashes a broken image icon before switching to the video player — it now shows a loading indicator while the URL is being identified. **Where:** Site editor → click any image → Replace Image → URL tab → paste a video link **How to test:** - Open the Replace Image dialog on any site image - Paste a video URL (e.g. an MP4 link or embed URL) into the URL tab - The preview should show a spinner briefly, then load the video — no broken-image flash **Watch for:** The preview getting stuck on the spinner and never loading; also check that pasting a regular image URL still shows the image immediately without a spinner.
When the AI design assistant suggested an image replacement and you clicked Apply, the image would go blank and revert on refresh. The apply flow now correctly opens the image search panel pre-filled with the suggestion, and saves the change so it persists. **Where:** Site editor → Design assistant panel → Brainstorm → image suggestions → Apply **How to test:** - Open the Design assistant panel in the site editor - Use Brainstorm on an image element - Click Apply on one of the suggested image options — the image search panel should open with the suggested query pre-filled - Select an image and confirm — it should appear and persist after refresh **Watch for:** Blank or broken images after applying, changes reverting on refresh, Apply button with no visible effect
When a large design request triggers the "big change detected" prompt, picking **Apply to current design** or **Create as new variation** now shows a live progress indicator and renders the next step, instead of going silent. **Where:** Site editor → design chat → submit a large redesign request → the "big change detected" card → click either option. **How to test:** 1. Open a site in the editor and send a substantial redesign request (e.g. "add an about, services, testimonials and FAQ section"). 2. When the "big change detected" card appears, click **Apply to current design** — confirm the progressive "thinking" indicator appears and a result card renders when it finishes. 3. Repeat and click **Create as new variation** — confirm the next "pick a base" card appears (previously nothing showed). **Watch for:** The chat going silent with no spinner/status after clicking an option; a missing follow-up card for the new-variation path.
Sites generated from a quick chat or voice session now produce copy and styling that fit the actual business — instead of occasionally falling back to generic corporate language. **Where:** Site generation (after describing your business in chat or voice, then generating) **How to test:** Describe a specific business briefly (e.g. "online fitness coach offering workout plans, nutrition plans, and mental health support") via voice or chat without filling in every detail, then generate. The homepage copy and tone should clearly read as that business — not generic "enterprise" filler. **Watch for:** Copy that ignores the services you mentioned, an industry that comes out wrong/generic, or marketing-deck phrasing unrelated to what you described.
The replace-image panel was pushed below the visible screen when switching to Floating or Background layout mode, making the Apply button unreachable. It now fits within the viewport regardless of which layout options are expanded. **Where:** Site editor → click any image → Replace image (context menu) → select Floating or Background layout **How to test:** - Open a site in the editor, right-click an image, and choose Replace image - Switch to "Floating" or "Background" layout — extra controls should appear - Scroll to the bottom of the panel — the Apply button should be fully visible **Watch for:** Panel content getting clipped, Apply button not being reachable, or inability to scroll inside the panel
When fetching images from a webpage returns nothing usable (or the URL is from a search engine or social media site that can't be scraped), the panel now shows a clear message explaining why — instead of silently resetting with no feedback. **Where:** Site editor → click any image → Replace image → Import from Webpage tab **How to test:** - Open Replace image and go to the "Import from Webpage" tab - Enter a URL from Google, Pinterest, Instagram, or Twitter — you should see an instant error explaining it's unsupported - Enter a valid webpage URL that has no image assets — after fetching, a yellow notice should appear explaining that no usable images were found and suggesting alternatives **Watch for:** Blank panel with no message after a failed fetch, button appearing to do nothing, or confusing spinner that never resolves
Certain custom border styles using CSS variables were silently dropped when publishing — causing form inputs and other bordered elements to appear without their borders. The auto-fix system now correctly handles these cases, so borders render as designed. **Where:** Published sites with form inputs or bordered elements using CSS custom properties **How to test:** - Generate or open a site with form fields or bordered containers using CSS variables for border styling - Publish the site and view the live version - Form input borders and other border styles should be visible as designed **Watch for:** Invisible or missing borders on form inputs, containers, or other elements after publishing
The intake form no longer asks users to pick an abstract "visual style" lane or an "animation level" — questions non-designers found confusing and couldn't answer before seeing a design. **Where:** Site Builder → blueprint chat intake form (the "Quick questions" form shown when you start a new site). **How to test:** Start a new site with a fresh business pitch and open the intake form. Confirm there is no "Which visual lane / style fits?" chip and no "How animated should the site feel?" (Subtle/Moderate/Dynamic) question. Reference-site, brand-color palette, and logo/photo upload questions should remain. **Watch for:** The form should feel shorter but still gather the concrete facts and assets. The look-and-feel is now driven by your reference sites, brand colors, and uploaded images, and the two generated designs let you compare distinct directions — fine-tune motion/style afterward via refinement.
With 8 source tabs available (Stock Photos, My Assets, Upload, URL, Import from Webpage, AI Generate, Lottie, Animated SVG), the rightmost tabs were being clipped on smaller screens with no way to scroll to them. The tab row now scrolls horizontally so all options are always reachable. **Where:** Site editor → click any image → Replace image → tab row at the top of the modal **How to test:** - Open Replace image on any image element - On a narrow screen or with the editor panel open, confirm all tabs are accessible by scrolling the tab row - Click tabs at the far right (e.g. Animated SVG) — they should be reachable without resizing the window **Watch for:** Tabs being cut off or missing, inability to reach rightmost source options
After replacing an image in the site editor, the change would appear immediately but then revert back to the original image on refresh or after any subsequent edit. The underlying save was silently failing due to a stale database function. This is now fixed — replaced images persist correctly. **Where:** Site editor → click any image → Replace image → select a new image → Apply **How to test:** - Open a site in the editor and replace any image with a new one from any source - Refresh the page — the new image should still be in place - Make another edit (e.g. a text refinement) and refresh again — the replaced image should remain **Watch for:** Images reverting to placeholders after refresh, "optimistic" updates that disappear, or replaced images changing back during other edits
When two sections on a page used the same placeholder image, clicking Replace on one could accidentally update the other — or a completely different image on the page. The editor now uses a precise content path to identify exactly which image to replace, so the correct section always gets the update. **Where:** Site editor → click any image → Replace image → select a new image → Apply **How to test:** - Open a site where multiple sections share the same stock/placeholder image - Replace the image in one specific section - Confirm only that section updated — other sections using the same image should be unchanged - Repeat for the other section to confirm it also replaces independently **Watch for:** Wrong image updating on the page, replacements appearing in the wrong section, or no visible change in the intended section after applying
Voice and chat sessions reliably capture what you describe in the requirements, but don't always fill in the business details form. Sites generated from these sessions now automatically derive the business industry, description, and tone from what you said — so the generated content reflects your actual business instead of defaulting to generic corporate copy. **Where:** Site generation after a voice or chat intake session **How to test:** - Start a voice session and describe your business (e.g. "I run a fitness coaching business offering workout plans and nutrition guidance") - Skip filling in the business details form and proceed to generate - The homepage copy, industry selection, and styling should clearly reflect the business context you described **Watch for:** Generic corporate language appearing despite a specific business description, wrong industry being selected, or copy ignoring services you mentioned
When analyzing a site's existing images during content extraction, the AI occasionally mistook long digit sequences in image filenames or URLs for a real business phone number, which then appeared pre-filled in the "Review Business Information" dialog and got published on the live site. Implausible numbers are now detected and dropped so the dialog prompts for a real phone number instead. **Where:** Site editor → Generate / Re-extract → "Review Business Information" dialog **How to test:** - Re-extract content on a site that uses stock photography with numeric filenames (e.g. Unsplash images) - Open the "Review Business Information" dialog and confirm the phone field is either blank or contains a real number — not a string of digits scraped from a photo URL **Watch for:** Phone fields pre-filled with long digit strings that are not real phone numbers (e.g. "14720996457").
When the Design Assistant finished applying a change, the canvas sometimes kept showing the old design until you switched between design variations and back. The preview now refreshes automatically the moment changes are applied. **Where:** Site editor → Design Assistant chat (any site with a live preview) **How to test:** Open a site, ask the Design Assistant to make a visible change (e.g. "change the hero heading"), and confirm the canvas updates as soon as the chat says it's done — without switching designs. **Watch for:** Changes that still require a manual design-switch to appear, or any flicker/double-render of the preview during normal editing.
Two regressions in the site editor are fixed: opening the editor with an unhydrated design could still white-screen the page (a render-phase code path was missed in the previous fix), and form content stored in a wrapped object format could be left in place unflattened instead of being normalized to a flat list. **Where:** Site editor → switching designs or reopening a site **How to test:** - Open a site with multiple designs and switch between them rapidly — the editor should never show a blank white screen - Open a site that was edited before today and confirm forms still appear and save correctly **Watch for:** A white/blank editor canvas when switching designs; form fields disappearing or failing to save after switching variations
Some sites were failing to publish with a bundle error caused by a duplicate import being injected on top of a locally-defined form component. Affected sites now publish successfully and serve all pages with correct content. **Where:** Site editor → Publish button (client portal or admin) **How to test:** - Publish a site that includes a contact form or modal form component - Confirm the site publishes without error and all pages (home, services, etc.) load correctly at the live URL **Watch for:** Published URLs returning 404 or 500 after a publish that appeared to succeed.
Newly generated sites with contact or quote forms were showing a "Form config missing" warning banner in the editor preview right after generation, which disappeared only after the first save. Forms are now fully registered at generation time so the editor preview is correct from the start. **Where:** Client portal → site editor → Pages tab (immediately after a new site is generated) **How to test:** - Generate a new site for a business type that typically includes a contact or quote form (e.g. plumber, contractor) - Open the editor without making any changes or saves - Confirm no "Form config missing" banner appears in the preview **Watch for:** A red or yellow banner in the site preview labeled "Form config missing" or similar appearing before the first save.
The site editor was showing a blank "Application error" screen when opened immediately after a publish or page refresh, before the site's variation data had finished loading. The editor now degrades gracefully and stays usable while data loads. **Where:** Client portal → site editor (any tab) **How to test:** - Open a site in the editor, trigger a publish, then immediately reload the editor URL - Confirm the editor opens normally without an "Application error" page - Verify all editor tabs (Pages, AI assistant, etc.) are accessible **Watch for:** A blank white screen or "Application error" replacing the full editor UI on first load.
When a site failed to publish during the final export step, it was incorrectly left in a "published" state with a broken URL that returned 404. Now the status correctly reverts to draft so users know to retry. **Where:** Site editor → Publish button (client portal or admin) **How to test:** - Attempt to publish a site - If publishing fails (check deployment status shows "failed"), confirm the site status shows as "drafting" — not "published" - Verify the publish button is available to retry **Watch for:** Sites stuck in "published" state with a 404 deployment URL after a failed publish attempt.
Switching between design versions now drops the loading overlay the moment the new design has rendered *and* its content is in place, instead of always holding for a fixed delay — so switches feel faster, and you no longer briefly see a design with sections that look empty or "reset." The overlay also stays up through the brief extra wait the first time a design is opened (while it compiles), so you never catch a glimpse of the previous design before the new one finishes loading. **Where:** Site editor → switching between Design 1 / Design 2 (and any additional designs). **How to test:** Open a site with several designs. Switch to one you haven't opened yet (it compiles the first time) — the loading overlay should stay up until that design is fully on screen, never flashing the previous design. Then switch back and forth between already-opened designs — those should feel quick, with your saved content present the instant the overlay clears. **Watch for:** The previous design flashing in after the overlay clears; overlay clearing while sections are still empty; overlay hanging far longer than the design takes to load; rapid back-and-forth switching showing the wrong design's content.
On some sites, republishing was replacing the full site navigation (with all menu items) with a single "Home" link, and replacing footer links with dead placeholder anchors. This was caused by stale partial data from an earlier design variation overwriting the curated navigation and footer. The global navigation and footer now always take precedence on publish. **Where:** Published site → Navigation menu and footer links **How to test:** - Open a site that has a custom multi-item navigation (e.g. Home, About Us, Contact) - Republish the site - Verify all navigation items and footer links are intact on the published URL **Watch for:** Navigation collapsing to "Home" only, or footer links pointing to "#" after republish.
Starting a voice session was immediately presenting a 12-question intake form before the AI had even asked what the business was about. Voice now begins as a natural conversation — asking your business name first — and only uses an intake form if one was already open from the text chat. **Where:** Admin AI Playground (Blueprint Wizard) → Voice button (microphone icon) **How to test:** - Open a new site in the Blueprint Wizard with no prior chat - Click the voice button to start a voice session - Confirm the AI greets you conversationally and asks about your business — no intake form auto-opens - Separately, fill the intake form in text mode, then switch to voice — confirm voice walks through remaining unanswered questions **Watch for:** Intake form appearing on voice cold-start, or voice ignoring an already-open form.
When a site was created by typing just a name (e.g. "Arnav Sharma"), starting a voice session was immediately showing the full intake form — before the AI had a chance to ask what the business does. A name alone is not enough context to trigger the form; the AI now asks conversationally first and shows the form only after learning more about the business. **Where:** Admin AI Playground (Blueprint Wizard) → Voice button, on a newly created site with only a business name **How to test:** - Create a new site by entering only a name (no industry or description) - Start a voice session - Confirm the AI greets you and asks about your business rather than showing the intake form immediately **Watch for:** Intake form appearing immediately after voice connects on name-only sites.
When a new site is generated, our AI now suggests ready-to-use copy for exit-intent and newsletter popups tailored to the site's industry and offer — so clicking "Add → Exit popup" opens a pre-filled form instead of a blank one. **Where:** Site editor → hover any section → Add → Exit popup or Newsletter popup **How to test:** - Generate a new site for a commerce-style business (e.g. a retail or service business with an offer) - Open the site editor and click to add an Exit popup or Newsletter popup - Verify the form opens pre-filled with relevant headline, subtext, and CTA copy matching the business **Watch for:** Pre-fills appearing on luxury or professional-services sites (they are intentionally excluded), or the popup form opening blank when suggestions should be available.
Contacts who previously completed a journey (all messages sent) can now be re-enrolled in the same journey when a new qualifying event occurs — fixing refund reversal, chargeback recovery, and cart recovery flows that were silently blocked by old completed runs. Also fixed: email sending errors now show the actual failure reason instead of a generic "email service not loaded" message. **Where:** Site editor → Journeys → automated re-trigger flows (cart recovery, booking confirmation, etc.) **How to test:** - Trigger a journey for a contact and let it complete fully - Fire the same trigger event again (e.g. a new abandoned cart) and confirm a new run starts - Verify error messages from email sends show the real cause when they fail **Watch for:** Contacts silently not receiving messages from journeys they previously completed, or email failures showing "email service not loaded" instead of the actual error.
Contacts blocked by a previous cancelled journey run can now enter the same journey again — booking cancellations followed by re-confirmations, abandoned-cart rollbacks, and manual stop-then-restart flows all work as expected. Also fixed: messages that were actually delivered are no longer incorrectly marked as failed when a temporary database hiccup occurs after sending. **Where:** Site editor → Journeys → any journey with re-trigger scenarios **How to test:** - Trigger a journey for a contact, then cancel it - Re-trigger the same journey for the same contact and confirm a new run starts - Verify that previously delivered messages show "sent" status and are not flipped to "failed" **Watch for:** Contacts not entering a journey after a prior run was cancelled, or delivered messages showing a failed status after a database error.
A prepaid wallet lets you top up messaging credits via Stripe and send WhatsApp messages through our platform instead of billing directly to Meta — with 100 free utility conversations per month, automatic low-balance email alerts, and optional auto-recharge when your balance dips below a threshold. **Where:** Client portal → Messaging Credits (top nav) or Site editor → Settings → Integrations → Messaging tools **How to test:** - Open the Messaging Credits page and add credits via the Top Up button (Stripe Checkout) - Enable auto-recharge and set a threshold — let the balance drop and confirm the wallet is recharged automatically - Send a WhatsApp utility message and verify the free monthly allowance is consumed (not the paid balance) **Watch for:** Top-up credits not appearing after Stripe payment, auto-recharge not triggering at the threshold, or the free utility allowance resetting incorrectly.
You can now design multi-step messaging journeys with a drag-and-drop visual canvas — connect send, wait, branch, A/B test, webhook, and goal nodes to build flows that automatically message contacts based on their actions and attributes. **Where:** Site editor → left rail → Journeys → select or create a journey **How to test:** - Open a site and navigate to the Journeys section from the left rail - Create a new journey and add a "Send message" node connected to a "Wait" node and a branch - Save and activate — contacts entering the trigger should advance through steps automatically **Watch for:** Node connections not saving, branch paths not appearing, or the live validation badge showing errors when the graph is valid.
A dedicated template manager lets you create, view, and track approval status for WhatsApp message templates — with built-in validation that catches naming, variable sequencing, and button-mix errors before submission to Meta. **Where:** Site editor → WhatsApp → Templates **How to test:** - Navigate to a site's WhatsApp → Templates page - Create a new template with a name, category (Marketing/Utility/Authentication), and body with variables like {{1}} - Submit and verify the status updates when Meta processes it via the webhook **Watch for:** Template status not updating after submission, variable sequencing errors not being surfaced before submit, or the composer not loading existing templates.
The "Connect to payment provider" action in the store setup checklist now navigates directly to the Payments tab in Site Settings, saving you the step of finding it manually. **Where:** Site editor → Home tab → Store setup checklist → "Connect to payment provider" **How to test:** - Open a store/ecommerce site - On the Home tab, find the "Connect to payment provider" action - Click it — should open Site Settings with the Payments tab active **Watch for:** Opening the wrong settings tab or going to the general settings page.
The "Show Alternative Layouts" option has been moved from the Properties panel into the Quick Actions section so it's easier to find and one click closer when you want to explore layout options for a section. **Where:** Site editor → click any section → Quick Actions panel **How to test:** - Click a section in the site preview - Open the Quick Actions section in the right panel - "Show Alternative Layouts" should appear there **Watch for:** The option disappearing from both locations, or appearing in both places as a duplicate.
Asking the AI assistant to "restructure the navigation" or "link pages instead of sections" now produces an actual updated navigation — with real page links replacing anchor scrolls and properly grouped dropdown menus on capable sites. Previously, the same request returned a generic "use the Edit button in the top bar" guidance message instead of making the change. **Where:** Site editor → Design Assistant → type a navigation request (e.g. "Restructure the navigation menu and link the pages") **How to test:** - In the site editor, open the Design Assistant chat - Type "Restructure the navigation to link to the pages instead of scrolling to sections" - A navigation preview card should appear with updated links — anchor hrefs replaced with real page routes - On a site with many nav items, dropdowns should group related items (About, Services, etc.) - Confirm to apply the change **Watch for:** The assistant still responding with "use the Edit button" instead of making the change; anchor hrefs like `#contact` not being prefixed to `/#contact` for inner-page resolution.
Asking the AI assistant to restructure or relink your site navigation now produces immediate results — the assistant constructs the new menu and applies it in one step, instead of directing you to the manual editor. On sites with dropdown-capable headers, the new navigation is automatically grouped into logical sections (About, Services, Patient Info, etc.) with short labels, rather than outputting a long flat list. **Where:** Site editor → AI assistant chat → type "restructure the navigation" or "link the pages instead of the sections" **How to test:** - Open a site with multiple pages and ask the assistant to "restructure the navigation menu and link the pages" - The assistant should apply the change directly — not say "use the Edit button in the top bar" - On a dropdown-capable site, verify related items are grouped under a parent (e.g., multiple service pages under a "Services" dropdown) **Watch for:** Assistant responding with guidance to edit manually instead of applying the change; flat navigation appearing on a site that previously had dropdowns.
When the AI assistant updates your site's navigation, the confirmation card now shows a compact tree view of the new menu structure (pages, dropdown groups, links) rather than a dense form with a separate input for every nav item. You can quickly see what changed at a glance and accept or reject it. **Where:** Site editor → AI Assistant → any message that updates navigation → confirmation card **How to test:** - Ask the AI assistant "restructure my navigation" or add a new page via chat - The nav confirmation card should show an indented tree of your navigation items - Accept to apply, Reject to discard **Watch for:** The old multi-input form still appearing, or the tree preview being empty when navigation items exist.
Building a site with many pages could cause the progress indicator to freeze partway through, leaving you unsure whether generation was still running. The progress now advances correctly for all pages, and any AI service capacity errors that occur during generation are surfaced as clear messages instead of disappearing silently. **Where:** Site editor → Build phase → multi-page site generation progress **How to test:** - Build a site that generates 3+ inner pages - The progress bar should advance continuously and complete without freezing - If generation hits capacity limits, an error message should appear rather than silent failure **Watch for:** Progress still freezing at a specific page count, or capacity errors silently swallowed with no user feedback.
Saving your content in the Content Manager would sometimes trigger a spurious "Content changed externally" warning banner immediately after the save completed, even though the content hadn't been changed by anyone else. The banner is now suppressed for saves that originated within the modal itself. **Where:** Site editor → Content Manager → edit any field → Save **How to test:** - Open the Content Manager, edit any field, and click Save - The "Content changed externally" banner should not appear after the save succeeds - Confirm the banner still appears when content is genuinely changed externally (e.g., from another tab) **Watch for:** Banner being suppressed in cases where the content really was changed by another session.
On multi-page generated sites, action buttons ("Book", "Get started", "Schedule") were sometimes wired to scroll anchors on the same page instead of linking to the correct planned route (e.g., /booking, /services). The generation rule now prioritizes page-level links for multi-page sites, and user-approved CTA copy from blueprints is preserved exactly rather than rewritten by the dead-CTA rule. **Where:** Any generated multi-page site with action CTAs in hero, features, or other sections **How to test:** - Generate a multi-page site (e.g., restaurant or service business) with a /booking or /services route in the plan - Click hero and section CTAs — they should link to the planned route, not scroll to a same-page section - If the blueprint specifies exact CTA copy, verify it appears unchanged in the output **Watch for:** CTAs that scroll to "#contact" or "#booking" instead of navigating to the planned /contact or /booking page on multi-page sites.
When you trigger an AI action in the editor (refinement, image regeneration, quick action), the Design Assistant panel now automatically switches to the Chat tab so you can see the AI's response and progress without manually switching tabs. On other tabs, action chips now show a compact indicator instead of taking up the full width. **Where:** Site editor → Design Assistant panel → any AI action **How to test:** - Click a Quick Action (e.g., "Improve text") while on the Properties tab - The panel should automatically switch to Chat to show the AI response - Switch back to Properties — chips should appear smaller/compact while AI is active **Watch for:** Panel not switching to Chat during AI activity, or the panel staying on Chat when you're trying to use Properties.
After a site graduated from the Design phase to Build, the Design Assistant chat panel would show an empty conversation history even though prior chats existed. Previous refinements and conversations now appear correctly in Build-phase sites. **Where:** Client portal → Site editor → Design Assistant → Chat tab (on a site in Build phase) **How to test:** - Open a site that has been built (moved past the design/variation phase) - Open the Design Assistant chat panel - Prior conversations and refinements should be visible in the history **Watch for:** Chat history still appearing empty, or old messages missing for specific conversation types.
When you click a quick-action button ("Longer", "Punchier") or submit a mini-form in the site editor, the panel now switches to the chat tab immediately so you can see the AI working — instead of staying on the properties tab and showing nothing for up to 30 seconds before snapping to chat when the result arrives. Additionally, the "Make Editable" button no longer appears when clicking on images, where it would previously attempt to extract image URLs as text content. **Where:** Site editor → select any text element → use quick-action buttons (Longer, Punchier, etc.) or mini-form **How to test:** - Click a text element and then click "Longer" or "Punchier" - The panel should immediately switch to the chat tab showing AI activity - Click an image element — "Make Editable" should not appear in the panel for image nodes **Watch for:** Panel staying on the properties tab with no visible activity after clicking a quick action; "Make Editable" still appearing on image elements.
The "Love it", "Needs changes", and "Try again" feedback triage buttons in the Design Assistant were invisible in light mode — their near-white text rendered against a white panel background. The buttons now use a correctly-contrasting color palette when the editor is in light mode. **Where:** Site editor → Design Assistant → Chat tab → feedback triage buttons after an AI response **How to test:** - Switch the editor to light mode - Trigger an AI refinement so the feedback triage buttons appear - All three buttons should be clearly visible with readable labels **Watch for:** Buttons appearing as invisible or very faint against a white background in light mode.
When the editor's "Fix images" action targeted an `<img>` element that was referenced by other code (rather than directly in the section component), the fix was being routed through the general code refinement path, which could produce inconsistent results. These cases are now correctly routed to the dedicated image regeneration path, making image fixes faster and more reliable. **Where:** Site editor → Design Assistant → "Fix images" action on any image **How to test:** - Find an image in the editor that has quality or sizing issues - Use "Fix images" from the Quick Actions or Design Assistant - The image should be regenerated cleanly without spurious code changes around it **Watch for:** "Fix images" producing code changes unrelated to the image, or taking much longer than expected.
Images in gallery sections were rendering as their text description (alt text or URL) inside the Content Manager editor instead of showing the actual image preview. Gallery fields now display the image thumbnail alongside the edit controls, matching how images appear everywhere else in the editor. **Where:** Site editor → Content Manager → any gallery/image collection field **How to test:** - Open Content Manager on a site with a gallery or image grid section - Gallery items should show image thumbnails, not text - Clicking an image should open the Replace Image panel **Watch for:** Images still rendering as text strings, or thumbnails showing broken image icons.
Every button and call-to-action in a newly generated site now resolves to a real destination — a page in your site, a scrollable section, or a modal. Buttons whose copy promised an interaction (like "Start the Quiz" or "Book Now") could previously appear with no `onClick` or `href`, leaving visitors clicking dead elements. Pages in your plan that haven't been built yet are still valid link targets. **Where:** Site generation — any newly generated variation **How to test:** - Generate a new site and inspect all CTA buttons in the preview - Every button that promises an action ("Book", "Get Started", "Quiz") should scroll to a section, navigate to a page route, or open a sibling modal - No button should have a bare `href="#"` or no `onClick` unless it's a genuine placeholder (e.g. a footer logo) **Watch for:** Buttons that still navigate nowhere after generation, or links pointing to invented pages not in the site plan.
Searching for Lottie animations in the editor was failing due to an API change by LottieFiles. The search now uses LottieFiles' official GraphQL API and returns results correctly. **Where:** Site editor → Design Assistant → any element using Lottie animations → search for animations **How to test:** - Open the Lottie animation search in the editor - Search for terms like "loading", "success", "arrow" - Results should appear as before **Watch for:** Empty results or error messages from the search — these would indicate further API changes by LottieFiles.
When you click a text element in the editor that's truly hardcoded in code (not yet in your site content), Quick Edit now shows a "Make editable" button. One click extracts the text into your content store, rewrites the page to use it, and turns the element into a normal editable field. Runs ~5–15 seconds the first time per page; after that, every text element on that page edits instantly. Pairs with the search-and-resolve rescue shipped earlier today — together they cover (a) text the AST didn't reach but is already in content, and (b) text that isn't in content at all yet. **Where:** Site editor → click any text element → if Quick Edit shows "isn't connected to editable content", a green "Make editable (5–15s)" button now appears below it. **How to test:** - Click a heading that previously showed "isn't connected" with the new green button below → press "Make editable" → spinner for 5–15s → success toast → click the heading again → Quick Edit opens with the text editable - Click 3 different unbound texts in the same page rapidly → only one AI call fires; all three benefit - After a page has been "made editable" once, clicking new texts on the same page should resolve without showing the button (until you refine the page, which regenerates the file) - On a non-extracted (preview-phase) site the button doesn't appear at all — the sync endpoint only handles extracted-phase sites **Watch for:** Buttons that don't appear when expected (need contentPath missing + text content non-empty + extracted-phase site); duplicate AI calls when rage-clicking (the in-flight dedupe should ensure only one fires per page); page changing during sync (the endpoint reports `changedPages` and surfaces "page changed during sync — try again").
Sites whose generated Header components didn't support dropdown navigation were falling back to "flat" mode (no nested menus) due to AI output being truncated mid-file. The fixer now automatically escalates to a stronger AI model when an initial attempt produces truncated or non-conforming output, and the token budget scales with Header file size so large headers get enough room to rewrite fully. Dropdown navigation now succeeds on the vast majority of sites. **Where:** Site editor → any generated site with multi-level navigation **How to test:** - Generate a site with a multi-page plan and nested navigation items - Inspect the rendered Header — dropdown menus should render correctly, not as a flat list - Sites that previously showed only top-level nav links should now show submenus **Watch for:** Sites stuck in flat mode after generation — this should now be rare and only occur for genuinely unusual Header structures.
When the AI assistant proposes a navigation change, the preview card now shows an "Edit in Settings →" link alongside the accept/reject buttons. Clicking it opens Site Settings → Navigation so you can fine-tune the structure manually if the AI's suggestion isn't quite right. **Where:** Site editor → AI Assistant → any message that updates navigation → "Edit in Settings →" link in the preview card **How to test:** - Ask the AI assistant to update or restructure the navigation - A navigation tree preview should appear with Accept / Reject buttons - The "Edit in Settings →" link should appear below the preview - Clicking it should open Site Settings at the Navigation tab **Watch for:** Link not appearing on the preview card, or opening the wrong settings section.
Your site's navigation now stays in sync with your pages automatically. When you add a page via the AI assistant, it appears in the nav right away — no second manual step needed. When you delete or rename a page, the navigation reorganizes intelligently: orphaned dropdown groups are cleaned up, deleted page links default to the homepage instead of a random page, and anchor links like `#contact` are preserved through the change. Dropdown structures are also preserved when you switch between design variations so you don't lose your nav hierarchy. **Where:** Site editor → Pages tab → add / delete / rename a page **How to test:** - Ask the AI assistant to "add a Contact page" — it should appear in the site navigation automatically - Delete a page — any nav items linking to it should update; dropdowns that only contained that page should be removed - Rename a page — the nav label should update to match - Switch design variations — your dropdown nav structure should be restored on dropdown-capable variations **Watch for:** Pages added via AI chat that don't appear in the navigation, or deleted pages leaving broken nav items.
Exploring a new design variation is now a focused chat experience rather than a full-screen four-tab workspace. A compact modal opens over your current design, the AI asks 4–6 design preference questions via interactive chips, and generates a new variation when you're ready. A "More options" link is available to access Clone, Browse, or the freeform describe flow if you prefer those paths. **Where:** Site editor (Design phase) → "Try Something Different" button **How to test:** - In the Design phase of a site, click "Try Something Different" - A modal should open (not a full-screen takeover) with a chat interface - Answer the AI's preference questions using the chips or by typing - Click Generate when the button appears — a new variation should be created **Watch for:** The full-screen workspace still appearing, the Generate button not appearing after answering questions, or the modal blocking the preview entirely.
The recurring "This element isn't connected to editable content" guard now triggers far less often. Previously it appeared whenever the build-time content binder couldn't reach a particular text element — common on FAQ accordions, span shards inside headings, mapped carousels, and deeply-nested cards. Now the editor falls back to matching the clicked text against your site's content and opens Quick Edit whenever it finds a unique match. The change makes editability independent of how the AI structured the JSX. **Where:** Site editor → click any text element in the preview → right-side Quick Edit panel **How to test:** - Click a hero H1 that was previously showing "isn't connected" — Quick Edit should now open with the headline editable - Click an FAQ question or answer — should open Quick Edit if the text appears in your content - Click a span shard inside a larger heading — should resolve to the parent heading's content path - Click decorative chrome (icons, background divs) — still correctly shows "isn't connected" because there's no matching text to bind to **Watch for:** Text that appears in multiple places (e.g. the word "Learn More" used in 3 buttons) intentionally stays in "isn't connected" mode — ambiguous matches aren't auto-resolved to avoid editing the wrong place. Use Content Manager for those.
Every refinement was silently downgrading to a minimal fallback that only sent a handful of files to the AI, resulting in changes that missed your site's broader structure and multi-file routing. The root cause was a dropped database column that caused the context loader to error and fall back. Refinements now receive the full smart context — the same 38K-token page-aware selection that was always intended. **Where:** Site editor → Design Assistant → any refinement request **How to test:** - Open a site with 10+ files and make a refinement request - The AI should reference elements from across your site, not just the main file - Multi-file changes (e.g. updating a shared header across pages) should now apply to all affected files **Watch for:** "Smart context failed — using minimal fallback" in the server logs; refinements that only change one file when multiple files should have been updated.
Clicking the replace button on an image in the Content Manager used to open the operating system's file upload dialog, bypassing the in-app image browser entirely. It now opens the Replace Image panel so you can search the image library, upload files, or use AI-generated images — consistent with how image replacement works everywhere else in the editor. **Where:** Site editor → Content Manager → any image field → replace/edit button **How to test:** - Open Content Manager and find any image field - Click the replace/edit button - The Replace Image panel should open (not the OS file picker) - Confirm you can search, upload, or use AI from within the panel **Watch for:** The OS file picker still appearing, or the panel opening with no image options.
The preview thumbnail shown on your site's Mission Control home page now updates to show the page you're currently viewing rather than always showing the homepage. Switching between Pages now keeps the thumbnail in sync. **Where:** Client portal → Site editor → Home tab → site preview thumbnail **How to test:** - Open the site editor home page and note the preview thumbnail (shows homepage) - Navigate to a non-homepage page via the Pages tab - Return to the Home tab — the preview should now show the page you were just on **Watch for:** Thumbnail stuck on the homepage regardless of which page is active.
The "Replace dummy products" and "Upload images" buttons in the store setup checklist now navigate directly to the Content Library instead of doing nothing or opening the wrong place. Getting started with your store is now one click instead of hunting through menus. **Where:** Site editor → Home tab → Store setup checklist → "Replace dummy products" or "Upload images" **How to test:** - Open a store/ecommerce site in the editor - On the Home tab, find the store setup checklist - Click "Replace dummy products" — should open Content Library with the products section - Click "Upload images" — should open Content Library focused on images **Watch for:** Buttons that open the wrong tab or do nothing at all.
The AI's quick-pick suggestions during variation design now adapt to your site's specific context — a restaurant site gets food-focused style suggestions, a tech company gets SaaS-relevant ones. The AI's conversational tone has also been softened to feel more like a collaborative design conversation. **Where:** Site editor → Try Something Different → variation chat modal **How to test:** - Open the variation chat on different industry sites - Quick-pick chips should reflect the site's industry (e.g., "Warm and inviting" for a restaurant, "Clean and minimal" for a tech site) - The AI's responses should feel conversational, not clinical **Watch for:** Generic chip options unrelated to the site's industry, or robotic/technical AI responses.
Two crashes and a stale-state race condition in the variation chat modal are fixed. The modal now correctly passes your gallery feedback (liked/disliked designs) to the AI so preference questions are informed by what you've already reacted to. All preference chip questions now allow typing a custom answer, not just selecting a chip. **Where:** Site editor (Design phase) → "Try Something Different" → variation chat modal **How to test:** - Open the variation chat modal and send a message — no crash should occur - If you previously liked or disliked a design, the AI's questions should reflect your preferences - On any chip question, try typing a custom answer instead of selecting a chip — a text input should appear **Watch for:** "baselineContent is not defined" errors in the browser console; the modal crashing when the Generate button is clicked.
The variation design chat used to open by showing the AI's internal analysis of your site ("I notice your site uses a blue palette and professional tone..."), which felt clinical and exposed internal reasoning. It now opens with a simple welcoming prompt asking what you'd like to change, making the experience feel more natural. **Where:** Site editor → Try Something Different → variation chat modal → opening message **How to test:** - Click "Try Something Different" on any site - The first message from the AI should be a friendly design prompt, not a technical site analysis **Watch for:** The AI still opening with a hypothesis or analysis statement.
When you explore a new design variation, the AI now asks 4–6 questions that are specific to your site's industry and existing designs — covering mood, visual direction, content emphasis, layout, and structure. Previously these were static, generic prompts. If the personalized questions can't load, a fallback set of 3 general questions appears instead. **Where:** Site editor → Try Something Different → preference questions modal **How to test:** - Open a restaurant site and try "Try Something Different" — questions should be food/hospitality-themed - Open a tech SaaS site — questions should reference software/B2B themes - If the network is slow or unavailable, fallback questions should appear rather than an error **Watch for:** Generic questions appearing regardless of industry, or an error state with no questions at all.
When the AI asks design preference questions during variation generation (mood, visual style, layout choices), you can now type your own answer instead of being limited to the preset chips. An "Other — describe it" option appears alongside the standard choices on chip and multi-choice questions. **Where:** Site editor → Try Something Different → AI preference questions **How to test:** - Start a variation generation and reach the AI preference questions - On any chip-style question, look for the ability to type a custom answer - Enter a custom preference (e.g., "luxury and dark with gold accents") and continue - Verify the generated variation reflects your custom input **Watch for:** The custom input option not appearing, or typed answers being ignored during generation.
Clicking a version in the history panel for a site that had been moved to the Build phase would show a blank preview or fail to load if that version was originally saved during the Design phase. The preview now loads correctly regardless of which phase the version was saved in. **Where:** Site editor → History tab (or version history dropdown) → click any version **How to test:** - Open a site that has progressed from Design phase to Build phase - Open the History tab and click on an older version from before the phase change - The preview should load and show the site as it looked at that point in time **Watch for:** Blank previews, loading spinners that never complete, or error messages when clicking older versions.
WhatsApp button edits were being saved to the site's code but not written through to the content layer, so the changes could be overwritten the next time the AI made any refinement. Edits to WhatsApp phone numbers and messages now save to both layers and persist correctly. **Where:** Site editor → WhatsApp button → edit phone or message → save **How to test:** - Edit a WhatsApp button's phone number - Make an unrelated AI refinement afterwards (e.g., change a heading) - The WhatsApp number should remain unchanged after the refinement **Watch for:** WhatsApp edits reverting after any subsequent AI operation.
Editing your WhatsApp number or pre-filled message in the site editor previously routed through the AI refinement pipeline, which could take several seconds or silently drop the change. Edits now save directly to the site code in one round-trip — the same speed as editing any other text field. Additionally, the "pre-filled message" field now starts blank when no message has been configured, instead of incorrectly defaulting to the button label text (which would show "WhatsApp Us" as a pre-filled chat message for visitors). **Where:** Site editor → click a WhatsApp button → edit phone number or pre-filled message **How to test:** - Click a WhatsApp button in the editor - Edit the phone number — change should apply immediately with no "Applying via AI..." step - Clear the pre-filled message field and save — visitors clicking the button should land in an empty chat, not one pre-filled with the button label **Watch for:** Edits taking more than 2 seconds, or the message field still defaulting to the button text.
The "Build full site" button was failing with a database error for all users after a recent platform update removed an internal column. Clicking it now correctly creates your working build site. **Where:** Site editor → Design gallery → "Build full site" button **How to test:** - Open a site in the design gallery view - Click "Build full site" on any design - Confirm the site transitions to build mode without an error message **Watch for:** The button returning a generic error or the site staying in design mode after clicking
Clicking anchor navigation links on published sites was scrolling the target section behind the fixed header bar, making it appear partially hidden. The scroll now accounts for the header height so sections land in the correct visible position. **Where:** Published site → any anchor navigation link (e.g. "Services", "About", "Contact" in the nav) **How to test:** - Publish a site and open the live URL - Click an anchor nav link that scrolls to a section below - Confirm the section heading is fully visible and not hidden behind the fixed navigation bar **Watch for:** Sections scrolling into view but still partially covered by the nav bar
Previously, typing an instruction in the annotation popup queued it in a "Changes Queued" panel that required a separate "Apply All" click. Annotations now send directly to the AI as a chat message the same way text edits and image replacements do, with a toast confirming the change is being applied. **Where:** Site editor → click any element → type an instruction in the annotation popup → Submit **How to test:** - Click a section in the site preview to open the annotation popup - Type an instruction (e.g. "Make this section's background dark blue") and submit - Confirm a "Applying via AI..." toast appears and the change is processed in the chat — no "Changes Queued" panel appears **Watch for:** Instructions still going to the queue instead of being applied immediately
When clicking a site element to leave an annotation while the Design Assistant panel was open, the popup appeared off-screen or partially clipped. It now correctly transforms iframe coordinates to account for sidebar offsets and displays fully visible next to the clicked element. **Where:** Site editor → click any element in the preview → Annotate / leave a note **How to test:** - Open the site editor with the Design Assistant panel open (right sidebar visible) - Click on an element in the site preview to open the annotation popup - Confirm the popup appears next to the element and is fully visible, not off-screen **Watch for:** The annotation popup appearing at the wrong position or outside the visible area
After an auto-fix was applied to a page, the preview overlay code was accidentally saved into the page's source — meaning on the next load the overlay was injected a second time, causing "symbol already declared" errors that made the page completely unloadable. **Where:** Site editor → any page where an auto-fix has been applied **How to test:** - Open a site with one or more auto-fixed pages - Reload the preview for a fixed page - Confirm the page loads without console errors; previously affected pages (like a coaching or multi-section page) should render cleanly **Watch for:** Pages showing a blank/broken iframe after an auto-fix is persisted; browser console showing "The symbol 'FormModal' has already been declared" or similar duplicate-symbol errors
Dedicated listing pages (e.g. /menu, /services) on published catalog sites were capped at the same item limit used for the homepage section preview (typically 6 items), hiding the rest. Listing pages now display all available items from the catalog. **Where:** Published site → dedicated listing page (e.g. /menu for a restaurant, /services for a services site) **How to test:** - Publish a site with a catalog content type that has more than 6 items (e.g. a restaurant with 10+ menu items) - Visit the dedicated listing page on the published site (e.g. /menu) - Confirm all items appear, not just the first 6 **Watch for:** The listing page still showing only the homepage limit (e.g. 6 items) even with more in the catalog
Several naming issues affected sites with auto-generated catalog pages: labels were getting truncated ("OfficeGaller" instead of "Office Gallery"), page URLs used camelCase ("/officeGallery") instead of readable kebab-case ("/office-gallery"), and nav items showed "Office Gallery Listing" instead of "Office Gallery". All three are now fixed. **Where:** Site navigation and Pages tab — affects any site that auto-generates non-standard catalog pages (galleries, tiers, custom collections) **How to test:** - Generate a site with custom gallery or collection sections (e.g. a dental site with an "Office Gallery") - Open the Pages tab and check that page names are correctly singularized and readable - Preview the site nav and confirm no truncated labels or "Listing" suffix appears - Inspect page URLs and confirm they use lowercase-hyphen format (e.g. `/office-gallery`, not `/officeGallery`) **Watch for:** Truncated nav labels (ending mid-word), "Listing" or "Listings" appearing in nav text, camelCase or snake_case page URLs
Searching for catalog content (e.g. a specific menu dish, a service listing, or an event) in the content search returned zero results even when the content existed. The search index now includes all catalog rows, so content from menus, services, events, and other catalog sections is findable. **Where:** Site editor → Content Map → search for any catalog item **How to test:** - On a restaurant or service site with catalog content, open the Content Map in the editor - Search for a specific catalog item name (e.g. a menu dish or a service name) - Confirm the item appears in search results with the correct page attribution **Watch for:** Catalog items still returning zero results, or items showing "unmapped" page
Clicking the icon or text label inside a WhatsApp header button opened the generic button editor instead of the WhatsApp configurator (phone number + message fields). Only clicking the button's outer padding worked. The quick-action resolver now correctly identifies all click targets inside a WhatsApp link and opens the right panel. **Where:** Site editor → click any WhatsApp button in the site preview → "Edit WhatsApp message" quick action **How to test:** - Open a site that has a WhatsApp button in the header - Click directly on the WhatsApp icon (phone icon inside the button) - Confirm the "Edit WhatsApp message" panel opens with phone and message fields - Repeat by clicking the "WhatsApp Us" text label — should open the same panel **Watch for:** Clicking the icon or label opening a generic "Edit button" panel instead of the WhatsApp configurator
When both AI models in a dual-model generation declared the same collection type (e.g. "resources" or "menu"), the generation pipeline would create two or three identical listing pages — producing duplicate nav entries and confusing page structure. The pipeline now deduplicates collection declarations at staging time so each collection type is created exactly once. **Where:** Site editor → Pages tab — affects catalog-vertical sites (restaurant, services, real estate, etc.) generated on the Pro tier **How to test:** - Generate a Pro-tier catalog site (restaurant or similar) and open the Pages tab after generation - Confirm each catalog section (Menu, Gallery, etc.) appears only once in the page list - Previously affected sites would show two "Resources Listing" or "Menu Listing" entries **Watch for:** Duplicate page entries in the Pages tab after site generation; identical listing pages with the same slug
When generating a catalog site (restaurant, services, etc.), all visible homepage items were marked as "featured" by default — making the featured toggle useless since everything already appeared first. Now only a small selection is featured initially, leaving room for you to promote your favorite items using the star toggle. **Where:** Client portal → Pages tab → catalog content type (e.g. Menu) → star/featured toggle **How to test:** - Generate a new restaurant or services site - Open the content editor for a catalog section (e.g. Menu) - Confirm only 2–3 items are featured by default, not all of them - Toggle a non-featured item's star — confirm it moves to the top of the homepage section **Watch for:** All items still appearing featured, or the star toggle having no visible effect on ordering
Inner pages (About, Services, individual service pages) were importing the same Testimonials, FAQ, Contact, and Process sections from the homepage and rendering them unchanged — making every page feel like a copy of the home page with only 2-3 unique sections sandwiched in. The AI now follows a strict composition rule: lead with a page-specific hero, build 2-4 focused sections unique to that page, and close with one targeted CTA. **Where:** All generated inner pages — Client portal → Pages tab → any non-homepage page **How to test:** - Generate a multi-page site (e.g. a dentist or professional services site with About, Services, and individual service pages) - Open several inner pages in the site preview - Confirm each page has a unique hero and at least 2-3 sections specific to its purpose rather than repeating the full homepage layout **Watch for:** Inner pages that look nearly identical to the homepage; testimonials, FAQs, and contact forms appearing on every single page unchanged
The main action button and business avatar in Mission Control used the site's brand color, making them unreadable on sites with light palettes (such as cream or pastel themes). Both now use consistent high-contrast styling. **Where:** Client portal → Mission Control home screen (site avatar and primary action button) **How to test:** - Open a site with a light primary brand color (e.g. cream, pale yellow, or light gray) - Go to Mission Control (the site dashboard home tab) - Confirm the business avatar and the main CTA button ("Review homepage" or similar) are clearly readable **Watch for:** Invisible text on a same-color background for the avatar or the primary button
After building multiple pages, the homepage thumbnail in Mission Control frequently showed "Preview unavailable." The preview now debounces rapid updates during a build and retries with longer timeouts to handle slower server warm-up, significantly reducing failed preview loads. **Where:** Client portal → Mission Control home → homepage thumbnail preview **How to test:** - Run a full site build that adds multiple pages - After the build completes, check Mission Control's homepage thumbnail - Confirm it loads the site preview instead of showing "Preview unavailable" **Watch for:** "Preview unavailable" persisting after the build completes and waiting 30+ seconds
When a site build is running in the background after clicking "Continue in background," Mission Control now shows a prominent "Your pages are being built" card and hides the "Plan the rest of your site" button — so users can see progress is happening instead of wondering if something went wrong. **Where:** Client portal → Mission Control home → while a site build is running in background **How to test:** - Start a multi-page site build via "Build all pages" or the site planner - Click "Continue in background" during the build - From Mission Control, confirm a build-in-progress card is visible and the "Plan the rest of your site" CTA is hidden **Watch for:** The build card not disappearing once the build completes
Moving sections or editing text on pages that have early-loading guards (e.g. auth checks before rendering) silently failed because the section path identifier was being misread. Editing and moving sections now works reliably across all page types. **Where:** Site editor → select a section → drag to reorder or use the AI to edit text **How to test:** - Open a site page that has multiple sections - Drag a section to a new position — confirm it moves correctly and the change is saved - Ask the AI to edit text in a specific section of an inner page — confirm the edit applies to the right section **Watch for:** Section moves reverting after save, or AI edits going to the wrong section
Two navigation issues fixed: header navigation menus with dropdown sub-items now render and open correctly, and navigation links are automatically updated after an autonomous site build completes — so users no longer see stale nav after pages are generated. **Where:** Published site header navigation (for dropdown menus) and Client portal → Pages tab (after using "Build all pages") **How to test:** - Generate a site with multi-level navigation (parent items with children) - Open the published preview and hover/click parent nav items — confirm dropdowns open - Use "Build all pages" and after completion, check that the navigation reflects the newly created pages **Watch for:** Dropdown menus not opening, or navigation still showing old anchor links after a build
After adding catalog pages (e.g. a menu or services listing), some navigation items remained as anchor links pointing at homepage sections that no longer exist, causing broken navigation. Nav items now automatically upgrade to proper page routes when the corresponding pages are created. **Where:** Site navigation (header and footer) on sites with catalog content types (restaurant, services, events, etc.) **How to test:** - Generate a catalog-type site (e.g. restaurant) and use "Build all pages" to add listing pages - Open the published preview and click each navigation link - Confirm all links navigate to real pages — no "#benefits" or "#services" anchor-style broken links **Watch for:** Nav links scrolling to non-existent sections or showing no visible response when clicked
Landing pages created by typing a custom description in the "+" dialog from the Landing Pages section were incorrectly placed in the main Site section instead. They now correctly stay in Landing Pages with the proper URL prefix and layout. **Where:** Client portal → Pages tab → Landing Pages → "+" button → type custom description **How to test:** - Go to the Pages tab in the site editor - In the Landing Pages section, click "+" - Type a custom page description (don't pick a preset recipe) and submit - Confirm the new page appears under Landing Pages (not under Site) **Watch for:** The created page appearing under "Site" instead of "Landing Pages"
The scaled-down page thumbnails in the Pages tab and site map view were clipped due to a CSS geometry mismatch, making them appear cut off. Previews now display the full page content and scroll correctly. **Where:** Client portal → Pages tab (page thumbnail previews) and Site Map view **How to test:** - Open the site editor and go to the Pages tab - Click on any page to see the scaled preview thumbnail - Confirm the full page content is visible and not clipped at the bottom or sides **Watch for:** Thumbnails still appearing cut off or the scrollbar being hidden behind the page edge
The dark floating pill that appeared at the top of the editor during every AI refinement was redundant with the in-chat loading state already visible in the Design Assistant panel. It has been removed for a cleaner editing experience. **Where:** Site editor → Design Assistant chat → any AI refinement request **How to test:** - Open the site editor and type a change request in the Design Assistant chat - Confirm no floating dark pill appears at the top of the editor while the AI processes the request - Confirm the chat itself still shows a loading indicator **Watch for:** The chat showing no loading state at all (there should still be an in-chat indicator)
Sites using scroll-triggered animations that toggled multiple CSS classes at once (e.g. `ring-2 ring-[var(--color-primary)]`) were throwing a browser error that broke those animations silently. Affected sites are now auto-repaired on next load, and the AI no longer generates this pattern on new sites. **Where:** Published sites and site previews using scroll-triggered "reveal" or "highlight" animations **How to test:** - Open a site that uses GSAP ScrollTrigger animations with multi-class toggles - Scroll through the page and confirm animations fire correctly without console errors - Inspect the generated code — `toggleClass` should now use callback functions instead of space-separated class strings **Watch for:** Animations that previously worked but now don't fire (unlikely, but watch for regressions in sites with complex scroll sequences)
The section alternatives picker was using a generic layout vocabulary for all section types, producing similar designs across services, gallery, and hero sections. It now picks the correct layout vocabulary per section type, generates more structurally varied options, and previews show proper colors and styling instead of appearing blank. **Where:** Site editor → click any section → "Try a different layout" / section alternatives picker **How to test:** - Click a Services, Gallery, or Hero section and open "Try a different layout" - Confirm the alternative thumbnails show distinct visual structures (not all card-grid variants) - Confirm the thumbnails display with the site's brand colors and styling (not blank/white boxes) **Watch for:** Thumbnails still appearing unstyled, or alternatives for different section types all looking the same
When the section alternatives picker opens and the AI is still generating options, a spinner and "Generating alternatives — they'll appear here shortly" message now appears so users know something is happening rather than seeing a mostly-empty panel. **Where:** Site editor → click any section → "Try a different layout" / section alternatives picker **How to test:** - Open a site with a section that has no pre-generated alternatives - Click the section and choose "Try a different layout" - While the AI generates options, confirm a spinner appears in the modal instead of a blank area **Watch for:** The spinner not disappearing once alternatives arrive — it should switch to showing the layout thumbnails automatically
A subset of AI-generated sites failed to display because the generated code contained a specific template expression pattern that the build step could not parse. The validator now detects and rewrites this pattern automatically, so affected sites render without manual intervention. **Where:** Any site that showed a blank or broken preview after generation **How to test:** - Open a site that previously failed to preview (especially gallery-style sites) - Confirm the preview renders all sections without errors - Verify the auto-fix log shows no "Unexpected token" parse errors **Watch for:** Sites rendering blank after generation with a "build failed" or "unexpected token" error in the auto-fix output
Two fixes for the WhatsApp inline editor: label-only changes can now be saved even when the phone number cannot be parsed (e.g. custom-shortened wa.me links), and the "Saved" confirmation no longer appears prematurely when opening the advanced configuration modal. **Where:** Site editor → click WhatsApp button → edit label or phone in the inline panel **How to test:** - Click a WhatsApp button in the site preview to open the inline editor - Edit only the button label (leave the phone number unchanged) and click Save - Confirm the save succeeds and "Saved" appears — even if the phone field shows a parse warning - Also confirm "Saved" does NOT appear when you click "Configure" to open the full modal **Watch for:** Save button staying disabled when editing only the label, or "Saved" appearing while the modal is still open
Clicking a WhatsApp button in the site header was incorrectly opening the navigation link editor instead of the WhatsApp phone/message configurator. This is now fixed — clicking anywhere on the WhatsApp button (icon, text, or surrounding area) opens the right editor. **Where:** Site editor → click the WhatsApp button in the site header **How to test:** - Open a site that has a WhatsApp button in the header - Click on the WhatsApp button (try clicking the icon, the text label, and the button border) - Confirm the WhatsApp configurator opens (phone number + message fields), not a nav link editor **Watch for:** The navigation link editor appearing instead of the WhatsApp configurator
Several click-resolution and labelling issues made Quick Edit frustrating to use: clicking a hero headline or service card often said "isn't connected to editable content" even when it was; field labels showed the generic wrapper name ("ITEMS") instead of the actual field ("Name" or "Description"); the "Where used" list showed sibling items as if they were repeats on other pages; and image URL fields showed a raw text input instead of the image upload flow. All four are now fixed. **Where:** Site editor → click any text or image element in the preview → right-side Quick Edit panel **How to test:** - Click a hero H1 or a service card name — Quick Edit should open with the correct field label ("Name", "Headline", etc.), not "ITEMS" - Click the same content key on two different pages; "Also used on" should only appear if the exact path repeats on the other page - Click an image element — the panel should send you to Content Manager's image upload, not a text input with a URL - Click a decorative element (icon, background div) — you should see "isn't connected to editable content. Try clicking the text inside it." with a stale-path variant for missing keys **Watch for:** Hero H1s or paragraph elements still landing on the wrapper instead of the leaf (check that `data-content-path` reaches the text node); "Also used on" showing items from the same page
The Content Manager panel has been redesigned from a large fullscreen modal into a narrow side drawer that pins to the right of the preview. The site preview stays fully clickable behind it, so you can spot-edit inline without closing the panel, then immediately see the result in the iframe. **Where:** Site editor → any content edit trigger (e.g. "Manage all services" button) → right-side Content Manager drawer **How to test:** - Open the Content Manager from any section trigger - Confirm it opens as a ~420px right-side drawer (not a full modal) - Click inside the preview iframe while the drawer is open — you should be able to make inline edits without closing the drawer - Use the Maximize/Minimize button in the drawer header to switch to the full-panel workbench view and back; the preference should persist after page reload - "Not currently shown on this page" group should be expanded by default; selecting a section should collapse the picker so the form fills the panel **Watch for:** Iframe clicks not registering when the drawer is visible; the persistent layout preference (localStorage `content-workbench:layoutMode`) not surviving a hard reload; "Reveal in preview" Eye icon not scrolling the iframe to the matching section
The "Also on other pages" section in the Content Quick Edit panel now correctly shows only other pages — not the page you are currently editing. Previously, a slug comparison bug caused the current page's own entries to appear in the list, making it look like content was shared with itself. **Where:** Site editor → click any editable field → Quick Edit panel → "Also on other pages" section **How to test:** - Open a multi-page site, navigate to any page with shared content (e.g. a phone number in the header) - Click that field to open Quick Edit - Confirm "Also on other pages" lists only the other pages, not the page you are viewing **Watch for:** Current page still appearing in the cross-page list; shared-content entries missing from the list entirely on sites whose page slugs start with "/"
Several site editor features — switching between design variations, viewing version history, and applying auto-fixes — were silently returning empty results for sites stored in the new relational format. The service layer now reads variation data from the correct location, restoring full functionality across all affected features. **Where:** Site editor → Design panel; Site editor → Version history; Background auto-fix **How to test:** - Open any site and click between Design 1, 2, and 3 — confirm each design loads distinct content - Open a site's version history — confirm it shows the expected number of saved versions - Trigger auto-fix on a site with known code issues — confirm fixes are applied **Watch for:** Design switching appearing to work but reverting on reload; version history showing 0 versions when versions exist; auto-fix completing with no changes made
A small number of sites showed a blank preview with a "ReferenceError: inset is not defined" error in the browser console. The crash was caused by a malformed template in the preview rendering layer. Affected sites now load and display correctly. **Where:** Site editor → Preview pane; any site where the preview appeared blank **How to test:** - Open a site that previously showed a blank preview - Confirm the preview renders the full site design - Select an element on the canvas — confirm the selection highlight appears correctly **Watch for:** Blank white preview pane with no content; console errors mentioning "inset is not defined" or "selection-inset"
Clicking the WhatsApp button (or other contact-details fields) in the editor now opens an inline Quick Edit form — instead of saying the content is "managed by an external data source" when it isn't. **Where:** Site Editor → click any contact-details field or a WhatsApp button → right-hand panel **How to test:** - Open the editor on any site - Click the WhatsApp button (or your email link, or any contactDetails field) - Confirm the right panel shows a friendly Quick Edit input you can type into, plus an "Edit WhatsApp message" action that opens the phone+message configurator - Save a change and confirm the preview updates **Watch for:** A field that genuinely IS synced from a connected integration (e.g. a Shopify product feed) should still show the "synced from your connected … source" message — that's intentional.
On restaurant, education, and events sites, items generated with menu cards, course listings, or event entries were showing broken or placeholder images even when photos had been matched to them. The fulfilled image URLs were being stored under the wrong field name and never reached the rendered template. Images now go to the correct field and appear immediately after generation. **Where:** Generated site preview → any section showing menu items, courses, or event listings **How to test:** - Generate a restaurant site or education site - Confirm menu/course/event cards display real images (not broken placeholders) - Open Content Manager for one of those items — confirm the image field is populated **Watch for:** Menu cards still showing placeholder images on newly generated sites; images missing only for items added via the collection editor (not the generation path)
Visiting the Organization Settings page showed a red error banner — "permission denied" — preventing users from viewing or editing their organization's members, invitations, and settings. The underlying database permission grants have been restored and the page loads correctly. **Where:** Dashboard → Organization Settings **How to test:** - Open Dashboard → Organization Settings - Confirm the members list, pending invitations, and incoming invitations all load without a red error banner - Confirm you can invite a new member and see the pending invitation appear **Watch for:** Red error banner at the top of the Organization Settings page; member list or invitation list loading indefinitely
When you click a field that is also used on other pages of your site (e.g. a phone number in the header that appears on every page, or a testimonial pulled into multiple sections), the Quick Edit panel now shows an "Also on other pages" section listing exactly which pages share that content — so you know that editing it here will affect those pages too. **Where:** Site editor → click any editable field → Quick Edit panel → "Also on other pages" section (only visible when the exact content path is shared across pages) **How to test:** - On a multi-page site, click a field you know appears on more than one page (e.g. a site-wide phone number or business name) - Confirm the Quick Edit panel shows an "Also on [N] other pages" section listing those pages - Click a field that is unique to this page — confirm the "Also on" section does not appear - Edit the shared field and confirm the change is reflected on the other pages it's linked to **Watch for:** The "Also on" section appearing for fields that are NOT actually shared (false positives); the section not appearing at all when it should (false negatives); slow load on sites with many pages (the index is built lazily on first query)
Applying any refinement (text edits, style changes, AI instructions) on a site that was recently generated returned a 500 server error and the change was lost. The root cause was the refinement handler reading site data via a legacy query that no longer returns variation files. All refinements now complete successfully. **Where:** Site editor → Refinement panel (any edit type) **How to test:** - Generate a new site, then immediately request a text refinement - Confirm the refinement completes and the updated text is visible in the preview - Confirm the version history shows the refinement was saved **Watch for:** "Internal server error" when submitting a refinement on a brand-new site; changes appearing to process but not showing up in the preview
On restaurant, real-estate, and other catalog-type sites, the items shown in the preview (menu dishes, property listings, etc.) could flip between different sets of content on successive page reloads — sometimes showing the database-backed rows, sometimes showing older inline content. Content is now stored in a single authoritative location and the preview renders the same items consistently. **Where:** Site editor → Preview pane for restaurant, real-estate, hospitality, and other catalog-type sites **How to test:** - Open a restaurant or real-estate site with catalog items - Note the items shown in the menu or listings section - Reload the page several times — confirm the same items appear each time - Switch between design variations — confirm each variation shows consistent items **Watch for:** Menu items or property listings changing between page loads; "Design 1" and "Design 2" showing different content sets despite using the same underlying data
Fresh site generation was silently failing to blend the AI-produced content with your site blueprint's defaults, causing new sites to render with incomplete or missing sections. The missing function import has been restored and generation now produces fully merged content as intended. **Where:** Any newly generated site — seen immediately after the first site generation completes **How to test:** - Create a new site and run generation - Open the preview and check that all sections (hero, about, services, contact, etc.) appear with real content - Confirm section text is not blank or showing placeholder defaults **Watch for:** Sections that show empty strings or generic fallback text when content should be AI-generated; console errors referencing "deepMergeContent is not defined"
When you type a business name in step 1 of the site creation wizard, that name is now always used as the site name — even if the AI later suggested a different business name based on your industry. Previously, the AI could overwrite your typed name with an invented one (e.g. "Bella Rustica" → "Sunrise Yoga Studio") and, if you exited the wizard early, the wrong name would stick. **Where:** Admin → Blueprint Wizard → Step 1 (business name input) → save or advance **How to test:** - Start a new site in the wizard, type a short business name in step 1 - Complete or abandon the wizard after the AI processes it - Confirm the saved site row uses your typed name, not an AI-generated alternative **Watch for:** Sites saved as "Untitled Site" when a clear name was typed; names longer than 80 characters (treated as a description and not used as site name — that's intentional)
Clicking the star icon to mark a content item as featured (e.g. a menu item, product, or testimonial) was saving the wrong value on the first click. The item would appear toggled on screen but the old value would go to the server — the correct value only saved 800ms later, or not at all if the editor was closed in that window. The star now saves the correct value immediately. **Where:** Client portal → Pages → any catalog section → Content Manager → star icon next to an item **How to test:** - Open Content Manager for a menu or product section - Click the star icon on an item to mark it as featured - Close the editor immediately (within 1 second) - Reopen — confirm the item is still marked as featured **Watch for:** Featured status reverting to unfeatured after closing the editor; the homepage featured section not updating to reflect the newly starred item
Clicking between Design 1, Design 2, and Design 3 on a site was silently doing nothing — the preview would flicker but the selection would snap back to the previous design. The bug was present for about 11 days and affected all sites with multiple design variations. Switching now persists correctly. **Where:** Site editor → Design panel → click "Design 1 / 2 / 3" tabs **How to test:** - Open a site with multiple design variations generated - Click Design 2 — confirm the preview switches and the tab stays highlighted - Reload the page — confirm Design 2 is still the active selection - Switch back to Design 1 and confirm that also persists **Watch for:** The active design reverting after a page reload; switching appearing to work in the preview but not saving to the server (check the network tab — the PATCH should return 200)
On multi-page sites, clicking Undo could silently fail — the button appeared to work, but the change you just made was still there. The undo algorithm was picking the nearest version by time regardless of which page was affected, so undoing a hero-section edit would restore the home page file instead, leaving the hero unchanged. Undo is now page-scoped: it finds the previous version that touched the same page and reverts only that page. **Where:** Site editor → make an AI edit on any page → click Undo **How to test:** - On a multi-page site, open a non-home page (e.g. /about), make an AI refinement - Click Undo and confirm the About page reverts to its previous state (not the Home page or an unrelated page) - Repeat on the home page to confirm the existing behavior is unchanged **Watch for:** Undo reverting the wrong page; the Undo button being greyed out when it should be available; version history not showing the correct page-scoped entries after refining
When stock-photo search returned the same image (under different signed URLs) for several niche queries — for example a roofing site whose gallery filled with six copies of the same off-topic photo — the duplicates now get caught and the gallery is regenerated with AI imagery for visual variety. **Where:** Any generated site with a gallery, team grid, or testimonials section. **How to test:** Generate a site in a niche industry (specialty trades, B2B services) where stock photos may have weak matches. Open the gallery section in the preview and confirm each tile shows a distinct image, not the same one repeated. **Watch for:** A single gallery still using duplicate images, or AI generation failing for the whole group (falls back to the static placeholder map).
A follow-up to the gallery duplicate-photo fix: if multiple gallery slots referenced the same broken URL, they were previously counted as separate gaps and could skew image replacement decisions. The replacement logic now deduplicates by URL within each gallery group before tallying, so the whole group is replaced uniformly when stock photos fall short. **Where:** Any generated site with a gallery, team grid, or testimonials section containing broken or repeated image URLs. **How to test:** - Generate a site in a niche where stock images are weak - Confirm gallery tiles are replaced uniformly — either all stock photos or all AI-generated, not a mix caused by miscounting **Watch for:** A gallery that still shows one repeated image among otherwise distinct tiles.
Asking the AI assistant to replace images on a specific inner page (e.g. "update the hero image on the Safety page") was silently replacing the homepage image instead. The page and section filters now correctly match images stored under inner-page content keys, so the replacement lands exactly where requested. **Where:** Site editor → Design Assistant → "Replace the [section] image on [page]" **How to test:** 1. Open a multi-page site and ask the assistant to update an image on a non-homepage page. 2. Confirm the image changes on the specified page and that the homepage image is untouched. 3. Also test a section-level request (e.g. "change the hero background on the About page") to confirm section scoping works. **Watch for:** The homepage image changing when you asked for an inner-page image; an inner-page section image staying unchanged despite the assistant reporting success.
When you fork a design into a build site, the full conversation history from the design phase is now copied to the build site. Previously the build editor started with an empty chat, making it impossible to reference or continue earlier conversations. **Where:** Site editor (build site) → Design Assistant chat panel **How to test:** 1. Open a design site that has chat history, then fork it to a build site via "Start building". 2. Open the build site editor and expand the Design Assistant panel. 3. All prior conversation entries from the design phase should be visible. **Watch for:** The chat panel showing empty on a freshly forked build site when the design site had conversation history.
A code validation step had been accidentally removed from the collection page generator, meaning generated collection templates and listing pages could contain syntax errors that would break the page silently. The validation gate is restored for both page types, so a bad generation is caught and retried rather than saved. **Where:** Client portal → Site editor → Pages → Add collection **How to test:** - Create a site and add a collection (e.g., blog posts or products) - Add the collection template or listing page - Confirm the generated page loads correctly in preview with no blank sections **Watch for:** Collection template or listing pages generating with a blank preview or visible JavaScript errors in the console.
When you fork a design into a build site, all version snapshots from the design phase are now visible in the build editor's Version History panel — so you can roll back to any design-phase state without switching back to the design editor. **Where:** Site editor (build site) → Version History panel → "Design Phase History" section **How to test:** 1. Open a design site, make a few refinements, then fork it to a build site. 2. Open the build site editor and click Version History. 3. A "Design Phase History" divider should appear with purple-badged entries from before the fork. 4. Click Restore on a design-phase entry — the build site should update to that snapshot. **Watch for:** Design-phase entries not appearing (means the fork didn't carry the parent_site_id); restoring a design-phase version overwriting wrong data; the Protect/Unprotect buttons showing on design-phase entries (they should be hidden).
Chat messages in the Design Assistant panel were rendering with light-colored backgrounds (pale blue and green bubbles) against the panel's dark background, making them hard to read. The panel now consistently uses dark-mode styling for all message threads. **Where:** Site editor → Design Assistant panel → any conversation thread **How to test:** - Open the Design Assistant panel and send a refinement request - Confirm chat bubbles and the empty-state card use readable contrast against the dark panel background **Watch for:** Light-colored chat bubbles or white/gray text on dark background in the activity feed
Generated sites that imported only non-existent icon names while also using namespace-style icon access (e.g. `Icons.ArrowRight`) would crash at runtime because the entire import was stripped instead of being converted to a namespace import. The fix now detects this pattern and preserves a valid namespace import rather than leaving `Icons` undefined. **Where:** Any generated or refined site preview/published page that uses icon components **How to test:** 1. Open a generated site whose components reference icons via `Icons.SomeName` syntax. 2. Confirm the site preview renders without an "Icons is not defined" console error. 3. Refine a section that uses icons — icons should still resolve after refinement. **Watch for:** "Icons is not defined" errors in the browser console; icons appearing blank or causing a full-page crash after AI-generated or refined sections are loaded.
Clicking a navigation link (e.g. "View Gallery") on a page that didn't contain the target section was causing the preview iframe to reload and display the editor content again — a confusing "preview inside the preview" loop. The link now correctly navigates to the homepage and scrolls to the right section. **Where:** Site editor → preview iframe → any page with anchor navigation links **How to test:** - Open a multi-page site in the editor (e.g. one with a Gallery section only on the homepage) - Navigate to a sub-page in the preview, then click a nav link like "View Gallery" - Confirm it navigates to the homepage and scrolls to that section, not a blank reload **Watch for:** Anchor links that do nothing, or the preview refreshing without navigating to the correct section
Published sites were built from the base blueprint only, ignoring the active design's content overlay. Sections whose text, images, or details lived in the active variation rendered blank or with placeholder values in the live site while the editor preview showed them correctly. Publishing now merges both layers before generating the static site. **Where:** Site editor → Publish → live published URL **How to test:** 1. Open a site where the active design has content different from the base (e.g. custom hero headline). 2. Publish the site and visit the live URL. 3. All sections should match exactly what you see in the editor preview. **Watch for:** Any section in the published site showing generic placeholder text or a blank image when the editor preview shows real content — that was the symptom of this bug.
When connecting forms to a site failed to save to the database, the assistant was still reporting "Connected N form(s)" and applying unsaved code. On the next refresh the change disappeared with no explanation. The assistant now returns an honest error message so you know to try again. **Where:** Site editor → Design Assistant → "Connect my form" or form-related refinement **How to test:** 1. Trigger a form-connection refinement. 2. If saving fails (e.g. network interruption), the assistant should display an error asking you to try again — not "Connected 1 form(s)". 3. A successful connection should still work and persist as before. **Watch for:** The assistant reporting success for a form connection that doesn't survive a page refresh.
The "Refining your site…" status pill was positioned over the site preview area, appearing as a floating dark box on top of the page content. It now sits inside the toolbar row so it's clearly an editor control and doesn't obscure the preview. **Where:** Site editor → Design Assistant → trigger any refinement → watch the status indicator **How to test:** 1. Open the site editor and ask the assistant to make a change. 2. While the refinement runs, the "Refining your site…" pill should appear inside the toolbar band at the top — not floating over the preview content. **Watch for:** The pill still overlapping the iframe content, or covering toolbar buttons.
The second design variant (V2) previously made a single AI call with no fallback — a temporary provider error would silently drop V2 and the site would ship with only one design option. V2 now tries multiple providers in sequence, matching the reliability of the primary design path. **Where:** Client portal → Site editor → Generate site → design variant selector **How to test:** - Generate a new site and confirm two design variants are available in the editor - Switch between the variants and confirm both look visually distinct and complete **Watch for:** Sites consistently generating with only one design variant, or the variant selector showing a placeholder for V2.
Two bugs in the section layout alternatives picker were fixed: clicking a section to explore alternatives was not opening the popup (the click handler was clearing it immediately), and selecting an alternative was not persisting the change to the site (it wrote to a deprecated column that is no longer read). Both are resolved — click opens the picker and applying an alternative saves to the correct location. **Where:** Site editor → click a section in the preview → Explore Alternatives **How to test:** 1. Open a multi-design site in the editor. Click on a section (e.g. the hero). 2. The Explore Alternatives popup should open. Select an alternative and click "Use this". 3. The section should update in the preview and the change should persist after refreshing. **Watch for:** The popup closing immediately after click without opening; an alternative appearing to apply in the preview but reverting on refresh.
A "503 model overloaded" error from the AI provider previously caused site generation to fail outright with no retry — leaving users with nothing to show after waiting for generation. The pipeline now automatically falls back to a backup provider whenever the primary returns a temporary error, the same way stalls and quota errors already did. **Where:** Client portal → Generate site **How to test:** - Generate a site and confirm it completes successfully - Confirm generation does not produce a server error page when the AI provider is under load **Watch for:** Site generation ending with a hard server error instead of retrying with a fallback model.
When the secondary design variant failed quickly (e.g., a brief AI provider error), it accidentally started a countdown that would cancel the primary design too — turning one recoverable failure into a complete generation loss. The timer now only starts when the secondary design actually succeeds and is ready to promote. **Where:** Client portal → Site editor → Generate site **How to test:** - Generate a site and confirm at least one (and ideally two) design variants are available - If only one variant appears, confirm it still loads correctly in preview rather than showing an error **Watch for:** "Both designs failed" errors appearing when only one design had a temporary issue.
Regenerating a site would fail entirely if the AI provider couldn't fetch one of the site's reference images directly from its URL (e.g., a throttled request or a URL the provider couldn't reach). The regeneration pipeline now automatically retrieves the image itself and passes it to the AI instead of giving up. **Where:** Client portal → Site editor → Regenerate **How to test:** - Open a site that has images and trigger a regeneration - Confirm regeneration completes and the result includes the expected imagery **Watch for:** Regeneration ending with an image-fetch error or producing a result that's missing images compared to the original.
The AI assistant's Undo command was reading a stale version number and could jump back to a snapshot from days ago, reverting changes far beyond the last refinement. It now fetches the latest version from history immediately before each refinement so Undo always lands on the correct pre-change state. **Where:** Site editor → Design Assistant → make a refinement → Undo **How to test:** 1. Open a site with several saved versions. Make a refinement via the assistant (e.g. change a color). 2. Click Undo — only the refinement should revert; earlier work stays intact. 3. Repeat for a second refinement to confirm each Undo step is independent. **Watch for:** Undo reverting more than the last change, or reverting to a state from a previous session — both indicate the pre-refine anchor was not captured correctly.
Speaking a single change request in voice mode now triggers exactly one refinement instead of several racing ones. **Where:** Site editor → Design Assistant → Voice mode **How to test:** Start voice mode, ask for a visual change (e.g. "fix the announcement bar so it sits above the navigation"), and wait. Only one user message and one refinement should appear. **Watch for:** Duplicate `🎙️` chat bubbles, multiple "Refining your site…" runs for one spoken request, or conflicting edits from overlapping refinements.
When a voice request needs an AI design change, the assistant now says upfront that it's working on it and will take 20-30 seconds — so you're not left with unexplained silence. **Where:** Site editor → Design Assistant → Voice mode **How to test:** Start voice mode and ask for a complex change (e.g. "add a pricing section"). The assistant should give a spoken heads-up before processing, then confirm when done. **Watch for:** The assistant calling a slow tool silently, or starting a second slow change before the first finishes.
When asking the Design Assistant to update navigation links, it now only inserts links to pages that actually exist on your site — previously it could invent slugs like "/luxury-weddings" that led to a "Page not found" error. **Where:** Site editor → Design Assistant → any request to update or expand navigation **How to test:** - Open a site with a known set of pages - Ask the Design Assistant: "Link nav to all pages created" - Confirm every nav link points to an existing page; no invented or broken links appear **Watch for:** Nav links that go to a "Page not found" screen, or links with slugs that don't match any page in the site's Pages list.
When asking the Design Assistant to update navigation, it now only links to pages that actually exist on the site — invented slugs like "/luxury-weddings" or "/corporate-excellence" that were never generated no longer appear in the nav, eliminating "Page not found" errors in the editor. **Where:** Site editor → Design Assistant → any request mentioning navigation or links (e.g. "link the nav to all pages", "update the menu"). **How to test:** On a site with a known set of pages, ask "link the nav to all pages created". The resulting navigation should contain only hrefs that match the site's real pages — no invented or guessed slugs. **Watch for:** A nav item that points to a slug not present in the Pages tab; an existing nav item with a valid slug being removed; the AI responding that it cannot list pages.
Requesting that the Design Assistant link the navigation to other pages (e.g. "link nav to all pages") now correctly updates the header links — previously the AI reported "Applied" but the navigation was unchanged. **Where:** Site editor → Design Assistant → any request to update or relink navigation items **How to test:** - Open a site with multiple pages in the editor - Ask the Design Assistant: "Link the nav to all my pages" - Confirm the header navigation updates with working links to each page **Watch for:** The AI saying "Applied" but nav items not changing; nav links pointing to `#` instead of real page URLs.
Applying a Brainstorm suggestion to a section that lives in its own file (such as a Hero or Pricing component) previously replaced the entire page with just that component's code, wiping all other sections. The fix ensures only the targeted component file is updated. **Where:** Site editor → Design Assistant → Brainstorm → Apply on any standalone section component **How to test:** - Select a hero or pricing section in Brainstorm and apply a suggestion - Confirm the rest of the page (other sections, layout) is unchanged after Apply **Watch for:** All sections except the edited one disappearing after Apply; the page showing only one component after a Brainstorm edit.
Asking Brainstorm to remove or replace a section (e.g., "remove this pricing block and add a 'contact for a quote' message") previously ended with a "Text replacement failed" error. It now routes these structural requests through the full Design Assistant instead of dead-ending. **Where:** Site editor → Design Assistant → Brainstorm → structural change request (remove section, replace section) **How to test:** - Select a section in Brainstorm and request a structural change such as "remove this section" - Confirm the change is applied via the Design Assistant rather than showing a failure toast **Watch for:** "Text replacement failed. Try a simpler phrase" appearing on remove/replace requests; the section remaining unchanged after Apply.
After clicking Apply in the Brainstorm suggestions panel, the panel now closes and returns focus to the site preview — it previously stayed open and blocked the view. **Where:** Site editor → Design Assistant → Brainstorm → Apply any suggestion **How to test:** - Open Brainstorm, pick any suggestion (text, color, image, etc.), and click Apply - Confirm the panel closes and the updated preview is visible immediately **Watch for:** Panel staying open after Apply; needing to manually close it.
The "Collection · N items" label in the preview page picker now updates immediately after you add or delete a collection item — previously the count was fetched once on page load and stayed stale for the rest of the session. **Where:** Site editor → preview toolbar → page dropdown → any collection entry **How to test:** - Open a site with a collection in the preview - Note the item count shown in the dropdown - Add or remove a collection item via the in-preview editor - Reopen the dropdown and confirm the count reflects the change **Watch for:** Count showing the old number after an add/delete; needing a full page refresh to see the correct count.
When the Design Assistant makes a change that appears correct but doesn't actually fix the reported issue (e.g., tweaking a CSS class that wasn't causing the problem), it now detects this and returns honest feedback with 2–3 alternative ways to phrase the request — instead of falsely reporting "Applied." **Where:** Site editor → Design Assistant → any layout or spacing change request **How to test:** - Ask the Design Assistant to fix a spacing issue using a vague description - If the AI makes a change that doesn't visibly fix the issue, confirm it shows a "didn't quite work" message with rephrase suggestions instead of a green "Applied" - Click one of the suggested rephrases and confirm it attempts the fix again **Watch for:** A false green "Applied" appearing when the preview visually unchanged; rephrase chips not appearing when the fix clearly didn't work.
Saving blueprint content updates (like changing your business name in the site editor) previously overwrote whatever name you had given the client in the dashboard — replacing it with the site's business name even months after signup. The sync now only runs when the client is still using a default placeholder name. **Where:** Client dashboard → client name; Site editor → business info **How to test:** - Set a custom name for a client in the dashboard (e.g., "ACME Corp") - Open the client's site and save a business name change - Return to the dashboard and confirm the client name is still "ACME Corp" **Watch for:** The client name reverting to the site's business name after any content save.
When both design variations failed to produce renderable files, the site was left at "Completed" status — but opening the editor would immediately crash because there were no files to render. The status is now correctly downgraded to "Failed" so users see a clear error and can retry. **Where:** Site editor → generation flow → status indicator **How to test:** - If a generation fails mid-way, confirm the status shows "Failed" rather than "Completed" - The editor should show a retry option instead of crashing **Watch for:** A site marked "Completed" where the editor fails to open; a spinning "generating" indicator that never clears after a generation error
A new "Manage all items →" action in the collection row picker opens the matching collection in Mission Control's content library without leaving the editor flow. **Where:** Site editor → preview → collection row picker chip → "Manage all items →" link **How to test:** - Open a site with a collection and select a row in the preview - Click the "Manage all items →" link in the row picker chip - Confirm Mission Control opens with the correct collection pre-selected **Watch for:** The link missing from the chip; Mission Control opening to the wrong collection; navigation failing silently.
When building a multi-page site through the Site Planner, the new pages are now automatically wired into the site's navigation menu — previously they were generated but never linked from the header. **Where:** Site Planner → "Build my site" → site navigation (header links) **How to test:** - Plan a site with 4+ pages and start the full build - Once complete, open the site editor and inspect the header — all built pages should appear as navigation links - Click each nav link and confirm it navigates to the correct page **Watch for:** Nav links pointing to `#` anchors instead of real page slugs; a page that was built but missing from the header menu entirely.
Two bugs in the parallel page builder: a theme file backfill could overwrite a page that a sibling build had just saved (because each builder read a stale snapshot), and resume runs counted already-completed pages again — inflating the completion count and misreporting progress. Both are fixed: the theme backfill now runs inside an atomic write gate, and page counts are deduplicated across resume attempts. **Where:** Site Planner → "Build my site" **How to test:** - Build a site with 6+ pages; confirm all pages appear in the editor when the build completes - If a build was interrupted and resumed, confirm the progress count matches the actual pages created - Confirm the theme file appears alongside all pages (not just the first one) **Watch for:** Pages missing from the site after a multi-page build; the progress modal showing a higher count than the pages actually built; a page whose content is overwritten by the theme file
Collection entries in the preview page picker now show their real item count ("Products · 12 items") and the collection's actual plural label instead of a guessed slug. A new "Shared design" option also lets you preview the collection template without any individual item loaded. **Where:** Site editor → preview toolbar → page dropdown → any collection entry **How to test:** - Open a site that has a collection (products, events, rooms, etc.) - Open the page picker dropdown and look at the collection section - Confirm each collection shows its real item count and a human-readable label - Select "Shared design" and confirm the template renders in placeholder mode **Watch for:** A collection showing "0 items" even when items exist; the label showing a raw slug instead of a name; "Shared design" not rendering the template layout.
Renaming a site from the dashboard now correctly updates only the targeted site's name — previously it renamed the parent client, which propagated to every other site card associated with that client. **Where:** Dashboard → site card → rename action (pencil icon / context menu) **How to test:** - Create a client with two or more sites - Rename one site from the dashboard - Confirm only that site's card shows the new name; the other site cards are unchanged **Watch for:** All site cards under a client changing name simultaneously when only one was renamed.
After a full multi-page site build finished, the Mission Control preview panel could be left blank — requiring a hard browser refresh to see the result. The preview now loads automatically once the build completes. **Where:** Mission Control → homepage preview panel (shown after Site Planner build) **How to test:** - Start a full site build via the Site Planner - Once the progress modal closes, confirm the preview panel shows the homepage without requiring any refresh - Let the browser sit on the page through the entire build — preview should appear automatically **Watch for:** Preview panel staying blank or showing an error after build completion; preview only appearing after Ctrl+Shift+R.
When generating a site, near-identical collection names (e.g., "packages" and "weddingPackages", or "events" and "eventTypes") are now automatically merged into a single collection before saving — resulting in one complete collection instead of two half-filled ones. **Where:** Site generation → Collections in Mission Control **How to test:** - Generate a site in an industry that commonly uses multiple related catalog terms (weddings, events, real estate) - Open Mission Control → Content and confirm there is one unified collection rather than two near-duplicate ones **Watch for:** Duplicate collections with overlapping items; one collection appearing mostly empty while a similar-named one has all the content.
New pages don't auto-add to your site menu (you curate it). The AI "Suggest navigation" tool is now one click away from where you actually add pages, instead of being buried in Settings. **Where:** Site editor → Pages panel → the "+" menu → "Suggest navigation" **How to test:** - Add one or more pages, then open the "+" menu in the Pages panel - Click "Suggest navigation" — it opens Settings → Navigation and automatically runs the AI suggestion pass - Review the proposed header/footer placements and apply the ones you want **Watch for:** The suggestion should auto-run on arrival (no need to click "Suggest with AI" again); if every page is already in the menu it shows an "all pages already in navigation" message.
Using Undo after regenerating site images with AI now correctly targets just the image change — it previously skipped the regen snapshot and jumped back to a much earlier state, reverting hours of other edits. **Where:** Site editor → AI image regeneration → Undo **How to test:** - Run an AI image regeneration on a site - Make one additional edit after the regen - Press Undo and confirm only the last edit is reverted, not everything back to before the image regen **Watch for:** Undo after image regen reverting to a state from hours earlier; multiple Undos needed to recover from a single change.
When the AI updated only content (text, headings, or copy) without changing any code, the change was saved without creating a version history entry — so "Undo" showed "no previous version exists" and did nothing. A snapshot is now saved before every content-only refinement, so undo restores correctly. **Where:** Site editor → Chat tab → ask to change text or copy → Undo button **How to test:** - Ask the AI to update the hero headline or change some copy - Open version history (or use the Undo button) - Confirm you can revert to the previous text **Watch for:** "Cannot undo — no previous version exists" appearing after a successful content change; undo reverting to a much older version instead of the one just before the edit
After entering your real business name during setup or chat, the dashboard card now reflects that name immediately instead of staying stuck on the placeholder "Personal Projects" label. **Where:** Dashboard → site cards (name displayed under each site thumbnail) **How to test:** - Sign up and enter a business name in the onboarding chat; confirm the dashboard shows that business name, not "Personal Projects" - Open an existing site, update the business name via Design Assistant chat; confirm the dashboard card updates on next visit **Watch for:** Dashboard still showing "Personal Projects" after a business name is entered, or the site card name reverting to the old placeholder on page refresh.
The background page pre-fetch that extracts source content before a new page is added had a 20-second timeout — too tight for a real extraction that takes 30–60 seconds. The cache never warmed, so generated inner pages fell back to generic content instead of matching the cloned source. The prefetch now has a 90-second window and reliably warms the cache. **Where:** Site editor → Pages → Add page (for sites created via Clone from website) **How to test:** - On a cloned site, add a new inner page (e.g. About, Services) - The generated page should reflect content and style from the source site's corresponding page **Watch for:** Inner pages generating with generic placeholder content instead of source-matched content
The site editor AI assistant previously responded to requests like "undo that" or "show me previous versions" with prose explaining it had no undo button. It now immediately calls the correct tools to either undo the last change or display the full version history. **Where:** Site editor → AI assistant chat → ask to undo a change or view version history **How to test:** - Make a change via the AI assistant - Type "undo that" or "can I go back to the previous version?" - Confirm the assistant immediately undoes the change or shows version history rather than explaining it can't **Watch for:** The assistant saying "I don't have an undo button" or "I can't access previous versions"; the assistant suggesting manual workarounds instead of using its tools.
The AI chat panel could enter a permanent loading state if the response stream stalled mid-reply (network hiccup, tab reload) — with no way to retry without refreshing the page. A 45-second idle watchdog now detects stalled streams and shows a Retry button, and any chat history saved on the server is automatically restored so you don't lose context. **Where:** Site editor → AI Chat panel → any chat message **How to test:** - Send a message in the AI chat panel - Confirm the response arrives and the loading spinner clears - Simulate a stall by throttling the network mid-response; confirm a Retry button appears within ~45 seconds **Watch for:** Chat panel spinner that never clears; "Retry" button not appearing after a stall; chat history lost after network interruption
A silent failure in the smart file selection system caused every AI chat refinement to fall back to a minimal context — the AI was editing your site with far less information about your files than intended. Smart context is fully restored, so refinements are more accurate and the right files get updated. **Where:** Site editor → Chat tab → any refinement request **How to test:** - Open the chat tab on a multi-file site and ask for a style change - Confirm the AI correctly identifies and updates the right file (not just the homepage) - Try a theme or section-specific request and verify the correct block file is changed **Watch for:** Refinements reverting to editing the homepage when they should edit a specific page or component; "Smart context failed — using minimal fallback" in server logs
After extracting content from a pasted URL, the AI now opens with a brief summary of what it learned from your site before handing off to the redesign intake — confirming industry, tone, and key sections so you can spot and correct any misreads before generation starts. **Where:** Site setup chat → paste a URL → after extraction completes **How to test:** - Paste your own website URL and complete the clone intent selection - After extraction, confirm the AI leads with a short summary of what it understood - Verify the intake that follows is pre-populated with the correct layout notes **Watch for:** Summary being excessively long or re-asking questions the extraction already answered; intake showing blank style/animation notes
Each time a new page was added to a cloned site, the shared image pool was silently eroding — images stored under `r2_url` (our CDN) were being filtered out, and when all incoming images were duplicates the pool got overwritten with an empty filtered list. Images from the source site's inner pages were also not available to the generator on cache hits. All three cases are now fixed. **Where:** Site editor → Pages → Add page (for sites created via Clone from website) **How to test:** - Clone a site, then add several inner pages - Verify later pages still use images consistent with the cloned source rather than switching to generic stock photos **Watch for:** Later-added pages reverting to generic images while earlier pages kept the cloned imagery
Two bugs in the site-clone wizard: the assistant was sending the initial clone request with a stale blueprint that was missing key cloning instructions, causing the extraction step to silently skip; and after the user completed the redesign intake, the wizard would re-show the intake form on subsequent turns. Both are now fixed. **Where:** Site creation → Clone from existing website → chat-based wizard flow **How to test:** - Start a clone, complete the redesign preferences intake - Continue chatting — the intake card should not reappear - Verify the clone proceeds through extraction and generation without stalling **Watch for:** Redesign intake form appearing multiple times, or clone getting stuck in a loop without extracting content
When cloning a site, the AI planner was overwriting real scraped content (phone numbers, email addresses, physical address, footer links) with generic layout prose. Contact details and other factual content from the source site are now preserved through the entire generation pipeline. **Where:** Site creation → Clone from existing website → generated result **How to test:** - Clone a site that has contact details (phone, email, address) on the source site - After generation, verify the contact section retains the scraped phone/email/address rather than placeholder text **Watch for:** Contact section showing generic "your phone number here" placeholders instead of the cloned business's real contact info
Sites with complex menus (dropdown triggers, mega-menus) often have navigation items with no single URL, causing the AI nav capture to return an empty navigation list. The cloned site then had no navigation at all. Now, when AI capture produces no navigation, the system builds navigation automatically from the discovered page list. **Where:** Site creation → Clone from existing website → generated navigation **How to test:** - Clone a site that has a multi-level dropdown navigation - Verify the generated site includes navigation links to the cloned pages **Watch for:** Cloned sites rendering with no navigation menu
When cloning a single-page app or JS-rendered site, the plain HTTP capture sometimes won the race and returned only the static server shell — few or no images. The richer JavaScript-rendered HTML from the browser capture was then discarded. Now the browser-rendered version is used when it arrives and is richer, ensuring images are correctly extracted even from JS-heavy sites. **Where:** Site creation → Clone from existing website **How to test:** - Clone a React or Vue-based website - Verify the generated site includes images from the source site rather than generic placeholders **Watch for:** Cloned sites showing no images or all generic stock photos when the source site had real images
Fresh ecommerce sites were hitting multiple crashes during the publish pipeline — including a server-rendering error when cart and gallery components ran in SSR mode, and a subdomain availability check that incorrectly blocked valid new subdomains. All four blocking publish errors are resolved so new ecommerce sites can go live without manual intervention. **Where:** Site editor → ecommerce site → Publish **How to test:** - Create a new ecommerce site from scratch - Click Publish and complete the subdomain setup - Confirm the published storefront loads with the cart, product gallery, and mini-cart working **Watch for:** "createPortal is not a function" error during publish; subdomain field incorrectly showing the subdomain as taken; published storefront showing blank sections or JavaScript errors
Three content gaps in AI-generated sites are now closed: Google Maps embeds previously showed "API key invalid" errors on all published pages; contact forms on inner pages occasionally used mismatched IDs that broke submissions; and missing content sections were not reliably detected and filled before publish. All three are now fixed automatically during generation. **Where:** Site editor → generated site → any page with a map or contact form **How to test:** - Generate a site for a local business (e.g. dental practice, restaurant) that includes a location - Confirm the map on the published site renders correctly without an API key error - Fill out and submit the contact form on an inner page; confirm it goes through **Watch for:** "This page can't load Google Maps correctly" error on published pages; contact form submissions failing on inner pages; blank sections that should have content
After starting a full site build, you'll receive an email with a direct link to your new site once it's done — so you can close the tab and come back when it's ready instead of waiting on the page. **Where:** Site editor → Site Planner → builds triggered from the initial "Build Full Site" flow **How to test:** - Start a full site build via the Site Planner - Close the tab or navigate away - Confirm an email arrives once the build completes, with a link that opens the finished editor **Watch for:** Email arriving with "0 pages built" if all pages failed; email firing on small incremental page additions (should only fire on the initial full-site build)
When an AI image provider stalled on a cold start, the entire generation or image-fulfillment run would freeze indefinitely. Each provider call is now capped at 2 minutes; a stalled slot falls back to a gradient placeholder so the rest of the site continues loading. **Where:** Site generation and image gallery processing **How to test:** - Generate a site with image slots; confirm it completes even if some image slots get gradient placeholders - A second generation on the same site should produce real images once providers are warm **Watch for:** A generation that hangs silently for more than a few minutes with no progress; all image slots remaining blank after a long wait
The intake form previously labeled sections as "01, 02, 03" and questions as "Q1, Q2" — making it hard to tell section breaks apart from individual questions. Sections now show A, B, C and questions use plain 1, 2, 3. **Where:** Site setup → intake form (preference questionnaire) **How to test:** - Open the intake form for a new site - Confirm section headers read "A", "B", "C" (not "01", "02", "03") - Confirm question numbers read "1", "2", "3" (not "Q1", "Q2", "Q3") **Watch for:** Labels reverting to zero-padded numbers or Q-prefix after a page reload
Clicking the text or icon inside a radio card option in the intake form had no effect — only clicking the thin border around it registered. Options now respond to clicks anywhere on the card. **Where:** Site setup → intake form → any radio-card style question **How to test:** - Open the intake form for a new site - Click the label text inside a radio-card option (not the border) - Confirm the option selects **Watch for:** Options requiring precise border-edge clicking to register
When building a multi-page site, each inner page now receives a page-specific brief so the content and layout feel distinct — service detail pages no longer look interchangeable. Navigation links also automatically update after new pages are added, replacing #anchor placeholders with real page routes. **Where:** Site editor → Site Planner → expand to multiple pages **How to test:** - Use the Site Planner to generate a 5+ page site - Compare the content and block shapes across service/detail inner pages — they should feel different from each other - Check the navigation links on the published site; confirm they link to the correct pages (not #anchors) **Watch for:** Inner pages with identical-looking block layouts; nav links still pointing to #anchor hashes after page expansion; "Your Industry-Specific Headline Here" appearing in generated page content
When you publish a brand-new ecommerce site with no products yet, the platform now generates a domain-matched starter catalog based on your business description — replacing the generic placeholder products (t-shirt, mug, planner) with realistic items relevant to your industry. The catalog is created automatically on first publish. **Where:** Site editor → ecommerce site → Publish (first publish on a site with no products) **How to test:** - Create a new ecommerce site (e.g. for a boutique clothing store or specialty food shop) - Do not add any products manually - Publish the site and check the storefront — confirm products match the business type **Watch for:** Generic placeholder products appearing despite having a specific business description; publish failing on fresh ecommerce sites; starter catalog products with mismatched names or prices
Page file names like "PricingPlans" were displayed correctly in the desktop pages list and mobile sheet, but showed as "PricingPlans" (no space) in the Mission Control sidebar. All three views now use the same formatting logic so page names are consistently readable everywhere. **Where:** Site editor → Mission Control sidebar → page list **How to test:** - Open a site with multi-word page names (e.g. PricingPlans, AboutUs, ContactUs) - Compare how page names appear in the desktop Pages panel, the mobile page sheet, and the Mission Control sidebar - Confirm all three show "Pricing Plans", "About Us", "Contact Us" (with spaces) **Watch for:** CamelCase page names in the Mission Control sidebar while other views show them with spaces
Switching between pages in the site editor could trigger hundreds of simultaneous save requests, all failing with version-conflict errors, causing the editor to freeze indefinitely. Saves are now serialised so only one runs at a time. **Where:** Site editor → Pages panel → click any page **How to test:** - Open a multi-page site in the editor - Rapidly switch between pages several times - The editor should remain responsive; no spinning/frozen state **Watch for:** Editor freezing after a page switch; version-conflict errors appearing repeatedly in the browser console
When you paste a website URL during onboarding, you now get an inline card asking whether you want to redesign that site (keep the look but with fresh content) or use it only as a style reference. This replaces ambiguous suggested-reply chips with a single clear step. **Where:** Site setup chat → paste any website URL → confirmation card appears **How to test:** - Start a new site and paste a competitor URL in the chat - Confirm a card appears with intent options (redesign vs. reference) - Select an option and confirm the chat continues with your choice **Watch for:** Card not appearing after URL paste; duplicate confirmation cards appearing; chat not continuing after selecting an option
Inner pages were occasionally generated with literal placeholder text like "Your Industry-Specific Headline Here" visible in the hero section — copied verbatim from a prompt example the AI mistook for real content. These placeholder strings have been renamed to unambiguous sentinel values so the AI can no longer reproduce them in output. **Where:** Site editor → any AI-generated inner page → hero section **How to test:** - Generate a multi-page site and check each inner page's hero heading - Confirm no page contains "Your Industry-Specific Headline Here" or similar placeholder text - Re-generate a page if needed and verify the output uses real, contextual copy **Watch for:** Hero headings showing placeholder text; same generic headline appearing on multiple inner pages; "Confidence in Every Smile / Your Industry-Specific Headline Here" combos on dental or health sites
After the AI assistant switches to a new page, the site preview would sometimes freeze on "Loading preview..." with no error or recovery — requiring a hard browser refresh to continue. Two safeguards now ensure the preview always recovers: a 30-second compile timeout and an automatic retry if the iframe stops responding. **Where:** Site editor → preview iframe (right panel) **How to test:** - Open the site editor and ask the AI assistant to edit an inner page (e.g. "Update the Services page") - Confirm the preview switches to the new page and loads correctly - If it previously got stuck, confirm it now shows a "Retry" option or auto-recovers **Watch for:** Preview stuck on "Loading preview..." with no spinner movement after 30+ seconds; page switch from AI assistant leaving an indefinitely grey preview area
Streaming progress counters in the editor (e.g. page build progress, AI operation status) were being buffered by the CDN layer and delivered in large batches instead of one update at a time, making the UI appear to jump or stall. All streaming endpoints now send the correct no-buffering headers. **Where:** Site editor → AI Chat → any streaming operation (site plan, regeneration, bulk pages) **How to test:** - Trigger a multi-step AI operation and watch the progress indicator - Progress should update smoothly and incrementally, not in sudden jumps at the end **Watch for:** Progress counter jumping from 0 to a high number all at once; streaming operations that appear to do nothing then complete instantly
When you're redesigning your own site, the intake form now skips questions extraction already answered (industry, sections, style) and instead asks what wasn't working and what to keep — plus shows your extracted images so you can pick which ones to carry over. **Where:** Site setup chat → paste your own URL → choose "Redesign" → intake form **How to test:** - Paste your own website URL, select "Redesign", and proceed to the intake form - Confirm the form shows a "What's not working?" field and an image selection gallery - Verify the generated site reflects the pain points you described **Watch for:** Intake form asking basic industry/niche questions after a redesign selection; image gallery not showing the source site's images; pain points not influencing the generated design
When applying a theme or color refinement on multi-file sites, only the current page preview updated — all other blocks (Header, Hero, etc.) continued showing the old colors. Now all changed files are returned correctly so every block preview reflects the update immediately. **Where:** Site editor → Design Assistant → refine a color or theme **How to test:** - Open a multi-file site in the editor - Apply a color or theme change via the Design Assistant - Check that Header, Hero, and other blocks all update to the new colors without a page reload **Watch for:** Individual blocks still showing stale colors after a theme refinement
Layout notes, content notes, and animation preferences you typed in the Plan tab could be silently erased when the AI returned a full section list. These fields are now preserved by matching section IDs, so your manual notes survive any AI-driven plan update. **Where:** Site setup → Plan tab → per-section notes fields (layout, content, animation) **How to test:** - Open the Plan tab and type notes into a section's layout or content notes field - Trigger an AI update that affects the sections (e.g., ask the AI to add or rearrange sections) - Confirm your notes are still present in the updated sections **Watch for:** Notes disappearing after any AI interaction with the plan; notes from one section appearing on a different section after the AI reorders them
You can now click "Continue in background" during a site build and keep working in the editor while the build finishes. A slim progress bar at the top of Mission Control shows live status — pages created, current step — and automatically opens the finished site when it's done, even if you navigate away or refresh. **Where:** Site editor → Site Planner modal → "Continue in background" button (appears while building) **How to test:** - Start a full site build in the Site Planner - Click "Continue in background" before the build finishes - Navigate around Mission Control — the top banner should show live build progress - When the build completes, the banner should flash "Your site is ready" and reload **Watch for:** Banner not appearing after clicking "Continue in background"; progress counter frozen; site not reloading when build finishes
The page discovery step during site cloning had several gaps: compound slugs containing junk words (like `/feed-your-family`) were incorrectly dropped; robots.txt `Allow:` rules were ignored so protected pages were missed; and similar-looking URLs like `/pricing` and `/pricing-table` were incorrectly treated as the same page. All three are now fixed. **Where:** Site creation → Clone from existing website → page selection **How to test:** - Clone a site with a robots.txt that uses `Disallow: / Allow: /page` pattern - Verify those allowed pages appear in the discovered page list - Clone a site with URLs that share a prefix (e.g. /pricing and /pricing-table) — both should appear as separate pages **Watch for:** Missing pages in the clone page list, or pages being merged that should be separate
If a generation crashed mid-way through finalizing or extracting, the site was left in a state that blocked all future generations — the stuck-state detector only looked for early-phase statuses and never cleared late-phase ones. The detector now covers the full active-status set, and the stale timeout is raised from 3 to 15 minutes so that long-running AI fallbacks aren't falsely failed mid-write. **Where:** Site editor → "Generate" button / Site setup → generation flow **How to test:** - Trigger a generation and let it complete normally — confirm status ends as "completed" or "failed", not stuck - If a generation previously got stuck (the Generate button is grayed out or the spinner never clears), regenerating should now work **Watch for:** "Generation already in progress" blocking a new generation despite no active generation running; a site stuck at "finalizing" or "extracting" forever
Several issues found in end-to-end testing of the site builder are now fixed: the Site Planner progress bar was stuck at 0/N due to streaming compression, the Pages view showed page titles instead of readable names, the Publish dialog was missing required form fields in certain states, and inner page prompts were not receiving the correct site context. **Where:** Site editor → Site Planner modal; Pages panel; Publish dialog **How to test:** - Run the Site Planner on a new site and watch the progress counter — it should tick up as each page is built - Check the Pages panel; page entries should show readable names not raw file slugs - Open the Publish dialog and confirm all fields are present and submittable **Watch for:** Progress stuck at 0/N throughout the whole planner run; pages showing file paths instead of names in the panel; Publish dialog missing input fields or submit button
A storm of save conflicts could cause the site preview to get stuck on "Loading preview…" permanently, even after the conflicts resolved. The preview watchdog timer is now correctly reset so it always recovers and shows the compiled result. **Where:** Site editor → live preview panel **How to test:** - Make several rapid edits in the editor while the preview is loading - The preview should always eventually render; it should never stay stuck on the loading spinner **Watch for:** Preview panel showing "Loading preview…" indefinitely with no further updates; having to refresh the page to see the preview again
Applying a style change across an entire site (color scheme, typography, animation, theme) previously required a separate AI call for each component — taking 2–6 minutes for large sites. The platform now batches these into a single AI call, cutting site-wide refinement time by up to 80% for sites with 8+ components. **Where:** Site editor → AI Chat → any site-wide style request (e.g. "change the color scheme to dark blue") **How to test:** - Ask the AI assistant to apply a site-wide change (e.g. "update the font to a serif throughout the site") - Note the time taken compared to before; large sites should complete in under a minute - Confirm all components reflect the change, not just the first few **Watch for:** Site-wide refines timing out or completing only partial updates; components missed in the style pass; style inconsistencies between different sections after a theme change
After asking the AI to change colors or fonts (a theme-only edit), the site preview briefly showed blank instead of the updated design. The theme file was being applied as homepage code in the browser, causing the blank. Theme changes now correctly refresh the preview from the database. **Where:** Site editor → Chat tab → ask to change colors, fonts, or theme **How to test:** - Ask the AI to "change the primary color to blue" or "use a different font" - Confirm the preview updates to show the theme change without going blank - Refresh the page — the change should persist **Watch for:** A completely blank preview immediately after a color or font change; the AI appearing to succeed (no error message) but the preview not updating
Restoring a past version while viewing a different design variation than the active one would silently write the restored files into the wrong variation — leaving the intended variation untouched and overwriting unrelated work. Version restore now always writes to the variation the user is currently viewing. **Where:** Site editor → Settings → Version History → Restore **How to test:** - Switch to a non-active design variation (e.g. Design 3 when Design 1 is active) - Restore a past version from the history panel - Confirm the restored files appear in Design 3, not Design 1 **Watch for:** Restored version appearing in a different variation than expected; "Restore" succeeding but the viewed variation showing no change
When a customer adds items to their cart and leaves without checking out, an automated recovery email with a direct link back to their cart is now sent after the configured delay — helping recover lost sales without any manual follow-up. **Where:** Site Editor → Settings → Automations → Abandoned Cart (enable recipe) **How to test:** - Enable the abandoned cart automation recipe for a site - Add items to the cart as a customer (without signing in, enter an email at checkout) - Wait for the configured delay without completing the order - Verify a recovery email is sent with a working "return to cart" link - Click the link and confirm the cart is restored with the same items **Watch for:** Recovery email not sent; double-sending to the same customer; email sent even after the order is completed
When you ask the AI to improve backgrounds, gradients, or animations on your site, it now produces more visually polished results — using real CSS motion instead of simple fades, inline textures, and a broader color palette. **Where:** Site Editor → AI Chat → any visual refinement request (e.g. "add an animated background", "make this section more visually interesting") **How to test:** - Ask the AI to add or improve an animated or gradient background on a section - Confirm the result uses real CSS animation rather than just an opacity pulse - Check that no external image URLs are used for textures - Verify animations respect reduced-motion preferences (prefers-reduced-motion) **Watch for:** Visual regressions on simple color-change requests; external URLs appearing in CSS backgrounds
A rare failure during AI context loading caused section-level edits (like updating a features block) to overwrite the whole homepage instead — this is now prevented by using a safe fallback context so the edit lands on the correct file. **Where:** Site Editor → AI Chat → any section refinement request **How to test:** - Open a multi-page site in the editor - Ask the AI to update a specific section (e.g. "update the features section") - Confirm only the targeted section changes and the full page composition stays intact - Verify the homepage is not replaced by a single section component **Watch for:** Homepage replaced with a single section component after an AI edit request
When you reference an image from the asset library or @-mention an asset during a refine request, the AI now actually sees the image (not just the URL) — so it can follow visual instructions like "match the style of this photo" accurately. **Where:** Site editor → AI refine chat — @-mention an asset or attach an image from the library **How to test:** - Open any site in the editor and start a refine conversation. - @-mention an image asset and ask the AI to style something to match it. - Verify the AI's response reflects the image content (colors, style, layout) rather than only responding to the text description. **Watch for:** This fix applies to images selected from the asset library (HTTPS URLs). Base64-pasted images already worked before this change. Very large images may increase AI response time slightly.
The opening greeting in the blueprint chat wizard now stays in your conversation history after a page refresh — previously the first question disappeared, leaving a disconnected chat thread. **Where:** Site Editor → AI Setup Chat (blueprint wizard) **How to test:** - Start a new site and open the AI setup chat - Type your first reply to the greeting question - Refresh the page - Verify the greeting question is still visible above your answer **Watch for:** Chat history starting from the user's first reply with no preceding AI greeting
The AI site planner was returning a stale cached plan after every content edit because its cache fingerprint included a timestamp that changed on every save — now it correctly re-runs the planner when actual content changes. **Where:** Site Editor → AI Chat → site structure or page planning requests **How to test:** - Generate a site and let the AI planner run - Edit a page or blueprint field and trigger the planner again - Confirm the planner reflects the updated content rather than returning the previous result **Watch for:** Site planner returning the same plan regardless of content edits; blueprint data clearing after a planner run
Forms created during AI site generation were silently dropped and never saved to the site — so a generated site with a booking form would show a placeholder instead of the real form. Forms now flow through the generation pipeline and persist properly. **Where:** Site Editor → any AI-generated site with a booking or contact form **How to test:** - Generate a new site for a service business (e.g., restaurant, salon, consultant) that would include a booking form - After generation completes, check that form sections render with real fields rather than a "Booking form configuration required" placeholder **Watch for:** Booking or contact form sections showing a blank placeholder after generation; form fields missing from the published site
AI-generated sites occasionally had sections that rendered blank because the generated code referenced content fields that weren't saved — for example, the code read `hero.heading` but the AI saved it as `hero.headline`. A new completeness check and save-time repair layer catches these mismatches automatically so every section renders with real content. **Where:** All AI-generated sites **How to test:** - Generate a new site for any business type - Check that all sections (hero, features, testimonials, pricing, etc.) render with actual content rather than empty space - Regenerate a section and confirm new content fills in correctly **Watch for:** Sections rendering completely blank; hero images appearing as empty bordered boxes; testimonials or pricing tables with no text
The AI design assistant can now pull images from any public webpage and add them to your site's asset library on request. You can describe which images you want (e.g. "import the team headshots from our company website") and the AI will filter by intent before importing. **Where:** Site editor → AI Chat panel → type "import images from [URL]" **How to test:** - Open the AI chat panel - Type "import images from [any public URL]" (e.g. your company's About page) - Confirm the assistant imports relevant images and they appear in your asset library **Watch for:** Assistant not recognizing URL import requests; all images imported regardless of stated intent; imported images not appearing in the asset library after the assistant confirms success
The brand color question in the site setup flow now shows clickable color palette swatches tailored to your industry — instead of a blank text field that required typing hex codes. Pick a palette that matches your brand's feel in one click. **Where:** New site setup → Brand preferences → Color palette question **How to test:** - Start a new site and go through the intake questions - When the brand color / palette question appears, confirm color swatches are visible - Click a palette to select it and confirm the selection is registered **Watch for:** Palette question still showing a plain text input; swatches not matching the industry selected (e.g., restaurant palettes appearing for a law firm)
Clicking "Continue with This Design" now flows directly into the site planner and build process with smooth loading messages — no more blank screens or confusing intermediate steps between choosing a design and watching your pages get built. **Where:** Site Editor → design selection → "Continue with This Design" button **How to test:** - Start a new site and pick a design - Click "Continue with This Design" - Confirm a "Setting up your site…" overlay appears immediately, followed by the site planner progress modal showing pages being built - No blank gap or UI flash between steps **Watch for:** Blank white screen between design approval and the progress modal; site ending up in an unexpected state (design row instead of build row)
The "Build my site" step was silently failing and leaving sites in a broken state — they appeared under "Designs" in the dashboard but opened as if they were builds, with no proper build row created. This was caused by stale database columns being written. The build process now creates the correct site structure every time. **Where:** Site Editor → design → "Build my site" **How to test:** - Start a new site, choose a design, and click "Build my site" - Confirm the site appears correctly under your builds (not designs) in the dashboard - Open the built site and confirm the editor and Mission Control work normally **Watch for:** New site appearing under Designs instead of Builds; site editor opening in design mode after build; Mission Control not accessible for the new site
Campaign attribution for form submissions was silently failing — submissions from landing pages weren't being linked to the correct campaign, and the marketing dashboard card could disappear permanently after a brief network error. **Where:** Site Editor → Growth → Campaigns → (attribution in form submission reports) **How to test:** - Create a campaign linked to a landing page with a form - Submit the form from a visitor session that came through the campaign URL - Check the campaign report and confirm the submission is attributed correctly - Verify the marketing card on the home dashboard remains visible after a page refresh **Watch for:** Form submissions showing zero attribution; the Growth/Marketing card disappearing from the dashboard after a network error
The setup wizard's "do you have an existing website?" question now shows a simple Yes/No choice — selecting Yes reveals an inline URL field, eliminating a confusing third option that overlapped with "Yes." **Where:** Site Editor → New Site → Setup Wizard → existing website question **How to test:** - Start creating a new site - Reach the "existing website" step in the setup wizard - Confirm there are only two options: Yes and No (no redundant "yes but no URL" option) - Select Yes and verify an inline URL text field appears immediately - Enter a URL and confirm it's included in the summary message **Watch for:** Three-option layout persisting; URL field not appearing on Yes selection
External systems like POS terminals, ERPs, and marketplace hubs can now push stock changes into your Mondovo store via a signed webhook — so inventory stays accurate across all your sales channels without manual updates. **Where:** Site Editor → Mission Control → Store settings → Inventory sources (coming to UI soon; API-ready now) **How to test:** - Configure a webhook source for your external system using the inventory sources API - Trigger a stock change in the external system - Confirm the updated quantity appears on the product in Mondovo **Watch for:** Webhook signature validation errors; stock quantities not updating after a push; conflict entries appearing when the same SKU is updated from multiple sources simultaneously
When the design assistant created a new variation, the editor would sometimes get stuck showing "Reconciling this variation with the latest files" for up to 30 seconds — leaving users unable to see or interact with their new design. The variation now loads immediately. **Where:** Site Editor → design assistant → new variation creation **How to test:** - Open the site editor and use the design assistant to generate a new variation - Confirm the new variation appears in the preview without showing a "Reconciling" loading state - Switch between existing variations to confirm they still load correctly **Watch for:** "Reconciling this variation with the latest files" message appearing after variation creation; preview remaining blank after the assistant finishes
Verified buyers can now submit star ratings and written reviews for products they've purchased, and any past order can be reordered in one tap. Reviews go through merchant moderation before appearing on the storefront, so you stay in control of what's published. **Where:** Customer portal → Orders → Reorder; customer portal → Orders → Leave a review **How to test:** - Log into the customer portal with an account that has at least one completed order - Open an order and tap "Reorder" — the items should appear in the cart - Open a product from a past order and submit a star rating + review text - Log into the merchant dashboard and confirm the review appears as "Pending" for approval **Watch for:** Reorder button not appearing; review submission showing a 409 error (duplicate); reviews appearing publicly before merchant approval
The customer account portal now shows a "Reorder" button and "Download invoice" link on every order — reordering copies the original items into the cart with current pricing, while the invoice link fetches a generated PDF. **Where:** Storefront → My Account → Purchases **How to test:** - Sign in as a customer with at least one completed order - Navigate to My Account → Purchases - Click "Reorder" on a past order and confirm items appear in the cart with current prices - Click "Download invoice" and confirm a PDF is downloaded - Verify only ecommerce orders show these actions (not appointment/service orders) **Watch for:** Reorder button missing on ecommerce orders; invoice download returning an error; cart not populated after reorder
When you publish an ecommerce site, the platform now automatically adds the standard commerce pages — product listing, cart, checkout, and order confirmation — so customers have a complete shopping flow without any manual page setup. **Where:** Visible on published ecommerce sites at `/products`, `/cart`, `/checkout`, and `/order-confirmation` **How to test:** - Publish an ecommerce site that has products in the catalog. - Visit the published site and navigate to `/products` — a product listing page should appear. - Add a product to cart and proceed through `/cart` and `/checkout` to `/order-confirmation`. - If your site already has custom versions of these pages, those take priority and auto-injection is skipped. **Watch for:** Auto-injection only triggers when the site has at least one product or imports a commerce runtime component. Sites with no catalog data will not have these pages injected.
Google OAuth now initiates through our own server instead of redirecting directly to a third-party auth URL — so sign-in works even when external auth services are temporarily slow, and errors surface as clear messages instead of blank or broken pages. **Where:** Sign-in page → "Sign in with Google" button **How to test:** - Click "Sign in with Google" on the login page — the Google account picker should appear without any delay or blank-page flash. - Verify successful sign-in redirects back to the dashboard correctly. - If Google OAuth credentials are not configured, a clear error message should appear instead of a broken redirect. **Watch for:** The new server-side flow requires `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`, and the callback URL registered in the Google Cloud console. Sites using the old client-side redirect may see an extra hop — this is expected during the transition.
Guest checkouts (orders placed without an account) were failing to generate invoices — the portal showed "generating" indefinitely and the invoice never appeared. Additionally, reordering a previous purchase was silently adding items to an empty cart. Both issues are fixed. **Where:** Customer portal → Orders → Invoice; customer portal → Orders → Reorder **How to test:** - Complete a guest checkout (no account login) and then view the order in the portal - Confirm an invoice is generated and available to download - Use the "Reorder" button on a past order and confirm the correct items appear in the cart **Watch for:** Invoice status stuck on "generating" for guest orders; cart appearing empty after tapping Reorder
You can now import images from a webpage URL directly from the My Assets panel — without needing to click on a specific image in the editor first. A toggle in the panel header switches between your asset library and the URL import view, and successfully imported images are added to your library automatically. **Where:** Site editor → Assets panel (left rail) → "From URL" toggle **How to test:** - Open the Assets panel in the site editor - Click the "From URL" toggle in the panel header - Paste a URL and import images; confirm they appear in My Assets after import **Watch for:** Toggle button missing from the Assets panel header; imported images not refreshing into the My Assets view; URL import panel not appearing inline
Paste a webpage URL into the image picker and pull every image on that page into your site assets in one step — no more saving photos one at a time when migrating from an existing website. The design assistant can also do this from chat ("import the team headshots from https://oursite.com/about"), with an optional intent filter that uses vision AI to keep only the images matching what you asked for. **Where:** Site Editor → click any image → "From Webpage" tab (or ask the AI assistant in chat) **How to test:** - Open the image picker on any image element - Click the new "From Webpage" tab - Paste a public webpage URL (your old site, a portfolio page, etc.) and click Fetch images - Confirm thumbnails of the page's images appear with checkboxes - Pick which to keep, click Import — they should appear in your Assets tab with a green highlight - In the AI chat, try: "pull the team photos from https://example.com/about" — assistant should preview candidates first, then commit only on your confirmation **Watch for:** Slow fetches on JS-heavy sites (we render the page in a real browser when needed, which takes a few extra seconds); images blocked by the source site's bot protection (we'll show "no images found" and you can try a different URL); duplicate imports from re-running on the same URL — these reuse the existing asset rather than creating duplicates
A new "From Webpage" tab in the asset picker lets you paste any public URL and bulk-import the images from that page directly into your site's asset library. Useful for pulling in images from your existing business website without downloading and re-uploading them manually. **Where:** Site editor → any image element → replace image → "From Webpage" tab **How to test:** - Click an image in the site editor and choose to replace it - Select the "From Webpage" tab - Paste a URL and confirm the page's images appear as selectable thumbnails - Import one and verify it appears in the site and asset library **Watch for:** No images appearing for valid URLs; import failing silently; imported images not appearing in My Assets after selection
When importing images from websites like Wikipedia or Stripe that serve images from a separate CDN domain, the importer was filtering out all images as "off-site." CDN-hosted images now import correctly, and SVG images are included as candidates instead of being silently excluded. **Where:** Site Editor → image picker → "From Webpage" tab **How to test:** - Open the image picker and go to the "From Webpage" tab - Paste a URL from a site that uses a CDN (e.g., a Wikipedia article or a SaaS product page) - Confirm images appear as candidates even if they're served from a different subdomain **Watch for:** "No images found" on pages that clearly have content images; SVG illustrations not appearing in the candidate list
Product catalogs can now be bulk-imported from a Shopify CSV export file — variants, images, prices, and inventory all transfer automatically, so migrating an existing Shopify store takes minutes instead of manual data entry. **Where:** MC → Pages → Products → Import → choose "Shopify" as the source **How to test:** - Export a products CSV from a Shopify store (Shopify admin → Products → Export). - In MC, navigate to the Products content type and click Import. - Select the Shopify source card and upload the CSV. - Verify products, variants, and images appear in the catalog after import. **Watch for:** Only the Products content type shows the Shopify import option — it does not appear for other content types. Image URLs from Shopify are copied by reference; if the Shopify store is later taken offline, those image URLs will break.
The "Visit ↗" link on inspiration and competitor chips in the site setup flow was never appearing — the URL was being stripped before the preference card was displayed. Links now show correctly so you can visit the inspiration sites while making your selections. **Where:** New site setup → style / inspiration preference questions **How to test:** - Start a new site and go through the intake questions until you reach an inspiration or competitor question - Confirm each chip has a "Visit ↗" link - Click the link and confirm it opens the correct URL in a new tab **Watch for:** "Visit ↗" link missing from chips even when the chip represents a real website; links opening incorrect URLs
Products can now be priced dynamically based on live metal rates and stone prices — set a per-gram gold rate, stone cost per carat, and making charges, and prices update automatically as commodity rates change. Every order captures a pricing snapshot so invoices always show the rate at time of purchase. **Where:** Site Editor → Mission Control → Store → Products → Variants → Pricing (commodity mode) **How to test:** - Open a product with variants and switch to commodity pricing mode - Set a gold rate (e.g., ₹6,800/gram), purity (22k), weight (5g), and making charges - Confirm the calculated price is correct on the product page - Place a test order and check that the invoice shows the metal rate breakdown **Watch for:** Price showing as ₹0 or "NaN"; invoice missing the pricing breakdown; rate updates not reflecting on the storefront
Customers now see real-time shipping rates fetched directly from Shiprocket, EasyPost, or ShipStation at checkout instead of fixed rates from a table — the cheapest available service is shown by default, with prices reflecting current carrier pricing. **Where:** Storefront checkout on any ecommerce site with a fulfillment provider configured **How to test:** - Connect a fulfillment provider (Shiprocket, EasyPost, or ShipStation) in MC → Settings → Fulfillment. - Add a product to cart on the storefront and proceed to checkout. - Enter a delivery address — shipping options with live carrier rates should appear. - Compare rates against what the carrier portal shows for the same origin/destination/weight. **Watch for:** Live rate lookups require a valid origin address configured in the fulfillment provider settings. If no live rates are returned, the system falls back to the rate table configured in MC → Settings → Shipping. Rate results are cached for 10 minutes to avoid hammering carrier APIs on every cart edit.
After generating a multi-page site (education, events, hospitality, etc.), the header navigation now automatically links to all the generated pages — previously the nav could still show anchor links to homepage sections instead of the new page URLs. **Where:** Site Editor → Generate Site (multi-page sites with 3+ pages) **How to test:** - Generate a multi-page site (e.g. an education site with Courses, Faculty, and Events pages) - Preview the site immediately after generation - Click every navigation link and confirm each routes to the correct page (not an in-page anchor) **Watch for:** Navigation links pointing to #section-name instead of /page-slug; newly generated pages not reachable from the header
Creating a new workspace after signing up was throwing a server error on first request, leaving users stuck with "Unable to create your workspace" — the broken API routes are restored and the retry button now correctly re-tries the right flow. **Where:** Onboarding → Create Workspace (new user sign-up flow) **How to test:** - Create a new account and go through the onboarding flow - Complete the workspace creation step and confirm it succeeds on the first attempt - If a transient error appears, click "Try Again" and confirm it retries successfully without redirecting to an invite-code page **Watch for:** "Unable to create your workspace" error on a fresh sign-up; "Try Again" bouncing to /auth/invite-code
The opening "Hi, what's your business?" question disappeared from the chat as soon as you sent your first reply, leaving the conversation history starting with your answer but no question. The opening message now stays in the thread so the conversation reads naturally. **Where:** New site setup → AI chat intake flow **How to test:** - Start a new site and enter the chat-based intake flow - Send your first reply to the opening question - Scroll up in the chat — the original question should still be visible above your answer **Watch for:** Chat history starting with your reply but no preceding question; the opening message disappearing on send
Customers now automatically receive an email receipt after a successful payment and a shipping notification with their tracking number when an order ships. **Where:** Configured in MC → Settings → Automation — look for the "Order Paid" and "Order Shipped" recipe templates **How to test:** - Complete a checkout on an ecommerce storefront and verify a confirmation email arrives. - Fulfill an order from MC → Orders and add a tracking number — customer should receive a shipping notification. - Check MC → Settings → Automation to edit the email templates for both triggers. **Watch for:** Emails only fire when an automation recipe of the matching type exists and is enabled for the site. A site with no recipes configured will send no emails until one is created.
Every paid order now automatically generates a professional PDF invoice with business details, line items, and tax breakdown — customers can download it from their account and merchants can share it directly. **Where:** Storefront → My Account → Purchases → Download Invoice **How to test:** - Place and pay for an order on an ecommerce site - Navigate to My Account → Purchases - Click "Download invoice" and confirm a PDF is returned with correct order details - Verify the invoice includes line items, totals, and GST breakdown for Indian tax mode **Watch for:** Invoice link returning 404 immediately after payment; PDF missing business or customer details; duplicate invoice numbers on repeated downloads
The "Order Receipt" and "Order Shipped" automation recipes were missing from the Automation UI even though the backend supported them — they now appear alongside the other recipe types so you can set up post-purchase email automations. **Where:** Site Editor → Mission Control → Leads → Automation → Recipes **How to test:** - Open the Automation Recipes view for a store site - Confirm "Order Receipt" and "Order Shipped" cards appear in the recipe list - Open either recipe and check that the variable hints panel shows order-specific variables (not booking/review variables) **Watch for:** Recipe cards missing after a page refresh; variable hint panel showing irrelevant variables for order recipe types
Sites using platform-provided components (event registration, forms, booking widgets) were throwing a build error — "No matching export for import default" — that prevented previews and published sites from loading. Platform components now export correctly and load without errors. **Where:** Site Editor → preview; published site **How to test:** - Open a site that uses event registration or other platform components - Confirm the preview loads without a white screen or console error about missing exports - Publish the site and confirm it loads correctly at the published URL **Watch for:** White screen in the preview with no content; "No matching export" error in browser console; published site failing to load
Shoppers can now browse products by category on the storefront — a RuntimeCategoryListing component renders the full category tree with images, and clicking a category shows only the matching products. **Where:** Storefront — category pages injected automatically when categories are configured; AI can also add a category listing section to any page **How to test:** - Set up product categories in MC → Pages → Categories. - Assign products to categories. - Visit the published storefront — navigate to a category listing URL (e.g. `/categories/mens-shoes`) and verify only products in that category appear. - Verify the top-level categories endpoint returns the correct hierarchy at `/api/storefront/[siteId]/categories`. **Watch for:** Category pages are only generated at publish time when categories exist in the catalog. An empty category (no assigned products) still renders but shows no products.
Sites with published products now automatically get individual product detail pages (e.g. /products/blue-widget) at publish time — no template file needs to be manually created, so every product gets its own URL out of the box. **Where:** Site Editor → Publish → (auto-generated /products/{slug} pages) **How to test:** - Add products to an ecommerce site that has no custom products-template file - Publish the site - Visit /products/{product-slug} on the published site and confirm a proper product detail page renders - Confirm the page includes the site's Header and Footer **Watch for:** 404 on /products/{slug}; product page missing header or footer; template injection overwriting a custom template
Customers can now read and submit reviews directly on product detail pages — verified purchasers see a review form with a star picker and optional title/body, while all visitors see the aggregate rating and approved reviews. **Where:** Storefront → Product Detail Page → Reviews section **How to test:** - Visit a product detail page on a published ecommerce site - Scroll to the reviews section below the product description - Confirm aggregate star rating and review count are shown - Sign in as a customer who has purchased the product and submit a review - Confirm the review shows a pending confirmation message - As the merchant, approve the review and verify it appears publicly **Watch for:** Reviews section not appearing on product pages; form showing for non-purchasers; "No reviews yet" state not shown correctly
The product variants editor now supports up to 6 attribute axes (Color, Size, Material, etc.) instead of the previous limit of 3, and large variant grids stay manageable with per-axis filter chips and page-by-page browsing. **Where:** MC → Pages → Products → open a product → Variants tab **How to test:** - Open a product with 3 existing variant axes and add a 4th (e.g. a material dimension) — it should now be accepted with only a soft warning. - Create a product with 5+ variants per axis to produce 40+ rows — filter chips should appear above the grid. - Use the filter chips to narrow to specific axis values and verify "Apply to all" bulk edits apply only to the filtered subset. **Watch for:** The hard ceiling is 6 axes. Products with more than 6 axes will be rejected at save time. Very large grids (hundreds of variants) may be slow to load — use filtering to keep the visible set manageable.
Digital products (eBooks, templates, software, etc.) now generate a unique, expiring download link for each customer when their order is paid — links respect per-product download limits and expire after 72 hours. **Where:** Storefront → Order Confirmation / My Account → Purchases (download link in order details) **How to test:** - Set up a product with a digital asset attached - Complete a purchase as a customer - Confirm a download link is emailed and/or visible in the account portal - Click the link and verify the file downloads from the CDN - Attempt to use an expired or over-limit token and confirm a 410 error is shown **Watch for:** Download link missing after payment; link not expiring; link working after the download limit is reached
Shipping labels from all carriers (Shiprocket, EasyPost, ShipStation) are now mirrored to permanent storage the moment a shipment is booked — labels no longer expire or become inaccessible after 24 hours. **Where:** MC → Orders → open any fulfilled order → the label download link **How to test:** - Fulfill an order using a connected shipping carrier. - Wait more than 24 hours and re-open the order detail — the label download link should still work. - Verify the PDF opens correctly for Shiprocket (URL), EasyPost (URL), and ShipStation (base64 inline) labels. **Watch for:** Labels booked before this change may still have expiring URLs — only new shipments booked after this update are stored permanently.
When a customer selected a specific shipping tier at checkout, there was a chance the wrong (cheaper) rate would be charged after the rate quote cache expired — causing merchants to under-recover shipping costs. The selected shipping service is now identified reliably so the correct rate is always applied. **Where:** Storefront → checkout → shipping method selection **How to test:** - Add items to cart and proceed to checkout - Select a premium shipping option (e.g., express delivery) - Wait a few minutes and then complete the purchase - Confirm the order invoice shows the same shipping cost that was displayed at checkout **Watch for:** Shipping cost on the invoice differing from what was shown at checkout; cheapest shipping being charged when a more expensive option was selected
The automatically injected ecommerce pages (products, cart, checkout, order confirmation) were missing the site's navigation header and footer — they now render consistently with the rest of the site. **Where:** Storefront → /products, /cart, /checkout, /order-confirmation **How to test:** - Publish an ecommerce site with a visible header and footer on the homepage - Visit /products, /cart, /checkout and confirm the header and footer appear on each page - Verify navigation links in the header work correctly on these pages **Watch for:** Header or footer missing on any of the four commerce pages; broken layout on pages that have only a footer but no header
Cart contents are now saved to the server in real time, so customers can start shopping on one device and pick up exactly where they left off on another — or restore their cart from a recovery link in an email. **Where:** Storefront → Cart (any ecommerce site) **How to test:** - Add items to the cart on one browser - Open the site on a different browser or device using the recovery link - Confirm the cart contains the same items - Complete the checkout and confirm the cart session is cleared **Watch for:** Cart not syncing between devices; recovery link not restoring cart items; cart session persisting after a completed order
Site thumbnail screenshots were being generated using default content instead of the active variation's content — so the thumbnail for a variation with custom testimonials, pricing, or hero text would show generic placeholder content that didn't match the editor view. Thumbnails now accurately reflect what users see. **Where:** Site dashboard → site thumbnail; version history thumbnails **How to test:** - Open a site with a variation that has custom content (e.g., custom hero text or testimonials added via the AI) - Trigger a screenshot recapture (or wait for the next automatic capture) - Confirm the thumbnail shows the variation's actual content, not generic defaults **Watch for:** Thumbnails showing "Your Business Name" placeholder text instead of the real business name; thumbnail not updating after content changes
Sites that included platform commerce components were incorrectly getting product listing, cart, and checkout pages auto-injected during publish — even when no products had been added. Store pages now only inject for sites that have actual products published. **Where:** Published site → store pages **How to test:** - Create a site that does not have any products configured - Publish the site - Confirm no shop, cart, or checkout pages appear on the published site **Watch for:** Unexpected shop/cart pages appearing on non-store sites after publish; store pages injecting on sites that only use a single platform component
Streaming status updates were only properly configured on one endpoint; all other long-running operations (bulk page generation, site finalization, redesign, regeneration, AI chat) were missing the headers needed to prevent CDN buffering. All SSE routes now consistently stream updates in real time. **Where:** Site editor → AI Chat → Site Planner; Pages panel → bulk operations; Redesign; Regenerate **How to test:** - Run any long AI operation (e.g. full site redesign or bulk page generation) - Progress should update incrementally throughout the operation, not appear all at once at the end **Watch for:** Long-running operations that show no progress then complete all at once; operations that appear to be doing nothing for a long time before updating
Two issues in the product variants editor are fixed: narrowing a filter or removing a variant axis no longer leaves the table blank, and typing a SKU while editing another field no longer gets lost — the table now clamps to a valid page and uses separate input keys per field. **Where:** Site Editor → Content → Products → Edit Product → Variants **How to test:** - Open a product with multiple variant combinations - Apply a filter or remove a variant axis and confirm the table shows remaining variants (not blank) - Simultaneously edit a SKU and a price in different cells and confirm neither value is lost **Watch for:** Table going blank with no error message; SKU field clearing unexpectedly when editing price
Restoring a previous version was writing to the wrong variation slot when you had multiple designs — so restoring while viewing Design 3 would incorrectly overwrite Design 1. The editor also didn't refresh after a restore, making it appear nothing happened. Both issues are fixed. **Where:** Site Editor → Mission Control → Settings → Version History → Restore **How to test:** - Open a site with multiple design variations - Switch to Design 2 or Design 3 - Restore a previous version from the version history panel - Confirm the restored version appears in the editor immediately without a manual refresh - Confirm only the active design was changed (other designs remain unaffected) **Watch for:** Editor not updating after restore; restore appearing to succeed but showing old content; wrong design variation being overwritten
When the AI assistant responds to a WhatsApp message with a natural choice or call-to-action, it now sends interactive reply buttons or a tap-to-select list instead of plain text — making it easier for customers to respond with a single tap. **Where:** WhatsApp widget → customer-facing conversations **How to test:** - Send a WhatsApp message to a site with the AI assistant enabled that would normally prompt a choice (e.g. "I'd like to book an appointment" or "What services do you offer?") - Confirm the AI response arrives as interactive buttons or a list rather than plain text - Tap a button and confirm the conversation continues normally - Verify fallback to plain text works when the reply doesn't map to an interactive shape **Watch for:** Interactive messages failing to send and the conversation going silent; buttons with truncated titles; CTA button not linking to the correct URL
Connecting a WhatsApp Business account now uses Meta's official Embedded Signup flow — completing the in-app OAuth grants real API access, automatically discovers your phone numbers, and stores credentials securely without any manual copy-paste of tokens. **Where:** Site Editor → Settings → WhatsApp → Connect WhatsApp Business **How to test:** - Open WhatsApp settings for a site and click "Connect WhatsApp Business" - Complete the Meta Embedded Signup flow in the popup - Confirm the phone number and WABA details are auto-populated after signup - Send a test message to verify the connection is live **Watch for:** Callback failing after completing Meta's flow; phone number not appearing; access token not being saved securely
The "Connect WhatsApp" button in Settings → Integrations now reliably opens the Meta signup popup — a compatibility issue with Meta's SDK caused the popup to silently fail to open in all cases. **Where:** MC → Settings → Integrations → WhatsApp → Connect button **How to test:** - Open MC → Settings → Integrations. - Click the Connect button in the WhatsApp panel — the Meta Business signup popup should open immediately. - Complete the signup flow and verify the site shows as connected with phone number and WABA details. **Watch for:** The popup may still be blocked by browser popup blockers. If the popup does not open, check that popups are allowed for the app domain. The fix specifically addresses the case where the popup was blocked by Meta's SDK type-checking, not by the browser.
The floating AI assistant button in the site editor was misaligned and animated unnecessarily on mobile screens. It now anchors correctly to the bottom-right corner and no longer blinks or shifts on scroll. **Where:** Client portal → site editor (mobile or narrow browser window) → floating AI button (bottom-right) **How to test:** - Open the site editor on a mobile device or resize the browser to mobile width. - The AI assistant floating button should appear fixed in the bottom-right corner. - Scroll the editor content — the button should not move or blink. - Tap the button to confirm it opens the assistant panel correctly. **Watch for:** Button overlapping the bottom navigation bar on very small screens (< 375 px wide) — this is a known edge case.
After clicking a quick-reply chip to answer the AI's clarifying question, the planner would sometimes bounce the request back to the assistant instead of executing the refinement. It now proceeds directly to the edit. **Where:** Client portal → site editor → AI assistant (chat panel or assistant FAB) → any refinement that triggers a clarifying chip question **How to test:** - Open the AI assistant in the site editor. - Ask for a change that triggers a chip question (e.g. "change the color scheme" → chips might offer "warm", "cool", "monochrome"). - Click a chip to answer. - The assistant should immediately start the refinement — no second round of clarification or "I'll hand this to the editor" message. **Watch for:** The fix applies to chip-answered clarifications. Typed follow-up answers are unaffected. If the AI still delegates after a chip click, capture the chat history and report.
Form submissions and orders are now linked to the marketing campaign that drove them — any lead or purchase arriving through a campaign's UTM link is automatically attributed, so the Campaigns view shows accurate conversion counts without manual tracking. **Where:** Client portal → Growth → Marketing → Campaigns tab (attribution runs in the background on checkout and form submission) **How to test:** - Create a campaign in Growth → Marketing → Campaigns. - Copy the campaign link (includes UTM parameters). - Open the storefront in a new tab using that link, add a product to cart, and complete checkout. - Return to the Campaigns tab — the campaign card's conversion count should increment. - Repeat with a form submission on a page that has UTM parameters from the same campaign. **Watch for:** Attribution only works when the UTM parameters match the campaign's tracked values. Direct visits or visits through other UTMs are not attributed.
Several issues found during QA of the tax, shipping, and fulfillment features are resolved: cart quote correctly includes tax and shipping totals, checkout handles edge cases in address validation, and the RuntimeCheckout component renders correctly when no shipping zones are configured. **Where:** Storefront checkout on any ecommerce-enabled site **How to test:** - Add products to cart and proceed to checkout on a site with shipping zones configured. - Verify the order summary shows correct subtotal, shipping, tax, and total amounts before payment. - Test with no shipping zones configured — checkout should still complete (free shipping fallback). - Verify the cart quote API (`/api/storefront/[siteId]/cart/quote`) returns consistent totals. **Watch for:** Tax amounts showing $0 when Stripe Tax is enabled but the customer address is outside configured tax regions — this is expected behavior, not a bug.
A timing bug in the new site creation wizard could crash the Business Basics step before the form finished loading, showing an error boundary and blocking site creation. The crash no longer occurs. **Where:** Creating a new site → Business Basics step **How to test:** - Start creating a new site from the dashboard. - Navigate quickly through the wizard steps, especially the Business Basics (name, industry, location fields). - The form should load completely without showing an error screen. - If an error does appear, the error boundary now shows a clear reload hint instead of a blank screen. **Watch for:** Error boundary still appearing on extremely slow connections — use the "Reload" link shown in the error to recover. The session is preserved so no data is lost.
Campaign cards in the Marketing view now show attributed revenue and lead counts in real time — each card pulls the orders and form submissions linked to that campaign's UTM parameters so you can see what's actually converting. **Where:** Client portal → Growth → Marketing → Campaigns tab **How to test:** - Open a site with at least one campaign created (Growth → Marketing → Campaigns). - Place a test order or submit a form with the campaign's UTM parameters in the URL. - Refresh the Campaigns tab — the card should show updated revenue and lead count. - Check that the Today slots in the home screen also reflect the latest figures. **Watch for:** Revenue showing $0 immediately after placing an order — allow up to 30 seconds for the attribution to propagate. Missing revenue if the order was placed without UTM parameters (expected — only tagged traffic is attributed).
The marketing strategy pain-point matrix now collapses into an accordion layout on narrow widths (tablets, small browser windows) so every cell and persona column remains reachable without horizontal scrolling. **Where:** Client portal → Growth → Marketing → Strategy tab **How to test:** - Open a site with a marketing strategy generated. - Navigate to Growth → Marketing → Strategy. - Resize the browser to a narrow width (below ~900 px) or view on a tablet. - The matrix should switch to accordion sections — click a pain-point row to expand and see the messaging briefs. - Verify all matrix cells are accessible without horizontal scroll. **Watch for:** Accordion not collapsing on resize if the browser window was already open at a narrow width before navigating to Strategy — a page refresh fixes it.
Define your audience once as a matrix of personas × journey stages × pain points × competitors, then spin up multi-channel campaigns (Google Ads, Meta, outreach, email, content series) and matching landing pages straight from any cell. **Where:** Site editor → Growth → Marketing → Strategy (new default landing tab). The Campaigns sub-tab next door surfaces everything you generate; SEO → Plan picks up service × location pages from the same matrix. **How to test:** 1. Open a site, go to Growth → Marketing. If you haven't seeded a strategy yet, click **Generate strategy** — your personas, pain points, and competitors auto-populate from the site's blueprint in about 15 seconds. 2. Click any cell in the Journey × Pain matrix to materialize its messaging brief (hook, promise, proof, CTA). 3. In the cell drawer, leave **paid_search** and **paid_social** checked, tick **Spawn matching landing page**, click **Generate campaign assets**. Inline status shows pending → success. 4. Open the **Campaigns** tab. The new campaign appears in the list; click it to see channel-grouped assets with character-count badges. Click **Google Ads Editor CSV** to download an importable creative bundle. 5. Try **Start from an ad** on the Strategy view — paste a competitor's ad copy and we'll tell you which cell of your matrix it targets and what's missing. 6. Under SEO → **Plan** (new sub-tab), select empty service × location cells and click **Bulk-generate** to fan out up to 30 SEO pages at once. **Watch for:** The "Build your audience matrix" empty state lingering past 30 seconds (re-seed via the Re-seed link). CSV cells importing into Excel/Sheets as formulas — they shouldn't, but flag any that do. Campaign assets stuck on "Generating…" — the failure mode now surfaces inline; copy the message if you see one.
The Marketing Today action slots (daily recommended tasks across paid, social, outreach, and content channels) are now surfaced directly on the Mission Control home page, so owners see their day's priority actions the moment they open the editor. **Where:** Client portal → Home (first tab in left rail) **How to test:** - Open a site that has a marketing strategy generated (Growth → Marketing → Strategy). - Switch to the Home tab. - Today's recommended marketing tasks should appear as cards with channel icons and action buttons. - Clicking a card should open the relevant campaign or guidance. **Watch for:** Cards not appearing if no marketing strategy has been generated yet — the empty state should prompt you to generate one. Cards stuck loading if the marketing-today API is slow.
A bell icon in the Mission Control header now surfaces order alerts, fulfillment updates, and platform notices without leaving the editor — click to open a popover with unread counts and timestamps. **Where:** Client portal → any site → top-right header bell icon **How to test:** - Open a site in the client editor (`/client/{clientId}/site/new?siteId={siteId}`). - Look for the bell icon in the MC header (top right). - Place a test order or trigger a fulfillment event — the unread count badge should update. - Click the bell to open the notifications popover; notifications should be listed with timestamps. **Watch for:** Bell icon not appearing if the notifications API (`GET /api/client-sites/[id]/notifications`) returns an error — check browser console for 4xx/5xx.
A database migration ordering issue caused one published site to show up in the Designs tab with a "Ready to Publish" label instead of in its correct location. This is now corrected at the data layer and the label logic is tightened so it can't recur. **Where:** Dashboard → Designs tab **How to test:** - Open the dashboard and switch to the Designs tab. - Only design-phase sites (generation snapshots used to pick a style) should appear here — no deployed or published sites. - Sites without screenshots should show "No Preview" in the Designs tab, not "Ready to Publish". - Published/build-kind sites should show "Ready to Publish" only in their own section. **Watch for:** Any site in the Designs tab that has a custom domain or "Published" badge — that would indicate a similar data issue and should be reported.
Inviting a team member who had a pending invite outstanding would silently fail due to a database uniqueness conflict. Pending invitations can now be re-sent and accepted without hitting an error. **Where:** Organization settings → Team → Invite member **How to test:** - Invite a team member by email. - Without accepting, invite the same email again (re-send or re-invite). - The second invitation should be created successfully and the previous pending row replaced. - Accepting the new invitation link should grant access normally. **Watch for:** Old invitation links from before this fix will still work if they haven't expired. If an old link bounces with an error, use the re-send flow to generate a fresh one.
AI-generated WhatsApp replies used to include raw markdown (asterisks, underscores, hashes) that appeared as literal characters in the customer's WhatsApp chat. These are now stripped before sending so messages read naturally. **Where:** WhatsApp chat — any inbound message handled by the AI bot on your connected site **How to test:** - Send a WhatsApp message to a site with AI response enabled (e.g. "What services do you offer?"). - The reply should arrive as plain, readable text with no stray `**`, `_`, or `#` characters. - Long lists should use numbered or bulleted formatting that WhatsApp renders natively. **Watch for:** If the AI replies with a multi-section structured response, verify the formatting still reads clearly. Pure text answers should look identical to before.
The WhatsApp AI bot now sends native interactive message types — reply buttons for simple choices, single-select lists for longer option sets, and CTA URL buttons for "Book now" or "View menu" actions — instead of plain text, so customers can respond with a single tap. **Where:** WhatsApp chat on any connected site — automatic based on AI reply content **How to test:** - Send a question that implies choices (e.g. "What services do you offer?") to a WhatsApp-connected site. - The AI reply should arrive as a list message with selectable items, not a numbered text list. - Ask something with a clear call-to-action (e.g. "How do I book?") — expect a CTA URL button. - Plain questions that don't map to interactive types should still arrive as text. **Watch for:** Interactive messages fall through to plain text if the AI formatter times out (4 s cap) or if the Meta API rejects the payload — plain text always reaches the customer.
The WhatsApp Business connect button now handles popup blockers and slow-loading Facebook dialogs gracefully — a watchdog timer detects if the Meta popup stalls and offers a recovery prompt instead of silently failing. **Where:** Client portal → Settings → Integrations → WhatsApp → Connect **How to test:** - Open Settings → Integrations → WhatsApp on a site that is not yet connected. - Click Connect. If your browser blocks the popup, a recovery message should appear with instructions to allow it. - Simulate a slow connection (throttle in DevTools) — the button should remain in a loading state and not freeze. - Complete the OAuth flow; the panel should update to "Connected" without a page refresh. **Watch for:** Connect button unresponsive after dismissing a blocked popup — the watchdog should reset after ~10 seconds and allow retrying.
The brand colors step now shows 3 AI-generated color palettes tailored to your business type, instead of a raw color picker. **Where:** Site wizard → Brand Identity → Colors **How to test:** Start a new site, enter a business name and description (20+ chars). Expand the Brand Identity section — three named palette options with colored swatches appear automatically. Select a palette, choose "Other" to enter custom hex codes, or choose "Decide for me" to let AI pick during generation. **Watch for:** Palettes not appearing if the business description is too short; custom hex picker not showing when "Other" is selected.
Three bugs in the catalog filter UI are fixed: changing filters while results were loading no longer shows stale data; a failed initial load no longer freezes the grid until page reload; and declaring a filter field with a reserved name (like "page") is now blocked at save time to prevent broken filter behavior. **Where:** Live site → catalog/listing page with filters; Client portal → Content tab → collections with facets **How to test:** - Open a catalog page, apply a filter, then quickly change to a different filter value — results should reflect the latest selection - If the catalog fails to load (e.g. network error), clear all active filters — the grid should re-attempt the fetch instead of staying frozen - In the Content admin, try creating a facet field named "page" or "sort" — it should be rejected with an error **Watch for:** Filter selections not sticking after rapid changes; "page" reserved-name validation not triggering on update.
Listing and catalog pages that declare facet fields (e.g. price range, color, category) now render a sidebar filter UI on the live site. Visitors can filter by any declared facet and the URL updates so filtered views are shareable. Site owners can also filter their content table in the dashboard by the same facets. **Where:** Live site → any catalog/listing page with facets declared; Client portal → Content tab → select a collection with facets **How to test:** - Open a site that has a product or rooms listing with facets defined - Visit the listing page — a sidebar with filter options should appear - Apply a filter (e.g. price range) and confirm the URL updates and results narrow - In the client portal Content tab, open the same collection and use the filter row above the table **Watch for:** Filter sidebar not appearing if no facets are declared for the content type; filter results not updating when switching between facet values rapidly.
Sites in trades and home-services industries (plumbing, electrical, HVAC, roofing, landscaping, general contracting) now show terminology that matches the industry — "Jobs" instead of "Bookings", "Technician" instead of "Staff", and a dedicated "Service Area" section — throughout the dashboard. **Where:** Client portal → any tab (Bookings/Jobs, Staff/Technicians, Leads) for a trades or home-services site **How to test:** - Open a plumbing or HVAC site in the client portal - Check the left rail labels — "Bookings" should read "Jobs" and "Staff" should read "Technicians" - Confirm the icon for Leads shows a hard-hat symbol **Watch for:** Labels reverting to generic terms on page refresh; non-trades sites accidentally picking up trades vocabulary.
A new Marketing Strategy Matrix gives sites an audience-driven hub for creating and managing paid ads, outreach, email sequences, landing pages, and SEO campaigns — all from a single view. **Where:** Client portal → Growth tab → Marketing Strategy **How to test:** - Open a site in the client portal and click the Growth tab - Click "Marketing Strategy" to see the matrix seeded from your site's blueprint - Select a cell (audience + channel) and click "Generate" to produce campaign assets - Switch to Campaigns to see generated assets and export Google Ads or Meta CSV - Open SEO Plan sub-tab to see a service × location matrix and bulk-generate SEO pages **Watch for:** Matrix not seeding if the site has no blueprint content; campaign asset generation failing silently instead of showing an error state.
Eleven issues in the Marketing Strategy Matrix are resolved: the assistant now lands on the correct sub-tab (Strategy, Campaigns, or SEO Plan) when navigating from chat; campaign asset generation shows live progress instead of firing silently; CSV exports are now safe to open in Excel; and performance attribution correctly separates organic vs. paid search traffic. **Where:** Client portal → Growth tab → Marketing Strategy / Campaigns / SEO Plan **How to test:** - Ask the in-editor assistant to "open marketing campaigns" — it should land on the Campaigns tab, not SEO - Generate campaign assets from a matrix cell and confirm the button shows pending → success states - Export a campaign to CSV and open in Excel/Sheets — cell values that start with `=` should not execute as formulas **Watch for:** Assistant still landing on SEO tab after navigating to campaigns; asset generation button remaining in a loading state permanently.
The "Decide for me" shortcut and numbered question labels disappeared from the intake form preference cards and are now back. **Where:** Client portal → New site → Setup → preference questions **How to test:** - Open a new site intake form and look for numbered preference cards (1, 2, 3…) - Confirm each card shows a "Decide for me" button that auto-selects an option **Watch for:** Cards rendering without numbers or without the "Decide for me" action
You can now create new catalog collections — Products, Menu items, Rooms, Courses, Properties, Cars, Events, Jobs, FAQs, Portfolio, Team — directly inside the editor with a single click, no AI chat required. Industry-specific options are listed first based on your site type. A new publish pre-check also flags any collections missing a detail-page template so you can generate one before going live. **Where:** Client portal → site editor → Content tab → "+ Add Collection" button; also available via the AI chat assistant **How to test:** - Open a site in the editor and go to the Content tab - Click "+ Add Collection" and choose a preset (e.g. Products or Menu) - Confirm the collection is created and appears in the list - For an e-commerce site, open PublishSiteDialog — a banner should appear if any collection lacks a detail-page template, with a "Generate template" button **Watch for:** "+ Add Collection" button missing from the Content Library header; preset list not matching your site's industry; publish precheck banner not appearing for catalog sites with unresolved templates; AI assistant failing when asked to "add a new products collection"
On freshly generated sites where the second design variation did not finish generating, the "Add Page" action was throwing an error and failing silently instead of proceeding with the available variation. The service now skips incomplete variations gracefully and continues, so page additions succeed on all valid designs. **Where:** Site editor → Pages tab → Add Page (on sites generated with multiple design variations) **How to test:** - Open a freshly generated restaurant or similar site with multiple variations - Navigate to the Pages tab and click Add Page - Confirm the page is added successfully without an error **Watch for:** Add Page still failing if both variations are incomplete; new pages not appearing in the pages list after the fix
When asking the AI to update structured content such as a service list, product catalog, or menu, it now intelligently identifies which collections are involved and applies changes to all of them in a single refinement, rather than only partially updating. **Where:** Site editor → chat → "Add a new service / Update my menu items…" **How to test:** - Open a site with a multi-item section (services, products, team members) - Ask the AI to add or change an item and confirm all relevant collections are updated - Check that the preview reflects all changes immediately **Watch for:** Only some items updating, or the AI missing a collection that should have changed
When you type a section name explicitly (e.g. "center align the hero heading"), the AI now acts on that section — even if you have a different section selected in the editor. Previously, the element-context hint from the selection overrode your words, causing the wrong section to be edited. The element indicator in the input also now shows the parent section name alongside the selected element so it's clear which context is active. **Where:** Site editor → chat → type any instruction that names a specific section **How to test:** - Select an element in the ServicesSection by clicking on it in the preview - Type "make the hero heading bold" in the chat - Confirm the hero heading changes, not the services section **Watch for:** AI editing the selected section instead of the one you named; the element indicator showing only a truncated text snippet with no section label
When the AI chose a stock photo (Unsplash, Pexels, Pixabay) as an image replacement, the image was being rejected at the save step because its URL wasn't from the site's storage. Stock and library images are now automatically transferred to site storage before saving, so the replacement always sticks. Requests with multiple image instructions (e.g. "replace the hero with a café and also update the team photos") are also now handled more intelligently — the description for each slot is used separately rather than applied to all. **Where:** Site editor → chat → ask to replace or update any image on the page **How to test:** - Ask the AI to replace an image with a descriptive request, e.g. "change the hero to a sunny beach" - Confirm the replacement appears in the preview and persists after a page refresh - Try a multi-part image request (two separate image changes in one message) and verify each image gets the right replacement **Watch for:** Image replacement reverting after refresh; both images receiving the same replacement when you asked for different ones; "not a valid storage URL" errors in the network tab
When asking the AI to change a specific section, it occasionally edited the wrong one. Position numbers are now included in the section outline so the AI reliably targets the section you mean. **Where:** Site editor → chat → "Change the Services section…" **How to test:** - Open a site with multiple sections (e.g. Hero, Services, Team, Contact) - Ask the AI to change text in a specific section by name - Confirm only the intended section is modified **Watch for:** AI modifying the wrong section or making changes in an unrelated part of the page
Several features stopped working after a recent API infrastructure update: automation recipes, SMS configuration, review-request triggers, blueprint editing, and chat history were all affected. They are now fully restored. **Where:** Site editor → Automation tab; Site → Blueprint; Site editor → Chat history **How to test:** - Open a site and go to the Automation tab — recipes and SMS config should load - Check that blueprint edits save correctly - Open a site with prior chat history and confirm messages appear **Watch for:** Blank automation panel, errors loading blueprint, or missing chat history
The loading screen that appears while your site blueprint is being generated now cycles through helpful pro tips, matching the polished experience from the site generation flow. **Where:** Client portal → Site → Blueprint tab (while blueprint generates) **How to test:** - Open a site, go to the Blueprint tab, and trigger a blueprint refresh - Watch for a progress overlay with a rotating Pro Tip card **Watch for:** Overlay not appearing, or showing a blank card instead of tips
After generating a catalog-based site (fashion, e-commerce, restaurant, real estate) with two design variations, catalog collections and their starter items now populate correctly. Previously the dual-variation generation path skipped catalog setup entirely, leaving the product, menu, or listing section empty with no rows. **Where:** New site generation for catalog industries → Content tab → Collections **How to test:** - Create a new site for a fashion, restaurant, or e-commerce business and generate it - After generation completes, open the Content tab and check the Collections section - Confirm that at least one collection (e.g. Products, Menu Items, Properties) exists with sample rows **Watch for:** Empty collections after generation on catalog-vertical sites; "No items" state persisting after generation; catalog tab missing on sites that should have collections
When a catalog collection (products, rooms, courses, properties) is set up on a site, the AI now generates each design variation's detail page using that variation's own design context — so the /products/item-slug page looks and feels consistent with the rest of the site instead of rendering a one-size-fits-all template. **Where:** Published site → any catalog collection detail page (e.g. /products/silk-saree, /rooms/ocean-suite) **How to test:** - Generate a new site for an e-commerce or hospitality business - After generation, publish the site and open a collection detail page URL - Confirm the page uses the site's fonts, colors, and layout style rather than a plain grid **Watch for:** Detail pages that 404 or render a blank page; detail page design diverging significantly from the rest of the site; multiple design variations producing identical (non-design-matched) detail pages
Published catalog sites now support faceted filtering — buyers can filter by price range, category, capacity, listing type, and other attributes without loading the full collection. The storefront API returns only matching results, so large catalogs (500+ items) stay fast. **Where:** Published catalog site pages (product listings, room listings, course listings, property listings) — filtering is surfaced when the published site includes filter controls tied to the `/api/storefront/{siteId}/items/{type}` endpoint **How to test:** - Generate and publish a products catalog site - Send a GET request to `/api/storefront/{siteId}/items/products?category=Wool&price=99-499` - Confirm only matching published products are returned - Test range endpoints: `?price=-499` (up to 499), `?price=99-` (99 and above) **Watch for:** Unfiltered results returned when query params are present; 500 errors when range filter values are non-numeric; collections without a published status leaking into filtered results
When you clone a site that has catalog collections (products, menu items, properties, etc.), the cloned site now correctly migrates those collections and their rows into the new site's content storage. Previously the clone copied the blueprint text but left the collections empty. **Where:** Admin → Sites → Clone site (any catalog-vertical site with content collections) **How to test:** - Clone a site that has at least one catalog collection with items - Open the cloned site's Content tab and confirm the collections and their items are present - Refine the cloned site and confirm catalog-collection edits save correctly **Watch for:** Empty collections on the cloned site when the original had items; duplicate rows appearing from multiple clone attempts; clone completing without error but collections tab showing zero items
Fixed a bug where a collection detail page could display content from the wrong collection if two collections on the same site happened to use the same item slug. Also fixed the AI assistant's "delete collection" action, which previously failed silently instead of removing the collection. **Where:** Published site collection detail pages (e.g. `/products/item-slug`); AI chat assistant → "delete the Products collection" **How to test:** - Create two collections (e.g. Products and Menu) and add items with the same slug to both - Visit the detail page for each item — confirm each page shows its own collection's content, not the other's - In the AI chat assistant, ask it to delete a collection — confirm the collection is removed and no longer appears in the content list **Watch for:** Detail pages showing the wrong item after the fix; "delete collection" in chat returning an error or not removing the collection; industry-specific collection suggestions in the Add Collection modal not matching the site's industry type
Sites with multiple generated design variations were sometimes bypassing the side-by-side comparison screen and opening directly in the editor, making it look like one of the designs was missing. The router now correctly keeps you on the comparison screen until you explicitly pick a design. **Where:** Client portal → new site flow → design comparison / variation picker **How to test:** - Generate a new site and wait for both variations to appear - The page should stay on the comparison view — both designs should be visible - Clicking "Use this design" should be the action that moves you into the editor **Watch for:** Landing in the editor immediately with only one design visible; the comparison screen flashing briefly then redirecting; the "Draft" badge appearing incorrectly on already-finalized sites
When opening the editor while a site was still being generated or extracted, the app could unexpectedly redirect back to the new-site setup screen. The editor now correctly waits until the site is fully ready before allowing access, and the "Draft" label in the site switcher appears only on sites that are genuinely in design-selection mode. **Where:** Client portal → site editor (any newly generated site) **How to test:** - Generate a new site and quickly navigate to the editor URL before generation finishes - The page should either show a loading state or redirect to the correct generation-in-progress view — not flash to the setup screen - After generation completes, confirm the editor opens normally without bouncing **Watch for:** Redirect to /site/new mid-extraction; "Draft" badge appearing on already-published sites; blank editor screen after a successful generation
Replacing images inside galleries (and other lists built with defensive `.filter()` chains) now updates the live preview immediately, instead of stacking up in the "Apply All" queue and waiting on a refinement pass. **Where:** Site editor → click any image inside a gallery / lookbook / featured collection → "Replace image" **How to test:** Open a site with a gallery section, click two or three different images in a row and replace each. Each one should swap instantly with no "pending changes" badge appearing in the Design Assistant panel. **Watch for:** Image replacements still queueing as "pending"; the wrong image swapping when you replace one item; gallery items reverting to AI-generated defaults after a replace.
Images in the image library were displayed in an unpredictable order; they now appear in the same top-to-bottom sequence as the sections on your page, making it much easier to find and replace the right image. **Where:** Site editor → Image library panel **How to test:** - Open a site with multiple sections and open the image library - Confirm images are grouped in the same order as sections appear on the page (hero first, then features, etc.) **Watch for:** Groups appearing in random order or sections missing from the grouping
When you ask the AI to replace images on your site, it now tries your saved image library and free stock photo sources first — only falling back to AI-generated images when a good match can't be found. This makes replacements faster and cheaper, and your natural-language description ("replace the hero with a red sports car") now shapes the result instead of being ignored. **Where:** Site editor → AI chat → ask to replace or update any image on the page **How to test:** - Open a site in the editor - Ask the AI to replace an image with a specific description (e.g. "change the hero to a sunny café terrace") - The replacement should reflect your description and arrive quickly without always triggering AI image generation **Watch for:** Images not matching the description; replacements taking longer than before; the wrong image slot being updated
Clicking an image that was wrapped in a hyperlink showed the wrong quick-edit menu (link actions instead of image actions). It now correctly shows "Replace image" and the full image editing options. **Where:** Site editor → click any linked image in the preview **How to test:** - Open a site where a section image is wrapped in a link (e.g. a logo or card image) - Click the image and confirm the "Replace image" action appears **Watch for:** Clicking a linked image and seeing only link options with no way to replace the image
When you fill in intake form fields with catalog-relevant content — such as pasting a product list or describing your services — those answers now route directly into the site's catalog collection system. Previously the data was saved only to the blueprint text and wasn't available for filtering, sorting, or the catalog panel. **Where:** Client portal → New site → Setup (intake form) → catalog-type fields (products, menu items, services, listings) **How to test:** - Start a new site for an e-commerce or restaurant business - In the intake form, paste a list of products or menu items in the relevant field and submit - After generation, open the Content tab and confirm the items appear in the Collections section **Watch for:** Intake answers disappearing instead of saving to collections; items appearing in blueprint text but not in the Collections tab; duplicate entries created if the form is submitted more than once
Answers entered in the blueprint intake form were sometimes lost on submit; they now persist correctly every time. **Where:** Client portal → New site → Setup (blueprint intake form) **How to test:** - Start a new site and fill in the intake form questions - Submit and confirm your answers are reflected in the blueprint **Watch for:** Answers reverting to defaults or disappearing after submit
Adding multiple pages, switching designs, finalizing, or restoring a version no longer automatically reshuffles your navigation menu. Instead, a new "Suggest with AI" button in the Navigation settings lets you review AI-proposed placements for any pages not yet in the menu — with checkboxes to accept or skip each suggestion — before anything changes. **Where:** Client portal → site editor → Settings → Navigation → "Suggest with AI" button **How to test:** - Open a multi-page site and add a new page — confirm the header nav does not automatically change - Go to Settings → Navigation and click "Suggest with AI" - A list of placement suggestions should appear (header, dropdown, footer, or skip) with a reason for each - Check or uncheck suggestions and apply — only the selected pages should be added **Watch for:** "Suggest with AI" button not appearing; suggestions applying without confirmation; existing nav items being reordered or removed when suggestions are applied
A new Catalog tab (database icon) has been added to the design assistant panel, giving you a dedicated place to manage product, service, or menu collections without leaving the editor. From here you can add items one by one, import a CSV, generate AI-powered sample content in one click, or open the full item table. **Where:** Site editor → design assistant panel (right rail) → Catalog tab (or press 6) **How to test:** - Open a site in the editor and look for the database icon in the design assistant right rail - Click it to open the Catalog tab - Try "Generate samples" to auto-populate starter items, or click "+ Add Item" to create one manually - For catalog-style sites (restaurants, shops, services), an empty-state prompt should appear when no collections exist yet **Watch for:** Tab not appearing in the panel; "Generate samples" producing no items or an error; the Add Item slide-over not opening
Catalog detail pages (e.g. /products/silk-saree or /menu/grilled-salmon) now render correctly in the preview iframe without needing to publish the site first, so you can review how individual items look during the build phase. **Where:** Client portal → site editor → preview iframe → navigate to a catalog detail URL **How to test:** - Open a site with a catalog collection that has at least one item and a detail-page template - In the preview, navigate to a detail URL like /products/[slug] - The item's detail page should render correctly with its content — no 404 **Watch for:** Detail pages returning 404 in preview even when a template and items exist; preview showing the wrong item when two collections share a slug pattern; preview falling back to the home page instead of the detail page
Published product and service detail pages now fetch the latest price, stock count, and status automatically on each page load — so owner edits to a product's price or availability reach visitors within a minute without requiring a republish. **Where:** Any published e-commerce site → product or service detail page (e.g. /products/silk-saree) **How to test:** - Publish a site that has catalog items with prices or stock counts - Update an item's price in the Content tab - Open the live published detail page — the new price should appear within 60 seconds (CDN cache window) without republishing **Watch for:** Detail pages still showing stale prices after a content update; pages that 404 on /products/[slug] paths; the hydration script causing layout shift or flickering on load
When replacing images via the image library, the site preview was not refreshing to show the new images even though they had been saved. The preview now updates instantly after an image replacement. **Where:** Site editor → Image library → Replace / Regenerate image **How to test:** - Open a site, open the image library, and replace an image - Confirm the preview updates immediately to show the new image without a manual refresh **Watch for:** Preview still showing the old image after replacement, or requiring a page reload to see changes
On sites with multiple saved variations, swapping an image via the editor or AI chat would appear to succeed but the old image would reappear on the next load. The editor was reading and writing images from the wrong content layer, so the old image kept winning at render time. **Where:** Site editor → image swap via AI chat, annotate tool, or image library **How to test:** - Open a site that has been through the design-selection step (multiple variations exist) - Replace any image (e.g. ask the AI to "change the hero image to this" or use the image picker) - Reload the page — the new image should persist, not revert to the original **Watch for:** Image appearing to apply in the editor but reverting after refresh; "applied" confirmation with no visible change on the page
When you restored a page from version history, the page was disappearing from the header navigation even though its content was correctly restored. The restore operation now re-adds the page to its original nav slot. Also, the AI nav suggestion panel now shows human-readable page names like "Our Services" instead of the internal code name "OurServices". **Where:** Client portal → site editor → History → restore a page; Settings → Navigation → Suggest with AI **How to test:** - Open a multi-page site, note which pages are in the header nav - Restore an older version of one of those pages from the History panel - Confirm the page still appears in the header navigation after the restore **Watch for:** Restored pages disappearing from navigation; nav suggestion panel showing CamelCase internal names instead of readable labels; "Suggest with AI" failing with a 500 error on older sites
When you restored a previous version of a single page (e.g. your About page), the restore operation was silently replacing every page in the site instead of only the one you selected. This only affected multi-page sites in the extracted/editor phase — single-page sites were not affected. **Where:** Client portal → site editor → History panel → select a page version → Restore **How to test:** - Open a multi-page site that has version history - Make a visible change to one page (e.g. the About page), then go to History and restore an earlier version of that page - Check that other pages (Contact, Services, etc.) are unchanged - The restored page should reflect the historical version; all other pages should stay as they were **Watch for:** Multiple pages reverting unexpectedly after restoring a single page; the history panel showing a full-site restore entry when only a page restore was requested
When starting a new site and typing just a business name, the AI was bundling two questions into a single reply — "what kind of business is this?" followed immediately by "do you have an existing website?" — with chips that only answered the second question. This left the first question unanswered, making the chat feel broken. The AI now asks one question at a time and the existing-website question is handled by the intake form instead. **Where:** Dashboard → new site → business name input → AI chat **How to test:** - Start a new site, type only a business name (e.g. "Sunrise Bakery"), and submit - The AI reply should ask exactly one question (what kind of business) with relevant chips - No "Do you have an existing website?" text or chips should appear in that turn **Watch for:** Two questions still appearing in the first AI reply; chips answering the wrong question; the chat getting stuck waiting for an answer that was never asked
When building a site based on an existing website, the original brand name, copyright notices, and other identifying text are now automatically removed and replaced with the new business's information. Previously, cloned sites could end up with footer text like "© Vlisco 2026" or hardcoded section headings from the source site that were invisible to editing. **Where:** Site generation → clone-from-URL flow; also applies to any site where the AI embedded source-brand text during generation **How to test:** - Generate a new site using a competitor's or reference site URL as inspiration - Check the footer, hero, and about sections — the original brand name should not appear - The copyright in the footer should reflect the new business name **Watch for:** Original brand name still visible in the footer copyright line; "© [source brand] 2026" text surviving into the published site; sections that appear read-only but contain the source site's copy
The "Preview" button on the templates gallery now opens a fully rendered, animated, shareable preview page instead of a flat server-rendered snapshot. The same engine that powers the in-editor preview now serves the public preview, so animations, fonts, and interactions all play exactly as they will on a finished site. **Where:** Templates page → hover any template → click Preview. Admin → Gallery → click Preview on any template. **How to test:** - Open the public templates gallery, click Preview on a template with animations — confirm animations play and the preview URL looks like `/preview/<token>?bare=1` - Copy the preview URL and open it in an incognito window — confirm it loads without auth - In the admin gallery, click the "Open in new tab" icon on a template — confirm it opens the same kind of live preview - Approve or feature a brand-new template — confirm its Preview link works immediately **Watch for:** Preview links that 404 (token missing — the API returns null for `preview_token` in that case and the UI falls back to the old SSR snapshot URL); animations that don't play; the bare URL showing the preview toolbar instead of a clean view.
When you uploaded an image and asked the AI to use it as the hero background, sometimes the chat said "done" but the image on the page hadn't actually changed. We added three layers of protection so this no longer slips through. **Where:** Site editor → chat or annotate the hero → attach an image → "change/replace/insert as background" **How to test:** Open a site, click the hero overlay (the empty dark layer over the background), attach a fresh image, ask "change the hero image to this". The image should swap on the next refresh. If for any reason the AI didn't reach the right element, you'll now see a clear toast telling you so instead of a misleading "applied" message. **Watch for:** "Applied" messages where the image didn't actually change; toast warnings appearing on perfectly good edits (false positives); images landing in the wrong section.
Fixed an issue where the version history timeline showed only one dot ("Current") even after multiple edits, when the site was still in design-selection mode. **Where:** Site editor → Design Assistant panel → Version timeline **How to test:** Open a site that's still in design-variation selection, make a few content edits, then check the version dots in the Design Assistant panel — past versions should be visible and restorable. **Watch for:** Empty version timelines after content edits; missing entries for past refinements; restore options not appearing.
Clicking "+ New Site" from the dashboard now jumps directly into the AI chat where you describe your business, skipping the extra name-entry modal that was an unnecessary friction point. **Where:** Dashboard → "+ New Site" button **How to test:** - Click "+ New Site" — confirm the chat opens immediately without a modal - Complete the chat flow and confirm the site is created with the name the AI infers from the conversation **Watch for:** Modal reappearing; site created without a name
Typing or updating a business location in the setup wizard no longer caused the location to be appended multiple times — the field now correctly replaces the previous value on each update. **Where:** Site setup wizard → business information step → location field **How to test:** - Start a new site in the wizard and type a city name in the location field - Pause, then type a different city — confirm only the new city is saved, not both concatenated **Watch for:** Location field showing "New York, Los Angeles" when only "Los Angeles" was entered as an update
When you publish a site with a product or content catalog that has categories, a dedicated landing page is automatically generated for each category — complete with filtered items and SEO-friendly URLs. **Where:** Client portal → publish → category pages (e.g. /shop/accessories) **How to test:** - Set up a products catalog with at least two categories and publish the site - Navigate to /shop/[category-name] on the published site and confirm it shows only items from that category **Watch for:** Category pages returning 404 after publish; items from all categories appearing on a single category page
Items in catalog collections (products, properties, etc.) can now be assigned to categories using a tree picker that shows the full parent-child hierarchy. Cyclic parent chains are handled gracefully and shown as root categories. **Where:** Site editor → Features → any collection → item editor → category field **How to test:** - Create a few nested categories (e.g. Clothing → Men's → Shirts) - Open a product and click the category field — a tree drawer appears with the full hierarchy - Assign the product to a leaf category and confirm it saves correctly **Watch for:** Tree picker showing a flat list instead of nested; circular category relationships causing infinite loops
Updating an image in the site editor now preserves all other content fields on the page. Previously, swapping an image could silently revert text or other media on the same section back to an earlier state. **Where:** Site editor → any section with images → image swap **How to test:** - Edit a text field on a page, then swap an image on the same page - Confirm the text edit is still present after the image change - Check multi-image sections to confirm only the targeted image changes **Watch for:** Other content fields reverting after an image is changed; image change not saving
The AI chat no longer abruptly ends when an internal site-creation step fails in the background. The conversation continues as a standalone session, and the site is linked once the issue resolves — preventing users from losing their intake conversation. **Where:** Site editor → AI chat (new site flow) **How to test:** - Start a new site chat and simulate a backend error during site creation - Confirm the chat remains usable and the existing messages are preserved **Watch for:** Chat interface going blank or showing an error that prevents further messaging
The wizard chat now opens with a single greeting bubble and the text input clearly visible, replacing the previous cluttered empty state that left many users unsure where to type. **Where:** Site editor → AI chat tab (new site or new conversation) **How to test:** - Start a new site and open the Chat tab - Confirm one greeting message appears and the text input is immediately accessible **Watch for:** Multiple overlapping bubble messages; input field hidden below the fold
When the AI generation service is temporarily overloaded, users now see a plain-language message explaining what happened and what to do next, instead of a raw technical error code. **Where:** Site editor → Generate button → any generation error state **How to test:** - Trigger a generation during high load and confirm the error message is readable and actionable - Retry from the error state — generation should resume cleanly **Watch for:** Raw API error codes or model names appearing in the error text
Generating a new design for a cloned site now produces a fully distinct V2 design instead of inheriting the original's layout. Images are also deduplicated during generation so the same stock photo no longer appears multiple times across sections. **Where:** Client editor → Generate new design (for cloned sites) **How to test:** - Clone an existing site and trigger a new generation - Confirm the generated design is visually distinct from the source - Confirm no image appears more than once across different sections **Watch for:** Clone generation producing the same layout as the original; identical images in hero and gallery sections
The site clone feature now uses a full browser renderer to capture source sites, so content that loads dynamically with JavaScript (menus, modals, lazy-loaded sections) is included in the clone instead of appearing blank. **Where:** Site editor → Clone site **How to test:** - Clone a modern site that uses a JavaScript framework (React, Vue, etc.) - Confirm the cloned content includes dynamically loaded sections like navigation menus and hero text **Watch for:** Clone producing empty pages or only capturing the shell HTML without dynamic content
Opening a collection item detail panel in the editor now updates the URL, so refreshing the page or sharing the link reopens the same item instead of returning to the collection list. **Where:** Client editor → Content → click a collection item → detail panel **How to test:** - Open the content manager, click into a collection item - Copy the URL from the browser address bar and open it in a new tab - Confirm the same item opens directly **Watch for:** URL not updating when an item is opened; sharing the URL landing on the collection list instead of the specific item
The Collection Manager (the page that lists every row of one content type — products, properties, menu items, etc.) got a full Phase 2 pass. You can now edit cells in place, drag rows to reorder them, export to CSV, generate draft items from a short brief, group items into categories, and ship variants for products that sell in size/color combinations. **Where:** Site editor → Features → open any content type (Products, Properties, Menu Items, Rooms, etc.). Categories appear automatically for sites in catalog verticals. **How to test:** - Open any collection. Click a title or price cell — it becomes an inline input. Edit and tab away to save. - Change the sort dropdown to "Manual order". A grip handle appears on each row; drag to reorder. - Click "Export" in the toolbar — downloads a CSV with every row of the collection. - Click "Import" → upload a CSV → map columns. Reopen the dialog later — your mapping is pre-filled. - On an empty collection, the new empty state offers "Add manually", "Import from CSV", and "Generate from a brief". The brief generator proposes drafts you review before they save. - In a catalog vertical, open the Categories collection. Add a few categories. Open a product. The drawer's category tree picker lets you assign the product to one or more categories. - For products, the editor now has a "Variants" tab. Define axes (size, color) and a grid appears with per-cell SKU/price/stock plus bulk-apply controls. - Publish a site with categories — each category gets its own `/categories/<slug>` landing page with a grid of member items. **Watch for:** Bulk-apply on the variant grid only fills empty cells when the value is non-empty; clearing a cell sets it to blank intentionally. Drag-and-drop only writes new `sort_order` while in "Manual order" view — switching back to "Created" or "Updated" sorts shows the natural order again. Brief generation drops items the AI returns that don't carry a title.
When you make a design change in the site editor that would apply across all pages built from a template, a confirmation dialog now shows exactly how many pages would be affected before applying. This prevents accidental bulk overwrites on catalog-style sites with hundreds of detail pages. **Where:** Site editor → AI chat refinement on a template page **How to test:** - Open a catalog site with 10+ item detail pages - Ask the AI to change the layout or colors of the current template page - Confirm a dialog appears showing the affected page count before proceeding **Watch for:** Dialog appearing for single-item text edits that don't need confirmation; dialog not appearing for genuine bulk template changes
When importing a CSV into a content collection, the column-to-field mapping you set is now saved and automatically applied the next time you import from a file with the same structure — so you don't have to re-map every import. **Where:** Client portal → Content → Import CSV → column mapping step **How to test:** - Import a CSV and manually map the columns to fields, then complete the import - Import a second CSV with the same column headers - Confirm the column mapping is pre-filled from the previous import **Watch for:** Column mapping not pre-filling on second import; wrong mapping being applied from a different file structure
Multiple UX gaps in the customer portal are now resolved: email verification works end-to-end, session revocation shows correctly in the admin panel, and password reset flows complete without errors. **Where:** Customer portal → sign-in / register / verify email; Admin → Sites → Customer Accounts **How to test:** - Register a new customer portal account and verify the confirmation email arrives and verifies correctly - Log in as an admin, navigate to a site's Customer Accounts settings, and revoke a customer session - Trigger a password reset and confirm the link works end-to-end **Watch for:** Verification emails not arriving; session list not updating after revoke; password reset link expiring immediately
Magic link sign-in now correctly routes returning customers to their account instead of showing a blank page, device recognition persists across logins, and new accounts created through the portal are set up with the correct initial status. **Where:** Customer portal → sign in → magic link; Customer portal → returning visit **How to test:** - Click a magic link from an email on a new device and confirm you are logged in and redirected properly - Log in twice on the same device and confirm you are recognized without re-authenticating - Register as a new portal customer and confirm the account is accessible immediately **Watch for:** Magic link redirecting to an error page; device not recognized on second visit; new account inaccessible after registration
Site owners can now enable multiple login methods for their customer portal — Google sign-in, email magic links, and email + password — and choose which ones their customers can use. **Where:** Site editor → Settings → Customer Accounts **How to test:** - Open a site's settings and navigate to Customer Accounts - Toggle login methods on/off (Google, magic link, password) - Visit the published customer portal and confirm only enabled methods appear - Enable Google sign-in and verify the OAuth flow completes correctly **Watch for:** Settings not saving; Google OAuth showing an unbranded consent screen (expected without custom credentials); password reset emails not sending
Switching between design variations in the site preview now completes correctly even when a previous switch was still in progress, preventing the preview from getting stuck in a loading state. **Where:** Site editor → design selection → variation thumbnails **How to test:** - Generate a site with multiple variations - Rapidly click between variations and confirm the preview always settles on the selected one - Switch variations during a slow connection and confirm no infinite spinner **Watch for:** Variation preview not updating after clicking a thumbnail; spinner that never resolves
The disabled state of enrollment buttons (e.g. on course enrollment or waitlist sections) now correctly shows a solid gray background instead of becoming invisible or transparent. **Where:** Published site → course enrollment or waitlist section → disabled enroll button **How to test:** - Preview a site with a course enrollment component where enrollment is closed or at capacity - Confirm the disabled button is visibly grayed out rather than invisible or unstyled **Watch for:** Disabled button appearing invisible or having the same color as an active button
Editing in the site preview now requires a double-click on text or an image, replacing the old single-click gesture that was easy to trigger accidentally. Annotation mode is also deferred until you actually enter the edit canvas, so the preview loads faster. **Where:** Site editor → preview canvas **How to test:** - Open any site in the editor and double-click on a text element — an edit popover appears - Single-clicking navigates to links as expected (no accidental edits) - Double-click an image to swap it **Watch for:** Single-click still triggering edit mode; double-click not registering on mobile/trackpad
Items in a content collection can now be reordered by dragging and dropping rows in the content manager — the new order is immediately saved and reflected on the published site. **Where:** Client portal → Content → select a collection → drag the handle on any row **How to test:** - Open a collection with multiple items - Drag a row to a new position and release - Confirm the order saves and the collection displays items in the new order on the site **Watch for:** Drag handle not appearing on rows; items snapping back to original position after dropping; order not persisting after page refresh
Any field in a content collection — name, price, description, and more — can now be edited by clicking directly in the cell in the collection table, without needing to open the item detail panel. **Where:** Client portal → Content → select a collection → click any cell to edit **How to test:** - Open a collection with items - Click on a title cell and type a new value - Press Enter or click away — confirm the change saves immediately **Watch for:** Cell becoming editable but changes not saving; edit mode activating on non-editable cells like IDs or computed fields
You can now export any content collection (products, services, menu items, etc.) as a CSV file directly from the content manager toolbar. **Where:** Client portal → Content → select a collection → Export CSV button in the toolbar **How to test:** - Open a collection with several items and click Export CSV - Open the downloaded file and confirm all items and their fields are present **Watch for:** Export button missing; downloaded file being empty or missing columns; special characters breaking the CSV format
Sites in fashion, café, wedding, and similar industries now correctly generate catalog sections and product listings during initial generation, matching what retail and e-commerce sites produce. **Where:** Site generation → industries: fashion, café, wedding, and related categories **How to test:** - Generate a new site for a fashion boutique or wedding venue - Confirm the generated site includes a products or catalog section with appropriate placeholder items **Watch for:** Fashion or café sites generating without any product/catalog section; catalog section appearing empty on first generation
Empty content collections now show a setup wizard that lets you describe your inventory in plain text — the AI then generates a full set of starter items, so you have realistic content to work with immediately instead of a blank table. **Where:** Client portal → Content → any empty collection → "Generate from brief" button **How to test:** - Open a new site with an empty products collection - Click the "Generate from brief" button and type a short description (e.g. "10 artisan coffee blends") - Confirm the AI generates a full set of items with titles, descriptions, and prices **Watch for:** Generate button missing on empty collections; generated items missing required fields; wizard closing without generating
The wizard no longer shows a "1 thing missing" dead-end that prevented generation even when the AI had gathered enough information to proceed. If a plan exists, the Generate button is now enabled. **Where:** Site editor wizard → Generate button **How to test:** - Start a new site, complete the chat, confirm a plan appears in the Plan tab - Confirm the Generate button is enabled and clickable immediately **Watch for:** Button remaining disabled or showing a stale "missing" checklist after plan completion
Clicking text in the preview to edit it no longer triggers unintended edits while the editor is still loading — text edit mode now only activates after the annotation overlay is fully ready. **Where:** Client editor → site preview → click to edit text **How to test:** - Open the site editor and quickly click on a text element while the preview is still loading - Confirm no unintended edits or edit mode activations occur during load **Watch for:** Edit mode appearing to be active but not responding; accidental text edit triggers on page load
The AI intake form has been restructured with cleaner section groupings, less noisy labels, and images already pre-filled from any assets you uploaded earlier so you don't have to re-add them. The entire form is now optional — you can skip it and go straight to Generate if the chat already covered everything. **Where:** Site editor wizard → Intake tab **How to test:** - Start a new site, upload a logo in the chat, then open the Intake tab — logo should appear pre-filled - Skip the intake form entirely and click Generate — confirm it proceeds without requiring form completion - Check that audience options aren't repeated between sections **Watch for:** Pre-filled assets not appearing; required-field errors blocking generation after skipping the form
The AI-powered intake form now determines which questions are most important for your business type and surfaces them first, rather than following a fixed order — leading to more relevant site content from the start. **Where:** Site setup → intake form conversation **How to test:** - Start a new site for a restaurant and complete the intake form - Confirm questions about menu, hours, and location appear before generic branding questions **Watch for:** Generic or irrelevant questions appearing first; the form asking for information that doesn't match the business type
The up/down arrow buttons for reordering pages in the Plan tab were missing after a recent update. They are now restored and work as expected. **Where:** Site editor wizard → Plan tab → page list **How to test:** - Open the Plan tab and confirm up/down arrow buttons appear next to each page - Click an arrow and verify the page moves to the new position **Watch for:** Buttons still absent; clicking move triggers an error
Collection items (products, services, menu items) can now have structured variants — for example, a T-shirt with size and color options. The new variants grid editor in the content manager lets you define variant axes and set stock and pricing per combination. **Where:** Client portal → Content → select a collection item → Variants tab **How to test:** - Open the content manager for a products collection - Select an item and navigate to the Variants tab - Add a "Size" axis with values S, M, L and confirm the grid generates all combinations - Set a price for each variant and save **Watch for:** Variant grid not generating combinations; price changes not saving; variants tab missing on collection items
Preference cards (style, palette, layout questions) in the site setup chat now correctly appear after the AI gathers follow-up information, so users get prompted for their preferences at the right moment. **Where:** New site flow → Chat-first setup conversation **How to test:** - Start a new site via the chat flow - Answer the opening prompt — confirm preference cards appear within the first 2-3 turns - Complete clarification turns and verify preference cards surface after turn 2 or 3 **Watch for:** Preference cards never appearing; cards appearing before the AI has gathered enough context
Catalog site owners can now see exactly which item they're editing when working on a template page, choose a different item to preview via a chip in the top-left of the editor canvas, and get a confirmation dialog before making design changes that would affect many items at once. **Where:** Site editor → any template page (e.g. a property detail or product detail page) **How to test:** - Open a catalog-type site (real estate, hotel, restaurant, or e-commerce) in the site editor - Navigate to a detail template page — a "Editing: [item name]" chip appears in the top-left - Click the chip to switch to a different item and confirm the preview updates - Try a chat refinement that changes the overall design — confirm a confirmation dialog appears showing how many items would be affected **Watch for:** Chip not appearing on template pages; row list not loading; confirmation dialog appearing for single-item text edits that should not require it
When editing a catalog site, the item you selected in the row picker (e.g. "Editing: Blue Sneakers") now stays selected as you switch between template pages in the editor, so you don't have to re-select on every navigation. **Where:** Site editor → catalog template pages → row picker chip **How to test:** - Open a catalog site with multiple template pages - Select a specific item via the row picker chip - Navigate to a different template page — confirm the same item remains selected **Watch for:** Selection resetting to default on page navigation; row picker chip disappearing after navigation
Multi-chip fields in the site intake form now include a "Select all" toggle so you can pick every option in one click. Inspiration site URLs are now also shown as clickable thumbnails you can open in a new tab to review before choosing. **Where:** Site editor → AI intake form (style preferences, services, audience chips) **How to test:** - Start a new site and reach the intake form — click "Select all" on a multi-option chip field - Confirm all chips are toggled; click again to deselect all - Hover over an inspiration URL — confirm a thumbnail or link button appears and opens the site **Watch for:** "Select all" not deselecting; inspiration thumbnails not loading
The site setup chat no longer shows a preference card prompting for your business name when you have already provided it. The chat also avoids asking questions that were already answered in an earlier intake form step. **Where:** Site setup → blueprint chat → initial conversation **How to test:** - Start a new site, complete the wizard with a business name, then enter the chat - Confirm the chat does not ask for your business name again - Answer a question in the form step, then confirm the chat does not ask the same question **Watch for:** Chat repeatedly asking for already-provided information; duplicate questions between the form and chat
Answering questions in the site setup intake form no longer causes the form to hang without advancing — previously uploaded assets are now correctly pre-loaded, and the form reliably moves to the next step. **Where:** Site setup → intake form conversation **How to test:** - Start a new site and complete several intake form questions in sequence - Confirm the form advances after each answer without freezing - Confirm previously uploaded logos or photos appear as pre-selected in the assets step **Watch for:** Form freezing after an answer with no spinner or error message; asset uploads not appearing as pre-selected options
Several reliability issues in the site clone pipeline have been resolved: duplicate images no longer appear when a cloned site is regenerated, and the V2 generation path now runs correctly on cloned sites to produce styled designs instead of plain layouts. **Where:** Site editor → Clone site → Generate **How to test:** - Clone a site and run Generate — confirm the output uses a styled V2 design - Regenerate the clone — confirm no duplicate images appear in the result **Watch for:** Clone generation defaulting to an unstyled V1 layout; image duplication after multiple generate runs
When generating a new site, any images you have already uploaded (logos, photos, product images) are automatically detected and incorporated into the generated design instead of being replaced with generic stock photos. **Where:** Client editor → Generate site → generated output **How to test:** - Upload a logo and a few photos to a site, then trigger a generation - Confirm the generated design uses your uploaded images rather than stock placeholders **Watch for:** Uploaded assets not appearing in the generated site; stock photos overriding custom uploaded images
When you provide inspiration URLs during site creation, the AI now visually analyzes those sites to extract specific design choices (color palette, typography feel, layout density), producing a richer brief that results in generated sites that more closely match the look you had in mind. This also applies when cloning an existing site. **Where:** Site editor → AI chat → inspiration URL input → Generate **How to test:** - Start a new site and add a polished competitor's URL as an inspiration reference - Generate the site and compare the color palette and layout style to the inspiration **Watch for:** Generation failing when inspiration URL is provided; style bearing no resemblance to the reference
The site preview now retries loading if the initial fetch fails right after generation, preventing the blank preview screen that sometimes appeared even when generation succeeded. **Where:** Client editor → after generating a site → preview panel **How to test:** - Generate a new site and watch the preview load - Confirm the preview shows the generated design without requiring a manual refresh **Watch for:** Preview remaining blank after generation completes; needing to refresh to see the generated site
Sites where certain content fields like the site name or phone number had not been filled in would crash during preview generation and show a permanent "Loading preview" spinner. The preview engine was returning an empty array for any missing field, and AI-generated code's defensive fallbacks (e.g. `siteName || 'Brand'`) treated that as a valid value, causing a crash when it tried to call text methods on it. **Where:** Site editor → preview panel; site gallery thumbnails **How to test:** - Open a newly generated site where the business name or contact details were not provided - The preview should load and display the site with sensible fallback text (e.g. "Brand") rather than hanging on "Loading preview" - Gallery thumbnails for such sites should also render correctly **Watch for:** "Loading preview" spinner that never resolves; blank thumbnails in the gallery for sites with sparse content
The site setup wizard crashed for some users who had previously uploaded assets — this is now fixed and the wizard completes normally with those assets pre-selected. **Where:** Site setup wizard → assets step (when existing uploads are present) **How to test:** - Upload a logo to a site, then start a new site setup on the same account - Confirm the wizard reaches the assets step without crashing and shows the previously uploaded logo **Watch for:** White screen or JavaScript error in the browser console during the assets step
Elements with sticky positioning (navigation bars, floating headers) now behave correctly in the site preview editor instead of scrolling away or appearing misplaced. Design-switching between variations also no longer causes preview race conditions. **Where:** Client editor → site preview → scroll behavior; Client editor → switching between design variations **How to test:** - Open the site editor and scroll down — confirm a sticky header stays visible at the top - Switch between design variations rapidly and confirm the preview settles on the correct design without flashing **Watch for:** Sticky headers scrolling out of view in preview; preview showing the wrong variation after switching
Customer portal password handling now checks against known breached passwords, enforces minimum strength requirements, and adds rate limiting on login attempts to protect accounts from credential-stuffing attacks. **Where:** Customer portal → account settings → change password **How to test:** - Try setting a weak or commonly breached password — confirm it is rejected with a clear reason - Attempt multiple rapid logins with a wrong password — confirm rate limiting kicks in **Watch for:** Legitimate strong passwords being rejected; no error message on weak password submission
Catalog detail page templates (product, property, room, etc.) now compile with the selected item's data baked in, so the preview in the editor shows accurate names, prices, and images instead of placeholder fallback content. **Where:** Site editor → any template detail page preview **How to test:** - Open a catalog site with a product detail template - Select a specific product via the row picker - Confirm the preview shows that product's real name, price, and images **Watch for:** Preview still showing placeholder text when real item data exists; preview blank after selecting a row
Clicking to preview a template on the templates gallery now opens it in a new browser tab for a full-page view, replacing the small inline modal that previously loaded the preview. **Where:** Templates page → click any template → Preview **How to test:** - Navigate to the templates gallery - Click the preview button on any template - Confirm a new tab opens with the full template preview **Watch for:** Preview opening in the same tab; modal still appearing instead of new tab
A bug where content edits made through the AI chat (such as updating copy or changing section text) were silently dropped instead of being persisted to the site has been fixed. Changes now save correctly every time. **Where:** Site editor → AI chat → any content refinement **How to test:** - Ask the AI to change the hero heading text - Refresh the page and confirm the updated text is still showing **Watch for:** Content reverting to the old text after a page refresh; no confirmation that the change was saved
Interactive components (accordions, carousels, booking forms, checkout, quiz, and 20+ others) now correctly inherit text color from the surrounding theme instead of showing invisible or mismatched text in certain color schemes. **Where:** Published site — any section using forms, accordions, tabs, carousels, pricing toggles, or checkout components **How to test:** - Preview or publish a site with a dark background section containing an accordion or form - Confirm all text inside the component is readable and matches the expected color **Watch for:** Text appearing invisible or white-on-white inside interactive components on dark backgrounds
When the AI sends a reply containing a chip with an unfilled placeholder (e.g. "[your business name]"), the interface now automatically converts it into an input request so you can fill in the value. Previously, leaving these blank would silently stall the conversation flow. **Where:** Site editor → AI chat → any conversation with placeholder chips **How to test:** - Trigger a chat response that includes a chip requiring user input - Confirm the chip prompts for the missing value instead of blocking further messages **Watch for:** Placeholder chip appearing but no input being requested; chat flow not advancing after filling in the chip
Users who are members of more than one organization were seeing intermittent 500 errors on generation, chat, and voice features due to an ambiguous database lookup. This is now resolved — the correct organization is always selected based on the site being edited. **Where:** Any site feature (generate, chat, voice) when the logged-in user belongs to multiple organizations **How to test:** - Log in as a user who is a member of two or more organizations - Open a site and trigger generation or a chat message — confirm no 500 error occurs **Watch for:** Operations succeeding for single-org users but failing for multi-org users
Sites generated using the V2 design flow now correctly load all page files into the editor immediately after generation completes, without requiring a manual refresh. **Where:** New site flow → generate → site editor (V2 path) **How to test:** - Generate a new site using the V2 path - Confirm all pages appear in the editor without refreshing - Open individual pages and verify content is present **Watch for:** Blank editor after V2 generation; pages missing until a refresh; content appearing then disappearing
Detail pages for catalog sites (e-commerce, hotels, restaurants) now automatically render a variant selector grid — letting visitors pick size, color, room type, or any other axis you defined — without any custom code. **Where:** Published catalog site → any item detail page with variants defined **How to test:** - On a catalog site, add variants to a product (e.g. size S/M/L, color Red/Blue) - Publish the site and open the product detail page - Confirm a variant grid appears and selecting a cell updates the displayed price/stock **Watch for:** Grid not appearing when variants exist; selection state not updating the displayed info
The Version History panel is now correctly wired into the Settings view under the "Version History" section, so you can browse and restore previous site states without leaving the settings flow. **Where:** Site editor → Settings → Version History section **How to test:** - Open the settings panel and scroll to the Version History section - Confirm past versions are listed and a "Restore" action is available **Watch for:** Version History section appearing empty or not loading past versions
The voice chat assistant now automatically detects and responds in the visitor's language, and the cold-start delay when first activating voice has been reduced significantly. **Where:** Site → voice chat widget → speak in any supported language **How to test:** - Open a site's chat widget with voice enabled and speak in a language other than English - Confirm the assistant responds in the same language - Activate voice chat for the first time and note the startup time is noticeably faster **Watch for:** Assistant responding in English despite visitor speaking another language; voice chat taking more than 3 seconds to start
The voice-based intake flow now respects the language detected in the conversation instead of always defaulting to English, enabling non-English speakers to describe their business naturally in their preferred language. **Where:** Site editor → AI chat (voice mode) **How to test:** - Start a new site using voice mode and speak in French, Spanish, or another language - Confirm the AI responds in kind and the resulting plan reflects the correct language **Watch for:** AI falling back to English mid-conversation; plan content appearing in the wrong language
Opening a site in the editor briefly showed "Site Not Found" for about 100 ms before the site loaded, caused by a race condition when two fetches ran simultaneously. The site now loads directly without the false error flash. **Where:** Client portal → any site editor URL **How to test:** - Navigate directly to a site editor URL (`/client/<id>/site/new?siteId=<id>`) - Confirm the site loads without a momentary "Site Not Found" message **Watch for:** "Site Not Found" still flashing on fast connections; legitimate not-found pages broken
The analytics dashboard was returning 0 for all metrics even on sites with real traffic because required Google Analytics custom dimensions weren't registered, causing the GA4 API to return empty results. Custom dimensions are now registered automatically so visitor counts, page views, and other stats appear correctly. **Where:** Client portal → Site editor → Analytics tab **How to test:** - Open the Analytics tab on a site that has had some traffic - Confirm visitor counts, page views, and other metrics show non-zero values - Check that the date range selector and per-page breakdowns work **Watch for:** All metrics still showing 0 after the fix; "no data" state showing on sites with known traffic
Redeploying a site was silently stripping the Google Analytics script from every page, causing analytics to stop recording data after any redeploy. This is now fixed — redeploys carry the full analytics configuration just like a fresh publish. **Where:** Client portal → Settings → Domain / Redeploy action **How to test:** - Enable Google Analytics on a site and publish it - Trigger a redeploy - Confirm analytics events still appear in Google Analytics after the redeploy **Watch for:** Analytics dashboard showing 0 visitors or events after a redeploy on a previously-working site
Several mobile UX issues in the blueprint chat are resolved: the chat input is now full-width with the send button below it (not cramped beside it), the site plan panel opens automatically when your plan is ready, location questions are now asked when needed, and the assistant now says "tap Review & Generate" instead of directing you to a desktop-only panel. **Where:** Client portal → Create new site → Blueprint chat (on a mobile device) **How to test:** - Open the blueprint chat on a phone or narrow window - Describe your business and confirm the chat input is large and comfortable to type in - Complete a few exchanges and confirm the plan sheet opens automatically once a plan is generated - Confirm a location question appears if your business type needs one **Watch for:** Input still cramped or send button missing on narrow screens; plan panel not opening automatically after AI produces a plan
The Page Type selector in the Brief tab has been simplified from two layers of industry-specific sub-types down to a clear binary choice: "Multi-page site" or "Single landing page." The header wording now reflects that most fields are captured automatically through the chat, so the brief feels like a summary rather than a form to fill in manually. **Where:** Client portal → site editor → Brief tab → Page Type **How to test:** - Open the Brief tab on a site in the design assistant - Confirm the Page Type field shows two options: "Multi-page site" and "Single landing page" - Confirm there are no sub-type dropdowns after selecting either option - Confirm the Brief header reads something like "Captured by chat" rather than instructions to click and edit **Watch for:** Page type still showing old sub-type lists; header wording unchanged; selection not saving
Several reliability issues with catalog-type sites have been fixed: detail pages now generate correctly for all catalog industries (not just the initially listed set), duplicate image uploads are rejected with a clear message, and hand-built pages are never overwritten by auto-generated detail pages during publish. **Where:** Site editor → catalog sites (real estate, hotel, restaurant, e-commerce, car dealership, education); Content → Images tab; Publishing **How to test:** - Generate and publish a catalog site — confirm all homepage grid links lead to live detail pages (no 404s) - In the content editor for a catalog site, try uploading the same image URL twice — confirm a duplicate warning appears instead of adding it - Create a manual page with a slug that matches a catalog item slug, then publish — confirm the manual page is preserved and not overwritten **Watch for:** Catalog grid links returning 404 after publish; duplicate images silently added to galleries; manually-created pages disappearing after publish
Each row in a catalog collection (products, properties, rooms, cars, events, courses) now gets its own dedicated URL page when the site is published — e.g. `/products/blue-widget` — so search engines can index individual items and visitors can link directly to them. **Where:** Publish your site via Client portal → Settings → Domain & Publish **How to test:** - Add a few items to a catalog collection (e.g. Products) - Publish the site - Visit `https://yoursite.com/products/<slug>` for each item - Confirm the detail page renders with the correct item data **Watch for:** Detail pages returning 404 after publish; items without a slug not appearing
Product, property, room, and vehicle catalog items can now hold a gallery of photos instead of a single image. Images support drag-and-drop reorder, a "primary" star to set the hero photo, alt text, and direct upload from the editor. **Where:** Client portal → Content tab → any catalog collection (Products, Properties, Rooms, Cars, etc.) → edit an item **How to test:** - Open a catalog item in the Content editor - Click the images field and upload two or more photos - Drag to reorder; star one as primary - Save and confirm the gallery appears on the published detail page **Watch for:** Upload failures on files over 15 MB; only JPEG, PNG, WebP, GIF, and AVIF are accepted
When generating a catalog-type site (real estate, hotel, restaurant, e-commerce, car dealership, or education), the AI now produces a detail page template alongside the homepage in the same generation pass — and sample content rows are seeded automatically so detail pages are ready to view and edit immediately. **Where:** Site generation → catalog-type industries; Site editor → Pages tab **How to test:** - Start a new site for a real estate or hotel business and generate designs - Open the generated site and navigate to the Pages tab — a detail template page (e.g. "Properties Template") should appear alongside the homepage - During the design-comparison step, confirm the detail template is visible as a browsable page in each variation - Publish the site and verify that individual detail pages are live and linked from the homepage grid **Watch for:** Detail template not appearing in the Pages list after generation; sample rows missing from the catalog content type; homepage grid links pointing to 404 pages after publish
Real estate, hotel, restaurant, ecommerce, car dealership, and education sites now automatically generate and publish a dedicated detail page for every listing in their catalog. Each page uses the AI-generated template and is populated with that listing's specific data, so visitors can browse to individual property, room, product, or course pages with a clean URL like /properties/sunset-villa. **Where:** Client portal → catalog-vertical site → Publish → published site detail pages **How to test:** - Open a catalog-vertical site (real estate, hotel, restaurant, ecommerce, car dealership, or education) - Add at least one listing in the site's content collection (e.g. a property or room) - Publish the site - Navigate to the published site and click through from the homepage grid to a listing detail page - Confirm the detail page shows that listing's specific content (title, description, images) - Confirm each listing has its own URL **Watch for:** Detail page links returning 404; all detail pages showing the same content; slugs colliding with hand-built pages
If the system could not link a new conversation to a site during startup, it previously left behind an orphaned chat that appeared to work in the current session but vanished on refresh. The connection is now retried more aggressively, and if it ultimately fails the user sees a clear error message instead of a silent dead-end — the message is preserved on the user's end so it can be sent again cleanly. **Where:** Client portal → new site wizard → first messages in the chat **How to test:** - Start a new wizard session and send a message - Confirm the message is saved and reappears on refresh - Confirm the Brief tab reflects the information shared in the chat after refreshing **Watch for:** Chat history disappearing on page refresh; messages sent in a session with no error but not present after reload
Single-clicking a static element in the site preview now automatically enters edit mode and selects that element, so you can start typing immediately without switching modes manually. Interactive elements like buttons and links continue to work normally. A hover outline hints at what's editable, and pressing Escape or clicking an empty area returns to preview mode. **Where:** Site editor → preview canvas (any text or content element) **How to test:** - Open the site editor with a generated site - Hover over a heading or paragraph in the preview — a subtle outline should appear - Click the element — confirm it enters edit mode and the element is selected - Type to change the text and confirm the change is applied - Press Escape and confirm you return to preview mode - Click a button or link and confirm it behaves normally (no edit mode) **Watch for:** Edit mode not entering on click; interactive elements accidentally entering edit mode; Escape key not returning to preview
Sites created by cloning an existing design were previously invisible on the dashboard Designs tab and at risk of being silently deleted by the overnight cleanup job. Cloned sites now correctly appear as design-type sites on the dashboard immediately after cloning. **Where:** Dashboard → Designs tab; Site editor → Clone site **How to test:** - Clone an existing site from the site editor - Return to the dashboard and confirm the cloned site appears in the Designs tab - Confirm the cloned site can be opened and edited normally **Watch for:** Cloned site missing from the Designs tab; cloned site disappearing within 24 hours; cloned site opening in the blueprint planner instead of the design editor
Two new site components are now available: a contact button (WhatsApp, SMS, call, email, social, or custom URL) with built-in click tracking, and a floating contact stack that groups multiple contact options in a responsive bubble column. Every tap is logged to the engagement dashboard. **Where:** AI-generated sites and refinements — ask the AI to "add a WhatsApp button" or "add a floating contact bar" **How to test:** - Refine a site and ask the AI to add a contact button or floating contact stack - Publish the site and click a contact button - Confirm the click appears in the Engagement tab within a few seconds **Watch for:** Contact buttons missing from the published HTML; clicks not recording in analytics
The Chats tab was listing sites where the wizard was opened but no messages were ever sent, cluttering the view with empty entries. Those sessions are now hidden until the user actually sends a message, at which point the conversation appears normally. Abandoned sessions older than 24 hours are also automatically cleaned up so they do not accumulate. **Where:** Client portal → dashboard → Chats tab **How to test:** - Open the wizard for a new site and close it without sending any messages - Return to the dashboard and open the Chats tab - Confirm the abandoned session does not appear - Start a new wizard session and send at least one message - Confirm that session now appears in the Chats tab **Watch for:** Chats tab showing empty entries with no messages; real active chats disappearing from the tab
Sites that are mid-blueprint-chat now appear in a dedicated "Chats" tab on the dashboard instead of disappearing from view. The tab gives users a clear entry point to resume their conversation and continue building. **Where:** Dashboard → Chats tab (alongside Builds and Designs) **How to test:** - Start a blueprint chat that hasn't yet generated a site - Return to the dashboard and confirm the site appears under the Chats tab - Click the entry to resume the chat **Watch for:** Planning sites not appearing anywhere on the dashboard; sites appearing under the wrong tab
On some older sites, design variation thumbnails in the gallery would spin indefinitely and never render. This was caused by an internal error thrown when checking older site variation data. Thumbnails now load correctly regardless of how old the site is. **Where:** Client portal → Site editor → Designs tab (variation gallery) **How to test:** - Open the Designs tab on a site with multiple variations - Confirm all variation thumbnails load and are not stuck on a spinner - Try on an older site (created before May 2026) to confirm the fix applies there too **Watch for:** Any thumbnail remaining on an infinite spinner; blank thumbnail cards
Catalog-vertical sites (real estate, hotels, restaurants, etc.) now support inline editing on their detail page templates. A row-picker chip in the top-left of the canvas shows which listing you are previewing; click it to switch rows. Clicking any text bound to that listing's data patches only that row — not every detail page — so sibling pages stay intact. Edits that would affect the overall template design show a confirmation prompt before applying. **Where:** Site editor → select a catalog detail page (e.g. a property or room page) → preview canvas **How to test:** - Open a catalog-vertical site in the editor (real estate, hotel, restaurant, ecommerce, car dealership, or education) - Navigate to a detail template page (e.g. "Properties Template") - Confirm the row-picker chip appears in the top-left showing which listing is bound - Click a title or description on the page to edit it inline - Confirm only that listing's data changes, not the template structure - Use the row-picker chip to switch to a different listing and confirm the preview updates - Try editing a design element and confirm a confirmation prompt appears before applying **Watch for:** Row-picker chip not appearing on template pages; inline edit saving to the wrong listing; switching rows not updating the preview; confirmation prompt not appearing for design-level edits
Mobile users in the site editor (Mission Control) were seeing two floating assistant buttons at the same time, and the chat scroll would sometimes behave incorrectly. Both issues are now resolved — only the correct slide-over assistant panel appears on mobile. **Where:** Client portal → Site editor (any page) on a mobile device **How to test:** - Open a site in the client editor on a phone or narrow window - Confirm only one assistant button or icon appears — no duplicate blue pill button - Open the assistant chat and scroll through a long conversation to confirm it scrolls smoothly **Watch for:** Two floating buttons or blue pills appearing simultaneously on mobile; chat conversation not scrolling to the latest message
Site owners can now mint QR codes for trucks, business cards, and invoices directly from the portal, then watch scan counts alongside every WhatsApp, call, and email button click roll up in an Engagement dashboard. **Where:** Client portal → left rail → QR Codes and Engagement tabs **How to test:** - Open a site in the client portal - Go to the QR Codes tab, create a new code with a channel (e.g. WhatsApp) and target URL - Download the QR code as PNG or SVG - Scan it and confirm the scan count increments in the Engagement tab - Verify click-through stats for WhatsApp/call/email buttons also appear in Engagement **Watch for:** QR codes not scanning; scan counts not incrementing; Engagement tab showing no data
AI-generated grid sections (services, features, gallery) sometimes created more slots than they had content for — leaving empty white boxes — and used oversized gap utilities that left awkward whitespace between cards. Fixed by tightening the generation prompt: grids now adapt their slot count to the actual item count, optional secondary slots are conditionally rendered, and gap sizes are capped. Creative bento/mosaic layouts (1 featured + 3 small, 2+2, etc.) are still explicitly encouraged — no fixed heights or widths are imposed. **Where:** Any newly generated site — affects grid-based sections like services, features, and gallery **How to test:** - Generate a new site and inspect grid sections in the preview - Confirm no blank/empty grid cells appear alongside content cells - Confirm gaps between cards look tight (not cavernous) **Watch for:** Empty white boxes in grid sections; excessive whitespace between grid rows or columns
When site generation fails, both the site creation and blueprint pages now show your site header with a logo, a "Go to Dashboard" escape button, and human-readable error messages — instead of a raw technical error that blocked the entire screen with no way out. **Where:** Client portal → Create new site or Blueprint page → generation failure state **How to test:** - Trigger a generation failure (e.g., network disconnect mid-generation) - Confirm the error card shows a "Go to Dashboard" button alongside "Try Again" - Confirm the error message is readable and doesn't expose model names or timeouts **Watch for:** Error overlay blocking the header; raw technical error text (model names, timeout durations) appearing in the error message
Contractors and agencies in trades verticals (plumbing, electrical, HVAC, landscaping, cleaning, and general contracting) now have a dedicated sign-up flow at `/trades` that auto-generates a curated home-services site after a short form — no manual setup required. **Where:** `/trades` → pick your vertical → fill the form → site is generated automatically **How to test:** - Visit `/trades` and pick a vertical (e.g. Plumbing) - Fill in the business name, location, and services - Submit and confirm a site is generated and you are redirected to the editor - Test the unauthenticated flow: fill the form without being logged in, register, and verify the form auto-submits after redirect **Watch for:** Generation not triggering after form submit; unauthenticated users losing their input after registration
Three new components are available for trades and home-services sites: a zip-code service area checker that captures out-of-area visitors to a waitlist, a subscription button for recurring maintenance plans, and booking deposit collection via Stripe Checkout before the appointment is confirmed. **Where:** AI-generated trades sites — ask the AI to "add a service area checker", "add a maintenance plan subscription", or "require a deposit at booking" **How to test:** - Generate or refine a trades site and ask the AI to add each component - Test the zip checker with an in-area and out-of-area zip code - Place a test subscription or deposit payment - Confirm the booking/subscription appears in the site's Inbox or Forms tab **Watch for:** Service area checker not validating zips; deposit redirect not going to Stripe; subscription button failing on non-Stripe payment setups
In some cases the preference cards collected during the wizard intake disappeared from the chat history after a page refresh, with no error shown. This happened when the data was stored in a double-serialized format that the rehydrator silently skipped. The rehydrator now recovers from this and logs a warning so underlying data issues surface rather than being hidden. **Where:** Client portal → new site wizard → chat history after page refresh **How to test:** - Complete an intake preference form in the wizard chat - Refresh the page - Confirm the preference cards (style, audience, tone, etc.) are still visible in the chat history **Watch for:** Preference cards missing from chat after refresh; intake recap showing no prior answers
Users with many sites were occasionally redirected to a different site than the one stored in their session because only the 10 most-recent sites were checked. The redirect guard now searches all sites and falls back to fetching the specific site by ID, ensuring you always land on the right one. **Where:** Client portal → visiting your site URL **How to test:** - Create or own more than 10 sites in one account - Navigate to `/client/<clientId>/site` from a session that last visited a site outside the top 10 - Confirm it redirects to the correct site **Watch for:** Still landing on the wrong site after the fix; "Site Not Found" errors on sites that exist
Clicking through design variations quickly could leave the site saved to a different variation than the last one you selected, because competing save requests would race and the slowest response would win. Variation switches are now serialized so the last-clicked design always wins, and error toasts no longer appear when a pending switch is about to correct itself. **Where:** Site editor → design variation picker → switching between variations **How to test:** - Open a site with multiple design variations - Click rapidly between variations several times - Confirm the final variation shown matches the last one you clicked - Confirm no incorrect error toasts appear **Watch for:** Selected variation reverting to an earlier choice after rapid clicks; false error messages during variation switching
Reference site entries shared in the wizard before clicking Generate now save their screenshot thumbnails correctly and remain visible in the Brief tab — previously the thumbnail was lost on reload. Sites that couldn't be fully analyzed now show a "couldn't fully analyze" card in the Brief tab so they can be removed or retried, instead of silently disappearing from the list. **Where:** Blueprint wizard → Brief tab → Reference Sites section **How to test:** - In the wizard, paste a reference site URL before clicking Generate, then chat for a few messages - Reload the page and confirm the reference site still appears in the Brief tab with its thumbnail - Paste a URL that can't be crawled — confirm it appears in the list with a "couldn't fully analyze" indicator - Confirm failed reference sites can be removed from the list **Watch for:** Reference site thumbnails showing as broken images after reload; failed reference URLs vanishing from the list silently; Brief tab showing an empty reference sites section when entries were added
If you refreshed the page or returned to a site mid-generation on mobile, you'd briefly see a blank chat screen before the progress indicator appeared. The building progress view now shows instantly on resume so you're never left looking at the wrong screen. **Where:** Client portal → Create new site → generation in progress (mobile, on page refresh or return) **How to test:** - Start generating a site on a phone - Refresh the page mid-generation - Confirm the "building your site" progress screen appears immediately without a chat screen flash **Watch for:** Brief flash of the chat/blueprint screen before switching to the building progress view on mobile
When a screenshot request failed due to an authentication issue or a temporary server error, the dashboard was showing a misleading "site not found" toast regardless of the real cause. The screenshot route now uses the same access-checking path as all other site routes, so actual errors surface correctly and are also logged for investigation. **Where:** Site editor → screenshot capture; dashboard screenshot recapture **How to test:** - Trigger a screenshot update on a site you have access to and confirm it succeeds - If a screenshot fails, confirm the error message reflects the actual problem rather than "site not found" **Watch for:** "Site not found" toast appearing when the site clearly exists; screenshot failures with no useful error message
The contact button component now validates URLs for social and custom-link channels, preventing `javascript:` scheme URLs from being injected into published site pages. A rate-limit bug that caused legitimate click tracking to fail for some proxy setups was also fixed. **Where:** Any published site using contact buttons or QR code tracking **How to test:** - Publish a site with a contact button using a custom URL channel - Confirm legitimate HTTPS URLs work normally - Verify click tracking records events correctly **Watch for:** Legitimate custom URLs being blocked; click tracking still failing for proxy clients
When you've already described your site pages during the blueprint chat, the creation flow now shows those exact pages in a confirmation screen instead of making you re-select from a generic template — your stated page names, descriptions, and guidance are pre-filled and ready to approve in one click. **Where:** Client portal → Create new site → Pages step (after blueprint chat) **How to test:** - Complete a blueprint chat that produces a site plan with specific pages - Proceed to the finalize/pages step and confirm the planned pages appear pre-filled - Click approve and verify generation starts with those pages **Watch for:** Falling back to the generic industry-template selector when no plan exists from blueprint chat — that fallback is expected
A series of routing fixes prevent the editor from bouncing users to the blueprint planner when they should land in the design assistant or site manager. Sites with existing generated pages were incorrectly identified as planning-only during the loading state, causing a redirect to /blueprint that would either loop or leave the user stuck. All routing decisions now use the site's type field reliably, and a server-side guard replaces the fragile client-side redirect that caused the race condition. **Where:** Client portal → opening any site from the dashboard; navigating between site views **How to test:** - Open a site that has already been generated from the dashboard - Confirm it loads directly in the design assistant or site manager without flashing a redirect to the blueprint planner - Open a brand-new planning site — confirm it opens in the blueprint planner - Refresh the page on an open site — confirm it stays in the correct view **Watch for:** Generated sites redirecting to /blueprint; brief flash of the wrong view before settling; infinite redirect loops; sites opening in the wrong tab after generation completes
When a site's blueprint contained style hints stored in an unexpected format (object or string instead of an array), site generation was crashing mid-prompt with a "map is not a function" error. The generation pipeline now handles these gracefully, ensuring hints are always processed safely regardless of how they were stored. **Where:** Site generation — affects all sites using blueprint hints for style directives **How to test:** - Generate a new site and confirm it completes without errors - Sites that previously failed to generate due to this error should now complete successfully **Watch for:** Site generation failing silently or showing an error mid-process when style directives or design hints are present in the blueprint
Several routing bugs caused users to land on the wrong view (e.g. the blueprint chat page instead of the editor) or get stuck in redirect loops. Routing now reads the current site state directly and recovers from stale cached values automatically. **Where:** Client portal → navigating to any site **How to test:** - Open a site that is in the "design" or "extracted" phase - Confirm it opens in the editor, not the blueprint chat - Reload several times; confirm consistent navigation without unexpected redirects **Watch for:** Infinite redirect loops; always landing on the blueprint chat page for finished sites
Dashboard preview thumbnails were incorrectly boosting the opacity of decorative low-opacity overlays (such as graph-paper grids in neo-brutalist designs) from near-invisible to full opacity, making them dominate the screenshot. Thumbnails now leave intentional design layers alone while still revealing hidden animation elements. **Where:** Dashboard → site thumbnails; Admin → gallery previews **How to test:** - Open the dashboard and inspect thumbnails for sites with textured or overlaid hero sections - Confirm no dark grid or overlay is covering the design - Verify that sites with entrance animations still show content (not blank frames) **Watch for:** Thumbnails going blank for sites that use entrance animations; thumbnails still showing the overlay on affected designs
Sites created through blueprint chat, quick-start, and several other flows were silently missing the design type flag, causing them to show up in the Builds tab — or not appear at all — instead of the Designs tab where users expect them. All creation paths now correctly tag the site as a design, and existing affected sites have been backfilled. **Where:** Dashboard → Designs tab **How to test:** - Create a new site using quick-start or blueprint chat - Open the dashboard and confirm the site appears in the Designs tab, not the Builds tab - Check that existing sites that were missing from Designs now appear correctly **Watch for:** Newly created sites appearing in the Builds tab or disappearing from the Designs tab
If site generation was still working on a second design when the 10-minute timeout hit, the entire site was incorrectly marked as failed — even when a complete first design was already saved. Sites are no longer marked failed if at least one full design is available, and the error message now correctly reflects what's ready. **Where:** Client portal → Create new site → generation in progress or error state **How to test:** - Generate a site and wait for at least the first design to complete - If generation times out (or simulate with a slow connection), confirm the site shows the available design rather than a failure state - Confirm "Try Again" is offered only when no designs are ready at all **Watch for:** Sites showing a failed/error state even though one or more design variations exist and are fully generated
The in-editor AI assistant now has access to your site's analytics — you can ask "Is analytics enabled?", "How many visitors did I get this week?", or "Enable analytics for me" and the assistant will respond with real data or take the action, instead of giving a generic non-answer. **Where:** Client portal → Site editor → Assistant chat (bottom-right) **How to test:** - Open the assistant chat on a site that has Google Analytics enabled - Ask "Is analytics enabled?" and confirm the assistant gives a specific yes/no answer - Ask "Show me this week's visitor count" and confirm real stats are returned **Watch for:** Assistant giving vague responses about analytics instead of real data; errors when asking for stats on a site with no analytics configured
Four regressions in the wizard chat are fixed: conversations that started before a site row existed are now properly linked so a page refresh no longer wipes the chat; the intake recap correctly shows your previous answers so you can edit them; suggested reply chips with unfilled placeholders like "[fabric type]" now show an edit prompt instead of sending the placeholder text as-is; and reference sites you add before clicking Generate are preserved in the brief instead of expiring. **Where:** Client portal → New site wizard → chat conversation **How to test:** - Start a new wizard session, send a few messages, then refresh the page — confirm the chat history is restored - Submit an intake preference form, then submit it again — confirm the recap shows your prior answers and lets you edit them - If the AI suggests a reply chip containing placeholder text in brackets, confirm you are prompted to fill it in rather than it sending automatically - Add a reference site URL before generating — confirm the thumbnail appears in the Brief tab after generation **Watch for:** Chat history disappearing on refresh; intake recap showing blank answers; placeholder chips sending unedited text; reference site thumbnails missing from the brief
The wizard chat now opens with a focused first question — "What's your business or site name?" — instead of a generic prompt, making it faster to get started. A prominent voice input shortcut also appears at the start of the conversation for users who find it quicker to describe their site out loud. **Where:** Client portal → New site wizard → initial chat screen **How to test:** - Start a new site from the dashboard - Confirm the first chat message asks for your business name - Confirm a voice input option is visible before you send your first message - Type or say your business name and confirm the conversation continues correctly **Watch for:** First message not appearing; voice option not showing; business name not being captured from the reply
Stock images were sometimes selected because they shared a location name with the business address (e.g. a "traffic in Bangalore" photo for a stationery brand in Bangalore) rather than being topically relevant. Image selection now ignores location when comparing relevance, so photos match the actual subject matter. **Where:** Site generation → automatically selected stock images throughout any generated site **How to test:** - Generate a site for a business with a specific city in its description - Check that hero and section images are relevant to the business type, not random city scenes - Confirm no generic street or cityscape photos appear when the business is unrelated to urban/location imagery **Watch for:** Irrelevant location-based photos (traffic, construction, street scenes) appearing in a non-related business site; image quality regression for businesses in less common cities
Cards in grid sections (services, features, testimonials) could have different heights depending on image aspect ratios and text length, leaving visible gaps between rows. The AI generation prompt now enforces equal-height cards in grid layouts so rows look uniform and intentional. **Where:** Any newly generated site — affects grid-based sections like services, features, and gallery **How to test:** - Generate a new site and inspect grid sections in the preview - Confirm all cards in a grid row are the same height, even when content lengths vary - Check that no visual gaps or ragged bottom edges appear between rows **Watch for:** Cards in the same grid row having different heights; ragged row edges caused by short cards next to tall ones
Clicking directly on text in the site preview to edit it inline was leaving the preview stuck on "Loading preview…" because the edit was computed but never saved to local state. The preview now recompiles instantly after any inline edit. **Where:** Site editor → site preview iframe → inline text editing **How to test:** - Open a site in the editor - Click directly on a text element in the preview to trigger inline editing - Make a change and confirm the preview updates immediately without showing a loading spinner **Watch for:** Preview staying on "Loading preview…" after an inline edit; edits not visible until a page refresh
When creating a site with multiple pages selected in the Choose Pages step, the Plan Review stage was being skipped with a confusing "single-page site" message, blocking multi-page site creation from proceeding correctly. **Where:** New site creation flow → Choose Pages step → Plan Review stage **How to test:** - Start creating a new site and select multiple pages in the Choose Pages modal - Proceed through the flow and confirm Plan Review runs (not skipped) - Confirm the final site is built with all selected pages **Watch for:** Plan Review showing "single-page site — Plan Review is skipped" after multiple pages were chosen; multi-page sites being built as single-page sites
Quiz components are now generated and automatically corrected to meet minimum visual standards: readable card backgrounds, clear question typography, visible selected-state highlighting on answer buttons, and properly styled progress bars and results screens. **Where:** Site editor → any page with a quiz section; site generation with quiz components **How to test:** - Generate or open a site that includes a quiz section - Confirm quiz cards have a white or dark background (not transparent), making text readable against colored section backgrounds - Confirm question text is larger and bold, answer buttons show a visible ring when selected, and the results screen has a prominent title **Watch for:** Quiz cards with no visible background; low-contrast text on quiz answer buttons; progress bar missing or unstyled
When editing one design variation (e.g. D1) while another was set as the active design, refinements were being applied to the wrong variation — and the preview would collapse to show only the single edited section instead of the full page. **Where:** Site editor → preview phase → any AI refinement on D1/D2/D3 variations **How to test:** - Open a site that has multiple design variations (D1, D2, D3) - Switch to a variation that is not the active design - Send an AI refinement request (e.g. "change the hero background color") - Confirm the change applies to the variation you're viewing, and the full page remains visible in the preview **Watch for:** Refinement applying changes to a different variation than the one being viewed; preview collapsing to show only a single section after a refine
Clicking "Recapture screenshot" on the dashboard was failing immediately with a "Site data not found" toast, caused by database columns that were removed but still referenced in the query. **Where:** Dashboard → site card → screenshot recapture action **How to test:** - Open the dashboard and find any site card - Trigger a screenshot recapture (via the site card menu or refresh option) - Confirm the screenshot updates successfully without any error toast **Watch for:** "Site data not found" toast appearing when recapturing; the recapture spinner never resolving
The automatic code-repair step during site generation was only running when the generated code used a specific icon library, leaving other types of errors — like undefined variable crashes in section components — undetected and saved to the live site. The repair step now always runs, catching a broader range of issues before they reach the preview. **Where:** Site generation — affects all newly generated sites **How to test:** - Generate a new site and confirm the preview loads without any blank sections or JavaScript errors in the browser console - Previously broken patterns (sections showing nothing, console errors like "items is not defined") should no longer appear **Watch for:** Blank sections in the generated preview; browser console errors like "X is not defined" in newly generated sites
Sites that were in the planning or design-selection phase were incorrectly appearing in the Builds tab, making the Designs tab look empty and the Builds tab cluttered with unbuilt sites. **Where:** Dashboard → Builds / Designs tabs **How to test:** - Open the dashboard and check the Designs tab - Confirm sites that are still in planning or awaiting design selection appear here, not in Builds - Confirm the Builds tab only shows sites that have been fully generated **Watch for:** Planning-stage sites missing from the Designs tab; Builds tab showing sites that haven't been built yet
Existing users who generated sites before the Designs and Builds split was introduced would see a jarring "Orphan builds" section header in the Builds tab after the update. Those sites were not orphaned — they were working builds with no parent design. The Builds tab now shows them inline without the section header unless there are also newer fork-based builds in the same account, in which case they appear under the friendlier "Other builds" label. **Where:** Dashboard → Builds tab **How to test:** - Sign in with an account that has sites created before the fork-on-build update (no parent design) - Navigate to the dashboard and check the Builds tab — no "Orphan builds" heading should appear - If the account also has fork-based builds, the legacy sites should appear under "Other builds" at the bottom **Watch for:** "Orphan builds" heading still appearing for accounts that only have legacy sites; legacy sites disappearing from the Builds tab entirely
The dashboard homepage now shows two tabs — Builds (default) and Designs — so you can quickly find the live site you're working on without scrolling past the source designs that generated it. Each Design card shows whether it's Pending (no builds created yet) or Used (already forked into one or more builds), and the site editor gains a lineage popover that lets you navigate between a build and its parent design or create another sibling build. **Where:** Dashboard homepage → Builds / Designs tabs; Site editor → breadcrumb lineage popover (build sites only) **How to test:** - Go to the dashboard — confirm the page loads with a Builds tab selected by default, showing your published/in-progress sites - Click the Designs tab — confirm source designs appear with a Pending or Used status pill - On the Designs tab, use the Pending / Used / All filter pills to switch views - Open a build site in the editor and look for the lineage indicator in the breadcrumb area — it should show the parent design and any sibling builds **Watch for:** Dashboard showing a blank Builds tab for existing users who only have legacy sites; lineage popover appearing on design sites (it should only show on build sites)
When generating two design variations in parallel, a recoverable issue in the first design could briefly surface as "Generation Failed" before the second design finished — even when the second would succeed. The status now waits for both designs before reporting failure, so users only see an error if neither design could be recovered. **Where:** New site generation flow — the status shown while generation runs **How to test:** - Generate a new site and observe the status during generation — it should not flash "Generation Failed" before completing normally - If both designs genuinely fail, the failed message should still appear **Watch for:** "Generation Failed" appearing mid-generation then disappearing; completed sites still showing a failed status badge
Sites that completed AI generation but ended up with missing or broken component files would previously show "Generation Failed" on next load and become uneditable. Generation now runs an automatic repair pass over extracted files before saving — fixing common import errors and component wiring issues on the spot — so the site opens correctly even when the initial extraction had issues. **Where:** Client portal → new site generation flow → site editor after generation completes **How to test:** - Generate a new site and wait for completion - Open the site in the editor — it should open without a "Generation Failed" banner - Confirm you can scroll through pages and trigger refinements normally **Watch for:** "Generation Failed" error appearing after a generation that shows as completed; site editor opening with no pages or a blank canvas after generation
Sites that encountered import or bundling errors during generation now automatically repair the affected files and complete successfully, instead of showing a "Generation Failed" message and leaving the site in an uneditable state. **Where:** New site generation flow — the site editor loads after generation completes **How to test:** - Generate a new site — if the AI produces a component with an incorrect import path, the generation should still succeed and the site should open normally - Confirm sites that previously failed to open after generation now render correctly **Watch for:** "Generation Failed" message appearing for newly generated sites; generated sites that open but show a blank or broken preview
Users attempting to sign in with a suspended account previously saw a generic "Sign in failed" message with no indication of why. The login page now shows a clear message explaining that the account has been suspended, so users understand they need to contact support rather than retrying with the same credentials. **Where:** Login page → sign in with a suspended account **How to test:** - Attempt to sign in with an account that has been banned/suspended in the admin panel - Confirm the error message mentions account suspension rather than showing a generic sign-in failure **Watch for:** Generic "Sign in failed" still appearing for suspended accounts; suspended accounts being allowed to log in without a clear error
Users whose accounts have been suspended now see a clear "Your account has been suspended" message on the login page instead of a generic "Sign in failed" error, so they know to contact support rather than retrying their credentials. **Where:** Sign-in page — the error message shown after a failed login attempt **How to test:** - Attempt to sign in with a banned/suspended account - Confirm the error message specifically mentions account suspension rather than a generic failure **Watch for:** Suspended users seeing "Sign in failed" or "Unknown error" instead of the suspension message; active users accidentally seeing the suspension message
You can now keep an original design around and fork it into multiple working builds — switching to a different variation no longer overwrites the site you've been editing. **Where:** Dashboard (new Designs and Builds tabs), and the new Lineage badge in the site editor's top bar. **How to test:** - Generate a new site. After variations finish, click *Build full site* on the one you like — you'll land in the editor for a brand-new build. - Refine and edit the build. Then click the purple **Lineage** badge next to the site name in the editor header. - In the popover, click *Build with D2* (or D3, D4) to fork a sibling build from another variation. You're redirected to the new build's editor; the first build is untouched. - Go to the dashboard. The Builds tab shows your working sites. The Designs tab shows the original design — *Pending* if no variation has been forked yet, *Used* if at least one has. **Watch for:** - "Build full site" button not appearing on a fresh generation (should fork, not finalize in place). - Lineage popover not showing for build sites with a parent design. - Dashboard Designs tab missing the Pending / Used / All filter pill, or defaulting to the wrong filter. - Existing pre-fork sites — they keep working as before and show in the Builds tab without the lineage badge (no parent design to point at).
Generated sites with top announcement or promo banners had a layout bug: dismissing the banner left a blank space above the header on mobile and desktop. Banners now use the platform's built-in dismiss handling, which restores the header position immediately when the banner is closed. **Where:** Any generated site with an announcement, promo, or notification bar at the top **How to test:** - Generate a site for a business type likely to receive a promotional banner - Preview the site and dismiss the announcement bar - Verify the header moves up to fill the space with no gap remaining on both desktop and mobile **Watch for:** Persistent blank strip above the header after dismissing a banner; header staying pushed down after close
New users who typed text on the homepage and landed on the site editor before any AI variations were generated saw a generic "Failed to load preview" error. The editor now handles the planning phase gracefully and waits for generation to complete instead of crashing. **Where:** Client portal → Site editor (immediately after a new site is created, before generation finishes) **How to test:** - Create a new site and navigate to the site editor before generation completes - Confirm the editor shows a loading/waiting state rather than an error - Once generation finishes, confirm the preview loads normally **Watch for:** "Failed to load preview" errors on new sites in the planning phase; editor crashing before variations appear
Preview links pointing to a non-active design variation were showing bare placeholder text instead of that variation's refined content. This affected share links that request a specific design via a cached snapshot. The content overlay is now applied correctly for all variations. **Where:** Shared site preview link (`/preview/<token>`) when requesting a non-active design variation **How to test:** - Open a site with multiple design variations, where at least one non-active variation has been refined - Generate a share link for a non-active variation - Open the link and confirm it shows the variation's actual content, not placeholder text **Watch for:** Non-active variation previews showing fallback strings; design snapshot previews missing refined copy
Share preview links were showing placeholder text instead of the actual content from the site editor — visitors saw fallback strings like "Bathroom Hardware" while the editor showed the real brand copy. Preview links now render the same content as the editor. **Where:** Shared site preview link (`/preview/<token>`) **How to test:** - Open a site that has been refined (edited hero headline, brand name, etc.) - Copy the share preview link and open it in a new tab or incognito window - Confirm the preview shows the same content visible in the site editor **Watch for:** Preview link content mismatching the editor; fallback/placeholder text appearing in place of edited copy
Public preview links, live site pages, and form management were silently broken after a database column rename — visitors saw blank pages or errors instead of the site. All affected routes now read from the correct data source. **Where:** Shared preview links (`/preview/<token>`), published site URLs, Client portal → Pages → Forms **How to test:** - Share a site preview link and confirm the site loads correctly for a recipient - Open a published site's public URL and verify all content renders - In the client editor, open the Forms tab and verify the forms list loads **Watch for:** Blank or error pages on preview/published URLs; missing forms in the Forms tab
Pressing Undo after an AI-assisted text or content change (such as editing a headline or updating copy) was skipping over those changes and restoring to an older state. Undo now correctly reverts the most recent content edit and updates the preview immediately. **Where:** Client portal → Site editor → Make a content/text AI refinement → press Undo (↩) **How to test:** - Open the site editor and make a content-only AI change (e.g., ask the AI to update the hero headline) - Confirm the change appears in the preview - Press Undo (↩ button in activity panel or Ctrl+Z) - Confirm the preview reverts to the text before the AI change **Watch for:** Undo skipping content edits and restoring to an older version; Undo button not appearing after content-only AI changes
When running a multi-step AI plan in the site editor, certain refinement steps (particularly UI layout changes) were marked as "failed" even though the code was correctly applied. These steps now correctly report success and apply their changes to subsequent steps in the plan. **Where:** Site editor → AI chat → multi-step plan execution **How to test:** - Ask the AI to make several changes at once (e.g., "move the hero image and update the button text") - Confirm all plan steps show as succeeded with a green status - Confirm each change is visible in the preview **Watch for:** Plan steps showing red "failed" status despite the code change appearing in the preview; subsequent steps being cancelled unnecessarily
Adding a new page when a site had a theme selected was causing a JavaScript syntax error that broke the editor. The theme backfill logic has been corrected so new pages inherit the site's active theme without errors. **Where:** Site editor → Pages → Add page **How to test:** - Open a site that uses a custom theme or has theme styling applied - Add a new page via the Pages tab - Confirm the new page is created successfully and the editor remains functional **Watch for:** A blank editor or JavaScript error after clicking "Add page" on a themed site.
Refinement requests are now significantly more accurate: the AI can tell which files are actually used in your site versus leftover unused code from generation, so it targets the right component instead of an orphaned file. For complex structural changes (like fixing duplicate modals), it also sees the full file context so it can resolve root causes rather than applying superficial fixes. **Where:** Client portal → Site editor → Ask the assistant to refine your site **How to test:** - Open a site and ask the assistant to fix a layout or component issue - Confirm the change applies to the visible page, not an unused component - For modal or overlay issues, confirm the fix removes the duplicate rather than suppressing it **Watch for:** Refinements editing the wrong file; duplicate modal or overlay bugs persisting after a fix attempt
The site planning step now generates a full narrative arc with per-section content prompts, key angles, tone guidance, CTA direction, and multi-page architecture awareness. Local businesses (restaurants, wedding planners, etc.) now reliably receive location capture questions and correct currency settings. Integration requirements like WhatsApp or Calendly now survive all AI retry paths and are correctly surfaced in the generated plan. **Where:** Blueprint Builder → intake form → Plan step **How to test:** 1. Start a new site for a local business (e.g., "wedding planner in Austin, TX"). 2. Complete the intake form — confirm a location question appears. 3. On the Plan step, confirm sections have descriptive content prompts (not just names) and a narrative overview appears. 4. Request WhatsApp integration via the intake — confirm it appears in the plan's features list. **Watch for:** Plan section items should never be empty. If the plan tab shows sections with no items, that's a regression.
Attempting to clone or modify a variation that was still in the process of generating produced a generic "Failed to generate" error with no indication of what went wrong. The action is now blocked with a clear, actionable message so users know to wait for generation to complete before customizing. **Where:** Client portal → Site creation → Design gallery → Customize or Clone a variation **How to test:** - Trigger site generation and immediately try to clone a variation that is still loading - Confirm you see a descriptive error explaining the design isn't ready yet, rather than a generic failure toast **Watch for:** Generic 500-style error toasts when trying to clone or modify an in-progress design
The Clone a Design dialog now offers a richer experience: when multiple designs exist, a thumbnail picker lets you choose which one to clone before proceeding. The "Modify and Clone" flow is now a 5-tab wizard covering Style, Layout, Content, Images, and Freeform — replacing the single text box. The "Import from Site" tab now has a searchable site dropdown and a thumbnail grid for picking the source variation. **Where:** Site editor → Variations panel → Clone a Design button **How to test:** 1. Open a site with multiple design variations in the editor. 2. Click "Clone a Design" — confirm a design picker thumbnail grid appears. 3. Select "Modify and Clone" — confirm the 5-tab wizard (Style / Layout / Content / Images / Freeform) appears. 4. Select "Import from Site" — confirm the site list is searchable and variations show thumbnails. **Watch for:** Single-design sites should skip the picker and clone immediately without an extra step.
When cloning a design variation that had more images than the base template (e.g., 4 portfolio items vs 2 in the blueprint), the extra images were incorrectly stripped during the clone. The fix preserves richer content from the source when it intentionally exceeds the blueprint count. **Where:** Site editor → Variations panel → Clone a Design → clone from existing variation **How to test:** 1. Find or create a site variation with more images in a section than the default blueprint (e.g., a gallery with 6 items vs the template's 3). 2. Clone that variation. 3. Confirm the cloned variation retains all 6 images rather than being truncated to 3. **Watch for:** Cloned variations with fewer images than the source indicate the stripping is happening again.
When the AI changed both the homepage and shared style blocks in a single refinement request (e.g., a global color change), only the shared-block changes were saved — the homepage edits disappeared on refresh. Both sets of changes now save together in the same write. **Where:** Site editor → any color-related refinement request (e.g., "change the primary color to blue") **How to test:** 1. Open a site in the editor with shared CSS variables. 2. Ask the AI to change the primary color (e.g., "change the accent color to green"). 3. Confirm the color updates visually in the preview. 4. Refresh the page — confirm the color change persists on both the homepage and section blocks. **Watch for:** Color changes that appear in preview but revert after refresh indicate the fix didn't apply.
When you deleted the currently active site design variation, the editor silently jumped to the first design instead of explicitly switching — which could leave the UI in an inconsistent state. The editor now explicitly selects the next available design when the active one is removed. Restoring a version via cherry-pick also no longer creates a phantom version entry when the write fails. **Where:** Site editor → Designs tab → delete active design **How to test:** - Open a site with multiple design variations - Make sure one of the non-first designs is active - Delete the active design - Confirm the editor switches cleanly to the first remaining design with no blank state or wrong content shown **Watch for:** The editor appearing blank or showing wrong content after deleting the active design.
When auto-fix runs in the background and can't resolve an issue, the Design Assistant chat now stays quiet instead of surfacing confusing internal system messages. The amber preview banner clears as expected. **Where:** Site editor → Design Assistant chat panel **How to test:** 1. Open a site in the editor and trigger a scenario where auto-fix runs (e.g. a broken component). 2. Let auto-fix attempt to resolve it. 3. Confirm the Design Assistant chat does not show any message mentioning "auto-fix" or internal tooling. **Watch for:** Auto-fix errors should fail silently; only the amber banner should clear — no chat message should appear.
Each design card in the Clone a Design picker now shows a 16:9 screenshot thumbnail when one is available, making it easier to visually identify which design to clone. Cards without a screenshot fall back to the existing color-swatch placeholder. **Where:** Site editor → Variations panel → Clone a Design → design picker step **How to test:** 1. Open a site with multiple design variations that have screenshots. 2. Click "Clone a Design" — confirm the picker shows thumbnail images on each design card. 3. Confirm designs without screenshots show the color-swatch fallback rather than a broken image. **Watch for:** All cards showing only color swatches (no thumbnails) when screenshots should be present.
The design variation gallery now caches previews in the browser so that returning to the gallery after navigating away is effectively instant — no waiting for previews to re-render. Hovering a variation chip also shows the cached screenshot immediately instead of a blank popover while the preview boots. **Where:** Client portal → Site creation → Design gallery (variation chips and thumbnail cards) **How to test:** - Open a site's design gallery, let the previews load - Navigate away and return — confirm gallery thumbnails appear immediately - Hover a variation chip — confirm a screenshot preview appears instantly behind the live preview **Watch for:** Gallery still showing blank cards on return visits; chip hover popovers staying empty on revisit
Gallery thumbnails previously appeared blurry on high-DPI (retina) screens because they showed a low-resolution screenshot. Thumbnails now display the live rendered preview by default — which is always pixel-perfect — and fall back to the screenshot only during the brief instant before the preview loads. New screenshots are also captured at full retina resolution. **Where:** Client portal → Site creation → Design gallery **How to test:** - Open the design gallery on a retina or high-DPI display - Confirm thumbnail cards show crisp, readable text and sharp edges - Hover a variation chip and confirm the popover preview is sharp **Watch for:** Thumbnails appearing blurry or soft; screenshots visibly lower quality than the live preview
If the screenshot capture step failed silently after site generation (due to server cold-start timeouts or upload errors), certain design variations would show a blank or stuck loading state in the gallery. The gallery now automatically triggers a screenshot re-capture for any variation missing a thumbnail, so all designs become visible without requiring manual intervention. **Where:** Client portal → Site creation → Design gallery **How to test:** - Open the design gallery on a site where some thumbnails appear as grey placeholders - Wait a few seconds and confirm the thumbnails populate automatically - Confirm the previously-missing designs become selectable **Watch for:** One or more design options permanently stuck as grey placeholders; the gallery showing only 1–2 variations when the site has more
Design variations 2, 3, and beyond were silently inheriting images from the first variation rather than using their individually generated images. The sourced images were being resolved and then discarded, leaving later variations to fall back to the first design's photos. Each variation now renders with its own distinct imagery. **Where:** Client portal → Site creation → Design gallery → Variations D2, D3, etc. **How to test:** - Generate a new site and open the design gallery - Switch between D1, D2, and D3 variations - Confirm each variation shows different images (not copies of D1's photos) **Watch for:** Multiple variations showing the same set of images; later variations looking visually identical to D1 despite different layouts
A rendering crash ("Cannot read properties of undefined — map") in FAQ sections caused by an incorrect AI-generated hook call is now automatically detected and repaired. Affected sites are fixed on next load without requiring manual intervention. **Where:** Any generated site containing a FAQ or Help Center section **How to test:** 1. Open a site that has a FAQ or Help Center section. 2. Confirm the section renders correctly without a blank/crashed page. 3. Inspect the section — items should map correctly without errors in the browser console. **Watch for:** Blank sections where FAQ content should appear indicate the auto-repair didn't fire.
Every user who visited the site creation page was hitting a JavaScript initialization crash that prevented the design gallery from loading. The page now loads without errors. **Where:** Client portal → New site → Design gallery **How to test:** - Navigate to the site creation page for any client - Confirm the design gallery loads without a blank screen or error boundary **Watch for:** White screen or error message on the site creation page; design gallery never appearing even after a page refresh
Applying AI formatting to sections like Hero that use a short block ID (e.g. "hero") but have a longer file name (e.g. "hero-section") previously failed silently because the system couldn't match the two. The lookup now uses a smarter prefix-and-name strategy so formatting reaches the right component file every time. **Where:** Site editor → select a section → Format / AI formatting action **How to test:** - Open any site in the editor and trigger the format action on a Hero section - Confirm the formatting is applied without an error toast - Repeat for other sections with short names (e.g. "services", "about") **Watch for:** "Could not apply formatting" error toasts on sections that have compound file names.
Gallery and bento grid sections in generated sites were not following the correct column layout rules — a 4-item gallery would use 3 columns, leaving one item awkwardly alone on the last row. The AI now consistently applies the right number of columns based on item count (2 items → 2 columns, 3 → 3, 4 → 2×2, etc.) so all items appear in balanced rows. **Where:** Client portal → Site creation and regeneration → Gallery, Portfolio, and Grid sections **How to test:** - Generate a site with a gallery or portfolio section - Confirm gallery items appear in balanced rows with no single item on the last row - For 4-item galleries, confirm a 2×2 grid rather than a 3+1 layout **Watch for:** A single image orphaned alone on the last row of a gallery; grid sections using an incorrect number of columns for the item count
When the intake form asks for your business location, it now shows a "Use my location" quick-fill chip that pre-populates the field with your detected city, region, and country — no typing required. **Where:** Blueprint Builder → intake form → Location question **How to test:** 1. Start a new site for a local business (restaurant, salon, etc.). 2. When the Location question appears, confirm a "Use my location" chip is visible below the input. 3. Tap the chip — confirm it fills in the detected city/region/country. 4. Proceed through intake and confirm the location appears correctly in the generated plan. **Watch for:** If location detection isn't available (no geo headers), the chip should simply not appear — no error.
The similarity threshold for matching images from your library was tuned too strictly, causing relevant images (food, yoga, dental, real estate, team photos) to be skipped and replaced with stock photos or AI-generated images. The threshold is now calibrated based on real-world measurements, so your uploaded library images are reused more often in generated and regenerated sites. **Where:** Client portal → Site creation and regeneration → All image slots **How to test:** - Upload images to your library (Admin → Image Library) - Generate a site in a matching category (e.g., restaurant images → restaurant site) - Confirm your library images appear in the generated site rather than stock photos **Watch for:** Library images being ignored in favor of generic stock photos; AI-generated images appearing when relevant library images exist
When adding a new page or switching to a different design variation, the newly generated page code was not going through the image sourcing pipeline — leaving placeholder or missing images even when the site had sourced images on other pages. All page generation paths now run the full image sourcing process so newly created and switched pages have real images from the start. **Where:** Client portal → Site editor → Pages tab → Add Page; also when switching between design variations **How to test:** - Add a new page to an existing site - Confirm the new page renders with real images, not placeholder squares or broken image slots - Switch to a different design variation and check that inner pages also display correctly sourced images **Watch for:** New pages rendering with blank image slots; switching designs leaving inner pages with missing images
New accounts and users with no existing sites were being routed to the old Blueprint Builder chat interface instead of the current Blueprint Builder wizard. They now correctly land in the wizard experience. **Where:** Onboarding flow → welcome screen → "Start building" CTA **How to test:** 1. Create a new account or navigate to `/start` without an existing site. 2. Confirm the page redirects to the Blueprint Builder wizard (not the legacy chat interface). **Watch for:** Landing on the old single-chat-column layout instead of the wizard indicates the regression has returned.
When the AI asks a clarifying question during the plan step, the text area for typing your answer now appears immediately — no extra button click required. When approving a proposed plan, an optional comment field is also visible upfront so you can answer any questions in the plan before approving. **Where:** Blueprint Builder → Plan step → AI clarification prompts **How to test:** 1. Start a site generation that triggers a clarification question in the plan step. 2. Confirm the answer textarea is visible immediately without clicking a "Provide Clarification" button. 3. When a plan is proposed, confirm an optional comment field appears in the approve view. **Watch for:** Clicking "Approve" without seeing a way to add notes means the optional field is missing.
The Plan step no longer shows sections with empty item lists — a silent JSON truncation bug caused by low token limits is now fixed. The Continue button in the workspace footer also doubles as the intake form's Continue when an unanswered preference card is open, so users don't have to hunt for it. **Where:** Blueprint Builder → Plan step; Blueprint Builder footer while intake form is open **How to test:** 1. Start a new site and complete the intake form until the Plan step appears. 2. Confirm every section in the plan shows at least one item (e.g., service names, feature bullets). 3. Open the intake form — confirm the footer button reads "Continue" and submits the form. 4. Switch to a different tab while a preference card is pending — confirm the footer reads "Continue intake (N pending)" and links back to the Intake tab. **Watch for:** Any section showing an empty items list in the plan is a sign of truncation returning.
Clicking a quick-action suggestion in the site editor showed no visual feedback while the AI was processing, making it appear as if the click did nothing. A thinking indicator now appears immediately so you can see the action is in progress. **Where:** Client portal → Site editor → Quick action suggestion buttons **How to test:** - Open a site in the editor and click a quick-action suggestion - Confirm a thinking/loading indicator appears while the change is being applied - Confirm the indicator clears when the refinement completes **Watch for:** No feedback after clicking a quick action; the button appearing unresponsive
Sites where all sections are combined into a single page file (rather than individual component files) were sometimes having refinement changes silently ignored — the AI updated a non-existent section key instead of the correct one. Refinement now correctly identifies and resolves all content sections accessed by the component before building the update. **Where:** Site editor → any refinement request on a single-file site (e.g., "change the hero headline") **How to test:** 1. Open a site that uses a monolithic single-file structure (common in V1 generations). 2. Ask the AI to change the hero headline or a specific section's content. 3. Confirm the change appears in the preview immediately and persists after refresh. **Watch for:** Refinement returning success but the preview not updating is the sign this issue has returned.
When replacing an image via the Image Manager, the new image now correctly updates in the live preview. Previously, the API returned success but the preview continued showing the old image until a full page reload. **Where:** Site editor → Image Manager → Replace image **How to test:** 1. Open a site in the editor and click any image to open the Image Manager. 2. Replace the image with a new one from stock or upload. 3. Confirm the new image appears immediately in the site preview without requiring a page refresh. **Watch for:** Success toast appearing but the old image remaining in the preview is the sign this regression has returned.
Generated sites where sibling sections reused a variable name without redeclaring it (causing "items is not defined" crashes) are now automatically detected and repaired on save. New sites generated going forward include a prompt-level rule that prevents this pattern from being emitted in the first place. **Where:** Any generated site with multiple content sections **How to test:** 1. Open a site that has multiple content sections (e.g., Services, Testimonials, Gallery). 2. Confirm all sections render without blank areas or console errors. 3. Trigger a refinement on one section — confirm the page still renders correctly after saving. **Watch for:** Blank sections on a page that previously rendered fine indicate a new instance of this crash.
Shared preview links (sent to clients for review) were redirecting home instead of showing the site. This was caused by a data migration that temporarily cleared the active design pointer; the preview page now reads from the correct source in all states. **Where:** Shared preview URL (e.g. sent to a client via the Share button) **How to test:** - Open a site and copy its share/preview link - Open the link in a private browser window or a different browser - Confirm the site preview loads correctly **Watch for:** Preview link redirecting to the home page; blank or error screen at the shared URL
During site creation, the preference question card now always generates dynamically with location-aware quick-fill options and enforces the full question set — previously the AI could inject a shortened 4-question card that ignored your location and skipped required fields. **Where:** Site creation flow → preference questions step **How to test:** - Start a new site and submit a business description - Confirm the preference card shows location-specific options (city/region quick-fills matching your location, not a generic US city) - Confirm the form shows all required questions (at least 8 fields, not a truncated 4-field card) **Watch for:** If quick-fill location options still show a foreign city or the form renders fewer than 8 questions, the dynamic generator path may not be running.
After a generation attempt failed or was interrupted, some sites would be left in a state where starting a new generation immediately returned a "Generation is already in progress" error — even though nothing was running. This was caused by a database logic gap where a cleared status was incorrectly treated as an active session. Sites now accept new generation requests correctly after a failure. **Where:** Client portal → Site editor → Generate **How to test:** - On a site that previously had a failed generation, click Generate again - Confirm the new generation starts rather than returning an error - Confirm the generation completes normally **Watch for:** "Generation is already in progress" error on a site that has no active generation running; being unable to regenerate after a failure without manual intervention
Dashboard and gallery thumbnails were sometimes capturing the wrong design variation (defaulting to the first one) instead of the one the user had selected. Screenshot capture now reads the active design index correctly across all capture paths. **Where:** Admin → Gallery thumbnails; Client dashboard → site card thumbnails **How to test:** 1. Generate a site with multiple design variations and select variation 2 or 3 as active. 2. Trigger a screenshot refresh (or wait for the cron to run). 3. Confirm the dashboard thumbnail matches the selected variation, not the first one. **Watch for:** Thumbnails showing a different design than the one marked as active.
When the second design variation (D2) failed to generate due to a server timeout, the "Generating…" spinner and overlay would stay on screen for up to 20 minutes. The system now detects this failure within 10 minutes and clears the spinner, showing a status message so users know D1 is ready and D2 did not complete. **Where:** Client portal → Site creation → Design gallery **How to test:** - Generate a site and wait for D1 to appear - If D2's spinner does not resolve after 10 minutes, confirm the overlay clears and shows a "Design D1 ready (D2 did not complete)" status **Watch for:** Endless "Generating…" overlay that never clears; users waiting 20+ minutes for a result that never arrives
Team member, testimonial, and founder portrait slots now use descriptive image searches instead of searching by person names — which produced random results since stock libraries can't match named individuals. Portraits now describe characteristics like role, demeanor, and setting so the matched photos look appropriate and natural. Each team member slot also receives a distinct description so you get variety rather than near-identical headshots. **Where:** Client portal → Site creation → Design gallery → Team, Testimonials, and About sections **How to test:** - Generate a site with a team or testimonials section - Confirm team member photos look like distinct, realistic individuals appropriate for the business type - Confirm testimonial portrait photos show different people rather than near-duplicate headshots **Watch for:** All team member photos looking like the same person; portrait slots showing generic stock photos unrelated to the business
Sites where the hero section splits a headline into two visual lines (using a line-break character) were sometimes showing a mix of old and new text after a refinement — the second line stayed from the old headline. Refinement now handles split-headline patterns correctly. **Where:** Site editor → refinement on hero section headline **How to test:** 1. Open a site whose hero section renders the headline across two lines. 2. Ask the AI to change the headline (e.g., "update the hero headline to 'Build Faster'"). 3. Confirm both lines update correctly and no old text appears after a refresh. **Watch for:** The second line of the hero headline showing old text after the refinement is saved.
When you start a site with a vague description like "I want to build a website" or "need a site", the assistant now asks a clarifying question before jumping to preference questions — so your site is built around your actual business rather than generic defaults. Industry-switching mid-conversation (e.g. going from photography to real estate) also now correctly triggers a fresh set of questions. **Where:** Site creation chat → initial pitch step **How to test:** - Start a new site and type only "I want to build a website" — expect a follow-up question asking about your business - Then try a specific pitch like "I run a photography studio in Austin" — expect the preference card to appear directly - Try switching industries mid-conversation to confirm the assistant restarts the relevant questions **Watch for:** A vague pitch that still skips straight to the preference card without asking for more detail.
When choosing to modify a specific design variation or start fresh in a new direction, the AI was generating generic preference questions because it was working with outdated context from before the selection was made. It now uses the current selection when building its questions, so follow-up prompts like "what should we keep vs change" are accurately tailored to the chosen design. **Where:** Client portal → Site creation → Design gallery → Customize or Start fresh **How to test:** - Generate a site and open the design gallery - Select a variation and choose "Customize this design" or "Start fresh in a new direction" - Confirm the preference questions reference specific elements of the selected variation (e.g. "keep the dark hero?" rather than generic options) **Watch for:** Variation chat showing generic questions that don't reference the selected design; preference cards that feel disconnected from the actual variation shown
The variation chat assistant now uses AI to understand what you want from a variation request, replacing a hard-coded pattern matching approach that would sometimes misread your intent and trigger the wrong action. **Where:** Client portal → Site editor → Variation chat workspace **How to test:** - Open a site with multiple design variations - Ask the variation assistant to adjust a design or describe a preference - Confirm the assistant responds with the correct action rather than redirecting unexpectedly **Watch for:** Requests being misrouted (e.g., a style preference triggering a redirect instead of a design suggestion)
Variation chips in the site editor were only shown after their preview thumbnails finished loading, causing them to pop in several seconds after the page opened. Chips now render immediately on load, and the hover popover shows a progress shimmer while the preview boots — so you always know it's loading. **Where:** Client portal → Site editor → Variation chip bar (top of editor) **How to test:** - Open a site in the editor with multiple design variations - Confirm all variation chips are visible immediately without waiting - Hover a chip and confirm a loading shimmer appears before the preview renders **Watch for:** Chips still delayed or popping in after several seconds; hover popover showing a blank white flash
Screenshots for design variations were only succeeding about 4% of the time due to a timing bug where the screenshot process was terminated before it could complete. Screenshots were also showing blank sections mid-page because animated elements with hidden initial states weren't being revealed before capture. Both issues are fixed — variations now have screenshots on the first try, and every section of the page is captured. **Where:** Client portal → Site creation → Design gallery (variation thumbnails) **How to test:** - Generate a new site and go to the design gallery - Confirm all variation thumbnails show a screenshot (not a grey placeholder) - Confirm screenshots show the full page including sections below the hero **Watch for:** Most thumbnails showing grey placeholders; screenshots with blank or invisible middle sections
After applying AI refinements that triggered image regeneration, the version entry was silently dropped — users would see the History tab unchanged. Version entries now save correctly for all refinement types. **Where:** Site editor → History tab (version timeline) **How to test:** - Open a site and apply an AI change that triggers image regeneration - Open the History tab and confirm a new version entry appears **Watch for:** History tab showing no new entry after an AI image change; timeline appearing stale even after multiple edits
Restoring a previous version appeared to succeed (the activity feed confirmed the undo) but the editor and preview kept showing the pre-restore state — the change landed in the database but was never reflected on screen. Restoring a version now correctly updates all active editor views immediately. **Where:** Client portal → Site editor → Version history → Restore **How to test:** - Make a change to your site (e.g. a color or text refinement) - Open version history and restore a previous version - Confirm the editor preview immediately reflects the restored content — not the content from before the restore **Watch for:** Editor still showing the pre-restore version after confirming the undo; activity feed message showing a long AI-generated change summary instead of a short "Restored to version" line
When you deliberately removed an accent headline (the secondary colored text that pairs with a main heading) using voice commands, subsequent voice refinements were restoring the deleted accent text instead of leaving it cleared. Cleared accents are now treated as intentional and preserved across further edits. **Where:** Client portal → Site editor → Voice mode → Headline with accent text **How to test:** - Open a site with a hero heading that has accent text - Use voice to remove or clear the accent text - Make another voice refinement to a different part of the site - Confirm the accent text does not reappear **Watch for:** Removed accent text coming back after the next voice command; accent fields being reset to their original values
The agency campaigns, prospects, and templates pages were not responsive on mobile devices — layout was overflowing and hard to use on smaller screens. All three pages now adapt correctly to mobile. **Where:** Dashboard → Agency → Campaigns / Prospects / Templates (on mobile) **How to test:** - Open the agency campaigns page on a mobile browser or using DevTools mobile emulation - Confirm the layout fits within the screen without horizontal overflow - Repeat for Prospects and Templates pages **Watch for:** Horizontal scroll bars; text or buttons cut off on mobile screens
When a page component contained two independent popup or modal systems, the AI would detect only one and apply a band-aid fix (like blocking event propagation) instead of removing the duplicate at the source. The AI now recognizes files with multiple modal systems and receives full visibility into both, so it can resolve the actual duplication rather than masking it. **Where:** Client portal → Site editor → Request a fix for duplicate popups or modals **How to test:** - On a site where a popup appears twice when clicking a button, ask the AI to fix the duplicate popup - Confirm the AI removes one of the two modal systems (not adds a workaround like stopPropagation) - Also confirm that unrelated refinements (color changes, text edits) on the same file are unaffected **Watch for:** AI adding event-propagation workarounds instead of removing the duplicate modal; other refinements on the same component behaving unexpectedly
In some cases, the AI refinement would complete with a green checkmark and a success message, but the site content remained visually unchanged. The system was accepting the AI's output even when it was byte-for-byte identical to the original, creating a phantom version entry. Refinements that produce no change are now detected and returned as honest failures so users know to retry or rephrase their request. **Where:** Client portal → Site editor → Make a refinement request **How to test:** - Make a refinement request on a section - Confirm that if no visible change occurs, you see an "unable to apply" message rather than a green checkmark - Confirm successful refinements still show the green checkmark and apply correctly **Watch for:** Green success indicator with no visible change in the preview; phantom version entries in version history with no actual differences
Stock image results are now ranked by semantic relevance before being used in generated sites. Images that don't match the intended subject (e.g. a generic office photo for a medical clinic slot) are filtered out, and role-aware skip logic avoids applying the filter to decorative background slots where any image works fine. **Where:** Site generation — images are selected automatically during generation **How to test:** - Generate a site for a specific industry (e.g. "dentist", "bakery") - Inspect the generated images — they should closely match the section's purpose - Compare with a site generated previously; new sites should have fewer obviously off-topic images **Watch for:** Generation taking noticeably longer; image slots coming back empty when they shouldn't be
Server-written blueprint hints (like clone mode and classifier results) were being silently erased by a chat stream race condition, causing the AI to lose context about the site's intended style. These hints now survive the race and persist correctly. **Where:** Site creation wizard → Blueprint chat **How to test:** - Start building a site that involves cloning or a specific style intent - Continue through the blueprint chat - Confirm the AI maintains context about clone mode and initial style intent throughout the conversation **Watch for:** AI losing memory of earlier preferences mid-conversation; site plan diverging from stated intent after a few chat turns
Chat history was being wiped when a user's browser had no prior localStorage data — now it initializes correctly so conversation history is preserved from the first session. **Where:** Client portal → Site editor → Design assistant chat panel **How to test:** - Clear localStorage for the app origin - Open the site editor and start a chat - Refresh the page and confirm chat messages are still visible **Watch for:** Chat history still disappearing after a browser clear or in a fresh incognito session
Suggestion chips in the assistant chat were being cut off with an ellipsis due to a max-width constraint and forced truncation — now chips display their full text. **Where:** Client portal → Site editor chat → Suggestion chips; Platform assistant chat **How to test:** - Open a chat panel with suggestion chips visible - Confirm all chip text is fully readable without "..." truncation **Watch for:** Chip labels still truncated; text overflowing chip boundaries
When both AI generation attempts fail, the error message now includes which model failed and the specific reason for each failure, making it much easier to understand what went wrong. **Where:** Client portal → Site editor → Generate → Error state **How to test:** - Trigger a generation failure (e.g., with an invalid prompt or in a test environment) - Confirm the error message names the specific failure reason for each model tried **Watch for:** Generic "generation failed" message with no detail; error message missing information about which model was used
For complex edit requests (layout changes, component fixes, multi-section updates), the AI now sees the entire page — not just the targeted section — when the page is under 80K characters. This gives the AI visibility into related components, reducing cases where it applied a narrow fix to one component without accounting for how it interacts with siblings on the same page. **Where:** Client portal → Site editor → Make an edit request in the chat **How to test:** - On a site with linked components (e.g. a modal that also appears in a parent section), ask the AI to fix or update one of them - Confirm the edit correctly accounts for the related component without introducing band-aid workarounds **Watch for:** Edits that fix one component but break another; the AI using workarounds (like stopping event propagation) instead of fixing the underlying cause
Sites that were soft-deleted were still showing up in the client dashboard's "My Sites" list, causing confusion. Deleted sites are now properly hidden from all dashboard views. **Where:** Dashboard → My Sites **How to test:** - Delete a site from the client dashboard - Navigate back to the My Sites view - Confirm the deleted site is no longer listed **Watch for:** Deleted sites still appearing in the list; clicking a deleted site causing an error
Generating a page variation now opens a structured three-step workspace (Intent → Vision → Inspiration → Plan) mirroring the site-builder flow. You describe what you want, the AI surfaces relevant preference questions, you optionally pick an inspiration template, then review the plan before generating — instead of typing everything into a single chat box. You can also paste a reference image URL and the new variation will pick up its visual style without copying it literally. **Where:** Site editor → Pages tab → any page → "Generate Variation" button → variation workspace panel **How to test:** - Open a site in the editor, go to Pages, click a page's variation menu and choose "Generate Variation" - Work through Intent → Vision → Inspiration → Plan tabs; confirm the chat reflects your answers - Paste a design reference URL in the Inspiration tab; generate and confirm the output style reflects it **Watch for:** Workspace not loading; plan tab staying blank; design reference URL not passing through to generation
Switching between generated design variations could leave a "reconciling" overlay indefinitely with no way to proceed — now the overlay clears immediately and the selected design loads without delay. **Where:** Client portal → Site editor → Variations gallery → Choose a design **How to test:** - Open a site that has multiple generated variations - Click to switch to a different design - Confirm the overlay clears and the new design appears promptly **Watch for:** Spinner or "reconciling" overlay persisting after clicking a design; page requiring a refresh to continue
AI-generated rationale text for design variations was sometimes including raw markdown, code fragments, or garbled text due to an overly broad auto-fix regex. Rationale text is now sanitized properly so descriptions are clean and readable. **Where:** Client portal → Site editor → Variations gallery → Design cards (rationale/description text) **How to test:** - Generate a site with multiple variations - View the variation cards in the gallery - Confirm each card's description text is clean plain language with no code fragments or raw markdown **Watch for:** Markdown symbols (**, ##) visible in description text; code snippets appearing in variation titles
In some cases, form configuration saved through the blueprint or variation editor was being stored in an incompatible shape, causing forms to behave incorrectly or revert on the next load. The save layer now normalizes form data to the correct format on every write, regardless of how it arrived — preventing data-shape mismatches from persisting to the database. **Where:** Client portal → Site editor → Forms and contact sections **How to test:** - Edit your site's contact form or embedded form settings and save - Reload the page and confirm the form settings are preserved exactly as saved - Submit a test form entry and confirm it appears correctly in the forms inbox **Watch for:** Form configuration reverting after save; form fields appearing in the wrong order or with incorrect settings after a reload; forms inbox showing unexpected data shapes
When blueprint content included form data in an unexpected object shape, the site preview container would crash with an error. Forms data is now normalized to the correct array format before rendering. **Where:** Client portal → Site editor → Preview panel (sites with contact forms) **How to test:** - Open a site that has a contact form - Confirm the preview renders without a crash or blank state - Make a change to the form settings and confirm the preview still loads **Watch for:** Preview going blank; "cannot read property of undefined" errors in the console related to forms
Contact forms and other form components now render properly on public share preview links. Previously, sites previewed via a share link would show a "Form config missing" error in place of the form, even when the form was set up correctly in the editor. **Where:** Any public share link (`/preview/...`) for a site with contact forms or booking forms **How to test:** - Open a site that has a contact form in the editor - Share the preview link (Share button → copy link) - Open the share link in a new tab (or incognito window) - Confirm the form renders correctly instead of showing an error **Watch for:** "Form config missing" diagnostic label appearing on forms in the shared preview; form components rendering blank
Several visual issues with the design gallery and variation chips have been fixed: thumbnails were showing stale cached previews after a refinement until the next full page reload; variation chip previews were briefly flashing to opacity when switching between them during an update; and screenshots were occasionally cropped to non-standard dimensions due to an edge-trimming artifact. All three are now resolved. **Where:** Client portal → Site editor → Variation chips and design gallery thumbnails **How to test:** - Make a refinement to your site and observe the variation chip/thumbnail — confirm it updates to show the new content without a flash or stale preview - Reload the page after a refinement and confirm the updated preview persists (not the pre-refinement version) - Generate a new site and inspect gallery thumbnails for consistent, uncropped dimensions **Watch for:** Thumbnails reverting to a pre-refinement version after page reload; chip previews briefly flashing to full opacity mid-update; gallery cards with inconsistent heights or cropped edges
A cluster of bugs was causing generated sites to display wrong or mismatched images — slots were using incorrect prefixes, backfill was replacing the wrong images, and duplicate images appeared across entries. All three root causes are now fixed. **Where:** Site editor → View generated site → Image sections (hero, gallery, team, etc.) **How to test:** - Generate a new site - Review the images used in each section — hero, services, team, gallery - Confirm images are appropriate for each section and don't repeat across unrelated sections **Watch for:** Team member photos appearing in the hero; the same image used in multiple unrelated sections; placeholder gradients where real images should be
On some generated sites, images inside list-based sections (such as services, team members, or portfolio items) were showing broken image placeholders instead of the sourced photos. The image assignment was resolving correctly but being silently dropped before it could be written into the content. All list-section images now render as expected. **Where:** Client portal → Site editor → Sections with item lists (services, team, portfolio, etc.) **How to test:** - Generate a site and inspect sections that contain item lists with images - Confirm each item shows its sourced image (not a broken or empty image) - Check D2 and D3 variations as well — they were most affected **Watch for:** Broken image icons in services, team, or portfolio sections; list items showing no image while the hero image is fine
A persistent AI assistant bar is now available throughout the dashboard and client portal — not just inside the Mission Control panel — so users can ask questions and get help from anywhere in the product. **Where:** Dashboard (bottom bar); Client portal pages outside the editor **How to test:** - Navigate to the main dashboard - Confirm the assistant bar is visible at the bottom of the screen - Ask a question and confirm you get a helpful response - Navigate to different pages and confirm the bar stays available **Watch for:** Assistant bar not appearing on the dashboard; bar disappearing on navigation
The preview refresh button is now placed in the top-level editor toolbar between the share and three-dots menu, making it easier to find and click without hunting through sub-menus. **Where:** Site editor → Top toolbar **How to test:** - Open any site in the editor - Locate the refresh button in the top toolbar (between share and ⋮ menu) - Click it and confirm the preview refreshes **Watch for:** Refresh button missing from toolbar; button appearing in the wrong position
New users arriving at the site builder for the first time now see a polished showcase screen instead of a blank workspace, with clear guidance on how to describe their business and what to expect. **Where:** Site builder → new site page (before entering any business description) **How to test:** - Open a new site in the builder with no existing blueprint data - Confirm the showcase/empty-state design appears with prompts to get started - Enter a business description and confirm the normal wizard flow begins **Watch for:** Showcase flashing on returning users who have existing sites; broken layout on mobile
A class of bug was causing refinement requests on certain sections to trigger a full hero-section rewrite, replacing content the user hadn't asked to change. Orphaned content keys are now cleaned up properly so the AI only touches what was requested. **Where:** Client portal → Site editor → Chat → Ask to change a section **How to test:** - Open a site with an existing hero section - Ask the assistant to change a non-hero section (e.g., "update the services section") - Confirm the hero section is unchanged after the refinement **Watch for:** Hero text or images changing when only another section was edited; content from other sections leaking into the hero
Certain refinements were failing with an "Expecting Unicode escape sequence" error when the AI-generated code contained special characters — the response is now sanitized before parsing so these refinements complete successfully. **Where:** Client portal → Site editor → Chat → Ask for a content change **How to test:** - Open a site and ask for a refinement that includes special characters (accented letters, emoji, symbols) - Confirm the refinement completes without an error message **Watch for:** "Expecting Unicode escape sequence" error in the chat; refinement appearing to succeed but no changes applied
After regenerating a site, the editor would sometimes display the wrong design variation — showing D1's content while the URL indicated D4, or getting stuck in a "Reconciling…" state. Subsequent refinements on that session could also silently overwrite the wrong variation. The active variation pointer is now kept in sync across all code paths so the editor always loads and saves to the correct design. **Where:** Client portal → Site editor → Regenerate **How to test:** - Generate a site with multiple variations, select D3 or D4, then trigger a regenerate - Confirm the editor hydrates with the correct variation content (not D1) after regeneration completes - Make a refinement and confirm it applies to the expected design **Watch for:** "Reconciling…" spinner that never resolves; editor showing the wrong design's content after regeneration; refinements being applied to D1 when D3 or D4 is selected
When you share a link to a site in the editor or via the share URL, it now generates a proper Open Graph image preview so recipients see a visual card with the site's name and screenshot instead of a plain link. **Where:** Site editor → Share button → Copy link; any share URL sent via /share/[siteId]/[token] **How to test:** - Generate or open an existing site - Copy the share URL from the editor - Paste the link into Slack or iMessage - Confirm a visual card appears with the site name and screenshot **Watch for:** Blank/missing preview card; generic meta tags without the site screenshot
The blueprint wizard's Plan tab had several issues: the showcase preview was hidden, plan section items weren't appearing, and new sections were inserted in the wrong position relative to the footer. All three are now fixed. **Where:** Site creation wizard → Plan tab **How to test:** - Open the blueprint wizard for a site - Go to the Plan tab - Confirm the showcase preview is visible - Confirm all planned sections appear in the list - Add a new section and confirm it appears above the footer **Watch for:** Blank showcase area; missing sections in the plan list; sections appearing after the footer
An unescaped regex pattern in the preview HTML generator was causing the site editor preview to crash or show a blank screen when the site content included tabs, newlines, or carriage returns. The regex is now correctly escaped. **Where:** Client portal → Site editor → Preview panel **How to test:** - Open a site that has multi-line text content (e.g., address blocks or multi-paragraph copy) - Confirm the preview renders without going blank - Try refreshing the preview and confirm it loads consistently **Watch for:** Blank preview panel; browser console errors mentioning regex or HTML parsing
The dashboard site search now understands intent, not just text. Searching "food" will surface catering sites; "solar energy" finds home-services clients — even when the exact words don't appear in the site name. Exact-name results still sort first. **Where:** Dashboard → search box in the site list **How to test:** - Go to the dashboard with several sites from different industries - Search for a category (e.g. "restaurant", "legal", "fitness") and confirm relevant sites appear even if the word isn't in the site name - Search for an exact site name and confirm it still appears at the top **Watch for:** Search returning no results or unrelated results; slow response on large site lists
After switching from one design variation to another, the site editor and refinement AI were sometimes reading the previous variation's files instead of the newly selected one. This could cause refinements to apply to the wrong design or show outdated content. Design switching now correctly updates all file references so the editor and AI always see the current design. **Where:** Client portal → Site creation → Design gallery → Switch between variations **How to test:** - Generate a site with at least two designs, select D1, make a refinement, then switch to D2 - Confirm the editor shows D2's content (not D1's) immediately after switching - Make a refinement on D2 and confirm it applies to D2, not to D1 **Watch for:** Editor showing a previous design's content after switching; refinements going to the wrong variation
Thumbnails for Design 1 and Design 2 in the variation gallery were frequently failing to load due to batch errors with no retry logic — now errors are handled gracefully and thumbnails retry automatically. **Where:** Client portal → Site editor → Choose design → Variations gallery **How to test:** - Open a site with multiple generated designs - View the variations gallery - Confirm all design thumbnails load without blank placeholders **Watch for:** Blank or broken thumbnail images; gallery taking a very long time to show previews
The platform assistant's voice session now persists as you navigate between dashboard pages and the site editor, so you don't lose your voice connection or conversation history when switching views. **Where:** Dashboard → Platform assistant bar (bottom) → Navigate to another page **How to test:** - Start a voice session in the platform assistant bar - Navigate to a different page (e.g., from dashboard to a site editor) - Confirm the voice session remains active and conversation history is preserved **Watch for:** Voice session disconnecting on page navigation; conversation history resetting to empty
Voice interactions now stay in English rather than auto-detecting the spoken language, which could cause the assistant to transcribe and respond in Portuguese or another language mid-session. **Where:** Any voice-enabled assistant session (site editor, platform assistant bar, admin chat) **How to test:** - Start a voice session in the site editor assistant - Speak clearly in English and confirm responses stay in English - Repeat for the platform assistant bar (dashboard bottom) **Watch for:** Assistant responding in a different language despite English speech; voice transcription showing wrong language text
Voice mode during site creation now goes through the same preference-card intake and plan-quality guardrails as text chat, so users get the same quality of site plan regardless of how they describe their business. **Where:** Site creation wizard → Start with voice **How to test:** - Start a new site and choose the voice intake option - Speak your business description - Confirm preference cards appear and are filled from the voice input - Confirm the generated plan matches the quality seen with chat input **Watch for:** Voice intake skipping preference cards; plan missing key sections that chat produces
Voice mode sessions were failing to start after a previous update that added a language configuration parameter the server does not accept. Sessions now connect successfully again without the unsupported parameter. **Where:** Voice-enabled assistant sessions (site editor, platform assistant bar, admin chat) **How to test:** - Click the microphone icon to start a voice session in the site editor - Confirm the session connects and the waveform animation appears - Speak a refinement request and confirm it is processed correctly **Watch for:** Voice sessions failing to start with an API error; microphone icon spinning indefinitely without connecting
Changes made via voice commands in the site editor weren't syncing to the preview iframe — the preview remained stale until a manual refresh. Voice refinements now apply immediately to the live preview. **Where:** Client portal → Site editor → Voice mode → Speak a change **How to test:** - Open a site in the editor and activate voice mode - Ask the assistant to change a color or headline - Confirm the preview updates without needing a manual refresh **Watch for:** Preview staying unchanged after a voice refinement; needing to click refresh to see voice changes
Preference cards filled out during the site-building wizard were lost on page refresh, forcing users to re-enter their answers. Cards are now saved and restored automatically. **Where:** Site creation wizard → Preference card step **How to test:** - Start the site creation wizard and fill in preference cards - Refresh the page - Confirm your preference answers are still shown **Watch for:** Cards reverting to empty after a refresh; wizard restarting from scratch
When you ask the chat panel inside the visual editor to add new pages — or to "create a page and link to it from this hero CTA" — you now see the same reviewable plan card the main assistant uses, with each new page's hero angle, sections, and CTA. Edit any field, drop pages you don't want, then click Create. If the request also implied an edit on the page you're currently viewing (e.g. wiring a button to the new page), an "Also update the current page" line shows up below the plan; after the new pages are created, the current page is refined automatically to wire the link. **Where:** Client portal → Site editor → Chat panel (right rail), on a finalized site **How to test:** - Open a finalized site in the editor - In the chat, ask "add a privacy policy and a terms of service page" — a plan card should render inline with both pages - Edit any field on the card, then click Create — both pages should land in the Pages list - For the mixed-intent flow, ask "on the homepage hero, when the user clicks the primary CTA take them to a new property detail page that I want you to create" — the plan card should show one page (`/property-detail`) plus an editable "Also update the current page" line ("Wire hero CTA to /property-detail"). Click Create — the new page should be created AND the homepage hero CTA's link should be updated to point at it **Watch for:** Plan card not appearing for "add a page" requests, pages already on the site appearing in the plan, the follow-up edit running before the new page exists, the card locking as "completed" after a partial failure
The blueprint builder chat (used during site intake) is now easier to use on mobile phones. The input area stays visible when the keyboard opens, voice input controls are properly sized, and the chat drawer scrolls more predictably on small screens. **Where:** Site builder → intake chat on a phone-sized screen **How to test:** - Open the site builder on a mobile device or mobile-sized DevTools viewport - Tap the chat input — confirm the keyboard doesn't cover the input or send button - Try voice input and confirm the button is easy to tap - Scroll up through the conversation history — confirm it scrolls smoothly **Watch for:** Input hidden behind the keyboard; voice button unresponsive; chat history not scrollable
When you type or paste your website URL during the blueprint intake chat, it is now saved to the business profile automatically. Previously the URL was recognised in conversation but not persisted, so it would be missing from the generated site's footer and SEO fields. **Where:** Site builder → intake chat → mention your existing website URL **How to test:** - Start a new site and in the intake chat type something like "my current site is https://example.com" - After the chat, open the site preview and confirm the URL appears in the footer or contact section - Check the blueprint → business fields and confirm `existing_website` is set **Watch for:** URL not persisting across a page refresh; URL appearing in the chat transcript but not the blueprint
Border radius values set in the theme (e.g. rounded corners for buttons and cards) were not being forwarded through the design token pipeline, so corners would look sharp even when the theme specified rounded. This is now fixed so the visual style matches the intended design. **Where:** Generated and refined sites — button corners, card corners, and form input corners **How to test:** - Generate a site or open an existing one with rounded-corner styling - Check that buttons, cards, and input fields display the expected corner radius - Make a refinement and confirm the radius is preserved after the edit **Watch for:** Corners going sharp unexpectedly after a refinement; radius values differing between desktop and mobile preview
Generated sites with contact forms occasionally had a mismatch between the form component's ID and the form definition in the site blueprint, causing submissions to fail silently or the form not to render at all. IDs are now reconciled automatically during generation and extraction. **Where:** Generated sites with contact forms — visible in the live preview and after publishing **How to test:** - Generate a site for a business that would include a contact form (e.g. a plumber or consultant) - Open the site in the editor preview — the form should render with all fields - Submit a test entry and confirm it appears in the Forms inbox **Watch for:** Blank white box where the form should be; form renders but submissions don't show up
Non-default fonts (anything other than Inter) that were defined in CSS cascade rules were being lost during site refinements and theme extraction. They are now correctly recovered and maintained, so a site designed with a custom heading font keeps it after AI edits. **Where:** Site editor — fonts applied during generation or manual theme edits **How to test:** - Generate a site that uses a distinctive font (e.g. a serif heading font) - Make an AI refinement (e.g. change a section's colour) and confirm the font is unchanged in the preview - Open the theme panel and confirm the correct font names appear **Watch for:** Font reverting to Inter after a refinement; font variables missing from generated CSS
Published (deployed) sites now appear only in the "Published" tab — they were incorrectly showing in "Drafting" and excluded from "Published". The "Ready" tab also no longer includes published sites. **Where:** Dashboard → filter tabs (All / Drafting / Ready / Published) **How to test:** - Ensure at least one site has been published (has a live deployment URL) - Check the Published tab — the deployed site should appear there - Check Drafting and Ready tabs — the published site should not appear **Watch for:** Sites disappearing entirely from all tabs; count badges not matching actual site counts
Pressing the browser Back button from the site editor now returns you to the exact position in the dashboard you left — same scroll position, same active filter tab. Previously the list reset to the top with all filters cleared. **Where:** Dashboard → open a site → press Back **How to test:** - On the dashboard, scroll down, apply a filter (e.g. "Drafting"), click into a site - Press the browser Back button — confirm the dashboard is scrolled to roughly the same position and the same filter is active **Watch for:** Position still resetting on mobile browsers; filter not persisting across hard refreshes
The "Why this design?" rationale shown for each generated variation was displaying raw markdown syntax (asterisks, hashes) instead of formatted text. It now renders correctly with bold, headings, and bullet points. **Where:** Site builder → design variation cards → expand the rationale section **How to test:** - Generate a site and open the variation selector - Expand the rationale for any variation — confirm it shows formatted text with no visible markdown symbols - Compare the styling across multiple variations **Watch for:** Rationale still showing raw `**bold**` or `# heading` syntax; rationale section missing or collapsed permanently
Screenshots used as thumbnails for design variations were capturing only the visible viewport instead of the full page. They now scroll through and capture the entire page, giving you a more accurate preview of each variation before you choose one. **Where:** Site builder → design variation selector thumbnails; Admin → Gallery **How to test:** - Generate a site with multiple design variations - Open the variation selector and compare the thumbnail images — they should show the full page layout, not just the hero area - Switch between variations and confirm thumbnails update to reflect the selected design **Watch for:** Thumbnails still showing only the top portion; screenshots timing out on long pages; blurry or low-resolution thumbnails
When a detailed business pitch is submitted (with industry, audience, and description detected), the preference step now correctly shows the longer form format with up to 6 targeted questions instead of collapsing to a 3-option card. Previously, business details extracted from the pitch were not visible to the mode selector, causing every pitch to render as a minimal card. **Where:** Client portal → Site setup chat (Turn 1 preference step) **How to test:** - Start a new site with a substantive pitch (e.g., "Bella Napoli pizzeria, Italian food, targeting families and date nights") - The preference step should show 5–6 questions in form format, not a 3-card quick-pick - A minimal pitch ("build a website") can still show the compact card format **Watch for:** Substantive pitches still showing only 3 option cards; form mode not appearing for detailed business descriptions
Sites that looked correct in the editor sometimes shipped to R2 with empty testimonials, missing author names, or broken quotes — even though the same site rendered correctly in the preview iframe. The cause was a parallel pair of pipelines that drifted: the editor preview ran an inline JavaScript content-aliaser that filled equivalent keys (heading↔headline, item.author↔item.name, item.quote↔item.content), but the publish-to-R2, gallery thumbnail, and SSR screenshot paths skipped that step entirely. Today we consolidated everything onto a single shared aliaser that runs on every render surface, plus added a save-time contract that catches field-level mismatches before a variation is even saved. **Where:** Affects every published site, every gallery thumbnail, every variation screenshot, and every SSR preview. The visible symptom showed up on canonical AI output where the variation extractor named fields differently than the rendered code — most often testimonials with empty quote bubbles and missing author names. **How to test:** - Open any site whose variation extraction emitted alternate field names (variations like D2 of multi-page sites are most common). The testimonial section should render real quotes and author names in BOTH the editor and the deployed page. Pre-fix, the editor showed them but the deployed page was blank. - Publish the site to R2 and inspect `<head>` of the deployed HTML — there must be a `<link href="https://fonts.googleapis.com/css2?family=...">` tag matching the fonts visible in the editor. ThemeStyles-based sites used to ship without this link entirely. - Refine a variation and ask the AI to "change body font to Inter" on a site whose theme component is named ThemeStyles. The font should actually update; pre-fix the apply path silently no-oped because it couldn't find the theme file. - Generate a new site with a V2 variation that emits `item.name` / `item.content` in testimonials. Variation save should reject it with an `item-field-missing` error rather than persisting and rendering blank cards in production. **Watch for:** - The publish path now logs a non-blocking content-shape audit per page: `[Publish] Content-shape audit flagged N issue(s) on page <slug>`. Repeated audits on the same site after publish suggest a manual blueprint edit drifted from the code shape — the site still publishes (the runtime aliaser saves the user) but the drift should be investigated. A spike in these warnings across many sites means the variation extractor regressed. - Variation save now blocks on `item-field-missing` issues. Legitimate per-item field reads on populated arrays should pass; if you see a real save get rejected, the detector's `ITEM_FIELD_ALIASES_LC` table may be missing an alias that should resolve. Add the alias in both `lib/services/content-field-aliaser.ts` AND `components/admin/playground/utils/previewHtmlGenerator.ts:8475` (the parity test asserts they stay in lockstep). - Theme/ThemeStyles file lookup is now a single shared helper. If a future generation emits the theme component under a different name (e.g. `Tokens.tsx`, `ThemeProvider.tsx`), it'll silently miss the publish-time font extraction the same way `ThemeStyles.tsx` did before. Extend `THEME_FILE_NAMES_LC` in `lib/services/theme-file-finder.ts` and the parity test will surface drift on the next publish.
AI-generated sites with transparent-on-scroll headers were producing nav links in the same color as the hero background, making them invisible until the user scrolled. Navigation text and background colors are now always paired for readable contrast. **Where:** Any newly generated or regenerated site with a hero section and sticky navigation **How to test:** - Generate a new site with a hero section and a header - Confirm navigation links are readable against the hero background before scrolling - Scroll down and confirm the header background becomes solid with readable text **Watch for:** Dark-on-dark nav text at page top; nav links invisible until scroll threshold is reached
Three visual bugs that appeared regularly in generated sites are now prevented at the prompt level: headlines breaking at odd points (mid-word or after a single word on a line), SVG icons and graphics being clipped by their container, and the sliding card arrows component being placed in the wrong location on the page. **Where:** Generated site previews and published sites **How to test:** - Generate a site with a hero section and a services carousel - Check that hero headlines display on one or two clean lines without odd mid-word breaks - Inspect SVG icons in feature cards — they should be fully visible, not cut off - If a carousel with navigation arrows is generated, confirm the arrows sit at the sides of the carousel, not above or below it **Watch for:** Headline wrapping still splitting oddly on narrow viewports; arrows missing entirely; SVG icons still clipping in some sections
When you paste a business URL during intake, the AI now extracts the business's phone number, email address, physical address, and social media handles from the site — in addition to the business name and description it was already capturing. This contact info flows directly into the generated site so you don't have to enter it manually. **Where:** Site builder → intake chat → paste a business URL **How to test:** - Start a new site and paste the URL of a real local business - After generation, open the site preview and check the footer and contact section for the phone, email, and address - Confirm social links (if present on the source site) appear in the footer **Watch for:** Contact info missing from the generated site even though the source site had it; placeholder social URLs (like `https://instagram.com`) appearing instead of real handles
When a business URL is detected during the intake chat, the preference card now switches into a redesign mode with a focused "content reuse" question instead of generic style chips. Scraped contact info (phone, email, address, social handles) is automatically captured into the blueprint so you don't have to retype it. The intake form also got a visual overhaul with clearer labels and a tighter layout. **Where:** Site builder → intake chat → paste or type a business URL **How to test:** - Start a new site and paste a real business URL in the chat - Confirm the preference card shows "Reuse all / Keep facts, rewrite copy / Reference only / Ignore" instead of generic style options - After generation, check that the business phone, address, and social links in the site match the scraped site - Complete the flow without a URL — confirm the original style-preference chips appear as before **Watch for:** Preference card staying in generic mode after a URL is pasted; scraped contact info not appearing in the generated site; social handles showing placeholder URLs
The Design Assistant's mobile chat dock now stays out of your way without losing track of what's happening. When you collapse the dock, a small result pill appears at the bottom-right showing the latest AI activity — with quick **View**, **Undo**, and dismiss controls. Successful changes auto-clear after a few seconds; failures stick around until you dismiss them. The activity feed inside the dock uses tighter spacing on mobile, and Image/Voice/Mention/Edit-brief have been collapsed into a single **+** menu next to the input so the dock has more room for messages. **Where:** Site editor on mobile → Design Assistant chat dock (the Sparkles button at the bottom) **How to test:** - Open the site editor on a phone-sized screen (or browser DevTools mobile viewport) - Open the chat dock and send a refinement (e.g. "make the hero headline bolder") - After the change applies, tap the **X** to collapse the dock — a result pill appears bottom-right with status dot, summary, View, Undo, and X - Tap **View** to re-open the dock; tap **Undo** to revert; tap **X** to dismiss - Wait ~6 seconds without interaction — successful pills auto-dismiss; failure pills do not - Inside the dock, tap the **+** above the input to reveal Attach image / Talk to AI / Mention / Edit brief **Watch for:** Pill overlapping the floating chat button; pill not updating when a new change arrives; the **+** popover not closing on outside tap; Edit brief failing to open the brief drawer
The floating chat button on mobile no longer shows an issue count badge (which was alarming and unrelated to site editing). The chat dock is also slightly taller so more of the conversation is visible without scrolling. **Where:** Site editor on mobile → floating chat button (Sparkles icon at the bottom of the screen) **How to test:** - Open the site editor on a phone-sized viewport - Confirm the floating button shows only the sparkles icon with no badge or count - Tap to open the dock — confirm it has a comfortable height showing at least 3–4 message bubbles **Watch for:** Badge reappearing after a refresh; dock height reverting on orientation change
After your site is finalized, the Mission Control home screen now surfaces a single recommended action as the primary focus — front and center above the preview — instead of ten equal-weight panels competing for attention. Freshly-finalized sites get a tailored "Review your site, then publish" prompt; returning sessions show the most relevant next action based on site state. Secondary panels are grouped into collapsible sections to reduce noise. **Where:** Client portal → Home tab (after site finalization) **How to test:** - Open a site that has been recently finalized - The home screen should show one prominent action card at the top (above the site preview) - Below it, checklist and other panels should be collapsed into disclosure groups - Expanding a disclosure group should persist across page refreshes (stored per site) - Click "Why we're recommending this" on the focus card to see the reasoning **Watch for:** Focus card not appearing after finalization; sections not collapsing; disclosure state not persisting on refresh
If a CDN-hosted library (e.g. Framer Motion or GSAP) failed to load on the first attempt, the site preview would stay blank or broken. The preview now retries failed imports automatically and provides clearer diagnostics when retries are exhausted. **Where:** Site editor preview panel — visible immediately after generation or when reopening a site **How to test:** - Open a site that uses animation libraries in the editor - Throttle the network to simulate a slow connection (browser DevTools → Network → Slow 3G) - Confirm the preview eventually loads even with slow or initially failed CDN requests **Watch for:** Preview still staying blank after 30+ seconds on a normal connection; error message appearing even when libraries load successfully
The site setup assistant now always pauses after your initial pitch to ask a short set of business-specific questions before generating the plan — even on detailed pitches. Text fields show concrete pre-filled examples (e.g., menu items for a restaurant, class descriptions for a yoga studio) so you can accept or customize rather than starting from scratch. **Where:** Client portal → Site setup chat (Turn 1) **How to test:** - Start a new site with a detailed business description (e.g., "Bella Napoli, an Italian pizzeria in Brooklyn") - After submitting Turn 1, a preference card with 4–6 business-specific questions should appear before any plan is shown - Text-area questions should display 2–3 pre-filled example options relevant to your industry **Watch for:** Preference card not appearing on Turn 1 for detailed pitches; text-area fields showing no quick-fill suggestions
If switching to a different design variation failed (e.g. due to a network error), the preview would go completely blank. It now recovers to the previously displayed site files so you're never left with a white screen. **Where:** Site builder → design variation selector → switch between variations **How to test:** - Open a site with multiple design variations in the builder - Switch between variations and confirm previews load correctly - Simulate a failure (e.g. slow network) and confirm the previous design remains visible instead of going blank **Watch for:** Blank preview appearing on successful switches; variation selector becoming unresponsive after a failed switch
Applying an AI text rewrite now saves a version snapshot and creates an undoable activity entry, so you can revert with one click just like other edits. Previously the change was permanent with no history entry. **Where:** Site editor → select text → AI rewrite → Apply **How to test:** - Open a site in the editor, select a text block, request a rewrite (e.g. "make this shorter") - Apply the rewrite and confirm the version history shows a new entry - Use Undo (Cmd/Ctrl+Z or the activity feed) and confirm the original text is restored **Watch for:** Version history entry missing after apply; Undo not restoring the previous text; duplicate history entries on rapid rewrites
When you paste a competitor URL and choose "Clone content + design", the generated site now actually preserves the scraped content (services, testimonials, FAQs, contact info, footer columns) instead of generating fresh placeholder text. The site-reference chip in the builder is now an interactive dropdown with four explicit options — Clone content + design, Reuse content / redesign, Use as inspiration, Visual only — so your intent is unambiguous. **Where:** Site builder → paste a URL with clone intent → site-reference chip (shows the domain name) **How to test:** - Start a new site, paste a URL of an existing business site when prompted - Confirm the chip appears; click it and see the four mode options - Select "Clone content + design" and generate — the output should use the scraped business name, services, and contact info verbatim - Select "Reuse content, redesign" — same content facts but different phrasing and visual style - Select "Use as inspiration" — design influence only, no literal content copying **Watch for:** Chip not appearing when a URL is pasted; mode change not persisting across page reload; generation ignoring the selected mode
Refinement edits that were stored without a page tag (common during multi-file edits) now appear correctly in the page version history. Previously these entries were silently excluded, making version history look incomplete. **Where:** Site editor → Pages tab → page options → Version History **How to test:** - Make several AI refinement edits to a page in the editor - Open Version History for that page and confirm all edits appear, including recent ones - Restore a previous version and confirm the page reverts correctly **Watch for:** History still missing some entries; restore producing a blank page
Text in the AI assistant panel is now correctly sized, long assistant responses truncate with a "show more" expansion instead of overflowing, and tables/code blocks scroll horizontally rather than breaking the layout. **Where:** Client portal → Site editor → Assistant panel (right rail) **How to test:** - Open the site assistant and ask a question that returns a long response - Verify text size matches the rest of the editor UI - Ask something that returns a table or code block — verify it scrolls horizontally rather than breaking the panel width **Watch for:** Text appearing too large or too small, code blocks breaking the panel layout, long responses not truncating
The site assistant and blueprint chat now correctly render table syntax (pipe-separated rows and headers), and follow-up suggestion chips are shorter and more action-oriented rather than echoing assistant headings. **Where:** Client portal → Site editor → AI assistant panel; New site → site creation chat **How to test:** - Ask the AI assistant a question that produces a comparison table (e.g., "Compare these two color palettes") - Confirm the table renders with proper rows and header styling - Check that follow-up suggestion chips are concise action phrases (under ~55 characters), not label-style text **Watch for:** Tables rendering as raw pipe characters; chips being cut off with "…" or echoing assistant section headings
Suggestion reply chips in the site assistant and creation chat are now properly contained within the chat bubble — long suggestions truncate with an ellipsis instead of breaking out of their container. **Where:** Client portal → Site editor → AI assistant panel; New site → site creation chat (suggested replies row) **How to test:** - Trigger a response with suggestion chips (e.g., start the site creation chat) - Confirm all chip buttons stay within the chat bubble width and long labels are truncated cleanly **Watch for:** Chips extending beyond the chat bubble boundary or overlapping with adjacent UI elements
A code analysis bug that caused Design 2 (and similar multi-component designs) to show a parse error ("Expected '}' but found 'e'") during auto-fix is resolved — the brace counter now correctly handles multi-line JSX event handlers and import ordering. **Where:** Site editor → any page with generated code that triggers auto-fix **How to test:** - Open a site with multiple component designs and trigger a refinement that activates auto-fix - Confirm Design 2 and other designs render without parse errors - Verify no valid code sections are removed during the auto-fix pass **Watch for:** Parse errors appearing in site previews after generation or auto-fix; sections of code disappearing unexpectedly
A bug that caused the business location field to accumulate duplicate entries (e.g., "Bangalore, India × 8") when updated through voice mode or the site creation chat is now fixed. **Where:** Client portal → New site → site creation chat or voice mode → business location input **How to test:** - Start a site using voice mode or the chat and provide a business location - Update the location or repeat the setup flow - Confirm the location field shows the city/region only once, not repeated **Watch for:** Location appearing multiple times in the site's About or Contact section after creation
Site data and pending invitations now time out gracefully if the network is slow or a request stalls, preventing the dashboard from spinning indefinitely and removing stale console errors. **Where:** Dashboard (main page, organization page, user menu) **How to test:** - Load the dashboard on a slow or throttled connection - Verify the page eventually shows an error or fallback state rather than spinning indefinitely - Check the browser console — no uncaught promise rejection errors from abandoned fetch requests **Watch for:** Dashboard still stuck loading after 30 seconds on a poor connection, or error boundary triggering on normal loads
The "Design Assistant" heading in the client portal's site editor was white-on-white and unreadable when using the light theme — it now uses a dark text color that matches the panel surface. **Where:** Client portal → Site editor → Design Assistant panel (light theme) **How to test:** - Open a site in the client portal editor - If the editor is in light mode, open the Design Assistant panel - Confirm the "Design Assistant" heading text is clearly visible (dark text on light background) **Watch for:** Heading still appearing invisible or very faint in light mode
Refining the homepage page (slug '/') previously showed no preview update and never activated the undo button — both are now fixed so homepage edits behave the same as any other page. **Where:** Client portal → Site editor → Pages → Homepage → AI refinement **How to test:** - Open a site and navigate to the homepage in the editor - Ask the AI assistant to make a change (e.g., "Change the hero headline") - Confirm the site preview updates to reflect the change - Confirm the Undo button becomes active after the refinement completes **Watch for:** Preview staying unchanged after a homepage refinement; Undo button remaining greyed out
When adding a new page (Services, About, Pricing, Contact, etc.), the AI now generates a layout with structure and sections appropriate to that page type instead of mirroring the homepage's hero and section sequence. **Where:** Client portal → Site editor → Add Page **How to test:** - Open a site with a distinct homepage design (hero, features, testimonials) - Add a Services or About page - Verify the new page has its own section structure and doesn't copy the homepage hero layout verbatim **Watch for:** New pages replicating the homepage hero, identical section sequences appearing on inner pages
When a site fails to publish, the error message shown in the editor now describes the actual problem rather than a generic failure. The publish validator also correctly uses your custom domain when one is configured. **Where:** Client portal → Site editor → Publish button / Settings → Domain **How to test:** - Attempt to publish a site that has a known issue (e.g. an unreachable file) - Verify the error message is specific and actionable, not a generic "publish failed" message - If the site has a custom domain configured, confirm the error references the custom domain, not the default subdomain **Watch for:** Generic or missing error messages after a publish failure
Theme colors and fonts are now injected directly in the page head on published sites, eliminating the brief white flash (FOUC) that appeared before styles loaded in. **Where:** Any published site (viewed at the deployment URL) **How to test:** - Publish a site with a non-white background or colored header - Hard-reload the published URL and watch the initial paint — there should be no white flash before the branded theme appears **Watch for:** White flash still appearing on hard reload, or theme variables missing on the published page
The site assistant's "replace image" and "update media URL" commands were returning an error ("originalText and newText are required") due to mismatched parameter names — both tools now send the correct fields and complete successfully. **Where:** Client portal → Site editor → AI assistant panel → image-related commands **How to test:** - Open a site in the editor and ask the assistant to replace an image (e.g., "Replace the hero image with [URL]") - Confirm the command completes without an error message - Verify the image in the site preview updates to the new URL **Watch for:** "I couldn't complete that" error messages when requesting image replacements via the assistant
On sites that were just generated (still in preview/design-selection mode with extracted files), replacing an image would revert to the old image on the next page reload. The replacement now saves to the correct location so it persists. **Where:** Client portal → Site editor → click an image → Replace image **How to test:** - Open a site that has been generated but where a design hasn't been formally chosen yet - Click an image and replace it with a new one - Refresh the page and verify the new image is still shown, not the original **Watch for:** Old image reappearing after page refresh following a replacement
When restoring a previous version of a specific page, the restore now targets only that page's file — previously it could roll back the entire site to an older state. The editor also now shows which content keys were dropped by safety guards during a restore. **Where:** Client portal → Site editor → Version History panel → Restore button **How to test:** - Open the version history panel for a specific page (not the homepage) - Restore an older version - Verify only that page's content changed and other pages remain untouched - If any content keys were guarded/dropped, a notice should appear in the UI **Watch for:** Other pages reverting unexpectedly after a single-page restore
Clicking Settings from the Reviews section in Mission Control now correctly navigates within the client portal instead of leaving it entirely. **Where:** Client portal → Reviews → Settings link **How to test:** - Open Mission Control for a site - Navigate to the Reviews section - Click the Settings link — it should stay within Mission Control and open the Settings view, not redirect to a different page **Watch for:** Settings link navigating away from Mission Control or to a 404 page
Clicking a suggestion chip in the site assistant now pre-fills the message box (with the cursor at the end) so you can review or edit the prompt before sending — previously chips fired immediately with no chance to adjust. Chip labels also now start with a clear action verb ("Fix:", "Plan:", "Review:") so their intent is obvious before clicking. **Where:** Client portal → Site editor → Assistant panel → suggestion chips **How to test:** - Open the site assistant and wait for suggestion chips to appear - Click a chip — it should populate the input field, not send automatically - Edit the pre-filled text if needed, then press Enter to send - Verify chip labels begin with action verbs like "Fix:", "Plan:", or "Review:" **Watch for:** Chips still sending immediately without pre-filling the input, or chip labels showing raw internal identifiers
Each site card on the dashboard now displays both its creation date and when it was last edited, so you can track your work history at a glance without opening each site. **Where:** Dashboard → Sites (grid or list view) **How to test:** - Open the main dashboard and view the site list in grid view — each card should show "Updated X ago" and "Created [date]" - Switch to list view — the Dates column should show both timestamps stacked - Verify the timestamps are accurate by checking a recently edited site **Watch for:** Missing timestamps, incorrect dates, or layout shifts on site cards
Three edge-case bugs in the site creation preference form are resolved: URLs with trailing punctuation no longer cause duplicate questions, template-based sites no longer incorrectly show the full form, and the plan generation action no longer fires on the same turn as the preference form. **Where:** Client portal → New site → site creation chat **How to test:** - Start a site created from a template — verify it asks only the relevant questions, not a full form - Include a URL ending with a period in your pitch (e.g., "My site is at example.com.") — confirm no duplicate existing-website question appears - Confirm the plan widget does not appear at the same time as the preference form on turn 1 **Watch for:** Duplicate questions in the form; plan and preference form appearing simultaneously
The site creation questionnaire now correctly skips questions whose answers are already captured from your initial pitch, and the preference form triggers reliably for substantive business descriptions. **Where:** Client portal → New site → site creation chat **How to test:** - Start a site with a detailed pitch mentioning your business name, industry, and audience - Confirm the preference form appears and does not re-ask details already in your pitch - Answer questions in the form — verify none duplicate what you already told the chat **Watch for:** The form re-asking details the user already provided; or the form not appearing at all on a detailed pitch
Generation jobs that previously failed with a timeout error on complex or reasoning-heavy designs now complete successfully — the per-attempt time limit was raised from 4 to 10 minutes. **Where:** Client portal → New site → generating site designs **How to test:** - Start a new site generation and allow it to run fully - Confirm it completes without a timeout error, even for complex business types **Watch for:** Generation jobs still failing mid-way or getting stuck with no progress indicator update
The site creation chat now shows the preference form on the first turn by default, so key design and operational questions get answered before the plan is generated — rather than the AI skipping ahead to a proposal. **Where:** Client portal → New site → site creation chat (first message) **How to test:** - Start a new site with a descriptive pitch (e.g., "I run a yoga studio in Austin") - Confirm the preference card or form appears after your first message, asking about logo, style references, and domain-specific details - "Just build it" or a very detailed pitch with logo, reference site URL, and color codes should still skip the form **Watch for:** Preference form not appearing and AI jumping directly to a site plan; or the existing_website question being skipped when no website URL was mentioned in the pitch
Writing a detailed description of your business in the new-site chat no longer skips the upload form — logo, team photos, portfolio images, and style reference chips now appear even after a rich text pitch. Previously, a detailed pitch suppressed the form entirely, forcing the assistant to ask for photos one by one in follow-up messages. **Where:** New site creation → Chat → initial pitch → setup form **How to test:** - Start a new site and type a detailed business description (3+ sentences covering industry, audience, and services) - Verify the image upload and branding form appears after the AI responds, rather than the assistant asking for photos in chat **Watch for:** Form not appearing after a detailed pitch, or the assistant asking "do you have a logo?" multiple times instead of showing the upload widget
Clicking the Mondovo logo, switching clients, or navigating between sections in the site editor appeared to do nothing — the page wouldn't change. The root cause was an infinite render loop triggered by the Share modal being mounted in the background, which consumed all of React's update cycles and prevented any navigation from executing. **Where:** Client portal → Site editor (Mission Control) — all header navigation **How to test:** - Open any site in the client portal editor - Click the Mondovo logo in the header — the page should navigate immediately - Switch between sections using the left rail — changes should register without delay - Open and close the Share modal, then verify navigation still works normally afterward **Watch for:** Navigation appearing to "do nothing" or taking multiple clicks to register
Hovering over a font option in the Tweaks panel now keeps any staged color changes visible — previously, hovering a font caused the preview to revert staged primary, accent, and background colors back to their committed values. **Where:** Site editor → Tweaks panel → Heading or Body font picker (hover over options) **How to test:** - Open the Tweaks panel and stage a color change (e.g., change the primary color) - Hover over different font options in the Heading or Body font picker - Verify the staged color remains visible while hovering fonts **Watch for:** Staged colors reverting to their saved values when hovering font options
The Heading and Body font dropdowns in the Tweaks panel now preview each font live in the site iframe as you hover over options — the old native browser dropdown had no hover events, so fonts only applied after selecting. Gradient action buttons in light mode also now render with correct white text. **Where:** Site editor → Tweaks panel → Heading / Body font picker **How to test:** - Open the Tweaks panel and expand the font section - Hover over different font options in the Heading or Body picker - Verify the site iframe updates to show each font as you hover - Also verify gradient buttons (e.g., "Build Full Site") show white text in light mode **Watch for:** Font dropdown not opening, or site iframe not updating on hover
The first step of marketing onboarding now shows competitor suggestions pulled from prior research or a live web search — just accept or dismiss each chip rather than typing competitors manually. **Where:** Client portal → Growth → Marketing setup → Step 1 (Competitors) **How to test:** - Open a site's Growth hub and start the marketing onboarding - On the competitors step, verify suggestions appear as chips - Accept a suggestion and verify it's added to your competitors list; dismiss one and verify it disappears **Watch for:** No suggestions appearing (fallback to manual entry is expected if no data is available), or accepted chips not persisting
The site plan shown in the new-site chat no longer renders with raw markdown artifacts or malformed list items — the plan message is sanitized before display so it reads as clean, structured content. **Where:** New site creation → Chat → site plan message **How to test:** - Start a new site and chat until the AI shows a site plan - Verify the plan displays as clean text with no raw `[ ]` checkbox symbols, stray brackets, or broken list formatting **Watch for:** Plan messages showing raw markdown characters or duplicated sections
The "Simple Editor" button in the site editor header was removed for organization users — the Mission Control editor already covers everything it offered, and having two near-identical edit buttons side by side was confusing. The Simple Editor remains the dedicated surface for invited client reviewers (client_editor role), who are still routed there automatically. **Where:** Client portal → Site editor (Mission Control) → Header toolbar **How to test:** - Open a site in the client portal as an org member (admin, manager, or member role) - Verify only the "Edit" button appears in the header — no "Simple Editor" button alongside it - Log in as an invited client reviewer (client_editor role) and verify they still land in the simple editor **Watch for:** The Edit button disappearing instead of just the Simple Editor button, or client editors losing access to their editing surface
The initial setup form (shown when creating a new site) now generates more useful questions: every form includes a logo image upload, verticals like restaurants and fitness studios get additional photo upload questions, and questions are tailored to your specific industry rather than showing generic options. **Where:** New site creation → Chat setup → Preference form (cards with chips, multi-select, and image upload) **How to test:** - Start a new site for a restaurant or fitness studio - Verify the form includes at least one logo image upload question plus a food/studio photo upload - Compare chip options against a generic business — restaurant form should show food/hospitality options, not generic "brand colors" chips - Start a B2B SaaS site and confirm the form asks about enterprise trust, security, or integrations rather than generic visual style **Watch for:** Forms missing image upload entirely, or chip options that look identical across very different industries
Navigating to a different page in the share/demo preview no longer shows the home page content — each page now renders its own correct content. **Where:** Share preview (demo link) → page navigation links **How to test:** - Open a site's share/demo preview link - Click navigation links to move between pages (e.g., Home → Pricing → About) - Verify each page displays its own content, not the home page content **Watch for:** Pages that still appear identical to the home page after clicking navigation links
The Site Assistant right panel can now be resized by dragging its left edge (width is saved between sessions). Suggestion chips are cleaner — no technical function names or checkbox markup leaking through — and the assistant's replies no longer show raw internal tool identifiers. **Where:** Client portal → Site editor → Assistant panel (right rail) **How to test:** - Open the Site Assistant panel in the client editor - Drag the left edge of the panel to resize it — verify the width persists after a page refresh - Ask the assistant a question and check that suggestion chips and replies contain no `snake_case` names or `[ ]` checkbox syntax **Watch for:** Panel snapping back to default width on refresh, or `snake_case` tool names appearing in suggestions
A database bug caused every site generation to appear frozen at 5% for 5+ minutes before being auto-marked as failed — the progress bar never advanced even though the AI was working. Fixed by correcting a duplicate column conflict in the internal update function so progress now reports correctly throughout generation. **Where:** New site creation → Generating your site (progress bar) **How to test:** - Start a new site generation from the client portal - Watch the generation progress bar — it should advance beyond 5% within the first minute - Generation should complete (or show an error) rather than sitting at 5% indefinitely **Watch for:** Progress still freezing at 5%, or generation completing visually but the site not appearing
Information entered during site setup (services, team bios, pricing details, etc.) was being saved to fields the generator never reads, so sites were built as if nothing had been entered. Answers now route to the correct fields and are used in generation. **Where:** New site creation → Setup / intake form → Site generation **How to test:** - Start a new site and fill out the setup form with specific services, team details, or pricing - Generate the site and verify the generated content reflects what was entered (services listed, team names used, pricing shown) **Watch for:** Generated sites that ignore entered details and show fabricated or generic content instead
Each card in the "Your Week" growth plan now expands inline to show the full action description, AI reasoning, step-by-step instructions with checkable boxes, and ready-to-use copy starters. Directory listing cards include a pre-filled business info packet with name, address, description, and social links you can copy field-by-field or all at once. **Where:** Client portal → Growth → Your Week **How to test:** - Open the Growth hub and navigate to "Your Week" - Click any card to expand it — verify it shows description, suggested approach, action steps, and copy starter - For a directory card, verify the business info packet appears with "Copy all" and per-field copy buttons - Check off an action step and verify it stays checked **Watch for:** Cards collapsing unexpectedly, copy buttons not copying to clipboard, or action steps losing their checked state on re-render
The blueprint chat AI now reads the meaning behind what you say rather than matching specific phrases — so saying things like "looks good, let's do it" or "I'm happy with that" correctly triggers site generation. Game catalog sites also improved: when you mention games like Candy Crush or Pac-Man as style references, the AI now uses them as genre inspiration (puzzle, arcade, runner) and populates placeholder games of that type rather than warning about embeddability. **Where:** Client portal → New site → Blueprint chat **How to test:** - Start a conversation, get a site plan, then express readiness in a natural way ("sounds great", "let's go with that") — confirm generation starts without needing a specific phrase - For a game catalog site, mention a popular game as a style reference and confirm the AI populates the catalog with similar genre games as placeholders **Watch for:** - Generation not triggering when the user clearly expresses readiness but uses non-standard phrasing - Game catalog AI warning about embeddability instead of using the mentioned game as a genre/style reference
Previously the blueprint wizard always showed compact chip questions (2–4 choices per turn). Now the chat AI reads your opening message and decides whether to open a comprehensive 8–12 question intake form instead — covering services, target audience, tone, imagery, and more in a single step rather than 10 back-and-forth turns. It picks the form when you provide a URL to clone or inspire from, describe your business in enough detail that the form's text fields would capture something real (product list, pricing, case studies), or your message touches several planning dimensions at once. Quick follow-up questions and mid-conversation clarifications still use the compact chip format. **Where:** Create new site → type your first message in the Blueprint wizard chat. **How to test:** - Open the blueprint wizard and type a substantive pitch, e.g. "Build me a website for my interior design studio — we do residential renovations, kitchen and bath remodels, and full home staging for real estate agents in New York." - Confirm a full intake form opens (multiple question types: dropdowns, multi-select, text fields) rather than a set of 2–4 chips. - Open a second wizard tab and send a short follow-up message, e.g. "Change the hero color to dark." Confirm it stays in compact chip mode. **Watch for:** - The full form appearing for very short or vague messages that don't warrant it - The compact chip format never appearing (form mode being over-triggered) - Answers from the comprehensive form not flowing into the generated site's content
The site builder chat interface had several mobile layout issues that made it difficult to use on phones and tablets. The chat input was hidden behind the fixed Generate button overlay, content was cut off by the browser address bar, and the brief/layout panel couldn't be collapsed on desktop. **Where:** Client portal → New site → Chat with AI to build your site **How to test:** - Open the site builder on a mobile device or browser with a narrow viewport - Confirm the chat input box is fully visible above the "Preview Plan" / "Generate" button - Scroll the chat and confirm no content is clipped at the bottom - On desktop, use the close button in the Brief/Layout panel header to collapse it, and re-open it from the top bar button **Watch for:** - Chat input still obscured by the fixed CTA button on mobile - Content getting cut off at the bottom when the browser address bar is shown/hidden - Brief/Layout panel close or re-open buttons missing
The blueprint wizard chat would sometimes ask about your target audience (B2B vs B2C) and your preferred page layout (services-focused vs standard) in the same turn — mixing two separate decisions into a single confusing chip set. These now always appear in separate turns: one question, one chip set, one answer. The AI also received an explicit example of what NOT to do so the behavior stays consistent across different business types. **Where:** Create new site → Blueprint wizard chat (chip-selection questions during setup). **How to test:** - Open the blueprint wizard and describe a B2B-or-B2C-ambiguous business (e.g. "I sell software tools for small businesses"). - Confirm the audience question (B2B / B2C / Both) appears alone in one turn. - Answer it, then confirm a separate turn asks about layout preferences or other dimensions. - Confirm chips from different question families never appear in the same set. **Watch for:** - Audience chips and layout chips appearing together in a single card - Chips disappearing after answering one part of a mixed set (the unanswered chips being silently dropped)
The blueprint chat was treating phrases like "yes, trigger the build" and "go ahead and generate" as brief confirmations instead of generation commands, then hallucinating "The generation process has been triggered" without actually starting the build. Users were left waiting for a generation that never happened. The AI now reads the user's intent (readiness to build) rather than matching a narrow phrase list, so common phrasings reliably trigger the real build flow. **Where:** Create new site → Blueprint chat → confirming you're ready to generate. **How to test:** - Start the blueprint wizard and fill in enough details to enable generation. - Say "yes, trigger the build", "go ahead and generate", or "proceed" when the AI asks if you're ready. - Confirm the Preview Plan / Generate button activates and generation actually starts (site design appears in the preview panel). - Confirm the AI does NOT say "The generation process has been triggered" without the generation actually starting. **Watch for:** - AI responding "Building your site now" but nothing appearing in the preview - "Yes, trigger" or "proceed" responses being treated as brief confirmations instead of generation commands - Generation not starting after the user explicitly says they want to build
On mobile devices, the Brief button floated over the chat input area and blocked the voice button, making both inaccessible. The chat input was also sometimes hidden behind a fixed overlay, and content was cut off by the browser's address bar. The Brief button now lives in the top bar on mobile (matching where users expect navigation controls), the chat has proper bottom padding to stay above fixed overlays, and the viewport height calculation accounts for the browser chrome. **Where:** Create new site → Blueprint wizard (on a mobile browser or narrow viewport). **How to test:** - Open the blueprint wizard on a phone or with the browser narrowed to mobile width. - Confirm the Brief button is in the top bar (showing completion percentage) and NOT floating over the chat. - Confirm the voice/microphone button is fully tappable — not blocked by any overlay. - Confirm the chat input field is visible and accessible above the Preview Plan / Generate button. - Scroll the chat — confirm content isn't cut off by the browser address bar. **Watch for:** - Brief button reverting to a floating FAB on mobile - Voice button being blocked or not responding to taps - Chat input field hidden behind the fixed Generate button - Content clipped at the bottom of the screen on iOS Safari
Clicking a stat card, heading, or any non-video element on a page that happened to have a video section elsewhere was incorrectly showing "Change thumbnail", "Change video link", and "Delete this video" quick actions. These actions belong only to the video section itself. The root cause was a deep-scan path that walked the entire site blueprint looking for any video data — meaning video actions appeared on any click anywhere on the page. That path is removed; quick actions now only appear on the actual video element or its container. Clicking an image that's being used as a video poster/fallback also correctly shows the video actions again (a separate fix in the same commit). **Where:** Site editor preview → click any element in the site → quick action menu. **How to test:** - Open a site with a video section in the editor. - Click a heading, stat number, or button that is NOT part of the video section. - Confirm the quick actions shown are relevant to what you clicked (e.g. "Edit text", not "Change video"). - Now click the video thumbnail or video container. - Confirm "Change thumbnail", "Change video link", and "Clear thumbnail" appear. **Watch for:** - Video quick actions appearing on clicks anywhere on the page (the regression) - Video quick actions NOT appearing when clicking the actual video section - "Change thumbnail" missing after the user has previously cleared the custom thumbnail
The AI assistant's `switch_tab('customers')` command was routing to a dead-end view instead of the CustomersView. Navigating to the Customers tab from the assistant or from the left rail now consistently opens the contacts list. **Where:** Site editor → Customers tab (left rail or AI assistant navigation). **How to test:** - In the site editor, click the Customers tab in the left rail. Confirm the contacts list opens. - Ask the AI assistant to "show me customers" or "go to contacts". Confirm it navigates to the correct view. **Watch for:** - Clicking Customers showing a blank or loading screen - AI assistant navigating to a different tab instead of Customers
The Features page used to show up to 8 near-identical "form" cards (Booking Requests, Inquiry Forms, Quote Requests, Event Registration, etc.) — even on a single-page site, a user could end up with 4 of them active at once with no clear sense of how they differed. They've been collapsed into one "Forms & Lead Capture" card with a template picker, descriptions now explain when to use each one, active cards show where on the live site each feature appears, and recommendations are gated to the relevant industries (no more "Course Enrollment" suggestion for a design agency). **Where:** Site editor → Features tab (`/mc/features`) **How to test:** - Open a site with several form-style features active. Confirm one consolidated "Forms & Lead Capture" card appears in the Active section, listing which templates are active (e.g. "Active: Quote Request · Inquiry Form"). - Click the card → picker opens with all 8 templates as tiles, showing status badges (Active / Recommended / Available). - On any active card, confirm the "Lives at …" hint shows the right route — e.g. "Lives at /careers (own page)" for Job Applications, "Embedded form on your homepage" for Inquiry Forms. - Confirm the page scrolls when there are more cards than fit on screen. - For a site whose industry is e.g. `web-design-agency`, confirm Course Enrollment / Template Catalog / Game Catalog are NOT in "Recommended for you" unless the site's content genuinely warrants them. **Watch for:** - Active cards getting pulled into the consolidated picker that shouldn't be (anything other than the 8 form-style kinds — Funnels, Carts, Booking Calendar should each keep their own standalone card) - The amber overlap warning ("Multiple lead-capture forms are active") not showing when 2+ form templates are active - Picker "Edit form" / "Manage" button routing to the wrong destination
When you told the voice assistant to add features like a contact form, booking calendar, or cart, those requests were silently dropped — the voice tool was writing to the wrong field in the blueprint, so the generation step never saw them. Now voice-requested features reach the site generator correctly and appear in the final design. Additionally, when you describe your business in detail while speaking, the full description is now preserved verbatim in the plan rather than summarized into one or two sentences. **Where:** Create new site → Blueprint wizard → use the voice button to describe your site and request features. **How to test:** - Open the blueprint wizard and start voice mode. - Say "Add a contact form and a booking calendar to the site." - Complete the flow and generate the site. - Confirm the site includes a contact form and booking section (previously these would be missing despite the voice confirmation). - Speak a detailed multi-sentence business description and check the plan — confirm it preserves the key details you said rather than summarizing them. **Watch for:** - Voice-requested features still not appearing in the generated site - Business description being summarized to one generic sentence instead of preserving your words
Two improvements for game catalog sites. First, when users mention games like "Candy Crush" or "Pac-Man" as style references, the AI now correctly interprets these as genre/style requirements (puzzle, arcade, runner) and plans the catalog accordingly — previously it warned about embeddability instead of using them as design input. Second, when refining a game site and asking for changes like "make the game render in full overlay", the AI now understands the built-in full-screen game modal rather than building custom overlay code that breaks the existing integration. **Where:** Site builder → game catalog / arcade industry → Blueprint chat or refinement chat. **How to test:** - Start a new site in the gaming/arcade industry. - In the blueprint chat, mention "I want it to feel like Candy Crush" — confirm the AI treats this as a genre/style reference, not an embeddability warning. - Generate the site and open the refinement chat. - Ask "make the game play in a full overlay" — confirm the AI uses the built-in modal (does not generate custom overlay code from scratch). **Watch for:** - Blueprint chat responding with embeddability warnings when games are mentioned as style references - Refinement AI generating new custom modal/overlay code instead of using the existing game playback modal
New sites that skipped parts of the onboarding form were crashing the marketing growth scan with a generic "Scan failed" error. The crash happened because the scan prompt builder tried to read optional profile fields (business goals, target demographics, competitor list) without checking if they had been filled in. **Where:** Client portal → Growth → Scan (or any marketing scan on a site created via quick onboarding). **How to test:** - Create a new site and skip the optional profile fields during onboarding (leave business goals, demographics, and competitors blank). - Navigate to the Growth section and trigger a marketing scan. - Confirm the scan runs to completion and returns recommendations — no "Scan failed" toast. **Watch for:** - "Scan failed" toasts appearing for newly created sites with minimal profile data - Scan results referencing blank fields or returning empty sections where content was expected
Previously, clicking "Manage" on an active Quote Request, Inquiry Form, or Booking Request feature either did nothing (Manage button was hidden) or routed to the services content list — neither of which let users edit the form itself. Now Manage routes pure-form features to the unified Forms screen and pre-opens that specific form's settings, so users land directly on the form they wanted to edit. Forms built with the platform's runtime form components also now appear in the Forms list with their fields visible (previously some were invisible because they didn't contain a literal `<form>` tag in their page code). **Where:** Site editor → Features tab (`/mc/features`) → Active form tile → Edit form. Or Site editor → Forms list (`/mc/forms`). **How to test:** - On `/mc/features`, open the consolidated Forms picker. Click "Edit form" on an active Quote Request (or Inquiry / Booking) tile. - Confirm the page navigates to the Forms screen AND that the matching form's settings modal opens automatically — not the generic Forms list. - For sites with a runtime form component (e.g. AI-generated quote forms), confirm the form appears in the Forms list with its real field count, not "0 fields". **Watch for:** - Forms screen opening without auto-focusing any specific form (deep-link silently failing) - A form's fields showing as "0 fields" when the page is clearly using a runtime form component - Settings modal opening for the wrong form when multiple forms with similar names exist - "Manage" button on Event Registration / Job Applications / Course Enrollment / Directory tiles changing destination — those should still go to their dedicated views (Events, Careers, etc.), not to the Forms list
Sites using platform-provided form components (contact forms, quote request forms, booking forms, and the new generic form) were invisible in the forms management view — the forms list only detected hand-coded HTML `<form>` elements, not the platform components whose markup is generated internally. All platform form types now appear in the list with their fields, so owners can see and manage every form on their site in one place. **Where:** Client portal → Forms (sidebar nav) → forms list for a site. **How to test:** - Open a site that uses a platform form (e.g. a plumbing site with a quote form, or any site with a booking or inquiry form). - Navigate to the Forms section in the client portal. - Confirm the platform form appears in the list with its real field names (not missing from the list). - Confirm the form's fields are listed correctly (name, email, message, etc.). **Watch for:** - Platform forms not appearing in the list (only custom HTML forms showing) - Form fields listed as blank or generic rather than showing the actual field names - Forms list showing duplicate entries for the same form
A timing race between the server and the browser could lock a site's reference analysis in a permanent "analyzing" state — even after extraction had fully completed. Users would see "Timed out waiting for reference analysis" on every page reload and couldn't proceed to generate. The fix stops the browser from overwriting the server's completion timestamp with a null, and hardens the timeout gate to use the site's last-activity timestamp as a fallback anchor so a stuck state clears automatically after a few minutes. **Where:** Create new site → paste a reference URL → "Analyzing reference site…" step. **How to test:** - Paste a reference URL during site creation and wait for analysis to complete. - Reload the page mid-analysis or immediately after it finishes. - Confirm the builder resumes from the correct state (completed) rather than showing a permanent "timed out" error. - If a site was stuck before this fix, opening the builder again should allow generation to proceed normally. **Watch for:** - "Timed out waiting for reference analysis" errors that persist across reloads after extraction completed - Builder remaining stuck in the analyzing step when the server logs show extraction finished successfully
The site editor's right-rail assistant now renders rich text (headings, bold, lists) in its replies, shows larger readable text, and displays suggested quick-reply pills below each response so you can continue without typing. Multi-step tasks now show numbered steps with clear icons instead of Unicode glyphs, and each completed or failed step uses plain language ("Replace text on Homepage" instead of raw code identifiers). When a task fails, the error message is also translated to plain language. **Where:** Site editor → right-rail chat (Design Assistant tab). **How to test:** - Open the site editor and send a message to the assistant (e.g. "Add a contact form"). - Confirm the reply renders with proper markdown formatting (bold text, bullet points if present). - Confirm suggested reply pills appear below the response and clicking one sends that message. - Ask the assistant to make a multi-step change and confirm each step is numbered with a clear icon. - Trigger an error (e.g. ask for something that can't be parsed) and confirm the error message is in plain English. **Watch for:** - Suggested reply pills not sending the message when clicked - Task steps showing raw `code_edit_text` style labels instead of human descriptions - Rich text appearing as raw markdown symbols (asterisks, hashes) instead of formatted output - "Ask AI →" button not showing a confirmation toast when clicked (handoff to rail not visible)
On phones, the site assistant chat panel was hidden entirely — it was gated to medium-and-larger screens with no mobile entry point. Now tapping the chat bubble opens a fullscreen sheet with safe-area insets so it works correctly on iOS (keyboard won't cover the input, home indicator stays clear). Tablets get a 420px wide sheet. On desktop the panel gains a Maximize/Minimize button so you can expand it to fill the screen for longer tasks. The text input also grows automatically as you type (up to 5 lines), and every assistant reply gets a Copy button. A floating "↓ New" pill appears when new content arrives while you're scrolled up. **Where:** Site editor → chat bubble or right-rail assistant panel. **How to test:** - Open the site editor on a phone or narrow the browser to mobile width. - Tap the assistant chat bubble — confirm a fullscreen sheet slides up. - Type a message; confirm the input field expands as you type more than one line. - Press Enter to send; press Shift+Enter to insert a line break instead. - Receive a reply from the assistant and confirm a Copy button appears next to the thumbs-up icon. - Scroll up in the conversation while a new message arrives — confirm a "↓ New" pill appears and tapping it scrolls to the bottom. - On desktop, confirm a Maximize/Minimize button appears in the panel header. **Watch for:** - iOS keyboard covering the text input when the sheet is open - Copy button not confirming success (should show a check icon for ~1.5 seconds) - "↓ New" pill appearing even when already scrolled to the bottom - Maximize toggle reverting on panel close/reopen
The new site blueprint wizard collects your full pitch — written descriptions, multi-select preferences, and logo/brand images — in a single structured form. Answers are saved verbatim directly to your site plan (no AI paraphrasing of your descriptions), and the AI then writes a complete grounded site plan in the same step. Previously this took 10+ back-and-forth chat turns; now it completes in roughly 18 seconds. **Where:** Create new site → Blueprint wizard → intake form steps. **How to test:** - Start a new site for any industry (e.g. plumbing, photography, SaaS). - Fill in the intake form: enter a detailed description in the textarea, select chips for target audience, and upload a logo or brand image. - Confirm a complete site plan (7+ sections referencing your actual business details) appears without any additional chat turns. - Check that the uploaded image appears as a brand asset available for the AI to use during generation. **Watch for:** - Textarea content being summarized or truncated instead of saved verbatim - Uploaded images not appearing in the brand assets list after form submission - Plan AI not producing a grounded plan (falling back to a generic plan that ignores form answers) - Form skipping directly to chat without showing the intake steps
Two bugs caused site extraction (pasting a competitor URL for inspiration) to appear stuck. First, a screenshot format mismatch caused a silent 138-second retry loop, making every extraction look like it had timed out. Second, a timing race between the server and client could lock the "analyzing reference site" status in a permanent pending state — users would see "Timed out waiting for reference analysis" errors on every subsequent attempt even though extraction had actually completed. Both are now fixed. **Where:** Create new site → paste a URL for reference → "Analyzing reference site…" step. **How to test:** - Start a new site and paste a URL into the reference field. - Confirm the extraction completes within ~30 seconds (not 2+ minutes). - Close and reopen the builder mid-extraction — confirm it resumes from the correct state rather than showing a permanent "timed out" error. - Paste a second URL after the first one completes — confirm a fresh extraction starts cleanly. **Watch for:** - Extraction appearing stuck at "Analyzing..." for more than 60 seconds - "Timed out waiting for reference analysis" errors that persist across page reloads even after extraction completed - Extraction completing but the site plan not being grounded on the reference URL's content
Two issues fixed together. The stock video picker (used when the AI suggests adding a background video) was wired up in the editor UI but the actual picker modal and the video-storage route were missing — clicking the video option did nothing. Both are now shipped so the full flow works: browse stock videos, select one, and it's stored and inserted into the site. Separately, messages you sent by speaking via the voice button were styled differently from typed messages (violet bubble with a "🎙️ Voice" badge) even though they produce the same result. Both now appear as identical blue message bubbles with only a small inline mic icon to indicate the input method. **Where:** Site editor → click a video section in the preview → "Change video" quick action. Voice messages in the Design Assistant activity feed. **How to test:** - Open a site with a video section in the editor. - Click the video area in the preview and select "Change video" from the quick actions. - Confirm a stock video picker modal opens, shows video results, and lets you select one. - After selecting, confirm the video updates in the preview. - Send a message via the voice button, then send an identical message by typing. - Confirm both appear as blue bubbles; only a small mic icon distinguishes the voice message. **Watch for:** - The video picker modal not opening or showing an error - Selected video not persisting after page refresh - Voice messages reverting to a different visual style (violet bubble or 🎙️ label)
Two improvements to the quick actions that appear when you click on a video preview element in your site. First, "Clear custom thumbnail" has been replaced with "Use video poster" — it now instantly loads the real YouTube thumbnail for the video (the actual frame, not a generic stock photo) with a single click. Second, all action labels have been rewritten in plain language with tooltips explaining what each one does: "Edit video URL" is now "Change video link", "Remove video card" is now "Delete this video", and each button shows a tooltip on hover. **Where:** Site editor → click on a video preview element → quick actions overlay. **How to test:** - In the site editor, click on any section containing a video with a placeholder thumbnail. - Click "Use video poster" — confirm the thumbnail instantly changes to the actual YouTube video's preview image (no AI call, no reload needed). - Hover over each action button and confirm a tooltip appears explaining what the action does. - Confirm the section header reads "VIDEO PREVIEW · QUICK ACTIONS" (not the generic "QUICK ACTIONS"). **Watch for:** - "Use video poster" doing nothing or showing a generic stock photo instead of the actual YouTube thumbnail - Tooltip not appearing on hover - "Use video poster" showing on non-YouTube videos without a fallback message (Vimeo/Loom should show a message explaining the user needs to paste a poster URL manually)
After saying "yes, generate the site" in a voice session, the assistant would repeatedly ask for re-confirmation ("Just to be sure…", "Ready to proceed?") because it was trying to match the exact phrase you said against a strict keyword list. The fix trusts the AI's own intent classification — when it marks your response as confirmed, the build starts. Additionally, features you described during voice (contact forms, booking, etc.) now correctly flow into the generated site; previously they were being written to an unused field and silently dropped. **Where:** Site editor → Design Assistant → Voice mode (microphone button). **How to test:** - Start a voice session and say "I'm ready to build the site" or similar. - Confirm the build starts without the assistant asking for re-confirmation. - Describe a feature during voice (e.g. "add a contact form") and generate the site — confirm the feature appears. **Watch for:** - Voice confirmation loop resuming (assistant keeps asking to confirm after you've said yes) - Features described via voice not appearing in the generated site - Voice session not triggering the build at all after confirmation
When the blueprint wizard opens a comprehensive intake form, voice mode can now guide you through it — asking one question at a time, waiting for your answer, and moving to the next. Crucially, if you're actively typing into a form field, voice skips that question and answers the others first, coming back after you've finished typing. Image-upload fields are marked as handled, and the form submits automatically when all questions are answered. You can still mix voice and keyboard: speak your answers to most questions and type detailed ones by hand. **Where:** Create new site → Blueprint wizard → tap the microphone button when a comprehensive intake form is visible. **How to test:** - Start creating a site and describe a business with enough detail to trigger the full intake form (e.g. "I run a plumbing company in Chicago with 8 employees"). - Tap the microphone button when the form appears. - Confirm voice asks one question at a time (e.g. "What services do you offer?"). - While voice is asking a question, start typing in a textarea — confirm voice skips that field and moves on. - After you stop typing, confirm voice returns to that question. - Confirm the form submits automatically once all questions have answers. **Watch for:** - Voice overwriting something you already typed - Voice asking two questions in the same turn - The form not auto-submitting after the last question is answered - Voice not detecting that you're currently focused on a field (skipping logic not triggering)
Typing @ in the blueprint chat was opening an empty dropdown instead of showing the available sections and pages to mention. The SectionBrowserPanel component was not being rendered in the ChatTab, so the mention list had nothing to display. This is now fixed — @mentioning a section or page shows the correct options. **Where:** Blueprint chat (site setup wizard) → type @ in the message input. **How to test:** - In the blueprint chat, type @ in the message box. - Confirm a dropdown appears with available sections/pages to mention. - Select one and confirm it's inserted into the message correctly. **Watch for:** - Dropdown appearing but showing zero results even when sections exist - Mention inserting the wrong section name or slug
The in-editor AI assistant now knows about the features and content you requested during the initial site brief, and will surface the top unmet items as suggestions — so you can easily ask it to "add the contact form I asked for" or "include the pricing table" without having to remember what you originally specified. **Where:** Client portal → Site editor → AI assistant chat (suggestion chips below the input) **How to test:** - Create a new site and specify a few specific features in the brief (e.g. "add a contact form", "include a pricing table") - After generation, open the AI assistant - Confirm suggestion chips appear for features you asked for that weren't built yet **Watch for:** Suggestions not appearing for previously requested features; suggestions appearing for features that were already built
Inner pages generated by AI (About, Contact, Services, etc.) were using placeholder phone numbers and email addresses like "555-0100" or "hello@yourcompany.com" even when the site's blueprint contained real contact details. The generator now injects the site's actual business email and phone into the page generation prompt, so generated pages reflect real contact information. **Where:** Site editor → Pages tab → Add page → AI-generated inner pages. **How to test:** - Open a site with a real business email and phone configured in its settings. - Generate a new Contact or About page. - Confirm the generated page uses the site's actual email and phone number, not placeholders. - Check that Services or other content pages also don't introduce new placeholder contact refs. **Watch for:** - Generated pages still showing "555-" or "@yourcompany.com" phone/email when real contact info is available - The phone/email appearing multiple times on a single generated page (duplication from the prompt injection)
The thinking indicator in the blueprint chat now shows the actual server-side stage being processed ("Extracting content…", "Analyzing structure…", etc.) instead of a generic spinner. Suggested-reply chips and placeholder plan cards are also hidden while extraction is running to avoid confusing interactive elements appearing before results are ready. **Where:** Blueprint chat / site setup wizard — visible during the content extraction phase after pasting a URL. **How to test:** - Start a new site and paste an existing site URL into the blueprint chat. - Confirm the thinking indicator shows stage-specific text as the extraction progresses. - Confirm suggested-reply chips do not appear while extraction is running. - Confirm a placeholder plan card does not appear until extraction completes. **Watch for:** - Stage messages not updating (stuck on the first stage message) - Suggested-reply chips appearing mid-extraction and being clickable - The extraction completing but the chat still showing the thinking indicator
In gallery and grid sections with 3 or more images, clicking the third image to replace it was replacing the first image instead. The content path detector was resolving the wrong array index for images in multi-column grid layouts. This is now fixed — clicking any image in a grid replaces exactly that image. **Where:** Site editor → live preview → click any image in a gallery or grid section. **How to test:** - Open a site with a 3-image or 4-image gallery section. - Click the third image. Confirm the image picker opens and replacing it updates only that specific image, not the first one. - Repeat for the first and second images to confirm they each replace correctly. **Watch for:** - Image replacement updating the wrong position in the grid (indicates the path detector regressed) - Image picker opening for an image that isn't clickable (false positive detection)
End-customers of published sites can now sign in via magic link or Google and see their purchases, bookings, and any notes the site owner has added — no separate account system required. The portal auto-injects an /account page at publish for any site with an active form, booking, or order flow. **Where:** Published site → /account page (customer-facing). Site editor → Customers tab (owner-facing). **How to test:** - Publish a site that has a booking or quote form active. - Visit the published site's /account URL and request a magic link using an email that has previously submitted a form. - Confirm the email arrives and the link logs you in, showing your past submissions/bookings. - In the site editor, open the Customers tab — confirm the contact list shows the same customer with their purchases and notes visible. - Click a customer → Add note → confirm it appears under Internal Notes. **Watch for:** - /account page not injecting when the site has active runtime workflows (check that static-site-exporter picked it up) - Google sign-in redirect looping — the callback URI must be registered in Google Cloud Console - Magic link arriving but expiring immediately (TTL is 15 minutes; check server clock skew) - Customers tab showing contacts from a different site
Pages can now be duplicated as a different surface type — right-click a page and choose "Duplicate as Landing Page" or "Duplicate as Page". The duplicate uses the original as a reference and generates a variant that fits the target format: landing pages strip shared navigation and chrome, while regular pages re-enable them. **Where:** Site editor → Pages tab → right-click any page → Duplicate As… **How to test:** - Open a site with at least one regular page. - Right-click the page → select "Duplicate as Landing Page". - Confirm a new page is created with a different name and that nav/footer are not included in the landing variant. - Right-click a landing page → "Duplicate as Page" → confirm shared nav/footer is re-enabled on the copy. - Plain "Duplicate" (same surface) should still work as before. **Watch for:** - Duplicate failing silently with no toast or error - "Duplicate as" option missing from the right-click menu for certain page types - Navigation chrome incorrectly stripped or kept when duplicating to a different surface type
AI-generated bento grids and gallery sections were occasionally producing empty white cells when row-span values were assigned inside a `.map()` loop. The generator now omits row-span on index-based items to prevent the layout engine from reserving space for cells that don't exist, and a validator catches any that slip through and rewrites them before the page is saved. **Where:** Any page with a bento or gallery-style image grid. **How to test:** - Generate a new site whose industry commonly produces a bento hero or gallery section (e.g. photography, interior design). - Confirm no blank/white cells appear in the grid — every grid cell should contain either an image or text. - Generate several variations and check all of them for empty cells. **Watch for:** - Grid cells with a background color but no content (a white rectangle in an otherwise populated grid) - The fix only applies to new generations — existing sites with the issue may need a regeneration or manual fix
Adding or deleting a page used to accidentally wipe out dropdown menus, anchor links, and any other navigation items that weren't direct page links. These are now preserved correctly — only links pointing to the deleted page itself are removed. **Where:** Site editor → Pages tab → Add page or Delete page **How to test:** - Open a site that has a navigation with dropdown menus or external links - Add a new page or delete an existing page - Open the Navigation editor and confirm dropdown containers, anchor links, and external links are still present - Confirm that only the link to the deleted page was removed (if applicable) **Watch for:** Entire dropdown menus or sections of the navigation disappearing after a page add or delete operation
When you click "Build full site", you now see a Plan Review screen that shows which of your requested features will be built, which need a decision, and which are out of scope — before the build starts. After confirming, a progress modal shows real-time status (spinner, progress bar, and live messages) while the site is generated, then navigates you to the editor when complete. **Where:** New site flow → Blueprint chat → Build full site button **How to test:** - Start a new site from the client portal - Complete the blueprint chat, including specifying a few features you want (e.g., "add a contact form" or "include a pricing table") - Click "Build full site" - Confirm the Plan Review modal appears listing your requirements with Include/Skip options - Click "Approve & build site" - Confirm a progress modal appears with a spinner and live status messages - Wait for it to complete and navigate to the editor automatically **Watch for:** Clicking Build full site and landing directly on a blank editor with no progress indication; Plan Review not showing your requested features; progress modal getting stuck without navigating on completion
The Replace Image modal now supports video URLs (mp4, webm, etc.) in addition to image URLs. Previously entering a video link showed a broken "Failed to load image" error; now it shows a video preview and registers the asset with the correct type. **Where:** Site editor → click any image → Replace Image → URL tab **How to test:** - Open the Replace Image modal on any image in your site - Switch to the URL tab - Paste a direct link to a `.mp4` or `.webm` video file - Confirm a video preview appears (not a broken image icon) - Click Replace and confirm the video is applied to the element **Watch for:** Broken image icon when entering a video URL, or the asset being saved as an image type instead of video
Right-clicking an image in the site preview now opens a media replacement menu. Images can be swapped with an upload or URL, and video placeholders can be replaced with a YouTube or Vimeo URL — the embed is inserted automatically with the correct aspect ratio. A dedicated "Replace video" option also appears for existing video elements. **Where:** Site editor → live preview → right-click any image or video element. **How to test:** - In the live preview, right-click an image → "Replace image" → upload a file or paste a URL. Confirm the image updates in the preview. - Right-click a video placeholder → "Replace video" → paste a YouTube URL. Confirm an embedded player appears. - Try a Vimeo URL — confirm it also embeds correctly. - Check that a YouTube Shorts or playlist URL is handled (it should be normalized or rejected with a clear message). **Watch for:** - Private or age-restricted YouTube videos showing a blank player - Vimeo embeds with a hash in the URL not loading (hash must be appended to the embed URL) - Aspect ratio of the embedded video mismatching the original placeholder
When the site preview was displayed at a scale less than 100% (zoomed out), the right-click context menu was appearing far from the cursor — sometimes off-screen. The menu now accounts for the iframe's transform scale and offset so it always opens exactly where you right-clicked. **Where:** Site editor → live preview → right-click any element. **How to test:** - In the site editor, zoom the preview out (if a zoom control is available) or resize the browser window so the preview is scaled below 100%. - Right-click an element. Confirm the context menu appears directly under the cursor, not offset from it. **Watch for:** - Menu appearing in the wrong quadrant of the screen on very small previews - Menu opening outside the visible viewport on high-DPI displays
Deleting a section by clicking it in the live preview was silently failing for certain layout patterns — particularly ternary-wrapped blocks and block-composed sites where a component is called as a JSX element rather than inlined. Several fixes land together: the AST now removes component call sites directly, a structural-tag retry path unblocks sections that don't have a matching text node, and block-root clicks defer to the correct component-call removal strategy. **Where:** Site editor → live preview → right-click a section → Delete. **How to test:** - Open a site with a section that's defined as a standalone component (e.g. `<HeroSection />`). Right-click it → Delete. Confirm it is removed from the page. - Try deleting a section on a site generated with a block-composed layout (multiple JSX component calls at the page root). Confirm each section can be removed individually without affecting the others. - After deletion, refresh the preview and confirm the section does not return. **Watch for:** - Delete completing without error but the section still visible after refresh (indicates the DB write didn't persist) - Deleting one section removing an adjacent section as well (cross-array corruption) - "Unable to delete" error showing for a section that should be deletable
Sites where sections are conditionally rendered via ternary expressions (`condition ? <Section /> : null`) or composed as separate component calls at the page root were unable to delete individual sections — the delete operation would fail or remove the wrong element. The AST-based delete now removes the component call site itself, so ternary-wrapped and block-composed sections can be deleted reliably. **Where:** Site editor → live preview → right-click a section → Delete. **How to test:** - Open a site whose page file contains `<PricingSection />` or similar standalone component calls at the root. - Right-click one of those sections → Delete. Confirm only that section is removed and the others remain. - Check that a site using ternary-style conditional rendering (`showHero ? <HeroSection /> : null`) can also have the section removed correctly. **Watch for:** - Deletion removing the entire page component instead of just one section - The ternary condition being removed but the section component remaining in the file
Video cards in the live preview now expose thumbnail management directly: click "Change thumbnail" to open the picker, "Use video poster" to auto-derive a poster from the YouTube or Vimeo URL, "Edit video URL" to swap the source, and "Remove" to delete the video block entirely. Previously these actions required going through the AI chat or editing code directly. **Where:** Site editor → live preview → right-click or hover a video card. **How to test:** - In the live preview, hover over a section with a YouTube embed. Confirm the quick-action toolbar appears with "Change thumbnail", "Edit video URL", and "Remove". - Click "Change thumbnail" → confirm the image picker opens and selecting an image updates the poster. - Click "Use video poster" on a YouTube video — confirm the thumbnail updates to the video's actual poster frame. - Click "Edit video URL" → paste a different YouTube URL → confirm the video source changes. **Watch for:** - Quick-action toolbar not appearing for video cards that are wrapped in an overlay or parent div - "Use video poster" failing silently when the YouTube URL is invalid or private - "Remove" deleting the entire section instead of just the video block
Video card quick actions (Change thumbnail, Edit video URL, Remove) were not appearing when clicking on a video that was wrapped in an overlay div or parent container — only a direct click on the inner video element was triggering them. The detection now walks up the element tree so actions surface regardless of the wrapping structure. **Where:** Site editor → live preview → click or hover a video card section. **How to test:** - Open a site with a video card section that has an overlay or play-button wrapper. - Click the overlay area (not directly on the video player). Confirm the quick-action toolbar appears. - Confirm the toolbar shows "Change thumbnail", "Edit video URL", and "Remove" options. **Watch for:** - Actions not appearing on hover, only on click (or vice versa depending on the configured trigger) - Actions appearing for non-video elements that happen to be wrapped similarly
When you rate your site design as "Almost / Needs changes", the AI now runs a focused visual scan and shows you a list of specific detected issues — such as overlapping text, invisible sections, or broken layouts — each with a one-click prompt to fix it. **Where:** Site editor → AI assistant panel → Rate your design → Almost / Needs changes **How to test:** - Open a site in the editor with the AI assistant panel visible - Click the feedback card and select "Almost / Needs changes" - Wait about 15 seconds for the visual scan to complete - Confirm a list of specific issue chips appears above the general feedback options - Click one chip and confirm the AI applies a targeted fix **Watch for:** No issues appearing after the wait (spinner stuck), or generic feedback shown instead of specific visual bugs
The design scan indicator now says "about 15 seconds" instead of showing an indefinite spinner, and tells you that you can keep typing changes in chat while it runs — those get processed right away. **Where:** Site editor → Design assistant → "Needs changes" → Aspects panel (loading state) **How to test:** - Open the design assistant and click "Needs changes" - Look for the scanning spinner — it should show "Scanning your design — about 15 seconds" - Confirm a hint below it invites you to keep typing changes **Watch for:** Old "Scanning your design for issues…" text with no time hint; no hint about typing below
When replacing the thumbnail/poster of a section that contains a YouTube embed, the "Set Thumbnail" modal now includes a "Use video poster" option that automatically fetches the YouTube video's thumbnail and sets it as the poster image — no manual download and re-upload needed. **Where:** Site editor → live preview → right-click a video card → Change thumbnail → "Use video poster". **How to test:** - Open a site with a YouTube embed. - Right-click the video → Change thumbnail. Confirm a "Use video poster" button or option is visible. - Click it — confirm the thumbnail updates to the YouTube video's actual poster frame. - Save and refresh — confirm the poster persists. **Watch for:** - "Use video poster" failing silently when the YouTube URL is in a non-standard format - Poster image not persisting after save (thumbnail updates in preview but reverts on refresh) - Option not appearing for Vimeo embeds (Vimeo poster derivation may be deferred)
Generating a new design variation via "Add Design" was silently failing — the variation was saved to the database but the preview never switched to it and no new tab appeared. Users had to manually reload the page to see the result. The root cause was a scoping bug that prevented the success event from being sent. The new variation now appears immediately after generation completes. **Where:** Client portal → design preview phase → Add Design button **How to test:** - Open a site in the design preview phase - Click "Add Design" to generate an additional variation - Confirm a new variation tab appears and the preview switches to it automatically — no page reload needed - Check that the generation status shows "completed" not "failed" **Watch for:** New tab not appearing; preview staying on the old variation; generation_status showing "failed" in the database even though the design saved correctly
Simple requests like "make the buttons link to the form below" were incorrectly triggering the "We detected a large change — apply it?" confirmation card because the AI's internal context made the request look long. The classifier now focuses only on what the user actually typed, so the confirmation only appears for genuinely large rewrites. **Where:** Client portal → design assistant → any edit request **How to test:** - Ask the assistant for a small targeted change, e.g. "make the CTA button blue" - Confirm no "Large change detected" card appears - Ask for a full copy rewrite — confirm the confirmation card does appear **Watch for:** Confirmation card appearing for every change regardless of size, or never appearing even for large rewrites
Typing @ in the blueprint planning chat (the "build your site" step) did not show the mention dropdown for referencing other sites — it only worked in the design phase. The autocomplete now works consistently across all chat phases. **Where:** Client portal → new site wizard → chat input → type @ **How to test:** - Start creating a new site - In the planning chat, type @ - Confirm a dropdown appears listing available sites to reference **Watch for:** No dropdown appearing on @, or mentions not being sent with the message
Creating a new inner page could silently overwrite the homepage's hero, CTA, or other content blocks when the new page happened to use the same content keys. Both the merge logic and the AI prompt have been tightened so each page owns its own content namespace and shared sections (header, footer) remain truly shared. **Where:** Client portal → Pages tab → Add page **How to test:** - Note the homepage hero headline - Add a new inner page (e.g. /services/coaching) - Return to the homepage and confirm the hero headline is unchanged - Verify the new page has its own editable content in the Content Manager **Watch for:** Homepage hero text changing after adding a sub-page, or new page showing homepage copy
When generating a new sub-page, the AI now understands which content keys are shared across pages (header, footer, hero, FAQ) and keeps the new page's content separate. Previously, a new page could silently couple its hero to the homepage's hero, causing edits to one to affect the other. **Where:** Client portal → Pages tab → Add Page **How to test:** - Open a site with a populated homepage hero - Add a new sub-page (e.g., "Services" or "About") - Edit the hero text on the new page - Verify the homepage hero is unchanged after the edit **Watch for:** Edits to a sub-page's hero or intro section changing the same content on the homepage
Three bugs found during a real user session are fixed: (1) pastel colors like "warm peach and cream" were being replaced by bold burnt orange — soft tones now map faithfully to their correct hex values; (2) typing your business location was repeating it nine times in the brief (e.g. "Bangalore, India — Bangalore, India — ...") — duplicate segments are now stripped; (3) the AI was inventing a business name from a category description (e.g. turning "girls PG hostel" into "PG Hotels for Girls") — the system now requires explicit ownership cues before inferring a name. **Where:** Blueprint chat → business details / color palette steps **How to test:** - Describe a business with a soft color preference (peach, cream, lavender, mint) - Confirm the generated palette reflects those soft tones, not a saturated substitute - Type a city name and submit; go back and re-enter it — confirm it doesn't duplicate in the brief - Describe a business category without naming it (e.g. "a yoga studio") — confirm the AI doesn't fabricate a specific business name **Watch for:** Color palette reverting to bold/saturated after the fix; location field still showing repeated values; business name field being auto-populated with invented text
The suggested reply chips shown below messages in blueprint chat were sometimes carrying over from a previous context — for example, showing style-selection chips during a business-details step, or vice versa. The chat now clears mixed-context chips when the conversation topic changes, so only relevant suggestions are shown. **Where:** Blueprint chat → suggested reply chips below messages **How to test:** - Work through several steps in blueprint chat (business details, color palette, style selection) - Confirm the suggested chips change appropriately as the topic changes - Confirm chips from an earlier step don't persist into a later step **Watch for:** Chips appearing blank; correct chips not showing up when expected; chips from the wrong step persisting after a topic change
When you make specific requests during the blueprint planning conversation (e.g., "include a pricing table", "add a contact form with a phone field"), those requirements are now captured and shown in the Brief panel — and injected directly into the generation prompt so the AI reliably delivers them. **Where:** Blueprint chat → Brief panel → "Captured Requirements" sections; also visible during site generation **How to test:** - Start a new blueprint chat and make a few specific requests ("I need a testimonials section", "add a booking form") - Open the Brief panel (sidebar) and look for the "Captured Requirements" entries under each relevant section - Generate the site and verify the requested elements appear **Watch for:** Requirements listed in the Brief panel not appearing in the generated site; captured requirements showing as "unknown" category
When you ask the AI to add animations, sliders, carousels, hover effects, or other interactive elements, the canvas now automatically switches to preview mode after applying the change so you can see the interaction working immediately — no manual toggle needed. **Where:** Client portal → design assistant or voice assistant → animation/interaction requests **How to test:** - Open a site in the client portal - Ask the assistant to "add a fade-in animation to the hero" or "make the cards carousel" - Confirm the canvas is in preview mode after the change is applied **Watch for:** Canvas staying in edit mode for animation changes, or incorrectly switching to preview for non-animation edits
The client card on the dashboard was sometimes showing a blank thumbnail when a test or draft site (no screenshot) was listed before a real site that had a valid screenshot. The selection now prefers sites with screenshots, so the card always shows the most representative preview. **Where:** Dashboard → client cards grid **How to test:** - Open the dashboard for a client that has multiple sites - Confirm the client card shows a recognizable thumbnail rather than a blank/grey box **Watch for:** Blank thumbnails on client cards where at least one site has a screenshot
A new Content tab inside the Features workspace surfaces every content collection on your site — blog posts, team members, testimonials, custom item types — in a searchable table with sorting, filtering, bulk publish/unpublish/delete, and CSV import. Previously these collections were buried three clicks deep in the Apps grid with no bulk editing. **Where:** Client portal → Features → Content tab **How to test:** - Open a site that has content collections (blog, team, testimonials, or any custom type) - Click Features in the left rail and select the Content tab - Confirm collections appear as rows with item counts - Select multiple items and use bulk actions (publish, unpublish, delete) - Use the search bar to filter items by name **Watch for:** Collections showing 0 items when items exist; bulk delete not removing from the knowledge base mirror; import not processing rows correctly
A new Custom Code panel in site settings lets you paste HTML snippets — tracking pixels, custom CSS, analytics scripts, or anything else — that get injected into every published page. Supports head, body-start, and body-end placement, with a one-click library of common snippets (Google Tag Manager, Meta Pixel, Hotjar, Clarity, LinkedIn Insight, Intercom, Google Search Console). **Where:** Client portal → Settings → Custom Code **How to test:** - Open Settings and select Custom Code - Paste a script tag (e.g. a GTM snippet) into the Head section - Publish the site and open the published URL - View page source and confirm the snippet appears inside `<head>` - Test Body Start and Body End placement as well **Watch for:** Snippet missing from published HTML; script appearing in wrong position (head vs body); special characters in snippets causing publish errors
The "Love it / Almost / Not quite" design feedback card was only shown immediately after generation — users who came back to a site later or switched variations never saw it. The card now appears consistently whenever a variation has a design rationale, regardless of prior visit history. **Where:** Client portal → design preview phase → variation chat sidebar **How to test:** - Generate a site and note the triage card appears - Leave the page and return, or switch variations and back - Confirm the triage card is still visible in the chat sidebar **Watch for:** Card appearing twice (double-inject) or not appearing at all for variations with a rationale message
The variation picker in the activity feed was showing blank labels (falling through to index instead of the actual variation number) due to incorrect field references. Variation buttons now show the correct "V1", "V2" labels. **Where:** Site editor → Design assistant → Activity feed → variation picker buttons **How to test:** - In the design assistant activity feed, look for any variation picker entry - Confirm the buttons show "V1", "V2" etc. with the correct numbers **Watch for:** Variation buttons showing "V1" where they used to show blank or wrong numbers
Deleting or adding a page no longer wipes out dropdown containers, anchor links, external links, or mailto/tel items from your site's navigation — only the deleted page's own link is removed. **Where:** Client portal → Pages tab (any page add, delete, or rename operation) **How to test:** - Open a site that has a dropdown menu in the navigation (e.g., a "Services" dropdown with sub-links) - Delete an unrelated page (e.g., "/team") - Verify the dropdown and all its children survive intact in the Navigation editor - The deleted page's link should be gone; everything else should remain **Watch for:** Dropdown menus being emptied after a page operation, or external/anchor links disappearing from navigation
The blueprint chat input bar was showing two "Generate site" buttons — one in the input bar itself and one in the main chat area. The redundant button in the input bar has been removed to avoid confusion about which one to use. **Where:** Blueprint chat → chat input area **How to test:** - Start building a new site and open the blueprint chat - Confirm only one "Generate" button is visible when the brief is ready - Click it and confirm generation starts correctly **Watch for:** Both buttons reappearing; the remaining button not triggering generation
Asking the AI to improve copy on a sub-page (e.g. /services) was sometimes rewriting the homepage hero at the same time, because both pages shared the same content key. The AI now can only touch content that belongs to the page being edited. It also receives the site's business name and industry so it no longer confuses the business's topic with the business itself. **Where:** Client portal → any inner page → AI assistant / design assistant **How to test:** - Open a services or about page - Ask the assistant to "write a better headline" or "improve the intro" - Check the homepage — hero headline should be unchanged - Confirm the inner page shows the updated copy **Watch for:** Homepage hero changing after editing an inner page, or the assistant producing copy that describes the wrong type of business
Asking the AI to improve copy on a sub-page could still overwrite homepage content (such as the hero headline) when that content was read by a shared component like HeroSection. The guard now also scans shared block files so those content keys are correctly protected when editing any inner page. **Where:** Client portal → any inner page (e.g. /services, /about) → AI assistant **How to test:** - Open a services or about page in a multi-page site - Ask the assistant to "rewrite the intro" or "improve the headline" - Check the homepage — hero headline and other homepage content should be unchanged **Watch for:** Homepage hero text changing after editing an inner page; sites where the homepage component is imported as a shared block (HeroSection, Header) being especially susceptible
Content edits to marketing arrays like logo strips, USP bullet lists, and scrolling marquees were being silently discarded on sites with any third-party integration (e.g., Calendly, Shopify). Changes appeared to apply but weren't saved to the database. These edits now persist correctly. **Where:** Client portal → site editor → AI chat refinement (any edit targeting logo, USP, or marquee content) **How to test:** - Open a site that uses a third-party booking or e-commerce integration - Ask the AI to update the logo strip or a USP list item - Refresh the page and verify the change persisted - Also test removing an item from a marquee or list: the item should be gone after refresh **Watch for:** Content edits reporting "Applied" in the chat but reverting after a page refresh; logo strip or USP items silently resetting
Switching between design variations was silently deleting any inner pages (About, Services, Contact, FAQ, etc.) that had been added after the initial site generation. Those pages are now carried over when you pick a different design. **Where:** Client portal → design preview phase → variation switcher (V1 / V2 cards) **How to test:** - Generate a site and finalize it to extract pages - Add a new inner page (e.g. /about) - Switch to the alternate design variation - Confirm the /about page is still present **Watch for:** Inner pages missing from the Pages list or 404 on the inner page URL after switching variations
When switching between design variations or while auto-fix runs after a switch, the loading overlay is now fully opaque — the previous design's content no longer bleeds through and creates a confusing double-image effect. **Where:** Client portal → design variation switcher (V1/V2 toggle) **How to test:** - Open a site with multiple design variations - Switch from one variation to another - Verify the loading overlay is solid white/opaque and the old design is not visible underneath it during the transition **Watch for:** Old design content (hero text, images) ghosting through the loading overlay during a design switch
Editing the site navigation via the AI assistant was silently failing for sites whose header component used an older menu format — the change was confirmed but nothing visually updated. Navigation now uses a single canonical format end-to-end, so assistant edits always take effect. **Where:** Client portal → AI assistant → "Update the navigation menu" (or similar) **How to test:** - Open a site in the client portal - Ask the assistant to add, rename, or reorder a nav item - Verify the header reflects the change immediately without a manual refresh **Watch for:** Nav items reverting after a variation switch (separate issue from the fix here)
Sites generated before a platform update were failing to publish due to outdated style imports in inner pages. These are now automatically cleaned up at publish time, so affected sites can publish without requiring manual fixes or support. **Where:** Client portal → Publish button **How to test:** - Take a site that was generated more than a week ago and has not been published recently - Click Publish - Confirm the publish completes without an error about missing exports **Watch for:** Publish failure with "No matching export for import" or similar SSR compile error
The Page Planner's outline view was crashing when a section had an undefined type or an incomplete call-to-action (e.g. missing button label). Sections with missing data now render gracefully with fallback text instead of breaking the entire planner. **Where:** Client portal → Pages tab → Page Planner → outline/plan view **How to test:** - Open the Page Planner and generate a page plan - Confirm the plan outline renders all sections without crashing - If any section shows "undefined" or blank, verify the planner still opens and the remaining sections are visible **Watch for:** Page Planner showing a blank white screen; individual section cards disappearing from the plan; crash errors in the browser console when opening the planner
After planning a new page, the editor now shows a compact outline — page name, slug, and a numbered list of sections — instead of immediately opening a dense field-by-field form. The detailed edit form is still one click away when you need it. **Where:** Client portal → Pages tab → Add page → review plan **How to test:** - Open a site in the client portal - Go to the Pages tab and add a new page - Confirm the plan displays as a readable card with section chips, not an expanded form - Click the edit button to open the full form **Watch for:** The form opening automatically on plan display (regression), or section list being empty
After planning and generating a new page in the Page Planner, the planner workspace was staying open on screen after the page was added. It now closes itself and returns you to the main editor view once generation completes, so you don't need to manually dismiss it. **Where:** Client portal → Pages tab → Page Planner → Generate Page **How to test:** - Open the Pages tab and click to plan a new page - Fill out the page plan and click Generate Page - Confirm the Page Planner workspace closes automatically once the page is added - Verify the new page appears in the pages list **Watch for:** Workspace remaining open after generation; workspace closing before generation finishes; new page not appearing in the list
Four bugs in the Page Planner workspace are resolved: the AI assistant could confuse a fresh planning conversation with a prior session (causing it to append new plans to old chats), the "Improve design" and "Publish site" action chips were visible inside the planner where they don't belong, and the AI now correctly tracks which sections the user has laid out for an in-progress page so iterative edits go to the right place. **Where:** Client portal → Pages tab → "+ Add Page" → Page Planner workspace **How to test:** - Open the Page Planner via the Pages tab - Select a page type in the purpose gate and click Continue — the AI should start a fresh conversation, not pick up from a previous session - Confirm no "Improve design", "Publish site", or "Viewing: /" labels appear inside the planner workspace - Propose a page plan, then ask the AI to change a section — it should update the current plan card, not try to edit an existing page **Watch for:** AI appending new page plans to old chat history; or site-level action chips appearing inside the page planner; or the AI editing the wrong page when asked to modify a plan.
Overlay popups and modals that were enabled in the editor were not appearing on published sites — the overlay containers were missing from the exported HTML. Published sites now include the correct overlay markup so overlays trigger as configured. **Where:** Client portal → Publish → live published site (any overlay/popup configured via the Overlays feature) **How to test:** - Set up a popup overlay on a page (e.g., a contact modal triggered by a button) - Publish the site - Visit the published site URL and trigger the overlay - Verify the overlay appears correctly **Watch for:** Overlays that work in the preview but are invisible or missing on the published site
Clicking "Refine Page" on the homepage was losing the page context and dropping back to the default view instead of opening the homepage editor. This is now fixed — the homepage page parameter is preserved correctly through the navigation. **Where:** Client portal → site preview → "Refine Page" button on the homepage **How to test:** - Open any site in the client portal - Navigate to the homepage in the preview - Click "Refine Page" - Verify the editor opens on the homepage (not a different page or a blank state) **Watch for:** Clicking "Refine Page" on the homepage bringing up the wrong page or appearing to do nothing
A small number of sites had files with missing names, which caused the site editor to crash on load when the AI assistant tried to build its context. The editor now handles these gracefully and loads without error. **Where:** Client portal → site editor (loading the editor for an affected site) **How to test:** - Open the site editor for a site that previously showed an error on load - Verify the editor loads without crashing and the AI assistant suggestions work correctly **Watch for:** "Cannot read properties of undefined (reading 'toLowerCase')" error when opening the site editor
An intermittent AI model behavior could cause the site generator to fall back to only one design instead of two. The system now detects this early and retries automatically, so you consistently get two designs to choose from after generation. **Where:** New site flow → generating site → design selection **How to test:** - Create a new site and complete the blueprint chat - Click "Build full site" and wait for generation to complete - Confirm two distinct design variations are shown in the preview **Watch for:** Only one design appearing in the variation selector after generation; generation completing but landing on a blank or single-option screen
In some cases only one design was generated instead of two, because the AI returned an unexpected format that caused the first design attempt to fail silently and promote the second design into its slot. The system now detects this pattern early and retries the first design independently, so both designs are generated correctly. **Where:** New site flow → after Blueprint chat → "Build full site" → design selection screen **How to test:** - Create a new site, complete the blueprint chat, click "Build full site" - After generation completes, confirm two distinct design options are shown in the design picker **Watch for:** Only one design appearing on the design selection screen; both designs appearing identical
An org owner with an older lower-privilege access record on a specific site would silently lose admin abilities (including Publish) for that site, seeing a 403 error. The platform now always grants the highest role across all permission sources, so org ownership is never overridden by a narrower site-level record. **Where:** Client portal → Publish button (or any admin action) **How to test:** - Log in as an org owner - Open a site and attempt to publish - Confirm publish succeeds without a permission error **Watch for:** Publish showing "403 Forbidden" or the Publish button being disabled for org owners
The preview iframe inside the Mission Control side panel (used when editing settings, pages, or other features while keeping the site visible) was rendering at a different scale than the main editor view. Both views now use the same scaling logic, so the preview looks consistent regardless of where you're working. **Where:** Client portal → any MC panel (Settings, Pages, etc.) → site preview on the right **How to test:** - Open the site editor in full view and note the preview scale - Click into Settings or Pages to open a Mission Control panel - Confirm the site preview in the panel matches the scale from the full editor - Resize the browser window and confirm the preview still scales correctly **Watch for:** Preview appearing too small or too large in the panel view; content cut off or overflowing the preview area
Sites that had both a component file (e.g., `Footer`) and a config file with a similar name (e.g., `footer-config`) were publishing broken — all inner pages crashed with an "element type is invalid" error because the wrong file was being used as the Footer component. The correct component is now always selected. **Where:** Client portal → Publish (affects the live published site for certain site structures) **How to test:** - Publish a site that has a config-only block named `footer-config` or `header-config` alongside real component files - Visit the published inner pages (About, Contact, Services, etc.) - Verify all pages render correctly without a white screen or element-invalid error **Watch for:** Inner pages (not the homepage) showing a blank/error screen on the published site while the homepage works fine
Clicking Skip on the "Love it / Almost / Not quite" design triage card would dismiss it for the current session, but reloading the page brought it back. The dismiss state is now saved per site and per design variation, so skipping once keeps it gone on future visits. Skipping one variation still shows the card for other variations. **Where:** Client portal → design preview phase → variation chat sidebar → triage card **How to test:** - Open a site in preview phase and confirm the triage card appears - Click Skip to dismiss it - Hard-reload the page (Ctrl+R or Cmd+R) - Confirm the triage card does not reappear for the same variation - Switch to a different variation — confirm the card still appears there **Watch for:** Card reappearing after reload; Skip on one variation hiding the card on all variations
Selecting a template as inspiration during site setup now shows an inline card in the chat with the template's color palette, design style, and visual DNA — so you can confirm the AI picked up the right inspiration before generating. The old "Use this design" button that would get stuck mid-conversation has been replaced with a single "Use as inspiration" action that correctly carries the template's style into generation. **Where:** Blueprint chat → Ideas panel → template gallery → Use as inspiration **How to test:** - Start building a new site and open the Ideas panel in blueprint chat - Browse and select a template - Confirm an inspiration card appears in the chat showing the palette and design highlights - Proceed to generate — the resulting site should visually reflect the inspiration template's style **Watch for:** Inspiration card not appearing after template selection; generated site ignoring the template style; palette swatches showing wrong colors
Asking the voice assistant to "show styles" or "show me color options" was silently doing nothing — it called a navigation action that didn't exist, while the AI confirmed it had opened the styles panel. The command now correctly opens the Brief panel where style and color controls live. **Where:** Site editor → Voice mode → ask "show me styles" or "show color options" **How to test:** - Enable voice mode in the site editor - Say or type "show me styles" or "show color options" - Confirm the Brief panel opens with style/color controls visible **Watch for:** Voice assistant saying it opened styles but nothing happening in the UI
Messages sent via voice mode in the design assistant chat were displayed with a distinct purple background, making them visually inconsistent with typed messages from the same conversation. Voice messages now use the same styling as text messages so the conversation history looks uniform. **Where:** Client portal → design assistant chat → voice mode messages **How to test:** - Open the design assistant and send a few typed messages - Switch to voice mode and send a voice message - Confirm the voice message appears with the same visual style as the typed messages (no purple background) **Watch for:** Voice messages appearing unstyled or invisible; typed messages accidentally gaining the old voice style
Asking the AI assistant to add a page (e.g., "add a Services page") would silently fail — the AI proposed a plan but nothing appeared in the interface because a missing field caused an internal error with no visible feedback. The workspace now opens automatically whenever the AI proposes a page plan, and failed tool calls show a visible error message instead of dead silence. **Where:** Client portal → Chat assistant → any request to add or plan a new page **How to test:** - Open the chat assistant on any site - Type "add a pricing page" or "I need a contact page" - Verify the Page Planner workspace opens automatically with the AI's proposed plan - If the AI can't complete the request, verify you see an error message rather than nothing happening **Watch for:** The chat assistant returning an empty response with no plan card appearing — that's the previous silent-failure behavior.
The AI chat widget now defaults to shorter, more conversational answers (2 paragraphs max unless detail is requested), matches the business's tone, and is more disciplined about calls-to-action — only surfacing real CTAs and skipping them on factual or quick-answer responses. When information isn't explicitly documented, the widget will acknowledge the gap and offer a reasonable inference with a clear hedge rather than refusing to answer. **Where:** Any published site with the AI chat widget enabled **How to test:** - Open the chat widget on a published site and ask a simple factual question (e.g., "What are your hours?") - Verify the answer is concise (1-2 short paragraphs, not a multi-paragraph essay) - Ask something not explicitly in the site content (e.g., "Do you offer discounts for non-profits?") - Verify the widget acknowledges the gap and offers a reasonable inference rather than a flat "I don't know" **Watch for:** Responses that are excessively long for simple questions, or the widget revealing technical system details (model names, retrieval methods, etc.) — that should never happen.
A trash icon now appears when hovering any section row in the Content tab, letting you permanently remove a content section you no longer need. A confirmation dialog explains the consequences (the site will fall back to defaults for that section, and the AI chat widget will stop referencing it) and warns if the section is shared across multiple pages. **Where:** Client portal → any site → Content tab → hover a section row → trash icon **How to test:** - Open the Content tab on a site with multiple content sections - Hover over a section row — verify a trash icon appears on the right - Click the trash icon and confirm in the dialog - Verify the section disappears and a "Section removed" toast appears - Check that data-source-managed sections (e.g., auto-synced content) do NOT show a trash icon **Watch for:** Sections that show a trash icon but fail to delete, or sections that reappear after removal (which would indicate a sync is recreating them).
Top-level image arrays (logo strips, partner galleries) and plain string lists (service areas, brand names, categories) were previously fed through the wrong editor, causing image URLs to render as individual characters and string lists to show corrupt field labels. Image arrays now open in the gallery editor, and string lists get a clean line-by-line textarea. **Where:** Client portal → any site → Content tab → sections containing a logo strip, image gallery, or a list of text items (service areas, brands, policy notes, etc.) **How to test:** - Open the Content Manager on a site that has a logo strip or partner images section - Verify images render as thumbnails in a gallery editor, not as character-indexed text fields - Open a section containing a list of plain strings (e.g. service areas, brand names) - Verify it shows as a textarea with one item per line, not a broken object form **Watch for:** Any array section that still shows character fields (0='h', 1='t', etc.) — that's the pre-fix symptom and means the section wasn't picked up by the new detector. Report the section name and site ID.
Typing in a service-areas or brands text list used to trim and filter on every keystroke, causing the cursor to jump to the end whenever you typed a space or started a new line. Normalization now happens only when you leave the field. The AI Rewrite button is also now available for these list sections, and service-area URL lists no longer incorrectly open in the image gallery editor. **Where:** Client portal → any site → Content tab → string list sections (Service Areas, Brands, Categories, etc.) **How to test:** - Open the Content Manager and navigate to a list section (service areas, brands, or similar) - Click into the textarea and type a new item — verify the cursor stays where you placed it as you type - Add a trailing space or press Enter for a blank line mid-edit — cursor should not jump - Leave the field (click elsewhere) — verify blank lines are trimmed and empty items removed at that point - Confirm the "AI Rewrite" button appears for list sections **Watch for:** A service-area list (URL paths like `/north-london`) that opens as a gallery editor with image thumbnails — that's the over-detection bug and would mean the fix didn't land.
A bug in the finalization step could silently overwrite React layout components (Footer, Header, Navigation) with configuration-only data blocks of the same name, causing sites to crash with React errors when visiting any page that used those components. Affected sites have been restored; the root cause is fixed to prevent recurrence. **Where:** Any site that went through finalization (publishing or design selection) **How to test:** - Load any recently published or finalized site and navigate between pages - Verify the footer, header, and navigation render correctly on every page - Check that no "Element type is invalid" React errors appear in the browser console **Watch for:** Pages that render blank or show a white screen after finalization, or a footer that appears as raw JSON/object data instead of a visual component.
Sites built with a dark color scheme using CSS variables (rather than hardcoded Tailwind dark classes) were generating form popups with a white background and dark text — an unreadable combination on dark sites. The form modal generator now reads the site's theme color definitions to detect dark backgrounds and applies appropriate dark modal styling. **Where:** Any generated site with a dark color scheme → contact form or any popup form **How to test:** - Generate a site using a dark-themed template (e.g. one with a near-black background) - Open the contact form or any popup form — verify it appears with a dark background and light text matching the site - Also verify light-themed sites still get white form popups **Watch for:** White form popup appearing on dark-background sites; form text being illegible against the modal background.
When a user liked multiple templates in the Ideas panel and one was selected as the inspiration for generation, the system could non-deterministically pick any of the liked templates instead of the one the user chose first. Generation now respects the user's selection order. **Where:** Client portal → blueprint chat → Ideas panel → like multiple templates → Generate **How to test:** - Like two or more templates in the Ideas panel, with a specific preference for the first one - Generate a site — verify the output reflects the style of the first selected template, not a random other one **Watch for:** Generated site resembling a different template than the one the user favored in the Ideas panel.
Site generation could show a "Generation timed out" error while the site was still generating and about to succeed — this happened because the browser's polling window was 5 minutes but complex generations (those requiring retry attempts) can take up to 10 minutes. The polling window now matches the actual server limit, and a final status check accurately surfaces genuine failures instead of reporting them all as timeouts. **Where:** Client portal → new site flow → generation progress screen **How to test:** - Generate a site that triggers a retry (e.g. one requiring two attempts) - Verify the progress screen continues polling through the retry rather than cutting off at 5 minutes with a false timeout error **Watch for:** "Generation timed out" appearing when the site is still generating; successful generations being reported as failures.
A new Knowledge section under Settings lets site owners see and manage every source feeding the AI chat assistant — auto-synced site content, uploaded PDFs, imported URLs, and manual entries — all in one place. Each source shows its status (indexed, pending, or failed), chunk count, and last-synced time, with options to view, edit, re-index, or delete. A "Sync Now" button processes any pending sources immediately. **Where:** Client portal → any site → Settings → Chat → Knowledge **How to test:** - Open Settings → Chat → Knowledge on any site that has had content added - Verify you see a list of knowledge sources grouped by type (auto-synced content, PDFs, URLs, manual entries) - Click "+ Add" and try adding a manual entry with a title and some content - Click "Sync Now" and verify the new entry reaches "indexed" status within a few seconds - Try importing a URL and verify it appears in the list with a "pending" then "indexed" status **Watch for:** The Knowledge tab not appearing in Settings, or "Sync Now" running indefinitely without sources reaching "indexed" status.
Two bugs in the newsletter popup add-on are fixed: the scroll-based trigger now works correctly on shareable preview links (previously it showed the popup immediately instead of waiting for 50% scroll), and on dark-themed sites the popup dialog now uses a light card background so text is readable instead of appearing dark-on-dark. **Where:** Any published or shareable preview site with a newsletter popup configured to appear at 50% scroll (or other triggered modes) **How to test:** - Add a newsletter popup to a site with trigger set to "50% scroll" - Open the shareable preview link (`/preview/[token]`) in a new tab - Scroll halfway down the page — popup should appear only after 50% scroll, not on load - Open a dark-themed site's preview and verify the newsletter popup dialog has a white/light card background with readable dark text - In the site editor canvas, verify the popup still appears immediately as a preview placeholder (editor behavior unchanged) **Watch for:** The popup appearing instantly on the shareable preview before any scrolling — that's the pre-fix behavior. Also watch for unreadable text in the popup on any dark-background site.
A regression caused the finalization step to silently skip all inner pages (About, Services, Blog, etc.) while still reporting success — users would see no error but the pages were never created. The fix corrects the crash that caused this and adds validation so any page that fails content-shape checks is logged visibly rather than disappearing quietly. **Where:** Site editor → finalize/publish flow that generates additional inner pages **How to test:** - Generate a site with a blueprint that includes multiple pages (About, Services, Contact) - Finalize the site — verify all expected inner pages appear in the Pages list - Verify no pages are silently missing after finalization completes **Watch for:** Pages list showing only the homepage after finalization, with no error message; inner pages (About, Services) not appearing despite finalization reporting success.
The Page Planner workspace was showing recipe chips ("Pricing", "Contact", "FAQ", etc.) and unrelated site-action suggestions ("Publish site", "Generate SEO") even after the AI had already proposed a plan — cluttering the interface mid-flow. These chips are now hidden once a conversation is underway. The workspace header also updates to show the page being planned rather than a static tagline. **Where:** Client portal → Pages tab → Page Planner workspace (mid-flow state) **How to test:** - Open the Page Planner and let the AI propose a plan for a new page - Verify no recipe chips or "Publish site" / "Generate SEO" suggestions appear in the chat area while the plan is visible - Verify the header changes from the default intro copy to "Planning · [Page Name]" once a plan exists - Open a fresh (empty) Page Planner workspace — verify recipe chips DO appear as a helpful starting point **Watch for:** Recipe chips ("FAQ", "Blog post", etc.) visible in the left chat pane while the AI has already produced a plan card on the right.
Adding a new page now starts with a purpose selector — choose a page type (Services, About, Pricing, FAQ, Contact, and more) or describe it in your own words before the AI plans it. The workspace moves to a full-width view with chat on the left and the live plan on the right, giving both panels room to breathe instead of cramming them into a narrow rail column. **Where:** Client portal → Pages tab → "+ Add Page" button **How to test:** - Click "+ Add Page" from the Pages tab - Verify a purpose gate appears with page type options (Services, About, Pricing, FAQ, Contact, etc.) and a free-text fallback - Select a page type and click Continue — the AI should start generating a plan immediately without requiring you to retype the request - Verify the workspace shows chat on the left and a rich plan card on the right with full section details **Watch for:** The old narrow rail layout still appearing, or the purpose gate being skipped and going straight to a blank chat input.
When using the Page Planner to plan a new page, the AI assistant was showing homepage-focused context ("Viewing: Homepage /") and launch-readiness prompts ("You have 7 pages ready, check your SEO") that belong to the main editor rail, not the page planning workspace. These have been replaced with planner-specific copy so the AI stays focused on the page being planned. **Where:** Client portal → Pages tab → "+ Add Page" → Page Planner workspace **How to test:** - Open the Page Planner via the Pages tab - Verify there's no "Viewing: Homepage /" footer in the chat - Verify the empty state shows planner-focused copy rather than site launch readiness messages - Ask the AI about the current hero copy — it should not describe the homepage **Watch for:** AI answering questions about the homepage instead of the page being planned; launch-readiness or design-feedback messages appearing inside the planner.
When the AI matches a new page to a structurally similar page already on the site, it now mentions this in chat ("I'll model this on @Plans — similar structure, different copy") rather than silently showing only the reference chip on the plan card, which was easy to miss. **Where:** Client portal → Pages tab → "+ Add Page" → Page Planner workspace → AI response after proposing a plan **How to test:** - Open the Page Planner on a site that already has multiple pages (e.g. a Services page) - Ask the AI to add a similar page type — verify the AI's chat response mentions which existing page it's using as a reference - Confirm the plan card also shows the reference chip **Watch for:** AI proposing a plan without mentioning the reference page in its response, even though the plan card shows a "Reference: @PageName" chip.
Three issues in the Page Planner workspace are resolved: clicking Cancel on a single-card plan immediately re-opened the edit form (making Cancel appear broken), a planning session started from the purpose gate could re-submit the AI seed prompt if the workspace briefly unmounted (causing a duplicate AI message), and Cmd/Ctrl+Enter on an empty purpose gate silently did nothing instead of being blocked. **Where:** Client portal → Pages tab → "+ Add Page" → Page Planner workspace **How to test:** - Propose a single-page plan and open the edit form — click Cancel and verify the form closes and stays closed - Select a page type from the purpose gate and Continue — verify the AI receives the request only once, with no duplicate messages - On the purpose gate screen with nothing selected, press Cmd+Enter — verify nothing happens (no silent error, no empty submission) **Watch for:** Edit form reopening immediately after clicking Cancel; AI receiving the same planning request twice; Ctrl+Enter triggering an empty submission.
When clicking "Create page" while the page plan edit form was open, a timing issue could cause duplicate or stale page entries to appear in the Pages list. The fix eliminates the race condition by returning the page data synchronously from the commit step, so Create always produces exactly one new page. **Where:** Client portal → Pages tab → "+ Add Page" → Page Planner → edit form open → Create page **How to test:** - Propose a page plan, open the edit form to review it, and click "Create page" - Verify exactly one new page appears in the Pages list, with the correct name and slug **Watch for:** Two copies of the new page appearing in the Pages list; page appearing with a stale name from a previous edit.
Three issues in the newly redesigned Page Planner are resolved: the Create Page button silently did nothing when the edit form was open (the common case for single-page plans), the AI directive text appeared verbatim in the chat box making users re-read and resubmit it, and a microphone button in the purpose gate implied voice input was available there when it wasn't. **Where:** Client portal → Pages tab → "+ Add Page" → Page Planner workspace **How to test:** - Open the Page Planner and let the AI propose a single-page plan - Verify the edit form opens automatically and the "Create page" button is clickable - Click Create — verify the page is created without having to close the edit form first - Select a page type from the purpose gate and click Continue — verify the AI starts planning immediately without any text appearing in the chat input that you'd need to submit manually **Watch for:** Clicking "Create page" and nothing happening; or a long AI prompt appearing in the chat textarea after selecting a page type from the gate.
Sites with analytics enabled were failing to publish with a cryptic file-not-found error when Google Analytics credentials weren't configured on the server. Publishing now skips the analytics auto-provisioning step gracefully when credentials are absent, so sites publish successfully regardless of GA setup status. **Where:** Client portal → Publish button (or Settings → Domain) **How to test:** - Publish a site on an environment where Google Analytics credentials are not configured - Verify the site publishes successfully without an error related to analytics **Watch for:** Publish failing with "ENOENT: no such file or directory" or similar error referencing analytics keys; sites that cannot be published at all due to a missing GA setup.
Sites with stats sections displaying values like "₹200Cr+", "24/7", or "15,000+" could show a white screen with a red error instead of rendering the page, because the animated counter tried to call `.toFixed()` on a string. Non-numeric stat values now display as plain text without animation, and numeric-looking strings like "15,000+" animate correctly. **Where:** Any generated site with a stats/metrics section using formatted or symbolic values **How to test:** - View a generated site that includes a stats section with non-numeric values (e.g. "24/7", "₹200Cr+", "5,000+") - Verify the page renders correctly — numeric values animate, non-numeric values display as-is without error **Watch for:** White screen with red error text on pages that include a stats or metrics section.
When you pick a template as a style reference in the blueprint Ideas panel, its design DNA (color palette, typography, layout patterns) is now injected into both generated variations — so your new site looks like a thoughtful adaptation of the template rather than an unrelated design that ignores your inspiration choice. **Where:** Blueprint chat → Ideas panel → Templates → select a template → Generate site **How to test:** - Start a new site and open the blueprint chat - In the Ideas panel, pick any template as a reference - Generate the site and view the two design variations - Verify both variations visually reflect the chosen template's style (colors, layout feel) adapted to your business type **Watch for:** Variations that look generic and unrelated to the selected template — that would mean the style brief isn't reaching the generation prompts.
Hovering a font, corner-style, or density preset in the Tweaks panel used to silently re-apply the site's body background colour and hero text-shadow on top of the live preview, so unrelated parts of the page would visibly recolour every time the cursor crossed a swatch. Each Tweak knob now scopes its preview overlay to only the visual properties it controls — fonts only restyle text, corners only resize radii, density only changes spacing. Color hover still wouldn't fully match what `Apply` produces if the AI baked in literal Tailwind brand classes (e.g., `bg-orange-500`) instead of `var(--color-primary)`. A site-repair pass now rewrites those baked-in classes back to theme variables so primary-color swatches actually recolour every section. **Where:** Site editor → Tweaks (sparkles button on the preview toolbar) **How to test:** - Open a site in the editor and click the Tweaks button (top-right of preview) - Hover over the **Heading** dropdown options or one of the **Designer pairings** — only typography should change; the page background and hero gradient must stay still - Hover over **Corner style** presets (Sharp / Soft / Pill) — only button/card corner radii should change - Hover over **Density** presets — only spacing/line-height should respond - Hover a **Primary color** swatch — every brand-colored element (buttons, headings, accent borders, "why us" tints) should flip in unison; previously some sections stayed the original brand colour **Watch for:** Any section that doesn't recolour with the rest when you hover a primary swatch — that's the leftover hardcoded-class symptom and should be rare now. If it still happens on a specific site, mention the site ID.
The "Add New Site" card is now the first item in the site grid on the dashboard, making it easier to find when you have many existing sites. Previously it appeared at the end of the list. **Where:** Dashboard → Sites grid **How to test:** - Log in and go to the dashboard - Check that the "Add New Site" card appears as the first card in the grid, before any existing sites **Watch for:** The card appearing at the end of the grid instead of the beginning. The card missing entirely when you have many sites.
When adding a new page to a site that already has several pages, the page type selector now clearly indicates which types are already present. This helps avoid accidentally adding a duplicate page (e.g., a second About page). **Where:** Client portal → Site editor → Pages tab → Add Page button **How to test:** - Open a site that already has an About page and a Contact page - Click "Add Page" and look at the page type options - Confirm that About and Contact are marked as already existing, or are filtered/grouped to indicate they're in use **Watch for:** The dialog still showing all page types without indicating which are already present. Confusion about whether you can have multiple pages of the same type.
The "Add to site" popover is now state-aware: if a feature (like the announcement bar or chat widget) is already active on your site, the row shows "Edit" and "Remove" buttons instead of "Add". This makes it much easier to manage features you've already enabled without hunting through settings. **Where:** Client portal → Site editor → "+" toolbar button → Add to site popover **How to test:** - Add an announcement bar to a site using the "+" popover - Open the "+" popover again — the announcement bar row should now show "Edit" and "Remove" options instead of "Add" - Click "Edit" and confirm you can modify the announcement bar settings - Click "Remove" and confirm the announcement bar is removed from the site - Reopen the popover — the row should be back to "Add" state **Watch for:** Active add-ons still showing "Add" instead of "Edit/Remove". The "Remove" button not actually removing the feature. "Edit" not opening the right settings.
The "Add to site" popover now clearly shows add-ons that are disabled or unavailable (instead of silently hiding them), and keyboard/screen-reader navigation within the panel has been improved for active rows. **Where:** Client portal → Site editor → "+" toolbar button → Add to site popover **How to test:** - Open the Add to site popover by clicking the "+" button in the site editor toolbar - Confirm any unavailable add-ons are shown in a visually distinct disabled state with a tooltip explaining why - Navigate the popover using keyboard only (Tab/Enter/arrow keys) and confirm all rows are reachable and interactive **Watch for:** Disabled add-ons appearing clickable (they should be grayed out and non-interactive). Keyboard focus getting trapped or skipping rows.
Asking the AI assistant to update the site navigation (add a menu item, rename a link, reorder pages) was silently doing nothing — the tool call appeared to succeed but no changes were saved. The navigation update tool is now fully wired up so changes take effect immediately and are reflected in the site menu. **Where:** Client portal → Site editor → AI assistant → "Add X to the navigation" / "Rename the About link to Team" **How to test:** - Open the design assistant and ask it to add a page to the navigation menu (e.g., "add a Blog link to the nav") - Check the site navigation in preview — the new link should appear - Ask the assistant to rename a nav item and confirm the change is reflected - Ask it to remove a nav item and confirm it's gone **Watch for:** Navigation changes still silently failing (no change in the site nav after the AI responds positively). Duplicate navigation items being added.
A regression in the AI site generation pipeline was causing the generated copy to sound formal, stilted, and overly technical — instead of conversational and brand-appropriate. Copy quality guardrails have been restored and strengthened, so newly generated sites will have more natural, human-sounding text from the start. **Where:** Generated site → All text content (headlines, descriptions, CTAs) **How to test:** - Generate a new site for a service business (e.g., plumber, accountant, restaurant) - Read the hero headline and section descriptions - Confirm the copy sounds natural and conversational, not like AI boilerplate ("Elevate your business to new heights with our cutting-edge solutions") - Compare with a site generated before this fix — the new version should sound noticeably more human **Watch for:** Copy that still sounds robotic or overly formal. Sections that are missing copy entirely.
When an announcement bar was added to a site with a fixed (sticky) navigation header, the bar was overlapping the header instead of sitting above it. The layout now correctly pushes the header down so both elements are visible and stacked in the right order. **Where:** Published site / preview → Sites with both an announcement bar and a sticky navigation **How to test:** - Add an announcement bar to a site that has a fixed/sticky navigation header via the "+" toolbar - Preview the site and scroll down - Confirm the announcement bar sits above the navigation, and the navigation sticks correctly below it with no overlap **Watch for:** The announcement bar disappearing behind the nav on scroll. The nav jumping position when the announcement bar is toggled.
A previous fix made the sticky navigation header sit below the announcement bar, but the rest of the page content was still hidden behind the bar. The announcement bar now shifts the entire page down so nothing is obscured, and dismissing the bar restores the original layout cleanly. **Where:** Published site or preview → Sites with an announcement bar enabled **How to test:** - Add an announcement bar to a site via the "+" toolbar - Preview the site and check that the hero section and all content below it is fully visible (not hidden behind the bar) - Scroll down and confirm sticky navigation also sits correctly below the bar - Dismiss the announcement bar and confirm the page layout snaps back to its original position **Watch for:** Page content partially hidden behind the announcement bar on initial load. Layout jumping when the bar is dismissed.
The AI assistant now prioritizes asking about your business location in the very first follow-up question, rather than getting to it later in the conversation. This ensures location-relevant content (local imagery, geo-specific copy) is captured early for better site personalization. **Where:** Client portal → New site → Blueprint chat (first AI follow-up question) **How to test:** - Start a new site and type your business name in the blueprint chat - Check that the AI's first follow-up question asks for your city or service area - Complete the conversation and generate — confirm the site reflects your location **Watch for:** The AI still asking about location late in the conversation (regression). The AI asking about location twice.
The site plan in blueprint chat now includes an Interactive Features panel below the section list. Active features (booking, shopping cart, WhatsApp chat, help center, etc.) appear as chips you can remove. A new "Add feature" button opens a picker of all available interactive features so you can add one directly from the plan without leaving the chat. **Where:** Client portal → New site → Blueprint chat → Site plan widget → Interactive Features panel **How to test:** - Start a new site via blueprint chat and describe a business that would need bookings or e-commerce (e.g., a salon or online shop) - Complete the planning conversation until a site plan appears in the chat - Scroll to the bottom of the plan widget and confirm an Interactive Features panel is visible - Confirm any detected features (e.g., "Booking Requests") appear as chips with an X to remove them - Click "+ Add feature", browse the available features, and select one — confirm it appears as a new chip - Click X on a chip and confirm the feature and its associated section are removed from the plan **Watch for:** The Interactive Features panel not appearing. Clicking X on a chip not removing the feature. The feature picker showing already-active features as options.
The blueprint planning conversation now maintains a requirements ledger — a running record of features and promises made during the conversation. The AI checks this ledger before responding so it stops over-promising capabilities the platform cannot deliver. For local businesses (coaching schools, salons, restaurants, etc.), the AI now asks for the city and service model (single location, service area, or online) before allowing site generation, so the generated site reflects the actual business geography instead of defaulting to US placeholders. **Where:** Client portal → New site → Blueprint chat **How to test:** - Start a new site for a local business (e.g., a sports coaching academy or salon) - Confirm the AI asks for your location and whether you serve a specific area or travel to clients — it should do this early in the conversation - Try to proceed to generation without answering — the AI should remind you and block generation until these are answered - After generating, confirm the site does not contain fake US phone numbers, placeholder addresses, or generic "San Francisco" city names **Watch for:** The AI skipping the location question for a clearly local business. Fake contact details (+1 555 numbers, 123 Main Street) appearing in the generated site. The AI promising features like parent portals or attendance tracking that the platform does not support.
Two data integrity issues in the blueprint chat plan have been fixed. Adding a new item to a section that already had structured items (with titles, descriptions, and icons) was creating a mix of plain text and structured entries that could cause display errors. Reordering sections was also silently modifying sections that were not moved. Both issues are now resolved so the plan remains consistent as you edit it. **Where:** Client portal → New site → Blueprint chat → Site plan widget → Section list **How to test:** - Complete the blueprint chat planning flow and open a site plan with sections that have items (e.g., a services section with individual service entries) - Click "+" to add a new item to that section and confirm the new item appears in the same structured format (with the same fields) as the existing items - Drag to reorder sections and confirm sections that were not moved still have their original items intact **Watch for:** Newly added items showing as plain text when existing items are structured with titles and descriptions. Sections losing their items after reordering other sections.
Sections in the blueprint chat plan list now display a badge when they include an interactive feature like Booking Requests, Shopping Cart, or WhatsApp. This makes it easy to see at a glance which parts of the planned site will have active functionality, not just static content. **Where:** Client portal → New site → Blueprint chat → Site plan widget → Section list **How to test:** - Start a new site via blueprint chat for a business that needs bookings or e-commerce - Complete the planning conversation until a site plan appears - Look at the section list in the plan widget — sections with interactive features should show a blue badge (e.g., "Booking Requests", "Shopping Cart") - Hover over the badge to see a description of the feature **Watch for:** Sections with features not showing any badge. The badge showing the wrong feature name for a section.
In some cases the blueprint chat AI would outline sections for the site plan but skip the step that fills in the detailed content for each section — resulting in a shallow plan with no items, copy, or design notes. The system now detects this situation automatically and runs the detailed planner, so the plan shown in chat always includes rich per-section guidance before it is used to generate the site. **Where:** Client portal → New site → Blueprint chat → Site plan widget **How to test:** - Start a new site via blueprint chat and describe a business with several service areas (e.g., a travel agency or sports coaching school) - Complete the planning conversation and wait for the site plan to appear - Confirm the plan sections show items, descriptions, and design guidance — not just bare section names - Repeat with different business types (salon, SaaS product) and confirm the same quality **Watch for:** Plan sections that appear with only a name and type but no items or copy. The "Generate site" button appearing before a full plan is displayed.
After reviewing a plan in the blueprint chat, the sidebar "Preview Plan" button was staying stuck and the Layout tab wasn't auto-switching to show the populated sections. Both issues are now fixed. Additionally, each plan section row in the chat can be expanded to show its content items, which can be renamed or deleted inline. **Where:** Client portal → New site → Blueprint chat → Preview Plan (sidebar) **How to test:** - Start a new site and go through the blueprint chat until the AI generates a plan - Click "Preview Plan" in the chat — the sidebar should immediately switch to the Layout tab showing the sections - Expand any section row in the inline plan list to see its items - Try renaming or deleting an item directly in the chat without leaving the chat view **Watch for:** Sidebar CTA remaining stuck on "Preview Plan" after a plan has been applied. Layout tab not switching automatically. Section items showing without labels.
Quick-reply chips (the suggestion buttons below the AI's message) were sometimes clickable while the AI pipeline was still running, which could cause duplicate or conflicting requests. They now stay disabled until the full pipeline completes. Voice responses from the AI are also shown as system notes in the chat feed for better context. **Where:** Client portal → New site → Design assistant chat **How to test:** - Start a new site and trigger an AI response that takes a few seconds - While the AI is still generating, check that the clarification chips below its message are grayed out and unclickable - Once generation finishes, confirm the chips become active **Watch for:** Chips remaining permanently disabled after generation completes. Chips becoming clickable mid-stream.
When the AI failed to generate suggestion chips (quick-reply options), the error message was misleadingly showing "rephrase" as a fallback action. Errors are now handled more gracefully with a JSON repair step that recovers partial responses, and the fallback message is accurate when recovery isn't possible. **Where:** Client portal → New site → Variation chat → AI suggestion chips below messages **How to test:** - Trigger a scenario where AI chips would normally fail (e.g., poor network, or edge case prompt) - Confirm that if chips fail, the error shown is clear and actionable — not "rephrase" when that doesn't apply - Confirm that partial chip responses are recovered correctly in most cases **Watch for:** Error message still showing "rephrase" when that's not the right action. Chips silently failing with no feedback to the user.
Cookie consent banners, exit-intent popups, and newsletter popups were showing near-invisible dark text on sites with dark color themes. All three overlay types now use the site's own theme text color so they remain readable regardless of whether the site uses a light or dark palette. **Where:** Published site or preview → Any site with a dark background → Cookie banner, exit popup, or newsletter popup **How to test:** - Open a dark-themed site in the editor and activate a cookie banner, exit popup, or newsletter popup via the "+" toolbar - Preview or publish the site and trigger each overlay - Confirm all text in the overlay is clearly readable against the background - Also test on a light-themed site to confirm those still look correct **Watch for:** Overlay text that is still hard to read (near-invisible). Overlay borders that do not match the site's theme palette.
The choice, rewrite, and clarification action buttons in the design assistant now show a clear processing/loading indicator while the AI is working, preventing accidental double-clicks and giving users feedback that their request was received. **Where:** Client portal → Site editor → Design assistant → Action buttons (choice chips, rewrite, clarify) **How to test:** - Open the design assistant and click a choice chip or clarification button - While the AI is responding, check that the button shows a spinner or disabled state - Confirm the button returns to normal once the response is complete **Watch for:** Buttons that remain in loading state permanently. Buttons that allow double-clicks despite showing a loading indicator.
When the AI assistant failed to plan a page, the progress indicator was showing a generic failed state with no explanation. The specific error reason is now shown inline so you can understand what went wrong and take corrective action. **Where:** Client portal → Site editor → AI assistant → Page planning progress **How to test:** - Trigger a page plan that fails (e.g., ask the assistant to create a page type that conflicts with an existing one) - Check the progress panel — the failed step should show a readable error message explaining why it failed **Watch for:** Failed steps showing no error detail (regression to generic failed state). Error messages that contain internal technical jargon instead of user-friendly text.
Switching hero patterns in the wireframe/layout view was triggering an infinite update loop that caused the UI to freeze or become unresponsive. The blueprint wizard and wireframe view are now properly synchronized without feeding back into each other. **Where:** Client portal → New site → Blueprint wizard → Layout tab → Hero pattern picker **How to test:** - Open the blueprint wizard Layout tab - Click through the different hero pattern options (Standard, Cinematic, Ken Burns, Particle) - Confirm the wireframe updates correctly with no freezing, console errors, or infinite re-renders - Switch back and forth between patterns several times to verify stability **Watch for:** UI freezing after selecting a pattern. The pattern picker not updating the wireframe at all (regression in the opposite direction).
After applying a cinematic hero, Ken Burns hero, or any other hero pattern via the design assistant, the suggested next step chips (e.g., "Adjust colors", "Change the video") were not appearing. The chips are now shown correctly after every hero pattern is applied, making it easy to continue refining the hero section. **Where:** Client portal → Site editor → Design assistant → Hero pattern tools **How to test:** - Open a site in the editor and open the design assistant - Apply a hero pattern (cinematic hero, Ken Burns hero, or particle background) - Confirm that after the pattern is applied, action chips appear below the response suggesting what to do next - Click one of the chips and confirm it works as expected **Watch for:** No chips appearing after applying a hero pattern. Chips appearing but not triggering the expected action when clicked.
Input fields in email capture forms and funnel opt-in widgets were invisible on sites with dark color themes — the text and border blended into the background. All affected form components now use theme-aware styling so inputs are clearly readable on both light and dark sites. **Where:** Published site → Any section with a funnel or opt-in form **How to test:** - Open a site with a dark background theme in the site editor - Navigate to a section with an email input or contact form - Confirm the input field border and placeholder text are visible against the dark background **Watch for:** Input fields that are still invisible (white on white or dark on dark). The fix affecting light-themed sites negatively (inputs should still look normal on light themes).
A "Generate" button now sits next to the Send button in the blueprint chat input bar, so you can kick off site generation directly from the chat without hunting for the button elsewhere. **Where:** Client portal → New site → Blueprint chat → Input bar (bottom of chat) **How to test:** - Start a new site via the blueprint chat - Look at the bottom input bar — a "Generate" button should appear alongside the Send button - Click it to confirm it starts the site generation flow **Watch for:** The Generate button appearing when it shouldn't (e.g., before enough info has been collected). The button not triggering generation (still loops to chat).
When the AI finished gathering information and signaled it was ready to generate the site, clicking "Generate" was incorrectly sending the user back into the chat flow instead of starting the build. The button now correctly triggers site generation when the AI has marked the conversation as complete. **Where:** Client portal → New site → Variation chat → Generate button **How to test:** - Start a new site conversation, answer the AI's questions until it indicates readiness - When the "Generate" button appears, click it - Confirm it transitions to the site generation screen instead of looping back to a chat prompt **Watch for:** Generation starting prematurely (before the AI is done collecting info). The Generate button still looping back into chat after this fix.
The hero pattern switcher (Standard, Cinematic, Ken Burns, Particle) now transitions between patterns more cleanly, with better cleanup of the previous pattern's state and improved canvas rendering for the animated patterns. Edge cases when switching back and forth between patterns are also resolved. **Where:** Client portal → Site editor → Design assistant → "Switch to cinematic hero" / Blueprint wizard → Layout tab → Hero pattern **How to test:** - Apply a cinematic or Ken Burns hero to a site via the design assistant - Switch to a different hero pattern and back - Confirm the transition is clean, with no leftover DOM elements or animation artifacts from the previous pattern - Try switching between all 4 pattern types several times to check stability **Watch for:** Canvas flicker or ghost elements when switching patterns. Ken Burns or particle effects continuing to animate after switching away.
Long headlines and taglines in the hero section were occasionally overflowing outside their container on newly generated sites. The AI generation prompt now includes layout constraints that prevent this, and the image selection system better accounts for the business location when choosing relevant photos. **Where:** Generated site → Hero section **How to test:** - Generate a new site with a long business name or tagline - Check the hero section in preview — text should be fully contained within the design without clipping or overflow - Compare before/after by generating a site with a very long headline (30+ characters) **Watch for:** Hero text still overflowing on sites with very long names. Text being truncated too aggressively (too short).
A new "Particle Background" hero style is now available — a pure-canvas animated effect with floating, gently drifting particles that respond to mouse movement. It works without any external libraries, supports reduced-motion preferences, and uses your brand accent color to tint a portion of the particles for a cohesive look. **Where:** Client portal → Site editor → Design assistant → "Switch to particle background hero" / Blueprint wizard → Layout tab → Hero pattern → Particle **How to test:** - Open a site in the editor and ask the design assistant "switch to a particle background hero" - Confirm the hero section shows floating animated particles against the background - Move the mouse over the hero — particles should gently react to the cursor - Open browser reduced-motion settings (prefers-reduced-motion: reduce) and confirm the particles become static - Switch away and back to the pattern to verify clean transitions **Watch for:** External library errors in the console (the particle effect must run with no npm dependencies). Particles not matching the site's brand color. The hero text being obscured by the particle layer.
Pages added to a site after the initial design was generated could show a white background or incorrect text color — the browser default bleeding through instead of the site's theme. The theme system now applies the site's background and text colors at the document level automatically, so every page inherits the correct look without relying on per-page workarounds. Three layers of protection ensure this holds even for edge cases. **Where:** Client portal → Pages tab → Any newly generated inner page (About, Services, Pricing, etc.) **How to test:** - Open a site with a dark color theme - Add a new page (e.g., Pricing or About) via the Pages tab - Preview the new page and confirm the background and text colors match the rest of the site — no white flash or light background visible - Check all sections on the new page to confirm theme colors are consistent **Watch for:** Newly added pages showing a white or light background on a dark-themed site. Text appearing in the wrong color on new pages.
A new page generated for an existing site was sometimes producing a light-colored layout on a dark-themed site, or using generic placeholder copy instead of matching the established brand style. The page generator now explicitly receives a "match the existing theme exactly — do not invent a new one" directive before producing any content, so new pages reliably inherit the site's visual identity. **Where:** Client portal → Pages tab → Add new page **How to test:** - Open a site with a distinctive color theme (e.g., dark background with a bright accent) - Add a new inner page (e.g., Pricing) via the Pages tab - Confirm the generated page uses the same background color, accent color, and font as the rest of the site - Confirm the hero and section copy matches the site's tone rather than using generic agency copy **Watch for:** New pages that appear with a completely different color scheme from the rest of the site. Generic placeholder copy ("Elevate your business") on a page that should match a specific brand.
The page planning flow has been consolidated into a unified plan card that shows per-section guidance from the AI. Each section can be expanded to view and edit its purpose and any specific copy instructions. The AI now also detects when a proposed page slug already exists and surfaces a clear choice (refine the existing page, replace it, or use a different slug) instead of silently proceeding. Boilerplate pages like Privacy Policy and Terms of Service now skip the plan step and generate immediately. **Where:** Client portal → Pages tab → Add page → Plan card **How to test:** - Open the page planner and ask to create a page with a slug that already exists (e.g., ask for a new "/services" when one already exists) - Confirm the AI responds with clear options presented as chips: refine, replace, or use a different slug - Ask to create a Privacy Policy or Terms of Service page and confirm it generates immediately without showing a plan card - For any other page type, confirm the plan card shows per-section purpose and optional copy hints in expandable rows **Watch for:** The AI silently creating a page at a colliding slug without asking. Boilerplate pages showing an unnecessary plan step. Per-section purpose fields being empty when the AI should have populated them.
Three UX issues in the page planner have been fixed. The AI was filling "verbatim copy" fields instead of the "purpose" field for most sections, meaning the strategic guidance was going to the wrong place. The advanced options accordion now starts collapsed and shows a summary pill when the AI has populated strategic fields. Starter suggestion chips now appear whenever the planner is open, even when resuming a previous conversation, instead of only appearing on the very first visit. **Where:** Client portal → Pages tab → Page planner chat **How to test:** - Open the page planner for a new page and let the AI propose a plan - Expand a section row and confirm the "Purpose" field has a description (not empty) and "Verbatim copy" is only set when exact text was quoted - Confirm the Advanced section is collapsed by default and shows a count pill like "3 populated" when the AI added strategic guidance - Close the planner, re-open it with the same conversation, and confirm the starter chips are still visible **Watch for:** Purpose fields that are empty while verbatim copy is populated for every section. The advanced accordion being open by default. Starter chips disappearing when re-opening a planner with an existing conversation.
When planning a new page in the assistant chat, you can now type "@" and select any existing page on the site to use as a style or structure reference. The AI picks up the reference and uses that page as a guide when generating the new one — useful for keeping consistent layouts across similar pages (e.g., "make Services look like @Pricing"). **Where:** Client portal → Pages tab → Chat assistant input field **How to test:** - Open a site that has at least two pages - Open the page planner chat for a new page - Type "@" in the chat input and confirm a dropdown appears with a "Pages on this site" section listing existing pages - Select a page reference and describe how to use it (e.g., "make the layout similar to @Services") - Confirm the generated page plan references the selected page and the final output reflects its structure **Watch for:** The "@" dropdown not showing the Pages section. Selecting a page reference not affecting the generated plan. Keyboard navigation (arrow keys, Enter) not working in the page section of the dropdown.
The page planner assistant now consistently routes all "add a page" requests through the plan card for confirmation before generating, except for legally required boilerplate pages (Privacy Policy, Terms of Service, Cookie Policy) which generate immediately without a plan step. When a proposed page slug matches one that already exists, the AI now responds with clear chip options rather than prose — making it one click to refine the existing page, replace it, or choose a different slug. **Where:** Client portal → Pages tab → Chat assistant **How to test:** - Ask the assistant to add a "Privacy Policy" page — confirm it generates without showing a plan card first - Ask to add a page whose slug already exists (e.g., "/services" when one exists) — confirm you see chip buttons for Refine, Replace, or Different slug rather than a prose paragraph - Ask to add any other new page — confirm the plan card appears for confirmation before generation begins **Watch for:** Boilerplate pages showing an unnecessary plan card. Slug collision responses appearing as plain text instead of clickable chips. Non-boilerplate pages bypassing the plan card and generating immediately.
Two interaction issues in the page planner have been fixed. Starter suggestion chips (quick-start prompts for common page types) were not appearing when the planner was opened with an existing conversation, even though the planner was otherwise ready for input. The @-mention dropdown for referencing other pages was also not opening in some configurations where only page mentions were available. Both now work consistently regardless of conversation state. **Where:** Client portal → Pages tab → Page planner chat input **How to test:** - Open the page planner with an existing site that has a previous conversation history - Confirm starter chips appear in the input area even though it is not a new conversation - Type "@" in the chat input and confirm the dropdown opens and shows the "Pages on this site" section - Select a page and confirm it is inserted as a mention in the input **Watch for:** Starter chips not appearing when re-opening a planner that had a previous conversation. Typing "@" not opening the mention dropdown. The dropdown opening but not showing any pages.
After asking the AI to add a new section to the site, the preview now automatically scrolls to the newly added section so you can immediately see and review what was created, instead of having to manually scroll to find it. **Where:** Client portal → Site editor → Design assistant → "Add a [section type] section" **How to test:** - Open a site in the editor and ask the design assistant to add a new section (e.g., "add a testimonials section") - Once the AI finishes, the preview should automatically scroll to the new section - Confirm the new section is visible without manual scrolling **Watch for:** The page scrolling to the wrong section. The page not scrolling at all (regression to old behavior).
When regenerating a site to get a fresh design, the previous variation's files were not being fully replaced, causing a mix of old and new content to appear in the regenerated site. The regeneration flow now correctly swaps all page files and snapshots the outgoing variation before replacing it. **Where:** Client portal → Site editor → Regenerate site option **How to test:** - Open an existing site and trigger a regeneration - After generation completes, check that all pages reflect the new design with no leftover content from the old design - Confirm the old design is still accessible via the variation history/switcher **Watch for:** Old content appearing mixed with new content on regenerated sites. The variation history losing the previous design after regeneration.
The @mention badge UI in the design assistant chat input was removed to reduce visual noise and confusion. Users were clicking the badges expecting something to happen, but they were decorative-only. **Where:** Client portal → Site editor → Design assistant → Chat input bar **How to test:** - Open the design assistant and check the chat input field - Confirm there are no @mention or context-tag badges cluttering the input area **Watch for:** @mention badges still appearing in the input field.
Features added via the "Add to site" panel (announcement bars, chat widgets, etc.) were not showing in the shareable public preview link. The preview now includes all active add-ons so stakeholders see the same experience as the live editor. **Where:** Client portal → Site editor → Preview → Share preview link **How to test:** - Add an announcement bar or another add-on to a site via the "+" toolbar button - Copy the public preview link and open it in a new browser tab (or incognito) - Confirm the add-on appears in the preview the same way it appears in the editor **Watch for:** Add-ons showing in the editor but not in the shared preview. Add-ons appearing in the preview but not in the editor (regression).
The voice assistant will no longer trigger site generation just because the user "sounds ready" or has finished answering questions. Generation now requires an explicit go-ahead phrase from the user (yes / generate / build it / let's go / go ahead). **Where:** Client portal → New site → Voice mode (the microphone in the blueprint wizard) **How to test:** - Start a new site, click the microphone, dictate a few details (business name, industry, description, sections) - Stop short of saying any go-ahead phrase — keep answering questions but never say "generate", "build it", "yes", "let's go", or similar - Confirm the assistant ASKS first ("Ready for me to generate the site now?") and waits for an explicit yes - Try saying things like "I think that's everything" or "I'm done" — the assistant should still ask for explicit confirmation, not auto-trigger - Once you say "yes generate" or "let's build it", confirm generation starts and the wizard transitions to the build screen - Edge: try ending the voice session before confirmation — generation should NOT have started **Watch for:** Voice firing generation when the user said something ambiguous (e.g., "I'm ready to take a break" should NOT trigger). Voice asking for confirmation more than once in a row (annoying loop). The assistant cutting off mid-sentence when it transitions to the build step (related issue, mitigated by transcript-persistence fix shipped today).
You can now use your voice to direct changes to your site in the variation (refinement) chat — the same rich voice experience previously only available in the blueprint wizard. Say things like "add a testimonials section" or "change the color scheme to something darker" and the AI will update the site based on your spoken instructions. **Where:** Client portal → Site editor → Variation chat → Microphone button **How to test:** - Open a site in the editor and click the microphone icon in the variation chat - Speak a change request (e.g., "make the hero section more minimalist" or "add a FAQ section") - Confirm the AI processes your voice request and applies the change to the site - Try the voice minutes limit: if you've exhausted your monthly voice quota, confirm a clear error message appears **Watch for:** Voice mode falling back to basic dictation instead of the full conversational AI. The microphone button missing from the variation chat input bar. Voice transcripts not appearing in the chat feed.
When using voice mode in the design assistant, the AI's suggestions and responses are now shown as messages in the chat feed so users can see what the assistant is saying even with audio off or after the conversation. **Where:** Client portal → New site → Design assistant → Voice mode (microphone icon) **How to test:** - Open the design assistant and start voice mode - Speak a request and listen for the AI response - Check the chat feed — the AI's voice response should now appear as a system note in the conversation **Watch for:** Voice suggestions appearing twice (once in feed, once as audio). Chat feed not updating in real time during voice mode.
The "Add new section" quick action previously sent a blind instruction to the AI with no guidance on what to add or where. It now opens a form where you pick the section type (Testimonials, FAQ, Pricing, Team, and 6 others) and where to place it (bottom of page, after hero, before footer). The action also appears in the chat panel so you can see the result and undo it if needed. **Where:** Client portal → Site editor → click any page area → Quick Actions → Add new section **How to test:** - Click on the page, open Quick Actions, and select "Add new section" - Confirm a form opens with "Section type" and "Where to add it" dropdowns - Select a type (e.g. "Testimonials / Reviews") and placement, then click Apply - Confirm the new section appears at the chosen position and matches the site style - Confirm the chat panel shows the action with an Undo button **Watch for:** Form not opening (bare AI prompt fires instead); section added at wrong position; chat panel not showing the action; Undo button missing or non-functional
Applying an add-on (announcement bar, WhatsApp button, cookie banner, etc.) or removing one via the element menu was completely silent — no entry appeared in the design assistant chat and there was no undo record. Both actions now open the assistant panel, show a confirmation message, and record an activity entry so the session history is complete. **Where:** Client portal → Site editor → Quick Actions (+Add) → apply any add-on; or right-click an add-on element → Remove **How to test:** - Add a WhatsApp button via +Add → the design assistant chat should open and show a confirmation message - Remove the WhatsApp button via the element context menu → another message should appear in the chat - Check the activity/history panel to confirm both actions are recorded **Watch for:** Chat panel not opening after applying an add-on; duplicate messages; the activity entry missing or showing the wrong add-on name
The "Change page background" quick action used to fire blindly with a vague directive, so the AI had no concrete target and frequently returned no visible changes. It now opens a short form first — choose from six style directions (more premium, lighter/airier, warmer, cooler, dark mode, bold accent) and then applies exactly that change. **Where:** Client portal → Site editor → click any section → Quick Actions → Change page background **How to test:** - Click on any page section, open Quick Actions, and select "Change page background" - Confirm a form opens with a "Background direction" dropdown and six options - Pick an option (e.g. "Dark mode") and click Apply - Confirm the background visibly changes to match the chosen direction **Watch for:** Apply button staying disabled; background changing to an unexpected colour unrelated to the selection; no visible change after applying
When opening the add-on form for announcement bars, WhatsApp buttons, cookie banners, and 14 other site features, the Apply button was permanently greyed out on the first open — required dropdown fields started empty so the form was never considered valid. The first option in each dropdown is now pre-selected automatically so the form is ready to submit immediately. **Where:** Client portal → Site editor → Quick Actions (+Add) → any add-on with a dropdown field (announcement bar, WhatsApp bubble, cookie consent, etc.) **How to test:** - Click +Add and open any add-on form (e.g. Announcement Bar or WhatsApp Button) - Confirm the Apply button is enabled on first open without selecting anything - Change dropdown values and confirm Apply stays enabled - Submit the form and confirm the add-on is applied to the site **Watch for:** Apply button still disabled; the pre-selected default value causing unexpected add-on behaviour (e.g. wrong colour, wrong position)
When opening add-on forms that contain required text fields (announcement bar message, cookie banner text, Calendly URL, countdown end date, exit popup headline), the Apply button stayed permanently greyed out even though dropdown fields were pre-filled correctly. Required text fields now start with their placeholder value as a sensible default, enabling Apply immediately. The value can still be edited or cleared before submitting. **Where:** Client portal → Site editor → +Add → any add-on with a required text field (Announcement Bar, Cookie Banner, Calendly Float, Countdown Timer, Exit Popup) **How to test:** - Open +Add and select Announcement Bar - Confirm the Apply button is enabled immediately without typing anything - Check that the text field shows a pre-filled default message (e.g. "🎉 20% off all services this week") - Clear the field and confirm Apply becomes disabled; type new text and confirm it re-enables - Submit and confirm the add-on is applied with the chosen text **Watch for:** Apply button still disabled on open; pre-filled text appearing on the live site instead of user-entered text; other add-on forms still showing a disabled Apply
A background content-sync process was quietly overwriting user-edited site content on every page load — even when there was nothing to migrate — and the page version history was showing site-wide events (like deleted unrelated pages) mixed in with a single page's edits. Both issues are now fixed: the sync only writes when it has real work to do and uses a server-side fingerprint to skip re-runs, and each page's version timeline shows only that page's own history. **Where:** Client portal → Site editor → Pages tab → page version timeline (history panel); also affects all content editing done via the design assistant **How to test:** - Open a page's version timeline and confirm it shows only events for that page, with no "Deleted page X.tsx" entries from unrelated pages - Edit some content, save, then reload — the content should stay as edited and not revert or shift to different field names - Open the same site in a second browser session; the content sync should not re-fire and overwrite the first session's edits **Watch for:** Blueprint content keys renaming themselves after a page reload; version history for a page showing entries from other pages; the same site generating a new version entry on every visit with no actual changes
Opening the site editor crashed immediately on every page load after the add-on undo feature was introduced. A React hook referenced a function before it was declared in the component, causing a JavaScript error that prevented the editor from mounting at all. The reference is now forwarded correctly so the editor loads without issue. **Where:** Client portal → Site editor (any site) **How to test:** - Open any site in the client editor - Confirm the editor loads without a blank screen or console error - Add a site feature via +Add, then use the Undo button to reverse it — confirm undo still works **Watch for:** Blank editor on load; "Cannot access before initialization" error in the browser console; Undo button on add-on changes failing after the fix
Sites can now use a Ken Burns hero: a full-screen image that slowly zooms and pans across 3 chapters as the visitor scrolls, fading between each scene with adjustable brightness — giving photography, portfolio, and hospitality sites a cinematic opening without a video file. **Where:** Client portal → Blueprint builder → wireframe layout picker → "Hero patterns" row → Ken Burns Image Hero; or ask the AI assistant "add a Ken Burns hero" in the design chat **How to test:** - Open a site in the Blueprint builder and click a hero section in the wireframe - In the layout/pattern picker, select "Ken Burns Image Hero" — the modal should prompt for a hero image upload - Upload a landscape image and generate the site; the hero should open with a slow zoom-pan-brightness effect - Scroll through the page to confirm the Ken Burns animation progresses through 3 chapters before releasing - Switch back to a standard layout — the Ken Burns asset slot should be preserved and not re-prompt **Watch for:** Ken Burns and cinematic-video heroes both mounting simultaneously (two full-screen sections stacked); hero image prompt not appearing; scroll paging broken (two ScrollTrigger pins colliding); animation not running on mobile
Switching a site from one hero animation pattern to the other (cinematic video ↔ Ken Burns image) previously left both hero sections mounted simultaneously, corrupting scroll pacing and stacking two full-screen panels. The old pattern's block and its content metadata are now fully removed before the new one is applied. **Where:** Client portal → Blueprint builder → wireframe layout picker → Hero patterns row; or design assistant chat "switch to cinematic hero" / "switch to Ken Burns hero" **How to test:** - Set a site to Ken Burns hero, generate, and confirm it works - Switch to cinematic-scrub-video hero and regenerate — only one hero section should render - Switch back to Ken Burns — again, only one hero section, clean scroll behaviour - Verify no leftover `kenBurnsHero` or `scrubHero` content remains after each switch **Watch for:** Two hero sections visible at the same time; scroll jumping or stuck at the hero; lingering video or image assets from the prior pattern appearing in the new site
Adding, updating, or removing site features (announcement bars, WhatsApp buttons, cookie banners, etc.) through the design assistant chat had no undo support — the Undo button was missing entirely. These actions now record the previous state so clicking Undo reverses the operation: a newly placed add-on is removed, an updated one reverts to its prior config, and a removed one is restored. **Where:** Client portal → Site editor → Design Assistant (chat) → any +Add or remove add-on action **How to test:** - In the design assistant, add an Announcement Bar or WhatsApp button via the +Add panel - Confirm the chat activity shows an Undo button next to the action - Click Undo and confirm the add-on is removed - Try updating an existing add-on, then Undo — confirm it reverts to the previous settings **Watch for:** Undo button missing on add-on activities; undo succeeding but the add-on not actually reversing; undo crashing with a toast error
You can now attach MP4, MOV, or WebM video files directly from the in-editor assistant bar (the refine chat panel) when building a scroll-scrub cinematic hero. If generation is attempted without a required video, a prompt automatically appears so you can upload and retry without losing your place. **Where:** Client portal → site editor → assistant bar (bottom chat panel) → paperclip / attach button → select a video file **How to test:** - Open a site in the editor and open the assistant bar. - Click the attach button — video files (MP4/MOV/WebM) should appear as a valid option alongside images. - Attach a video and confirm a muted preview chip appears with a remove button. - Send a message; the video should upload (transcoding takes 20–40 s) and the AI should receive it. - Alternatively, start generation with a cinematic blueprint that requires a video but none attached — a modal should prompt you to upload, then automatically retry generation on success. **Watch for:** - Video chip showing an error instead of a preview thumbnail - Modal not appearing when generation requires a video upload - Generation not retrying automatically after successful upload in the modal
The site plan is now shown as a compact, editable section list inside the chat (drag, rename, delete, add) rather than a full wireframe that repeated the right-rail panel. The "Preview Plan / Generate Website" button moves to a fixed position anchored to the brief panel on desktop and the bottom of the screen on mobile — it's always visible and advances through each step without competing with the conversation. **Where:** New site builder → chat area (inline plan list) + sidebar footer / mobile bottom bar (CTA button) **How to test:** - Start a new site brief and let the assistant generate a section plan. - The chat should show a compact list of sections with drag handles, rename-on-click, a delete icon per row, and an "Add section" button at the bottom of the list. - Renaming a section in the inline list should be reflected in the right-rail Layout tab's wireframe view, and vice versa. - On desktop, a purple→pink "Preview Plan" button should appear anchored to the bottom of the Brief/Layout panel — it should not be inside the chat transcript. - On mobile, a fixed-bottom CTA should appear. Once a plan exists, the label should read "Review & Generate" (not "Generate Website"). - After previewing the plan, the button label should change to "Generate Website". **Watch for:** - Renaming in the inline list and then immediately renaming via the wireframe producing conflicting results (should stay in sync via shared React state) - The sidebar CTA button missing on first load (should appear as soon as a plan is created) - Mobile CTA label showing "Generate Website" before the review step has been completed
You can now reference sections from other sites when chatting with the Design Assistant — type `@` in the chat input to open a section browser that shows variations and sections across your other sites. Pick one and the assistant will use that design as a reference when making its change, making it easy to say "make our hero look like this one". **Where:** Client portal → Site editor → Design Assistant chat input → type `@` **How to test:** - Open a site in the editor and focus the Design Assistant chat input - Type `@` — a dropdown should appear; a right-side panel should also open showing a browsable list of sections/variations from your other sites - Pick a section from a different site — it should be inserted into the chat as a mention reference - Send a message referencing the mention (e.g. "make our hero look like @[ref]") - Confirm the assistant acts on the reference and the activity feed logs which design was referenced - Verify the dropdown styling is readable in light mode (grey background, not white-on-white) **Watch for:** Section browser panel failing to open when `@` is typed; mention inserted but losing the design reference after sending; dropdown only showing sections from the current site instead of cross-site references; dropdown text unreadable in light mode
Once a cinematic scroll-scrub hero was selected via the AI classifier, there was no way to undo it — the layout picker was locked and users had no route back to a standard hero without editing raw data. A "Switch to standard" button now appears on the hero card whenever cinematic mode is active, clearing the selection and restoring the normal layout picker. **Where:** New site builder → right-rail Layout tab → Hero section card (when cinematic mode is active) **How to test:** - Trigger cinematic hero intent in the chat (e.g. "I want a scroll-scrub video hero like Apple"). - Confirm the hero card shows "Cinematic Scroll-Scrub (locked)" with no layout picker. - Click "Switch to standard" — the card should revert to the normal layout picker, and the cinematic lock should clear. - Confirm the compact section-plan list in the chat transcript also reverts the hero icon to the standard layout. - Try a short confirmation like "yes, go ahead with that" after the AI describes the cinematic option — it should still set cinematic mode (classifier context fix). **Watch for:** - "Switch to standard" button not appearing when cinematic mode is active - Clicking "Switch to standard" but the wireframe still showing the cinematic layout - Short replies ("yes", "sure") after a cinematic description not triggering cinematic mode
The plan builder now reliably detects when you want a cinematic scroll-scrub hero and immediately reflects it in the layout wireframe — so you can see the "full-width video + three scroll-synced chapters" design before generating. A new "Switch to standard" button also lets you revert the cinematic hero choice if the classifier guessed wrong. **Where:** New site builder chat → right-rail Layout tab (wireframe panel) + hero section card **How to test:** - Start a new site brief. Say "I want a cinematic scroll-scrub hero like Apple's product pages." The right rail should update the hero section card to show "Cinematic Scroll-Scrub" (locked) with a wireframe of a full-width video surface and three chapter rows below it. - Short confirmations like "yes, go ahead with that" after the assistant describes the cinematic option should also register as intent. - Click the "Switch to standard" button on the hero card — the card should revert to the regular Split layout picker and the cinematic lock should clear. - Compact section-plan previews shown in the chat transcript should also reflect the cinematic layout (not the default Split). **Watch for:** - Hero card staying on "Split" layout despite explicit cinematic request - "Switch to standard" button not appearing when cinematic mode is active - Clicking "Switch to standard" and then the wireframe still showing the cinematic layout - Short replies like "yes" or "do that" not triggering cinematic intent when the assistant's previous message described the cinematic option
You can now drop a video file directly into the blueprint chat or the in-editor assistant bar — the clip is automatically optimised on the server for smooth frame-by-frame scrolling, then stored and linked to your blueprint so generation can proceed without a separate upload step. **Where:** New site builder chat (drag-drop or attach button) + Client portal → in-editor assistant bar (attach button) **How to test:** - Open the new site builder chat. Click the attachment icon (or drag a .mp4/.mov file into the chat area). A video preview chip should appear and a "Uploading + optimising…" state should show — optimisation typically takes 20–40 seconds for a 10-second clip. - After upload, confirm the chip shows a thumbnail and "Ready". The video URL should be attached to your blueprint. - Try in the in-editor assistant bar: open an existing site, click the paperclip, select a .mp4 — the same chip and loading state should appear. - Files larger than 80 MB should be rejected immediately with a size error before upload starts. **Watch for:** - Upload succeeding but generation still failing with "no video attached" (URL not persisting to blueprint) - Upload spinner never resolving (stuck transcode — check server logs for ffmpeg errors) - Image attachments broken (video path should not affect existing image flow) - WebM or MOV files rejected (all three formats should be accepted and re-encoded to MP4)
Upload a short video and turn it into a cinematic scroll-controlled hero — the kind where the video advances frame by frame as your visitor scrolls, like Apple's product pages. **Where:** New site builder chat (describe a "cinematic scroll-scrub" or "Apple-style" video hero in your brief, then upload the file) — or in the in-editor assistant on an existing site ("make the hero a scroll-scrub video" + attach an MP4). **How to test:** - Start a new site. In the opening chat, say something like: *"I want a luxury beachfront resort called Azure Sands — the hero should be a cinematic scroll-scrub video, like Apple's product pages."* - The right rail should update to show a "🎬 Cinematic Scroll-Scrub" layout for the hero section - Try to generate before uploading → an inline uploader should open asking for a 5–12 second MP4 - Drop your video → upload takes 20–40 seconds (the clip is being optimized for smooth scrubbing) - Generate → the opening of the site should be a pinned video with three scroll-synced text chapters that crossfade as you scroll, with no separate hero section below it - Try the retrofit path: on any already-generated site, open the in-editor assistant, drop an MP4, and ask for a cinematic hero — it should swap in place without regenerating the whole site **Watch for:** - Videos longer than ~12 seconds feel sluggish to scroll through — keep clips short - On iPhones/iPads, scrubbing may feel less precise than on desktop — this is a known limitation we're improving - If you upload a very large file (>80MB), it'll be rejected — trim first - The generator deliberately skips a second hero section when the cinematic hero is active — so the Homepage now opens straight into "Arrival / Accommodations / About" content below the video
Opening a dark-theme site in the full editor (via "Refine Design" or "Open Editor") was rendering text as near-invisible black against the dark background. The editor was injecting an outdated colour snapshot that overrode the live theme file. The fix skips the injection when the theme file already contains valid colour variables, so dark and custom themes render correctly. **Where:** Client portal → Mission Control → "Refine Design" button (or any "Open Editor" link) **How to test:** - Open a site that uses a dark theme in the client portal. - Click "Refine Design" or open the full editor via any route. - Text, headings, and backgrounds should match the site's actual design — white text on dark background for dark themes, not black text on dark backgrounds. - Refresh the editor URL — the correct theme should persist on reload. - Click the browser Back button from the editor — it should return to Mission Control rather than reloading the editor. **Watch for:** - Black text on dark backgrounds in the editor (the original bug returning) - Editor rendering a completely different colour scheme from the published site preview - Back button not returning to Mission Control
The Design Gallery no longer shows two separate horizontal bars stacked on top of each other. All gallery controls — viewport toggles, New Design, and Import — are now integrated into the main site header bar for a cleaner look. **Where:** Client portal → Site editor → Design Gallery view **How to test:** - Open a site and navigate to the Design Gallery (click the grid icon or "Design Gallery" in the header) - Confirm there is exactly one header bar at the top — no second toolbar underneath it - Confirm the viewport toggle buttons (mobile/tablet/desktop), New Design button, and Import button are all in that single bar - Switch back to the regular editor and confirm the toolbar returns to normal - Click the "+" card in the gallery grid — confirm it still triggers the New Design workspace **Watch for:** Two stacked toolbars appearing when entering gallery mode; viewport toggle or New Design button missing from the header; the "+" card in the grid being removed
Users who sign in with Google are now prompted to confirm their first and last name during onboarding when their Google account name is ambiguous (e.g., a company name or nickname). The form is pre-filled with the best available name from Google and skipped entirely for email signups. **Where:** Sign up with Google → Welcome / onboarding step **How to test:** - Sign up using a Google account whose display name is a company name or single word (not a proper first/last name) - On the welcome/onboarding page, confirm a "Tell us your name" form appears pre-filled with the best available values - Submit the form — your profile should update with the confirmed first and last name - Sign up with email instead — confirm the name form is skipped entirely (email signups already provide both names at registration) **Watch for:** Name form appearing for email signups (should be skipped); form showing blank fields instead of pre-filling from Google; name not saving correctly after submission
Some generated sites had elements that flashed invisible for ~600ms on every page load before appearing. This was caused by a default fade-in animation class that applied its "hidden" starting state before the animation fired. The class has been removed from the platform's animation defaults. **Where:** Any generated site (affects page load appearance) **How to test:** - Generate a new site and load the preview. - Elements should appear immediately on load — no visible flash or disappear-then-appear effect on any section, heading, or card. - Marquee/ticker animations (the animation the library was kept for) should still work. **Watch for:** - Any element that momentarily disappears then fades in on page load - Marquee animations broken (should be unaffected)
Opening the "+ New Design" workspace could throw a "Cannot access 'handleSendMessage' before initialization" error that prevented the workspace from loading at all. The crash was caused by a handler declaration order issue and is now fixed. **Where:** Client portal → preview phase → "+ New" button → "Describe Your Vision" **How to test:** - Open a site in preview phase (one with 2+ variations). - Click "+ New" then "Describe Your Vision". - The workspace should open without any red console errors. - Click a design chip (D1, D2…) — `@D{N}` should be inserted into the input with no crash. - Open the Advanced drawer, close it, reopen it — no errors. **Watch for:** - Any "Cannot access … before initialization" error in the browser console on open - Preference card (hypothesis diagnostic) failing to render after the chat opens
The "+ New Design" workspace has been rebuilt to feel like a continuation of your planning conversation, not a separate product. Chip click now references a design in your message; iterating is explicit. Session memory survives close + reopen. **Where:** Client portal → preview phase → "+ New" button → "Describe Your Vision" **How to test:** - Open a site in preview phase that has 2+ variations and a prior blueprint chat history - Click "+ New" and choose "Describe Your Vision" - Confirm your earlier blueprint messages appear behind a "Show earlier conversation" toggle (last 5 visible by default, expandable) - Confirm a horizontal chip bar "Your designs: D1 D2 D3…" sits above the chat, each chip with a small palette swatch - Click a chip (e.g. D2): `@D2` should appear in the input with no AI spinner, no anchor banner - Click another chip to mix: `@D2 @D3` joins in the input - Click the ⋯ next to a chip → "Iterate on D{N}" — now an "Iterating on D{N} (Full)" banner appears above the input - Open the "Advanced" drawer (header): you should see Anchored variation dropdown, anchor mode tri-state, Compose sections launcher, Visual reference upload, Re-diagnose, Start over, Review & generate - Close the workspace via X or Esc, then open "+ New" → "Describe Your Vision" again — the hypothesis should reappear instantly with no "Thinking…" spinner (session-cached) - Type a request the AI should read as iterate: `@D2 but warmer and less corporate` — after send, the AI should silently set D2 as the anchor (banner appears) based on the conversation, no modal or menu needed **Watch for:** - Any red console error on open (previously a TDZ "Cannot access 'handleSendMessage' before initialization" was caught and fixed — should not return) - Hypothesis re-firing on every open (it should only fire once per session — invalidates only when you generate a new variation or leave fresh gallery feedback) - Chip click silently auto-iterating (regression of the old behavior — click = reference only) - Blueprint history missing, or rendered as editable rather than read-only chips for `blueprint_updates` - Advanced drawer controls not matching the prior iteration state (anchor dropdown should reflect Advanced → Unpin / Iterate menu choices made via chip overflow)
The "+ New Design" workspace has been rebuilt from the ground up so it flows naturally from your earlier site planning chat instead of feeling like a separate tool. Your blueprint conversation history is visible, typing a new request doesn't re-run AI before you ask it to, and the overall spacing and typography now matches the cleaner look of leading chat interfaces. **Where:** Client portal → preview phase → "+ New" button → "Describe Your Vision" chat workspace **How to test:** - Open a site in preview phase with 2+ designs. Click "+ New". - The workspace should open showing a brief recap of your earlier planning chat (up to 5 recent messages) with a phase divider separating it from the variation chat. - Click a design chip (D1, D2, etc.) — `@D2` should be inserted into the input with no AI call. - Type a request and send it — the AI should respond with a suggestion rather than immediately re-running generation. - Open the Advanced drawer (⚙ icon) to access anchor-mode, section composer, reference image, and Re-diagnose options. - Close and reopen the workspace — your previous messages and AI hypothesis should be restored from cache without a fresh AI call. **Watch for:** - Workspace triggering a new AI call just from being opened (no user message sent) - Design chip click sending a message instead of just inserting `@D{N}` text - Prior blueprint chat history not appearing above the phase divider - Closing and reopening causing messages to reset or duplicate
Creating a page that the AI builds using a shared form block (like a lead form or booking section) no longer gets incorrectly rejected as "missing a form." The validator now checks the actual component source rather than surface-level markup patterns. **Where:** Client portal → Site editor → Assistant panel → ask AI to create a page with a form or booking section → Create **How to test:** - Ask the assistant: "Create a services page with a booking form at the bottom" - Confirm the plan card appears and the Create button works without a validation error - Create a page that uses a named component like `<LeadFormSection />` or `<BookingSection />` — confirm it's accepted as having a form - Ask for a standard page and a landing page in the same request — confirm the AI doesn't arbitrarily classify one as a landing page **Watch for:** "This page requires a form" validation error on a page that clearly has a booking or contact section; landing page slugs (`/lp/…`) being assigned to what should be a standard page
Page plan proposals are now saved to the database instead of living in component memory — refresh the page, switch conversations, or come back later and the inline plan card reappears exactly as you left it. **Where:** Client portal → Site editor → Assistant panel (when the assistant proposes new pages) **How to test:** - Ask the assistant to "plan a Contact page and a FAQ page" and wait for the inline plan card to appear - Refresh the browser — the plan card should reappear without asking the AI again - Switch to a different assistant conversation, then switch back — the plan card should still be present - Approve the plan by clicking Create — confirm the card disappears and is not restored on the next refresh - Start a new conversation and ask for a different plan — confirm the old plan card is replaced **Watch for:** Plan card missing after refresh when it should reappear; duplicate plan cards appearing after conversation switch; plan persisting after it was successfully created (should clear)
When planning new pages, the assistant now opens a dedicated two-column workspace: chat on the left, a live plan card on the right. All the same voice, image upload, history, and starter chips from the regular assistant work here — no separate tool to learn. **Where:** Client portal → Site editor → Assistant panel → plan pages → "Open in planner →" link, or ask the assistant to plan a page from scratch **How to test:** - Open a site in the client portal and ask the assistant to "plan an About page and a Services page" - After the assistant responds with an inline plan card, click the "Open in planner →" link at the bottom of the card - Confirm the workspace opens with chat on the left and the live plan card pinned on the right - Try surface-aware starter chips at the top — confirm they differ for a standard page vs a landing page flow - Close the workspace and reopen — the assistant rail should be hidden while the workspace is open (not duplicated) **Watch for:** Two assistant instances running simultaneously (workspace + rail both active); starter chips not matching the page type context; the plan card on the right not updating as you refine the plan in chat
Three small but visible bugs in the new chat-based page planner are fixed: (1) the assistant no longer shows a misleading "Done:" line above a plan that hasn't actually been created yet, (2) after a failed page-creation run the proposal card no longer re-appears as if it hadn't been tried, and (3) the conversation-focus bus no longer intermittently drops events when you open or close the assistant panel while a plan is streaming. **Where:** Client portal → Site editor → Assistant panel (when asking the AI to plan new pages) **How to test:** - Ask the assistant to "plan an About and a Services page" — the inline plan widget should appear with the proposal text (e.g. "Proposed plan for Acme. Review and create when ready.") and NOT with a "Done:" prefix above it - Approve a plan that will partially fail (e.g. ask for pages where one slug conflicts with an existing page) — after the failure, the old proposal card should not re-appear with an active Create button - While a plan is generating, open and close the assistant panel a few times — the plan should continue streaming updates without pauses or missed events **Watch for:** "Done: Proposed plan for X..." line appearing above an un-approved plan; clicking Create on a re-appeared proposal card after a failed run double-creating pages; plan progress silently freezing after the user toggles the panel
Two regressions in site finalisation are resolved: restaurant sites were not getting a `/menu` page generated despite having the right business type set, and several inner pages (About, Contact, FAQ) were importing invalid utilities from the theme file causing compile errors and silent redirects back to the homepage. **Where:** Site generation finalisation (automatically applied when generating or finalising any site) **How to test:** - Generate a restaurant site (set business type to "restaurant" in the brief). - After generation, confirm a Menu page exists (`/menu`) in the Pages tab. - Navigate to `/about`, `/contact`, and `/faq` — all should load without errors or blank pages. - Open the browser console on inner pages — no "No matching export for import 'tw'" errors should appear. **Watch for:** - Restaurant sites generating without a `/menu` page - `/about` or `/contact` pages redirecting to the homepage silently (indicates a broken import that was not auto-fixed)
When you click an element on the site and send a chat message, the assistant shows a small "context pill" above the message indicating which element was selected (e.g. `H1: "Scale your…"`). That pill was previously rendered as dark blue text on a blue message bubble — essentially illegible. It now uses a high-contrast chip with the element type (H1, P, BUTTON, etc.) and a truncated title, cleanly separated from the message body. **Where:** Client portal → Site editor → Assistant panel (any user message sent with an element selected) **How to test:** - Click any text element in the site preview - Send a chat message while the element is selected (e.g. "make this shorter") - Confirm the element context pill above your message is easy to read — uppercase element type (H1, BUTTON, etc.) in a contrast chip, with the truncated selected text next to it - Click different element types (headline, paragraph, button) and repeat to verify the tag pill updates correctly **Watch for:** Pill text still rendering as dark fog on the blue bubble; tag chip missing on messages that were sent with an element selected; long selected text overflowing the chat bubble instead of being truncated
The Share Preview modal previously listed designs by label only (D1, D2, D3…). Each design now shows a screenshot thumbnail alongside the share link, with an "open in new tab" button so you can quickly review what you're about to share before copying the link. **Where:** Client portal → Site editor → toolbar → Share Preview button **How to test:** - Open a site with multiple design variations and click Share Preview in the toolbar - Confirm the modal shows each design's name plus its screenshot thumbnail - Click the "open in new tab" icon next to a design — the preview should open in a fresh tab - Copy the share link and verify it opens the correct design - On a single-variation site (or extracted site) the modal should still work with one entry **Watch for:** Thumbnails missing or stuck on placeholder images for designs whose screenshots haven't generated yet; "open in new tab" link going to the wrong design; modal layout breaking with many variations
Toggling between Edit and Preview mode in the full editor no longer causes a brief flash where the site loses its theme colors (e.g., a black-on-black hero section). The iframe now preserves its theme state across mode switches instead of remounting. **Where:** Client portal → Site editor → Edit / Preview toggle button in the toolbar **How to test:** - Open a site with a custom color palette in the full editor (Open Editor) - Switch between Edit and Preview mode several times using the toggle in the toolbar - Confirm the site colors, fonts, and background remain consistent throughout — no flash to unstyled/default state - On a slower connection, watch for the brief window between toggle: the site should stay styled the whole time **Watch for:** A visible flash of dark-on-dark or unstyled text when toggling modes; theme colors reverting to Tailwind defaults (blue/gray) momentarily before restoring
Six reliability and accuracy issues with site intelligence recommendations are fixed: recommendations now reflect the current state of your site (not a stale snapshot), dismiss correctly saves across sessions, and only editors can dismiss recommendations (viewers could previously bypass this). **Where:** Client portal → Site editor → AI recommendations panel **How to test:** - Open a site with recommendations visible in the panel - Dismiss a recommendation and reload — confirm it stays dismissed and doesn't reappear - Publish the site, then reopen the editor — recommendations should update to reflect the published state within a few seconds - Open the editor with two browser tabs and send a chat message in both simultaneously — the recommendations panel should show a consistent result without duplicate entries **Watch for:** Dismissed recommendations reappearing after reload; stale recommendations that don't match the current site content; duplicate recommendation rows appearing in the panel
The Tweaks panel now reads color values from your site's theme file instead of falling back to generic defaults. Previously, hovering a swatch could preview a completely different color family, and clicking Apply would overwrite your real site palette with the wrong colors. **Where:** Client portal → Site editor → Tweaks panel → color swatches **How to test:** - Open any site that has a custom color palette applied (not the default indigo/cyan) - Open the Tweaks panel — the color swatches should reflect the site's actual primary, secondary, and background colors - Hover a swatch — the preview in the iframe should show a variation of the site's own palette, not a shift to a completely different hue - Click Apply — the saved color should match what you saw in the hover preview **Watch for:** Color swatches showing indigo (#4F46E5) or cyan (#06B6D4) on a site with different brand colors; hover preview looking unchanged; Apply writing the wrong palette back to the site
Clicking Apply in the Tweaks panel now always saves both font and color changes to your site, regardless of which theme structure the site uses. Previously, Apply could silently discard changes or overwrite earlier adjustments depending on the site's theme file format. **Where:** Client portal → Site editor → Tweaks panel → color or font swatches → Apply **How to test:** - Open the Tweaks panel on any site and change both the primary color swatch and the body font - Click Apply — both changes should appear in the live preview and persist after a page refresh - Apply a color change, then apply a different color a second time — the second color should win (not be stuck on the first) - Test on a site that uses a `ThemeStyles` component vs one using a plain `theme.ts` file — both should save correctly **Watch for:** Apply appearing to work visually (preview updates) but reverting on refresh; only one of font/color saving when both were changed; color getting stuck after a second Apply attempt
The "+ Add page" option in the toolbar's page dropdown was missing after a recent toolbar layout update — clicking the dropdown showed existing pages but had no way to create a new one. The button is now visible and functional again. **Where:** Site editor → toolbar → page selector dropdown → "+ Add page" footer button **How to test:** - Open any site in the editor - Click the page selector in the top toolbar - Confirm the dropdown shows a "+ Add page" option at the bottom - Click it and verify the add-page flow opens correctly **Watch for:** The dropdown opening but showing no "+ Add page" footer, or clicking the footer doing nothing
The AI assistant panel crashed when switching between the "plan pages" action and any other confirmation dialog — a React rendering bug caused hooks to run inconsistently, breaking the panel until the page was refreshed. **Where:** Client portal → AI assistant panel (any task following a plan-pages confirmation) **How to test:** - Open the AI assistant and ask it to plan new pages for your site - Confirm or cancel the page plan dialog - Immediately ask the assistant to make a different change (e.g. edit a section or change colors) - The assistant panel should continue working without a crash or blank screen **Watch for:** Assistant panel going blank or throwing an error after a plan-pages confirmation; needing to refresh the page to recover the assistant
After asking the AI assistant to plan new pages, switching to a different assistant action and back caused the entire assistant panel to crash. The crash was a React hook ordering bug triggered when the confirmation card type alternated between the page planner and standard confirmations. The panel now handles both flows without crashing. **Where:** Client portal → AI assistant panel → any confirmation after using the "plan pages" feature **How to test:** - Open the AI assistant and ask it to plan new pages for the site - When the page plan confirmation card appears, dismiss it (click Cancel) - Ask the assistant to do something else that shows a confirmation (e.g. change a design element) - Confirm the assistant panel stays functional and shows the new confirmation correctly **Watch for:** The assistant panel going blank or showing a React error boundary after alternating between page planning and other assistant actions
Design variations that used modern CSS viewport units for full-screen hero sections appeared broken in the gallery — the hero overflowed the preview card, making the design look non-functional. Gallery previews now cap these heights correctly regardless of which viewport unit the AI used. **Where:** Client portal → Design gallery (the multi-variation picker shown after generation) **How to test:** - Generate a new site and open the design gallery - Inspect all design variations — each card should show a fully contained preview with no overflowing hero section - Click through each variation to confirm the full-size preview also looks correct **Watch for:** Any gallery card where the hero section bleeds past the card boundary, or a design that appears stuck with no visible page content below the hero
The multi-variation picker shown after generation is now a proper gallery: each variation has a static screenshot you can browse, click a card to enter focus mode on that design, and delete variations you don't want. The gallery and site-editor toolbars merged into one continuous bar at the top, duplicate back arrows are gone, and the grid/pixel-size debug chrome has been removed for a cleaner first impression. **Where:** Client portal → Site editor → Gallery view (shown automatically after generation, or reachable via Explore Designs) **How to test:** - Generate a new site and wait for the gallery view to appear - Confirm each design card shows a real screenshot (not a blank preview); wait a few seconds if a card says "Rendering…" - Double-click any card to enter focus mode on that design; verify the focus mode header has a single back arrow (not two) - From focus mode, use the "Focus Mode" toolbar button to swap between gallery and focus mode seamlessly - Back in the gallery, click the delete icon on a variation — a confirmation dialog should appear before it's removed - Confirm the toolbar no longer shows pixel-size labels, the grid-layout icon, or the preview/edit hint text - On a site whose heroes use full-screen viewport units, confirm no design card shows an overflowing hero (this was a separate fix in the related changelog) **Watch for:** Cards stuck on "Rendering…" for longer than ~30 seconds; a single click entering focus mode instead of requiring double-click; delete action firing with no confirmation; back arrow appearing twice in the header; cards clickable but not navigating into focus mode
Once a site is extracted into separate pages, the old variation-pill row in the toolbar doesn't make sense — there's only one design, but multiple pages. The toolbar now shows a compact page selector dropdown instead, with an "+ Add page" footer so you can jump to creation without leaving the editor. **Where:** Client portal → Site editor → top toolbar (for extracted-phase sites only) **How to test:** - Open a site that's been extracted (has more than just the homepage) - Confirm the toolbar shows a single page selector dropdown instead of a row of V1 / V2 / V3 variation pills - Click the dropdown and verify all site pages are listed, plus the "+ Add page" footer at the bottom - Pick a different page and confirm the editor navigates to it - Click "+ Add page" from the dropdown footer and confirm the add-page flow opens - Open a preview-phase site (multi-variation, not yet extracted) and confirm the variation pills still show — the dropdown is gated to extracted-phase sites **Watch for:** Variation pills still showing for extracted sites; page selector dropdown appearing on preview-phase sites where variation pills should still be shown; "+ Add page" footer missing; dropdown closing without navigating when you click a page entry
Operators can connect a Facebook Page to the Reviews tab and see Facebook recommendations alongside Google reviews — with the ability to reply to recommendations directly from the portal. **Where:** Client portal → Reviews tab → Connect Facebook Page **How to test:** - Click "Connect Facebook Page" in the Reviews tab and complete the OAuth flow — verify the connected page name appears - If the account manages multiple pages, select the correct one from the dropdown and confirm the selection is saved - Verify that Facebook recommendations sync and appear in the unified review list alongside any Google reviews - Click reply on a Facebook recommendation — the reply should post as a comment on the underlying recommendation post - Click "Disconnect" and verify the Facebook reviews are no longer synced on the next refresh **Watch for:** OAuth redirect failing or returning an error after granting permissions; recommendations showing with no author or date; reply posting returning a "no post ID" error (this can happen for older recommendations that pre-date the recommendation permalink format)
The Features tab in the client portal had three problems: inactive features disappeared from the list with no way to reactivate them, the deactivate button looked like a status badge, and features with dedicated management screens had no way to open them from the active card. All three are fixed. **Where:** Client portal → Features tab (left rail) **How to test:** - Open the Features tab and confirm that deactivated features still appear in the catalog and can be reactivated - Click "Turn off" on an active feature — a confirmation dialog should appear explaining that the page will be hidden from visitors without deleting content - For features with a dedicated view (e.g. Help Center, Careers), click "Manage" on the active card and verify it opens the correct management screen and updates the URL - Activate a feature on a freshly-extracted site and confirm the dedicated page appears in the site's page list **Watch for:** Features showing "Active" in the manifest but missing their page in the site files; "Manage" button not appearing for features that have a dedicated view; confirmation dialog not appearing before deactivation
Operators can now configure per-site alert channels to receive real-time notifications when a low-rating review is posted — delivered by email, SMS, webhook, or Slack. **Where:** Client portal → Reviews tab → Alert Settings **How to test:** - Open the Reviews tab and click "Alert Settings" - Add an alert for email with a threshold rating of 3 — save it - Click "Send test alert" and verify a test notification arrives at the configured address - Add a second alert channel (e.g. webhook URL) and verify both channels receive the test notification - Change the threshold to 2 and confirm alerts no longer fire for 3-star reviews **Watch for:** Test alert delivered but real alerts not firing for new low-rated reviews; duplicate alerts sent for the same review on subsequent cron runs; error message not appearing in the UI when a delivery fails
Operators can now view, filter, and reply to their Google Business reviews directly from the client portal — including AI-drafted reply suggestions that match the site's tone and brand. **Where:** Client portal → Reviews tab (left rail, requires Google Business connection) **How to test:** - Connect a Google Business account under Settings → Integrations, then open the Reviews tab - Verify that reviews sync automatically (or click Refresh) and appear with star rating, author, and date - Click "Draft reply" on any review — an AI-generated response should appear pre-filled in the reply box, tailored to whether the review is positive or negative - Edit the draft if desired, then click "Post reply" and confirm the reply appears on Google - Filter by star rating or date to find specific reviews **Watch for:** Sync showing 0 reviews when the connected location has reviews on Google; AI draft appearing blank or missing business context; reply posting silently failing without an error message
Sites can now swap words and phrases based on where the visitor is located — their city name appears automatically, pricing can differ by region, and any custom variable you define can have location-specific values with a simple inclusion/exclusion rule. Markers like `{{GEO:city}}` or `{{GEO:plumbing_basic}}` are resolved at request time from the visitor's IP, so no rebuild, no flicker, and no separate pages per city. **Where:** Client portal → Settings → Dynamic Content (define variables + rules + simulator) · Client portal → Content Manager (📍 marker button inline on any field) **How to test:** - Open Settings → Dynamic Content and define a variable (e.g. `plumbing_basic`) with a default value and a location-specific override (e.g. "$149" in Texas, "$179" elsewhere) - Use the visitor simulator at the top of the panel — pick a country/region/city and confirm the resolved value matches your rule - Open the Content Manager on any page, click the 📍 button on a text field, and either pick an existing variable or create a new one — the marker should be inserted inline in the field - Publish the site and open the live URL in a browser — your real location's value should show; use a VPN or a browser network-conditioning tool to simulate a different region and confirm the value swaps - Try the built-in `{{GEO:city}}` marker in a headline and confirm it prints the visitor's city - Try marker placement in an SEO field (page title, meta description, OG tags) — a warning chip should appear explaining why markers in SEO fields don't work well (Googlebot always resolves to Mountain View) **Watch for:** Markers printing literally as "{{GEO:city}}" on the published site; location overrides not applying after publish; visitor simulator showing values that don't match what a real visitor in that region sees; markers accepted without a warning in SEO fields; AI refinement stripping or rewriting geo markers when editing content
The site-editor assistant bar now keeps a list of separate conversations — so you can run a pricing-page edit in one thread and plan a Google Ads campaign in another without the two tangling together. Each conversation has its own title (auto-generated from the first few messages), a pin to keep it near the top, an archive to hide older ones, and a rename option. Active / pinned / archived conversations are organised into three buckets. **Where:** Client portal → Site editor → Assistant bar → conversation switcher (list dropdown) **How to test:** - Open the assistant bar and start a conversation about one topic (e.g. "change the hero copy on the homepage"); send a couple of messages - Open the conversation switcher and start a new conversation about a different topic (e.g. "plan a Google Ads campaign for this business") - Switch back to the first conversation — its full history should be intact, not mixed with the second - Verify each conversation has a sensible auto-generated title (not "Untitled"); if it says Untitled, try the autoTitle action to regenerate - Rename one conversation manually and confirm the server accepts the new title - Pin a conversation — it should move to the top of the list - Archive a conversation and confirm it disappears from the default list but is still reachable via the archived view - Restore an archived conversation and confirm it returns to the active list **Watch for:** Switching conversations mixing messages from two threads; auto-title overwriting a user-set title (the server should leave user titles alone); pinned conversations not staying at the top; archived conversations still appearing in the default list; renaming silently failing without an error
Pages added after initial site generation occasionally rendered with white backgrounds and default fonts instead of the site's palette — because the theme file the new page imported didn't actually exist yet. Every generated site now ships with a theme module from the start, and any legacy site missing one gets it auto-created on the first add-page action. A one-shot migration already backfilled theme files for 296 existing sites. **Where:** Client portal → Pages → Add Page (new pages generated anywhere in the editor) **How to test:** - Open a site whose homepage uses a distinctive color palette (any non-default colors) - Add a new page (via the Add Page button or the assistant "plan pages" flow) - Confirm the new page renders with the same palette, headings, and body font as the homepage — no white background, no default fonts - Repeat on an older site created before the fix: adding a page should silently self-heal and the theme file should now exist - Open the Pages list and switch between homepage and the new page — both should look consistent **Watch for:** New page showing white background or Arial/default fonts instead of the site theme; console errors about missing `./theme` imports; theme colors applying but the font families defaulting; different pages of the same site looking like they were generated for different brands
Adding new pages is now a chat-first flow. Ask the AI assistant "plan an About page, a Services page, and a Contact page" and it returns an editable plan widget inline in the conversation — one card per proposed page with title, slug, type, description, and a short rationale. You can edit each card, remove or reorder them, then approve the whole batch in one click. Progress updates stream per-card as the pages generate, so long runs no longer feel silent. **Where:** Client portal → Site editor → Assistant panel (ask it to plan new pages, or click "Plan with AI" in the Add Page modal) **How to test:** - Open the assistant panel and ask for a multi-page plan (e.g. "I need an About page, a Services page, and a Locations page") - Verify an inline plan widget appears with one editable card per proposed page - Edit the title/slug/description on a card — changes should persist on the card - Remove one card and add a note asking for a different page — the planner should regenerate or adjust - Click the single approve button to kick off generation — each card should show its own live progress (queued → generating → done) - Confirm all approved pages appear in the site's page list after completion - Try the alternate entry: open the Add Page modal and click "Plan with AI" — the form fields should flow into the chat as a natural-language prompt **Watch for:** Assistant going blank after confirming or cancelling a plan (crash on switching between plan-pages and other confirmations); individual card edits not surviving after clicking approve; progress stuck on "queued" for a card while others complete; approving creating pages that don't match the edited card values; voice dictation on the plan editor inputs failing silently
New users no longer need an invite code to create an account. The waitlist gate on registration is disabled, a beta notice explains where the product is in its lifecycle, and Google signup is now the primary (and recommended) path — the email/password form is still available but moved to a secondary position. **Where:** `/auth/register` (public signup page) · App-wide banner for authenticated accounts **How to test:** - Open the app in an incognito window and navigate to the register page - Confirm Google signup is the prominent primary option at the top - Complete a signup via Google and verify the account is created without any invite-code step - Try the email/password form as a fallback and confirm it also works without an invite - Sign in as an existing user and confirm the beta notice banner appears somewhere visible (dashboard or account settings) - Click the "request support" or feedback entry on the beta notice and verify the support modal opens **Watch for:** Invite-code field still appearing in the register flow; Google OAuth returning an error during account creation; beta notice banner missing for existing accounts; support-request modal failing to submit
Clicking Shorter, Longer, Bolder, Friendlier, or More Formal on a selected text element now generates three rewrite options grounded on the actual business — its name, industry, target audience, and tone — and shows them as selectable cards in the chat. Pick the one you like and it's applied instantly. No more "the AI completed but nothing changed" when the tweak was too small to land on its first try. **Where:** Client portal → Site editor → click any text element → Quick Actions bar → Shorter / Longer / Bolder / Friendlier / More Formal **How to test:** - Open a site in the editor and click on a headline or paragraph - In the Quick Actions bar, click Shorter (or any of the tone options) - Within a few seconds, the chat should show three rewrite cards — each distinct, each relevant to the business (not generic SaaS boilerplate) - Hover each card to see it previewed in the site, then click one to apply it - Verify the element updates in the preview and the activity feed logs the chosen option - Try Undo from version history — the original text should return - Try a button element and confirm the suggestions respect that it's a button (short, action-oriented) **Watch for:** All three rewrites coming back identical or near-identical; rewrites reading as generic ("trusted partner for all your needs") instead of referencing the actual business; the old "no changes were applied" message still appearing for small text tweaks; applied rewrite not persisting after a refresh; picking an option on one element accidentally rewriting a different element with the same text
The right-rail editor previously showed five tabs across the top (Chat, Styles, Explore, Content, Design QA). Four of those are now consolidated behind a single "Customize" dropdown in the panel header, leaving the default view focused on the chat input and activity — the flow most users spend time in. Element-selection editing (click a section → Quick Actions, Advanced, chat) is unchanged. **Where:** Client portal → Site editor → right-side Design Assistant panel **How to test:** - Open any site in the editor with the assistant panel expanded - Confirm the default view shows only the iframe, version history, activity feed, and chat input — no horizontal tab strip - Click the Customize menu in the panel header — verify Site Styles, Explore Designs, and Design QA are available as options - Pick Site Styles and confirm the Tweaks/Themes/Fonts content loads as before - Close the menu and click a section in the preview — Quick Actions and Advanced controls should still appear exactly as before - Confirm the Styles panel no longer shows the "Select section to edit layout" preamble **Watch for:** Customize menu missing options or stuck showing the wrong panel; element selection no longer surfacing Quick Actions; layout editing unreachable after clicking an element; tabs reappearing after a refresh
Booking reminder and review-request automations now correctly read the customer's name, email, and phone — they were referencing the wrong database columns and silently sending to no one. Scheduler forms also reliably include the time-picker component and properly import the required React hooks regardless of how the AI structured the generated code. The today-filter on the scheduler no longer shows already-passed slots when the visitor's browser timezone differs from the site's timezone. **Where:** Client portal → Forms (scheduler and service-area-zip field types) · Client portal → Settings → Automations (booking reminders and review requests) **How to test:** *Booking automation:* - Create or find a site with a booking form and an active reminder or review-request automation - Submit a test booking with a real email/phone - Verify the reminder fires to the correct address/number with the customer's first name filled in (not "there") *Scheduler form:* - Open a site with a form that includes a scheduler field (and no service-area-zip field) - Generate/preview the form — the time-picker widget should render and be interactive - On today's date, verify that time slots in the past (plus any lead-time buffer) do not appear *Service-area zip form:* - Submit the form with an out-of-area zip code — the blocked/fallback message should appear as before; the hidden `_service_area_blocked` field is gone (server validates the zip directly) **Watch for:** - Booking automations firing with "there" as the first name (column rename not applied) - Scheduler field not rendering on forms that don't also use a service-area-zip field - `useEffect is not defined` runtime errors on scheduler forms - Today's past time slots still appearing in the scheduler picker
If you pick a design and later realise one of the other variations would be better, there's now an explicit "go back to design selection" button — no more digging through version history to undo. Guards are in place so you can't accidentally blow away work: a warning appears if you've added extra pages, and the button is hidden for sites that have already been published. **Where:** Client portal → Home (top card next to Resume / Publish) · Client portal → Settings → General **How to test:** - Finalize a design on any site (pick a variation from the design gallery) - Open the Home screen — verify a "Go back to design selection" action is visible near the top - Click it. For a single-homepage site, the site should revert to preview phase and the gallery should reappear - Pick a different variation and confirm the site switches to that design - Repeat on a site that has extra pages added (not just the homepage) — verify a confirmation dialog warns that extra pages may inherit a different header/footer/theme before proceeding - Repeat on a site that has been published at least once — verify the button is hidden or disabled (revert is not allowed after publish) **Watch for:** Button visible on already-published sites; clicking revert silently wiping added pages instead of preserving them; site getting stuck in an empty state with no variations showing in the gallery; version history missing the revert entry
The Advanced controls on a selected element now include drag-to-adjust sliders for padding, opacity, and font size. As you drag, the preview updates live without hitting the AI; release to commit the change. No tokens spent on tweaks that used to require a chat message like "make this padding a bit smaller". **Where:** Client portal → Site editor → click any element → Advanced panel **How to test:** - Open a site in the editor and click a section or text element - Open the Advanced panel — verify sliders for padding, opacity, and font size are visible (alongside the existing color swatches and font dropdowns) - Drag the padding slider — the element's padding in the preview should update immediately as you drag - Release the slider — the change should commit and persist (refresh the page to confirm) - Repeat with opacity and font size - Undo via version history and confirm the change rolls back **Watch for:** Preview not updating while dragging (only on release); committed change not persisting after refresh; sliders modifying the wrong element (fallback-matched elements on extracted sites); font-size slider changing the whole section instead of just the selected text
A new Tweaks tab in the Styles panel lets you change the feel of your entire site with a single click — pick a color, font pairing, background tone, corner style, or spacing density and see the result live before committing. **Where:** Client portal → Site editor → Styles panel → Tweaks tab (first tab, shown by default) **How to test:** - Open any site in the editor and click the Styles panel - The Tweaks tab should be the active tab by default with a sparkle icon - Hover over a color swatch — the live preview should update immediately without saving - Click a swatch to commit the change; verify the site updates in the preview - Try all six controls: Primary color, Accent color, Background tone, Font pairing, Corner style, Density - Switch to the Themes / Fonts / Tokens tabs and confirm they still work normally **Watch for:** Hovering a swatch and the preview not updating; committing a font change and the Google Font not loading in the preview; density or corner-style changes not persisting after navigating away and back
Service-area gating now supports a radius mode (center ZIP + miles) in addition to the allowlist — useful when your service area is "within 20 miles of downtown" rather than a fixed list. Bookings can also be edited directly from the Bookings tab: a pencil icon opens a modal to change the date and time, and a reschedule notification fires automatically to the customer through the same channels (SMS and email) as the original reminder. **Where:** Client portal → Settings → Service Area (new ZIP list / Radius toggle) · Client portal → Bookings tab (pencil icon on any booking) **How to test:** *Radius service-area:* - Open Settings → Service Area and switch the mode toggle to Radius - Enter a center ZIP and a radius in miles, save - Submit a form with a ZIP inside the radius — should pass - Submit with a ZIP outside the radius — should be blocked with the fallback panel - Switch back to ZIP-list mode and confirm the previously configured allowlist is preserved *Edit / reschedule a booking:* - Open the Bookings tab and click the pencil icon on a pending or confirmed booking - Change the date and pick a new time slot from the grid; save - Verify the booking row updates with the new date/time - Check that the customer receives a "your appointment has been rescheduled" notification on the channels configured for the booking reminder automation - Confirm any pending reminder messages for the original time are cancelled - Try the "Override availability" escape hatch to save a time outside configured slots — should still save **Watch for:** Radius geocoding failing silently and passing everyone through; ZIPs inside the radius being blocked (or vice versa); reschedule notification firing when only the status changed (not the date/time); original reminder still firing at the pre-reschedule time; customer getting duplicate notifications
The Tweaks panel opens as a floating card from the preview toolbar instead of living inside the Styles right-rail panel — it doesn't compete for sidebar space any more. Fonts moved into Tweaks as two Word-style dropdowns (Heading / Body) listing ~30 curated Google Fonts, each rendered in its own face so you can see what you're picking. The old Site Styles right-rail panel is gone; the "+" button in the preview toolbar also exposes page-level actions like adding an announcement bar, cookie banner, WhatsApp bubble and the other site-wide add-ons. **Where:** Client portal → Site editor → preview toolbar → Tweaks button (opens the floating card) · Preview toolbar → "+" button (page-level adds) **How to test:** - Open a site in the editor and click the Tweaks button in the preview toolbar — the Tweaks card should float over the preview, not push content aside - Inside Tweaks, find the Heading and Body font dropdowns — each option should render in its own font so you can preview it inline - Pick a Heading font and a Body font independently; verify the preview updates live - Confirm the six designer font pairings are still available as a chip row for quick full-combo picks - Verify the Customize menu no longer lists "Site Styles" as an option (only Explore Designs and Design QA) - Click the "+" button in the toolbar and confirm it opens a menu with site-wide add-ons (announcement bar, WhatsApp bubble, cookie banner, etc.) - Pick an add-on and confirm it lands on the site without going through the chat **Watch for:** Font dropdowns showing options in a default face instead of each font's own face; floating card getting clipped by the toolbar edges; Site Styles panel still reachable via the keyboard shortcut "2"; "+" button firing another action while one is already in progress (should be disabled)
The public chat widget now offers a voice call button — visitors press it and have a natural spoken conversation with your AI, grounded on the same site knowledge the chat uses. Voice is a $29/month per-site add-on with 300 included minutes; site owners enable and track usage from the portal. **Where:** Client portal → Home → Voice Agent card (enable/disable, usage meter) · Client portal → Settings → Deploy tab · End-user side: your site's chat widget → new phone/microphone button **How to test:** - Open a site's Home screen and find the Voice Agent card — verify it shows "Enable Voice Agent ($29/mo)" with the 300-minutes-per-month allowance - Click Enable, complete the billing flow, and confirm the card switches to showing "Active" plus a used-minutes counter - Open the public chat widget on your site — verify a call/microphone button now appears - Click the call button, grant microphone permission, and speak a question that requires site knowledge (e.g. "what are your hours?" or "do you serve [my city]?") - Confirm the AI answers verbally, grounded in your site's content - End the call and verify the usage counter on the Home card increments by roughly the call duration - Try disabling the add-on — verify the button disappears from the widget and the card flips back to the upsell state **Watch for:** Call button still showing on the widget after disabling the add-on; used-minutes counter not incrementing after a call; voice agent giving generic answers that don't reference the actual business; microphone permission prompt failing to trigger; call connecting then immediately dropping; billing showing the add-on charged but the widget acting as if it's off
Forms can now include two new purpose-built fields for service businesses: a ZIP code that checks whether a visitor is inside your service area (and shows a fallback call-now panel if they aren't), and a native date + time-slot scheduler that creates a booking on submit. Both fields are real server-validated components — not embedded third parties — and use the same availability rules as the Bookings tab. **Where:** Client portal → Forms (field editor, add-field menu) · Client portal → Settings → Service Area (new panel) **How to test:** *Service-area ZIP field:* - Open Settings → Service Area and add a list of ZIP codes you serve (or paste them in bulk) - Write a fallback message to show visitors outside your area - Add a form with a ZIP field (type: service area ZIP) and publish - Submit the form with an allowed ZIP — submission should succeed - Submit with a disallowed ZIP — the fallback panel with the call-now CTA should appear, and the submission should be rejected server-side even if the UI is bypassed *Scheduler field:* - Confirm you have booking availability rules configured (Bookings tab) - Add a form with a scheduler field, publish, and open the live site - Pick a date and time slot — verify past slots (and any within the lead-time buffer) don't appear for today - Submit the form — a new booking should appear on the Bookings tab with the chosen date/time **Watch for:** Out-of-area ZIPs still being accepted server-side when the client-side check is bypassed; scheduler not surfacing on forms that don't also have a ZIP field; today showing past slots when the visitor's timezone differs from the site's; scheduler submission creating the form record but not the linked booking
Several reliability issues with the Figma import flow have been fixed: connected Figma accounts without token refresh data were silently treated as disconnected; when one token failed with a server error and another with an auth error, only the less useful auth prompt was shown; and a successful Figma auth failure already showed a "connect your account" prompt but also added a redundant generic "could not analyze" message below it. **Where:** Client portal → Blueprint chat → Paste a Figma URL to import **How to test:** - Connect a Figma account and paste a Figma file URL into the blueprint chat - Verify the import succeeds and extracts frames/content without an incorrect "connect your account" prompt - If the Figma token has expired, verify only one clear message appears (not a duplicate "could not analyze" message alongside the auth prompt) - If a Figma URL fails for a non-auth reason (e.g. network error), verify the error shown reflects the actual problem rather than an auth prompt **Watch for:** Valid Figma connections being reported as unavailable; two error messages appearing simultaneously for the same failed import; auth errors appearing when the real issue is a server-side failure
Pages in the site editor now support two optional shell add-ons: an Announcement bar that sits above the header (great for promos or alerts) and a Pre-Footer CTA band that appears just before the footer on any page that needs it. Each is generated from the site's existing theme colors and can be edited like any other block. **Where:** Client portal → Site editor → Shell tab → Announcement / Pre-Footer CTA toggles **How to test:** - Open a site in the client editor and navigate to the Shell tab - Click "Add Announcement" — verify a styled announcement bar is generated and appears above the header in the preview - Click "Add Pre-Footer CTA" — verify the CTA band appears above the footer - Use the Edit button on each addon to open the block editor and make a text change - Navigate to a second page and verify the addon appears consistently across pages - Publish the site and check the live URL for both addons **Watch for:** Announcement bar missing on some pages but present on others; Pre-Footer CTA overlapping the footer; generating an addon a second time duplicating the block instead of prompting to edit the existing one
A new Overlays tab in the site editor lets you add modals, announcement banners, floating buttons, and cookie consent banners — each with its own trigger (on page load, on scroll, on exit intent, or after a timer) and frequency controls so visitors aren't shown the same popup twice. **Where:** Client portal → Site editor → Overlays tab (left rail) **How to test:** - Open a site in the client editor and click "Overlays" in the left rail - Click "Add Overlay" and choose a type (Modal, Banner, Floating, or Interstitial) - Set a trigger (e.g. "After 5 seconds") and enable the overlay - Publish the site and verify the overlay appears with the correct trigger behavior - Disable the overlay and republish — verify it no longer appears - Check that built-in integrations (Calendly, WhatsApp, cookie consent) still appear under the Overlays tab and can be toggled on/off **Watch for:** Overlays appearing on every page load even when frequency capping is set; published sites not showing overlays that are enabled; toggling a built-in integration from the Overlays tab overwriting unrelated settings
Two carousel bugs are fixed: pages with more than one carousel (e.g. a testimonials slider and a photo gallery on the same page) now scroll independently — previously swipes and arrow keys always moved the first carousel regardless of which one you were interacting with. A second fix ensures each slide fills the container correctly so clicking "next" always shows the next slide fully, not half of it. **Where:** Any published or previewed site that uses carousels **How to test:** - Open a site that has two or more carousels on the same page - Swipe or use arrow keys on the second carousel — verify it moves independently from the first - Verify that clicking the next arrow shows the following slide fully, not partially - Run the repair script (`scripts/repair-carousel-slide-widths.ts`) on existing sites with carousels to patch affected slides **Watch for:** Carousels still showing partial slides after the fix; the second carousel remaining stuck while the first one moves
The site editor preview could get stuck showing a "Compiling…" spinner indefinitely with no way to recover short of clearing browser data. This happened when the browser's internal cache database became blocked by another tab. A 3-second timeout now catches this condition and falls back to a direct compile, so the preview always loads. **Where:** Client portal → Site editor → Preview pane **How to test:** - Open the same site in two browser tabs - Make an edit in one tab — both tabs should show the preview without hanging - If the preview previously required clearing site data to unstick, verify it now recovers automatically **Watch for:** Preview still hanging indefinitely (longer than ~5 seconds with no network activity); the spinner resolving but showing a blank or broken preview instead of the compiled site
Site generation now auto-captures thumbnail previews for both design variations and handles your business content more intelligently — keeping specific details like prices, offers, and guarantees while polishing the phrasing for the design's voice. **Where:** Client portal → Generate new site → Design selection step (thumbnails) and in the generated content quality **How to test:** - Generate a new site with a detailed business pitch (include specific numbers, pricing, or named offers) - Verify both design variation thumbnails load automatically without manual refresh - Check that specific pricing or offer details from your pitch appear in the generated design (not generic agency copy) - If a form and funnel feature are both active, verify the hero has only one primary CTA **Watch for:** Missing thumbnails on one or both variations; generated hero that drifts to "Transform Your Business" style clichés instead of the user's specific offer; duplicate lead-capture CTAs competing in the hero area
The chat widget's lead capture and callback scheduling tools were silently failing in production — visitor requests to book a call or leave contact info would appear to succeed but nothing was actually recorded. This is now fixed, and the widget also handles site knowledge more efficiently: small sites preload all their content upfront (no search needed), while larger sites use on-demand search only when the AI needs details beyond what it already knows. **Where:** Chat widget embedded on published client sites (the visitor-facing chat bubble) **How to test:** - Open a published site with a chat widget enabled - Start a conversation and ask to "book a callback" or "leave your email" — confirm the lead/callback is captured in the dashboard - Ask a question about the business (e.g. services, pricing) — verify the AI responds with accurate site-specific information - Check the Contacts or Inbox panel to confirm captured leads appear **Watch for:** Lead capture or callback scheduling silently doing nothing; widget AI giving generic answers instead of site-specific details
When you paste a full business description into the variation chat, the system now detects it's a rewrite (not a tweak) and automatically pre-checks "Apply to baseline" — preventing stale placeholder content from leaking into unedited sections on future variations. A "Recommended — looks like a rewrite" badge appears so you know why the toggle was pre-checked, and you can still uncheck it if you only want this specific variation changed. **Where:** Client portal → site preview → "Describe Your Vision" / variation chat panel → plan card at bottom **How to test:** - Open a site in preview phase and click "Describe Your Vision" - Paste a long (800+ character) business description or describe changes across multiple sections (hero, services, pricing) - Confirm the "Also update baseline content" checkbox is pre-checked with the amber "Recommended — looks like a rewrite" badge - Generate the variation, then open a second variation chat — verify the new pitch is reflected in baseline context rather than the old placeholder content - For a small targeted change ("change the hero headline to X"), verify the checkbox stays unchecked **Watch for:** Baseline toggle incorrectly pre-checking for minor tweaks; "Apply to baseline" badge missing when a full rewrite is pasted; future variations still showing stale business content after a confirmed rewrite
Removed the undiscoverable thumbs-up, thumbs-down, palette, and notes buttons from the bottom of design gallery cards. These added visual clutter without clear purpose. Also added a subtle hint next to the design count: "Previews are approximate — click to see full design" to set expectations that gallery thumbnails are static snapshots. **Where:** Client portal, design gallery view (visible during the preview phase when multiple designs exist) **How to test:** - Open a site with multiple design variations to enter the gallery view - Verify the cards no longer show feedback buttons (thumbs up/down, palette, notes) at the bottom - Check that the hint text "Previews are approximate — click to see full design" appears near the design count - Click a card to confirm it still opens the full design as expected **Watch for:** Feedback buttons still appearing on cards, missing disclaimer text
The top toolbar in the site editor has been simplified for a cleaner look. The close button is now the Mondovo logo, redundant controls have been removed, design pills use compact labels (D1, D2, etc.), and hovering over a design pill shows a thumbnail preview of that design. The gallery button also shows a mini-grid preview on hover. **Where:** Client portal site editor -- top toolbar bar **How to test:** - Open a site with multiple design variations - Hover over each design pill (D1, D2, etc.) and confirm a thumbnail preview appears - Hover over the gallery grid icon and confirm a mini-grid of all designs appears - Click the Mondovo logo in the top-left corner and confirm it navigates back to the dashboard - Hover over the logo and confirm a "Go back to dashboard" tooltip appears **Watch for:** Missing hover thumbnails (may take a moment to load on first hover); tooltip not appearing on the logo; toolbar feeling cramped on smaller screens
The design assistant panel received a major UX overhaul: it is now resizable via a drag handle (width persists across sessions), the full-featured chat input (voice, image upload, mentions) works on every tab instead of only the Chat tab, and the interface is significantly decluttered. A new welcome card with capability tiles replaces the sparse hint text for first-time users. Draft messages are saved per site so you never lose what you typed on refresh. Long AI responses now collapse behind a "Show details" toggle to keep the conversation scannable. The confusing "Tools / History / Sections / Issues" tray header has been removed, and the Design QA tab now provides smarter feedback aligned with your site's goals. **Where:** Client portal site editor -- the design assistant panel on the right side of the preview **How to test:** - Open any site in the editor and verify the assistant panel has a drag handle on its left edge; drag to resize and confirm the width persists after page refresh - Switch to the Styles or Explore tab and verify the chat input still shows voice, image upload, and mention buttons (previously these were missing outside the Chat tab) - Type a message, switch tabs or refresh, and confirm the draft is preserved - On a fresh site with no chat history, verify the welcome card appears with four capability tiles - Send a refinement request and confirm the AI response collapses to a one-line summary with a "Show details" option - Open the Design QA tab and run a check; verify results reference the site's intended purpose and goals **Watch for:** Panel resize causing the preview iframe to overlap or leave a gap; chat input disappearing on non-Chat tabs; draft messages from one site leaking into another site's editor
Design QA was always capturing screenshots of the first design variation, even when you were viewing a different one. Now it correctly screenshots whichever design you are currently viewing, and each variation gets its own cached QA results. **Where:** Client portal or admin playground, Design Assistant panel, QA tab **How to test:** - Open a site with multiple design variations - Switch to Design 2 (or any non-default variation) - Run the Design QA check - Verify the QA feedback is about the design you are currently viewing, not Design 1 - Switch back to Design 1 and run QA again — it should re-analyze (not show stale cached results from Design 2) **Watch for:** QA results still showing issues from the wrong design after switching variations
After an AI refinement, the preview would sometimes flash or refresh twice — once for the edit, then again unnecessarily. This has been fixed. Additionally, simple edits (like changing a single opacity value or font size) are now more tightly scoped so the AI modifies only what you asked for instead of rewriting surrounding code. **Where:** Client portal or admin playground, after making a refinement request via chat **How to test:** - Open a site in the editor and ask for a simple change like "make the hero section 50% opacity" or "change the heading font size to 3xl" - Watch the preview — it should refresh exactly once, not twice - Verify only the requested change was made (no unrelated layout or color changes) **Watch for:** Preview flashing/refreshing twice after a refinement, or simple text/style requests causing unexpected changes to other parts of the page
Switching between design variations could cause content from one design to bleed into another — for example, services or FAQ items appearing or disappearing depending on the switching path. Three separate content-merge bugs have been fixed so each variation now consistently shows its own content. **Where:** Client portal and admin playground, when switching between design variations **How to test:** - Open a site with multiple design variations that have different content (e.g., one with FAQ, one without) - Switch from Design 1 to Design 2 and back several times - Verify each design consistently shows its own content sections - After switching, make a text edit and confirm it applies to the correct design **Watch for:** Sections appearing/disappearing unexpectedly after switching designs, or edits applying to the wrong variation's content
Font changes, color theme switches, and dark/light mode flips from the Styles panel now apply to all site files, not just component blocks. Previously, page files (like the Home page) were excluded, so fonts wouldn't persist, colors wouldn't update, and the Styles panel would show the wrong fonts after reopening. Published sites could also miss Google Fonts links. **Where:** Client portal site editor -- Styles panel (fonts, colors, presets, dark/light mode toggle) **How to test:** - Open a site in the editor and go to the Styles panel - Change the heading or body font and confirm it applies to all pages, not just individual sections - Close and reopen the Styles panel -- the selected fonts should still display correctly - Switch between dark and light mode -- background and text colors should flip across all pages - Apply a color theme and verify the Home page picks up the new colors - Publish the site and verify the correct Google Fonts are loaded on the live version **Watch for:** Fonts reverting to defaults when reopening the Styles panel; Home page not reflecting color or mode changes; published sites loading with the wrong fonts
The inline form editor now correctly loads forms that are defined inside page files (not just standalone form blocks), and includes several UX improvements: dirty-state tracking with unsaved-changes warnings, a redirect URL field, save confirmation feedback, and a retry button when loading fails. **Where:** Client portal site editor -- click "Edit Form" on any form section in Preview mode **How to test:** - Open a site that has a form embedded within a page (not a separate form block) and click "Edit Form" on it - The form editor should load successfully, showing the correct fields - Edit a field label and confirm the Save button becomes enabled (dirty state) - Press Escape without saving and confirm an "unsaved changes" warning appears - Save the form and confirm a brief "Saved successfully" message appears before the editor closes - Expand "Submission Settings" and verify the redirect URL field is available - If the form fails to load, confirm a "Try again" button appears and works **Watch for:** Forms failing to load with a generic error; Save button staying disabled after retrying a failed load; the editor closing twice in quick succession after saving
When editing text directly in the preview (inline text editing), the change would sometimes revert to the old text on the next preview refresh. This happened because the local content state was not updated when the system auto-linked the edited text to the content system. Now the local state stays in sync, so your edit persists across refreshes. **Where:** Client portal or admin playground, when clicking on text in the preview to edit it directly **How to test:** - Open a site in the editor - Click on a text element (e.g., a hero headline) and edit it inline - Wait for any automatic refresh or trigger a change that causes a recompile - Verify the edited text stays as you typed it, not the original value **Watch for:** Edited text snapping back to its original value after a preview refresh
Several usability improvements to the Content Manager and properties panel: collection banners (e.g., "Part of services collection") now have proper contrast in light mode, the banner button opens the Content Manager directly instead of switching to chat, sections that were hidden under a collapsed "Other" accordion now appear in the main list when the code scanner could not map them, and section subtitles show more useful previews (headings, item labels). **Where:** Client portal or admin playground, Properties panel (right side) and Content Manager modal **How to test:** - Select an element that belongs to a collection (e.g., a service card) — the properties panel should show a green "Part of X collection" banner with an "Edit in Content Manager" button - Click the button — it should open the Content Manager scrolled to the relevant section - In light mode, verify the green banner text and button are clearly visible (not washed out) - Open the Content Manager and check that sections show helpful subtitles (headings, item counts) instead of generic previews **Watch for:** Banner text invisible on light backgrounds, "Edit in Content Manager" button not opening to the correct section, sections still hidden under a collapsed "Other" group
All new sites automatically have preview sharing enabled, so you can share a preview link immediately without an extra setup step. Existing sites that never had preview enabled have been backfilled as well. **Where:** Client portal site editor -- Share button in top toolbar **How to test:** - Create a new site and click the Share button in the toolbar - The share preview modal should open immediately with a working preview link -- no "Enable Preview" prompt - Copy the link and open it in an incognito window to confirm it loads - Check an older site that was never shared -- it should also have a working preview link now **Watch for:** The "Preview not enabled" message still appearing; preview links returning 404 for backfilled sites
Sites with uploaded logos could show an invisible logo — a white logo on a white header background. The portal header now correctly uses the dark (visible) logo on light backgrounds. Generated site code also now renders the appropriate logo variant based on the header background color, swapping between light and dark versions as needed. **Where:** Client portal header (Mission Control layout) and generated site header/navigation **How to test:** - Upload both a primary logo and a dark-mode logo variant for a site - Check the Mission Control portal header — the logo should be clearly visible on the white background - Generate a new site and verify the header renders the logo as an image (not just text) with the correct variant for the background color - If the site has a transparent-to-solid scroll header, check that the logo swaps appropriately **Watch for:** Invisible or barely visible logos on light backgrounds, logos rendering as plain text instead of images when a logo URL exists
👍 / 👎 / 🎨 marks on design variations are now saved to the database, so closing and reopening the feedback modal no longer resets your ratings. **Where:** Client portal → Site generation → Preview & Approval modal (the variation comparison screen with Like, Dislike, and Use as Theme buttons) **How to test:** - Generate a site and open the variation comparison modal - Click 👍 on one variation and 🎨 on another - Close the modal and reopen it — your marks should still be set - Reload the page, reopen the modal — marks should still be there - Clicking the same button again should clear the mark (toggle behavior) **Watch for:** Marks not persisting after modal close (check network tab for PATCH requests to `/api/client-sites/.../variations/.../sentiment`), theme-source mark not clearing from the previous variation when a new one is selected
Site generation no longer silently fails or saves corrupt content when the AI returns a malformed response. Previously, certain AI outputs would cause the entire page structure to be stored as raw code, making the generated site completely unrenderable without any visible error to the user. **Where:** Triggered automatically during site generation — no user action required **How to test:** - Generate a new site from scratch and wait for it to complete - Confirm the preview shows a fully rendered design with distinct sections (hero, services, etc.) - Try generating multiple sites back-to-back; none should show a blank/broken preview **Watch for:** Site preview showing raw JSON text or a blank white screen after generation completes; the "Generating your site..." step completing but no design appearing in the preview tabs
Help center and FAQ sections generated by AI now work reliably even when content items are missing ID fields. Previously, expanding or collapsing an FAQ item on certain sites caused a crash that broke the entire page. **Where:** Client portal → site editor → any section with a help center or FAQ accordion **How to test:** - Open a site that has an FAQ or help center section - Click an FAQ item to expand and collapse it - Confirm the accordion toggles correctly without any errors - Also try sites where content was generated with multiple design variations **Watch for:** Page going blank or freezing when clicking to expand an FAQ item; accordion not toggling open/closed
Generating a new design variation (Design 4, Design 5, etc.) no longer falsely reports completion before the AI has finished. Previously, the system could detect a leftover "completed" status from a prior generation and immediately declare the new variation ready — showing the same old tabs with no new design added. **Where:** Client portal → site editor → Generate Variation button **How to test:** - Open a site in the editor that already has 3 designs - Click to generate a new design variation - Wait for the generation to complete - Confirm a new design tab (e.g., Design 4) appears with a freshly generated layout **Watch for:** Toast saying "New variation ready!" appearing within seconds of starting generation but no new design tab appearing; page showing unchanged D1/D2/D3 tabs
Three bugs in the wizard chat flow are now fixed: the site ID is properly captured when the AI auto-creates a site during chat (preventing "Site not initialized" errors on generation), imported website content is no longer silently dropped, and the full conversation history is now sent to the AI so it doesn't lose context or re-ask questions you already answered. **Where:** Client portal → Create new site → Chat tab **How to test:** - Start a new site wizard, paste a URL to import content, and chat about the business - After several messages, click to generate the site - Confirm generation starts successfully with no "Site not initialized" error - Confirm the AI references information you shared earlier in the conversation **Watch for:** "Site not initialized" error when trying to generate; AI repeating questions already answered; imported website content not reflected in the generated design
The site creation wizard now correctly saves and restores your entire chat conversation when you return to a site. Previously, chat messages were not persisted to the site, and voice transcripts were not linked — so returning to a site would show an empty chat even if you'd had a full conversation. **Where:** Client portal → Create new site → Chat tab **How to test:** - Start a new site in wizard mode and send several messages in the chat - Navigate away and return to the same site - Confirm all previous messages are still visible in the chat tab - Try the same with a voice conversation **Watch for:** Chat showing empty on return even after a long conversation; AI repeating questions it already asked in a previous session
Template gallery selection, site cloning, and component library browsing now work correctly in the new site creation wizard. Previously these actions were wired up incorrectly and selecting a gallery template would not redirect to the newly created site. **Where:** Client portal → Create new site → wizard mode → template gallery / import / component library **How to test:** - Open the new site wizard and browse the template gallery - Select and clone a template - Confirm you are redirected to the new site's editor after cloning completes - Also try importing a site from a URL via the import option **Watch for:** Page not redirecting after cloning a template; template selection having no effect; import modal not applying imported content
Sites using GSAP animations with a scoped container reference now generate and preview without crashing. Previously, a specific animation pattern — where GSAP used a container element to scope its effects — could crash the site if the reference variable was never declared. **Where:** Client portal → site preview and published site — any site using GSAP scroll or animation effects with container scoping **How to test:** - Generate or preview a site that uses GSAP animations in a Hero or feature section - Open the browser console and confirm no "is not defined" errors appear - Scroll through the page to verify animations trigger and complete without errors **Watch for:** A blank preview or console error like "containerRef is not defined" in sections that use GSAP animation effects
Users with editor permissions could see the "Open Editor" button but clicking it had no effect. The permission check was incorrectly requiring owner-level access, so the action silently failed for editors. **Where:** Client portal → site dashboard → Open Editor button **How to test:** - Log in as a user with editor role (not owner/admin) - Navigate to a site dashboard - Click "Open Editor" — confirm the site editor opens correctly - Confirm that editor-role users can make and save changes once inside the editor **Watch for:** Button click doing nothing; editor not opening; console errors about permissions for editor-role accounts
Gallery sections with lightbox enabled now reliably open and navigate images without crashing. Previously, certain AI-generated gallery implementations caused a blank screen error when clicking to enlarge an image. **Where:** Client portal → site editor → any image gallery section with lightbox or carousel enabled **How to test:** - Open a site that has a gallery section with lightbox/carousel enabled - Click an image in the gallery to open the lightbox - Confirm the lightbox opens, and left/right navigation and close (Escape) all work - Also verify the undo button appears after using "Enable Lightbox" from the properties panel **Watch for:** Blank white screen after clicking a gallery image; lightbox opening but showing no image or broken navigation arrows
Enabling lightbox or carousel from the properties panel is now safer and more informative — concurrent activations are blocked, buttons disable while one is in-flight, and the chat activity log shows a clear success or "already enabled" message instead of a silent toast. **Where:** Client portal → site editor → select a gallery section → Properties panel → Enable Lightbox / Enable Carousel **How to test:** - Open the properties panel for a gallery section - Click "Enable Lightbox" — confirm the button disables and sibling buttons are greyed out while processing - After success, check the chat activity for a confirmation message with an Undo option - Try clicking "Enable Lightbox" twice quickly — only one request should fire - If lightbox is already enabled, confirm an "already enabled" message appears instead of a blank success toast **Watch for:** Duplicate enable requests firing; buttons staying active during processing; silent no-op on already-enabled galleries
Sites with WhatsApp contact buttons were generating with a hardcoded placeholder phone number instead of the business's real contact number. WhatsApp links now correctly pull from your site's contact information. **Where:** Any generated site with a WhatsApp contact button (typically in header, footer, or contact sections) **How to test:** - Generate a new site for a business with a phone number in the brief - Inspect any WhatsApp button — the `wa.me/` link should contain the actual business phone number, not a generic placeholder - Confirm clicking the WhatsApp button routes to the correct number **Watch for:** WhatsApp links still showing a generic or random number (e.g. `wa.me/9876543210`) instead of the business's contact details
The "New Design" modal (where you clone, browse, or describe a new variation) has been updated with a calmer white header, a responsive grid that stacks on mobile, and richer variation cards that show a one-line summary and color palette swatches. Choosing which design to clone now happens inside the Clone flow rather than at the top level, keeping the initial view simpler. **Where:** Client portal → site editor → "New Design" button (generate variation modal) **How to test:** - Open any site in the editor and click the button to generate a new variation - Confirm the modal header is white/neutral (no purple-pink gradient) - Click "Clone a Design" and verify a design picker expands with a "Clone current design" shortcut and color swatches - On a mobile device or narrow browser window, confirm the three action cards stack vertically **Watch for:** Variation cards with missing color swatches, the picker not expanding when "Clone a Design" is clicked, or the modal header still showing the old gradient
Site preview thumbnails were showing up blank or completely dark in the dashboard due to animation libraries keeping content invisible during screenshots. Thumbnails now correctly display the rendered site design. **Where:** Client portal → Dashboard (site cards with preview thumbnails) **How to test:** - Open any client's site list in the dashboard - Verify site cards show an accurate visual preview of the site design - Trigger a screenshot refresh (or generate a new site) and confirm the thumbnail is not blank or dark **Watch for:** Thumbnails that appear fully black/dark, or site cards with no preview image where one is expected
A variable name mismatch caused site generation to crash at the "preparing" stage for all users. Generation now proceeds normally. **Where:** Client portal → new site creation → generating your site **How to test:** - Start a new site generation with any business description - Confirm the generation progresses past the "preparing" stage without an error **Watch for:** A "preparing" spinner that never advances, or an error message at the very start of generation
Users with the editor role were silently blocked from switching into the site editor despite having permission. The permission check now correctly allows editors to open and use the editor. **Where:** Client portal → site dashboard → Edit Site button (for editor-role users) **How to test:** - Log in as a user with the editor role (not owner or admin) - Open a site and click the Edit Site button - Confirm the editor loads without being redirected or silently stopped **Watch for:** The Edit Site button appearing to do nothing, or the page not transitioning to the editor view for editor-role accounts
Deleting an element from a site section (e.g., removing a list item from the hero) could silently edit the wrong file and reformat the entire component, causing broken previews. Both issues are fixed: the correct source file is now targeted, and formatting is preserved after deletion. **Where:** Client portal → site editor → click an element → delete option **How to test:** - Open a site with multiple sections (hero, services, etc.) in the editor - Click on an element inside a section component (e.g., a feature item) and delete it - Confirm the correct element is removed and the rest of the page is unchanged - Check that indentation and formatting in the file are not altered after deletion **Watch for:** Deleting an element from one section causing visible changes in a different section, or the preview failing to compile after a deletion
Several issues in the Image Manager were fixed: user-edited regeneration prompts were silently discarded on retry, replaced images showed a stale previous version after refresh, and URL-based image sources were not validated before use. **Where:** Client portal → site editor → Images panel → replace or regenerate an image **How to test:** - Open the Image Manager, edit the prompt for an image, and click regenerate — confirm the edited prompt is used (not the original default) - Replace an image and refresh the page — confirm the new image appears, not the old one - Attempt to enter an invalid URL (e.g., `javascript:alert(1)`) in the replace-by-URL field — confirm it is rejected **Watch for:** Regenerated images using the wrong prompt text, old images reappearing after refresh, or invalid URLs being accepted
A centralized Image Manager now lets you view every image on your site grouped by type (hero, team, gallery, portfolio), edit alt text, replace individual images, and bulk-regenerate images using AI. Available from both the preview editor and the site editor toolbar. **Where:** Client portal → site editor → Images button in toolbar (or preview toolbar) **How to test:** - Open any site in the editor and click the Images button in the toolbar - Verify images are grouped by collection type (hero, team, gallery, etc.) - Click an image to replace it with an uploaded file or a URL - Try editing the alt text on an image and confirm it saves - Use the bulk regenerate option to AI-generate new images for the site **Watch for:** Images not loading in the panel, alt text changes not persisting, or the replace modal not uploading correctly
Starting a voice session on a slow or unstable connection would hang with no feedback. Voice mode now shows progressive status messages ("Connecting…", "this may take a moment", "check your internet") and automatically times out after 20 seconds with a clear error. **Where:** Client portal → blueprint wizard → voice mode button **How to test:** - Open the blueprint wizard and start a voice session - On a normal connection, confirm it connects promptly showing "Connecting…" - Simulate a slow connection (browser DevTools → throttle to slow 3G) and confirm the progressive messages appear and a timeout error is shown after ~20 seconds **Watch for:** The voice mode spinner running forever with no message, or no timeout error ever appearing
The previous fix for animation-related crashes only covered one specific reference name. Sites adapted from templates could use any number of animation references (for hero sections, grids, scroll effects, etc.) — and any undeclared one would still cause the site to crash. The auto-fix system now scans for all undeclared animation references and injects the missing declarations, preventing crashes across a wider range of template-adapted designs. **Where:** Client portal → site preview and published site — any site using sections with scroll or animation effects **How to test:** - Generate or adapt a site using a template with multiple animated sections (e.g., a hero with parallax plus a feature grid with fade-in) - Preview the site and confirm no "is not defined" errors in the browser console - Check that all animated sections render and animate correctly on scroll **Watch for:** Browser console errors like "sectionRef is not defined", "heroRef is not defined", or any other ref-name crash — or sections that fail to render entirely
Sites that used scroll-triggered animations (such as GSAP effects) were sometimes crashing with a "variable is not defined" error after a design was generated or a template was adapted. This happened when animation-related references were shared across sections in the original design but not properly carried into each extracted block. Both the code extraction step and the auto-fix safety net now correctly inject these declarations into every component that needs them. **Where:** Client portal → site preview and published site — any site using scroll or animation effects **How to test:** - Generate or adapt a site that uses a template with GSAP scroll animations (e.g., a hero section with parallax or fade-in effects) - Preview the site and confirm no "is not defined" errors appear in the browser console - Scroll through the page to verify animations trigger correctly **Watch for:** Browser console errors like "containerRef is not defined", "sectionRef is not defined", or similar — or sections that fail to render due to a JavaScript crash
When generating two design variations, V2 was not applying its distinct style guidance on the most common generation paths — meaning both designs could look nearly identical. V2 now correctly uses its alternative style system on all paths, producing more visually diverse second variations as intended. **Where:** Client portal → site generation → design selection step (the two side-by-side previews) **How to test:** - Start a new site generation with any business description - Compare the two generated design variations — they should look noticeably different from each other (different color palette, layout density, or visual style) - Regenerate a few times to confirm V2 consistently produces a distinct look **Watch for:** Both variations looking nearly identical in layout and color scheme — this was the symptom of the bug
When adapting your existing site content to a new template design, content sections that didn't have a direct mapping (such as business hours, menus, or feature lists) were previously being silently dropped. They are now preserved and carried over to the new design automatically. **Where:** Client portal → Pages tab → switching between design variations, or applying a template to an existing site **How to test:** - On a site with content sections like business hours or a menu, switch to a different design variation - Verify all content sections appear in the new design — nothing should be missing - Check that field name differences (e.g., "title" vs "headline") are resolved correctly and the right text appears in each section **Watch for:** Content sections disappearing after a design switch; field values showing in the wrong places (e.g., tagline text appearing where the title should be)
"Link to Section" buttons and anchor links now behave correctly in both the preview editor and on published sites — clicking them scrolls smoothly to the target section instead of navigating away or doing nothing. **Where:** Site editor → select any button or link → Link to Section (in the link panel) **How to test:** - Open a site in the client editor with multiple sections - Select a button or navigation link and use "Link to Section" to link it to a section anchor - In the preview, click the button — it should scroll to the linked section - Publish the site and click the same button on the live site — it should scroll correctly there too **Watch for:** Clicking an anchor link navigating to a blank page instead of scrolling, or anchor links having no effect in the preview
Users can now upload many images at once (6+) across all chat surfaces. Instead of hitting a "maximum 5 images" wall, a smart dialog appears that uploads all images in parallel and tells the AI exactly how to use them. **Where:** Blueprint chat, Site assistant bar, Design panel chat input **How to test:** - Open a blueprint chat for any site - Select or drag-drop 7+ images at once - The Bulk Upload dialog should appear (not an alert) - Pick a purpose (Gallery, Properties, Portfolio, etc.) - Click "Upload" and watch parallel progress - After completion, the AI receives a metadata summary describing all uploaded images - Generate the site — it should create a filterable gallery grid using all uploaded images - Try the same in the assistant bar (site editor) and design panel **Watch for:** - Dialog not appearing when selecting >6 images (threshold not triggering) - Upload failures silently swallowing images (check progress counts) - AI still receiving all images as vision inputs instead of the metadata summary (check server logs for "Capped vision URLs" message) - Blueprint.assets.images not being updated after bulk upload
Before generating a site from the chat or voice builder, you can now review and edit your content plan — see what sections will be included, check for any information gaps flagged by the AI, and confirm before generation starts. **Where:** Site builder → chat or voice input → click Generate → Plan review overlay **How to test:** - Start a new site using the chat builder (type a business description) - Click the "Generate" button - Verify that a plan checkpoint overlay appears showing sections and any signal gaps - Edit the plan if needed, then click "Confirm & Generate" - Confirm the site generates using the reviewed plan **Watch for:** The overlay not appearing and generation starting immediately; signal gaps showing incorrectly as empty when the user has provided enough information
You can now configure interactive components (accordions, carousels, tabs, pricing toggles, before/after sliders, and count-up animations) directly from the Properties Panel without writing code — click on any section using one of these components and a floating settings panel appears with all the relevant controls. **Where:** Site editor → click a section with an interactive component → Properties Panel → quick actions **How to test:** - Open a site with an accordion, carousel, or tabs section - Click the section to select it - Open the Properties Panel and look for the component settings action - Change a setting (e.g., enable autoplay on a carousel, set a default open tab) - Verify the change takes effect in the preview immediately **Watch for:** Settings panel not appearing for a section that uses one of the supported components; changes not persisting after the panel closes
Image grid sections in the site editor now show an "Enable Lightbox" button — click it to add fullscreen click-to-enlarge viewing with left/right navigation, keyboard support, and a close button to any gallery that has two or more images in a grid layout. **Where:** Site editor → click any image grid section → Properties Panel → Enable Lightbox **How to test:** - Open a site that has a section with a grid of 2+ images - Click on the image grid section to select it - Look for the "Enable Lightbox" option in the popup/properties panel - Click it and verify the section now supports clicking images to view them fullscreen - Confirm left/right arrow navigation and keyboard Escape to close work correctly **Watch for:** Button not appearing for image grid sections; clicking "Enable Lightbox" producing a broken layout or error; sections that already use a gallery component incorrectly showing the upgrade prompt
Industry detection during site finalization is now AI-powered and far more accurate — a web design agency will no longer be detected as a restaurant — and page generation is faster and cheaper, with pages that better match your site's design theme and content. **Where:** Client portal → Finalize tab → industry detection step; also when adding new pages **How to test:** - Create a site for a non-obvious business type (e.g., a digital marketing agency) - Proceed to the finalization step and check the detected industry - Confirm it matches correctly rather than defaulting to a superficially similar category - Add a new page (e.g., About or Services) and verify it matches the site's visual theme and includes actual content from the blueprint **Watch for:** Industry still being detected incorrectly for niche business types; newly generated pages appearing blank, with placeholder text, or styled differently from the rest of the site
When using voice mode to build a site, the assistant can now generate and read out relevant suggestions (e.g., headline ideas, audience types, unique selling points) whenever a key piece of information is missing — instead of just asking an open-ended question. **Where:** Site builder → Voice mode → any field-filling conversation step **How to test:** - Start a new site using voice mode - When asked about your target audience or unique selling points, wait for the assistant to offer suggestions - Select one of the read-out options or provide your own answer - Confirm the blueprint field is populated with the chosen value **Watch for:** The assistant asking vague open-ended questions without offering concrete options; suggestions being irrelevant to the business type or industry
During site generation, the AI now selects images section-by-section as it designs each part of the site — deciding in context whether a section needs a custom AI-generated image or a stock photo. Previously, images were pre-selected before the AI had designed the layout, leading to mismatches. **Where:** Site generation → any newly generated site **How to test:** - Generate a new site from the Blueprint Wizard - Review the hero, services, and gallery sections - Images should feel contextually matched to the section content and design **Watch for:** Generic or mismatched images that don't relate to the section content — that would suggest the new selection logic isn't running.
The AI image generator panel now renders with correct light-mode colors. Previously, text areas, card containers, and color tints in the panel appeared in dark-mode colors even when the editor was set to light mode. **Where:** Site editor → click an image → "Generate with AI" or bulk image panel → light mode **How to test:** - Switch the site editor to light mode - Open the AI image generator panel by clicking an image or using the bulk image option - All input fields, containers, and labels should display with light backgrounds and dark text **Watch for:** Dark backgrounds appearing on text areas or card containers inside the panel when the editor is in light mode
When the AI adds new sections or components, it now reads the site's existing color variables and applies them — instead of defaulting to generic white backgrounds and black text. **Where:** Site editor → chat → any request to add a new section or component **How to test:** - Open a site that has a custom color theme - Ask the AI to add a new section (e.g., "Add a testimonials section") - The new section should use the site's colors, not plain white/black defaults **Watch for:** Newly added sections appearing with plain white backgrounds or mismatched colors compared to the rest of the site
When generating a site with a specific design style and custom colors (e.g., "white background, orange accents"), the AI now adapts the style's visual techniques — glow effects, textures, layering, animations — to the chosen palette instead of discarding them. Previously, specifying colors could cause the generated design to look flat and generic despite the selected style. **Where:** Blueprint Wizard → Style selection → Creative direction / color customization → Generate **How to test:** - Choose a bold or distinctive style (e.g., a tech-focused or dynamic style) - Add a creative direction specifying different colors (e.g., "white background with orange accents") - Generate the site and compare with a generation using the same style but no color override - Both should share visual depth, effects, and design personality — only the colors should differ **Watch for:** The generated site looking flat or generic despite a bold style selection; the style's defining visual effects (shadows, textures, animations) being absent when custom colors are specified
Changing the layout, resizing an element, or swapping an icon in the site editor now reliably targets the element you clicked — even when multiple similar elements exist on the page. Previously these edits could apply to the wrong element. **Where:** Site editor → click any element → Layout / Resize / Icon options in the toolbar **How to test:** - Open a site in the editor and click on a specific icon in a list of icons (e.g., a feature section with multiple icons) - Use the icon swap option and verify only the clicked icon changes - Resize one card in a grid — only that card should change dimensions - Change the layout of a specific section — the correct section should update **Watch for:** Edits applying to the wrong element, or no element changing at all when a layout/resize/icon action is confirmed
Dragging sections to reorder them in the site editor now saves reliably without interfering with image replacements, widget edits, or other changes made around the same time. **Where:** Site editor → drag section handles to reorder sections **How to test:** - Open a site with multiple sections in the client editor - Drag a section to a new position and release - Refresh the page — the new order should persist - Make an image replacement, then reorder a section — both changes should save independently **Watch for:** Section order reverting to the previous order after a page refresh, or image/widget changes being lost when sections are reordered nearby
Clone generation previously missed a few sections on complex sites — the AI would plan them but skip writing their code. Generation now uses a higher reasoning budget to ensure every planned section is fully built out. **Where:** Blueprint Wizard → clone an existing site URL **How to test:** - Clone a site with many distinct sections (10+) - Compare the generated output against the original site - All sections visible in the original should appear in the clone **Watch for:** Missing sections in the generated clone that were clearly visible in the source site — particularly footer, sidebar, or complex multi-column layouts.
Site generation now runs more work in parallel, cutting the time before your first design appears. Creative direction processing for the primary design no longer waits on other tasks to complete before starting, and style data is fetched in a single batch instead of sequentially. **Where:** Blueprint Wizard → Generate → waiting for the first design variation to appear **How to test:** - Complete the Blueprint Wizard and click Generate - Note the time until the first design variation loads - Generation should feel noticeably faster than before, especially for sites with a specific style variant selected **Watch for:** The generation progress bar stalling for an unusually long time before the first design appears
Fixed a crash that prevented users from being redirected to the site editor after generation completed through the blueprint flow. **Where:** Blueprint Wizard → Generate → automatic redirect to site editor **How to test:** - Start a new site via the Blueprint Wizard - Complete the brief and click Generate - After generation finishes, you should be automatically redirected to the site editor **Watch for:** Generation appearing to complete (spinner stops) but nothing happening — no redirect to the editor
Undoing changes in the site editor now works reliably on older sites that were created before variation tracking was introduced. Additionally, viewing a past version of your site in the version history no longer shows sections that were added after that snapshot was taken. **Where:** Site editor → Undo button / Version history panel **How to test:** - Open an older site (one that has been edited many times) and make a change - Click Undo — the change should be reverted correctly - Open the version history, select a past version, and verify it shows the site as it looked at that point — not with sections added later **Watch for:** Undo having no effect on certain sites, or version history previews showing sections that shouldn't exist at that point in time
The voice recording waveform now animates at a smooth 60fps, and voice session recordings are no longer orphaned when switching modes mid-conversation. **Where:** Blueprint Wizard → Voice mode (microphone button) **How to test:** - Open the Blueprint Wizard and activate voice mode - Speak into the microphone and observe the waveform animation — it should move fluidly without stuttering - Switch between voice and text mode and verify the conversation is saved correctly **Watch for:** Jerky or frozen waveform animation, or voice sessions that disappear after switching modes
Two additional classes of code errors are now fixed automatically without needing manual intervention: a common CSS-variable runtime error and malformed string constants left by the AI after edits. **Where:** Site editor — any time the AI makes a refinement and the result has a syntax or runtime error **How to test:** - Make a refinement request that changes styling (e.g., "change the color scheme") - If the output would have produced a CSS variable error, verify the site still renders correctly - Make a complex text edit and verify the page loads even if the AI produced a slightly malformed response **Watch for:** Sites showing a blank screen or error overlay after refinements that previously would have required a manual fix or retry
Pre-built email automations that business owners toggle on — no workflow builder needed. Get Google reviews, reduce no-shows, and follow up with leads automatically. **Where:** Client Portal → Leads → Automation → Recipes **How to test:** - Open any site in the client portal, navigate to Leads → Automation tab - You'll see the "Recipes" sub-tab (default) with four recipe cards - Click the gear icon on "Google Review Requests" to configure it - Enter a Google review URL, customize the message template, set your timezone and send window - Toggle the recipe on - Go to the Activity/Bookings view and mark a booking as "completed" - Check the Message Log (button in top-right of Recipes view) — an email should be scheduled - On completed bookings, you'll also see a "Request Review" button for manual triggers - Try the channel selector in recipe config: Email (default), SMS (requires Twilio), or Both - Click "Connect Twilio" banner to set up SMS via BYOK (bring your own Twilio credentials) - Test the SMS setup panel: enter Twilio Account SID, Auth Token, From Number, then send a test SMS **Recipes available:** - Google Review Requests — sends after booking completed, with tracked link and auto follow-up - Booking Reminders — 24h and 1h before appointments (Phase 2) - Missed Lead Auto-Reply — instant acknowledgment on form submissions (Phase 2) - Follow-up Drip — multi-step email sequence for unresponsive leads (Phase 3) **Watch for:** Timezone selector should match the business location (affects when messages are sent). Weekend sends are skipped automatically. The AI assistant now knows about recipes — try asking "what automations are enabled?" to test the new tool.
Deleting a client no longer fails with a permission or constraint error — associated sites are now safely archived instead of hard-deleted, which resolves both permission issues and database conflicts. **Where:** Dashboard → Clients → select a client → Delete client **How to test:** - Create a client that has one or more sites - Delete the client from the client management page - Confirm the deletion succeeds without an error message - Verify the client and its sites no longer appear in the active list **Watch for:** "Failed to delete associated sites" error appearing after confirming deletion; client remaining in the list after a delete attempt
Sites that used helper functions like icon renderers or price formatters in their header or footer no longer crash with "renderIcon is not defined" errors after content extraction. **Where:** Site preview and published site — header/footer components **How to test:** - Generate a site that uses icons or formatted values in the navigation or footer - Open the site preview — header and footer should render without errors - Publish the site and verify the live version shows the header/footer correctly **Watch for:** "is not defined" errors in the browser console for header or footer components; navigation or footer appearing blank
Contractors in landscaping, cleaning, roofing, plumbing, HVAC, and electrical can now get a fully built website from just their business name, services, and service area — no form-filling required. **Where:** POST /api/curated-sites (onboarding API endpoint for home services verticals) **How to test:** - Call POST /api/curated-sites with a JSON body: `{ "vertical": "plumbing", "businessName": "Joe's Plumbing", "services": ["emergency repairs", "water heater install"], "serviceArea": "Austin, TX" }` - The API creates a site and triggers generation automatically - Check the generated site — it should include industry-specific trust signals, taglines, and service lists pre-populated - Try other verticals: landscaping, cleaning, roofing, hvac, electrical - GET /api/curated-sites returns available vertical configs for building onboarding UI **Watch for:** Each vertical has 70+ predefined service options — the generated site content should match the selected services. Color palettes are industry-matched (e.g., green for landscaping, blue for HVAC).
Site images are now generated with a model chosen based on what the image shows. Photos of people, faces, and text-heavy images use a model optimized for realistic portraits, while landscape and scene images use a model tuned for environments and objects. **Where:** Any site with generated images — visible in the site preview and published site **How to test:** - Generate a site for a business that involves people (e.g., a consulting firm or salon) - Check that hero and team images look realistic and faces are well-rendered - Generate a site for a landscaping or outdoor business and verify scene images look natural **Watch for:** Blurry or distorted faces in people-centric images; generic or mismatched images not fitting the business type
The voice assistant now explicitly walks through each wizard step in order, confirms your answers before moving on, and references the Brief panel so you can follow along visually. **Where:** Site creation wizard → voice mode (microphone button) **How to test:** - Start voice mode in the wizard - Answer the AI's questions about your business - After each section (Business, Goals, Plan), the AI should say "Does this look right?" before advancing - Confirm verbally to move to the next step - Watch the Brief panel update as you speak **Watch for:** AI skipping confirmation and advancing steps automatically; AI asking for information already visible in the Brief panel
When you return to voice mode mid-session, the AI now checks what's already been filled in and picks up where you left off — no more being asked for your business name when it's already in the brief. **Where:** Site creation wizard → voice mode (microphone button) **How to test:** - Fill in your business name and industry in the wizard manually - Start voice mode - The AI should greet you by business name and focus on fields still missing - Alternatively, fill some fields, disconnect, reconnect — the AI should not re-ask filled fields **Watch for:** AI greeting with a generic intro despite fields already being filled; AI re-asking for information already in the brief
Voice mode is now available exclusively on Growth, Partner, and Enterprise plans. Free plan users see an upgrade prompt when attempting to start a voice session. **Where:** Site creation wizard → voice mode button **How to test:** - Log in with a Free plan account - Open the site creation wizard and click the microphone button - You should see an upgrade prompt, not be able to start a session - Log in with a Growth or higher plan account — voice mode should work normally **Watch for:** Free users being able to start voice sessions; Growth plan users being incorrectly blocked
Voice sessions no longer drop immediately after connecting — a WebSocket compatibility issue has been fixed, and the AI now proactively greets you at the start of each session without waiting for you to speak first. **Where:** Site creation wizard → voice mode (microphone icon) **How to test:** - Open the site creation wizard and start a voice session - The AI should greet you within a few seconds without you needing to say anything first - Continue the conversation — the session should remain stable throughout - When asked about visual style, the AI will ask about your color and mood preferences rather than suggesting specific design variants **Watch for:** Voice session dropping immediately after the connection sound; AI staying silent and waiting indefinitely for you to speak first; WebSocket close errors in the browser console
Several voice mode issues fixed: wizard content is no longer hidden behind the voice overlay, the generation progress screen shows correctly after voice-triggered generation, color fields display properly in the brief panel, and the AI no longer skips ahead without asking for confirmation. **Where:** Site creation wizard → voice mode **How to test:** - Start voice mode and scroll down in the wizard — content should not be cut off behind the overlay - Complete a voice session through to generation — a loading/progress screen should appear - Mention a brand color during voice session — the Brief panel should show a color swatch, not "#000000" - The AI should ask "Does this look right?" before moving to the next step every time **Watch for:** Form fields hidden behind voice overlay at the bottom; generation appearing to do nothing after the AI says it's generating; AI advancing steps without verbal confirmation from you
Voice sessions now have a 3-minute limit per site. A warning appears 30 seconds before the session ends, and any progress made is saved automatically when the session closes. **Where:** Site creation wizard → voice mode overlay → timer/warning indicator **How to test:** - Start a voice session in the wizard - After approximately 2 minutes 30 seconds, a warning should appear - At 3 minutes, the session should end automatically - Confirm that the brief fields filled during the session are retained after disconnection **Watch for:** Session ending without saving progress; warning not appearing before timeout; session continuing past the 3-minute limit
You can now build your website brief entirely by voice — speak naturally to describe your business, and the AI fills in the forms, navigates wizard steps, and triggers site generation hands-free. **Where:** Site creation wizard → microphone button in the wizard header **How to test:** - Start a new site from the dashboard - Click the microphone button in the top-right of the wizard - Speak your business name, what you do, and what kind of site you want - Watch the Brief panel update in real time as the AI fills in fields - Say "looks good" when prompted to confirm each step - The AI will propose sections and then trigger generation on your approval **Watch for:** Voice overlay covering form content (scroll should still work); AI re-asking for information already provided; generation not starting after verbal confirmation
Speak naturally to build your website brief. The AI listens, fills in your business details, navigates wizard steps, and launches generation — all through voice, with no typing required. **Where:** Admin → Blueprint Wizard → microphone button in the top-right of the wizard header **How to test:** - Open the Blueprint Wizard (Admin → New Site) - Click the microphone button to start a voice session — the voice overlay appears docked at the bottom - Say something like "I run a plumbing business in Austin, we handle emergency repairs and water heater installs" - Watch the wizard fields populate in real time as you speak - Say "looks good, let's build it" — the AI will confirm before advancing to the next step - You can also say "go back" or "skip this step" to navigate - Upload a reference image or paste a URL by voice: "use this site as inspiration: example.com" - The AI will not advance steps without explicit confirmation from you — it asks before moving forward **Watch for:** Voice sessions require a Growth plan or above — free accounts will see an upgrade prompt. If the waveform shows but audio isn't processing, check browser microphone permissions. The AI should never skip steps without you saying something like "yes" or "looks good."
Clicking a design variation tab in the site editor sometimes crashed with a loading error or left the editor in a broken state. All three root causes have been fixed. **Where:** Client portal → site editor → design variation tabs (top of editor) **How to test:** - Open a site in the client editor that has multiple design variations - Click through each variation tab — the preview should update without errors - Click the same tab twice — should not trigger a redundant reload or error - Switch from one variation to another while files are loading — the editor should stay stable **Watch for:** The variation tab should never show a "useSiteVariations error" toast. Switching back to an already-selected design should succeed silently. The preview should not flicker or go blank during tab switches.
Import prospect lists via CSV, assess their websites with AI visual analysis, find their emails automatically, and build personalized sites — all from one workspace. **Where:** Dashboard > Agency > Prospects **How to test:** - Click "Import CSV" and upload a spreadsheet with columns: Business Name, Email, Phone, Website, Address, City, State, Industry - Columns auto-map from common header names - After import, prospects appear in a table with screenshot thumbnails, scores, and contact info - Click "Assess" on any prospect with a website to run AI visual analysis (takes ~10 seconds) - View the assessment: design score (1-10), verdict (needs replacement/refresh/acceptable/good), specific issues, and customer-facing improvement opportunities you can copy into outreach emails - For prospects without email, click "Find" next to the "No email" badge to scrape their website for contact emails - Click "Build Site" on any prospect to jump to the template gallery with their details pre-filled in the Spin Up wizard - Use filters: All, Has Website, No Website, Assessed **Watch for:** Assessment timing out (large/slow websites may take 30+ seconds), "Find" email returning false positives (check the email looks legit), screenshot thumbnails not loading (R2 upload may fail for some sites)
Agencies can now save any site as a reusable template, then spin up personalized copies for new prospects in seconds. **Where:** Dashboard > Agency > Templates (save from any site editor via Settings > General > "Save as Agency Template") **How to test:** - Open any site editor, go to Settings > General - Click "Save as Agency Template" — name it and save - Go to Dashboard > Agency > Templates to see the saved template - Click "Use Template" to open the Spin Up wizard - Enter the prospect's business name, phone, email, address - Click "Generate Content" to AI-fill all content (services, testimonials, FAQs, etc.) - Expand "Advanced Content" to review/edit AI-generated text, upload images - Click "Create Site" — a personalized site is created instantly **Watch for:** Variable field detection missing important fields (check the "required fields" count on template cards), AI Auto-Fill generating content for the wrong industry (the Industry field should override the template's default)
E-commerce sites now get guided product management education at every stage — from the moment a design is generated through to going live. **Where:** Appears automatically when a site has products or e-commerce content: - **Post-generation coach** (immediately after site creation) — surfaces "Replace dummy products", "Enable shopping cart", and "Connect payments" as actionable health issues - **Getting Started checklist** (editor dashboard) — adds "Update your products" and "Set up payments" steps for e-commerce sites - **Overview tab** (Mission Control) — purple "Set Up Your Store" card with 6-step walkthrough - **Opportunity cards & readiness checks** — "Enable shopping cart" and "Connect a payment provider" in the recommended actions - **AI assistant** — knows the full store setup flow and can guide users through each step **How to test:** - Generate a site for an e-commerce business (e.g., "online clothing store") - After generation, check the post-extraction coach for product-related issues - In the editor dashboard, verify the Getting Started checklist includes "Update your products" and "Set up payments" - Switch to Overview and verify the purple "Set Up Your Store" guide appears - Click each action button and confirm it navigates to the correct section - Check the readiness panel for "Shopping cart enabled" and "Payment provider connected" items - Ask the AI assistant about products or payments and verify it provides guidance **Watch for:** Guide not appearing on non-product sites; product health checks showing for non-e-commerce industries; action buttons navigating to wrong sections
Ready-to-use ad template library so agencies can promote their website design services across 6 ad formats and 7 selling angles. **Where:** Dashboard header > "Ad Library" button (desktop), or mobile menu > Tools section **How to test:** - Navigate to `/dashboard/ad-library` - Fill in agency name, URL, and tagline in the customization bar — all 18 templates update live - Filter by format (Facebook, Instagram, Google Display, LinkedIn, Video Script, Email) - Filter by angle (Portfolio Showcase, Speed & Pricing, Features, Social Proof, etc.) - Click "Preview" on any template to see the full ad copy with your customizations - Click "Copy" to copy the complete formatted ad text to clipboard - Search by keyword to find specific templates **Watch for:** Placeholder values ({{agency}}, {{url}}) not being replaced in preview or copy output
When applying a template from the style gallery to create a new design variation, the Design Assistant now shows which template was applied instead of just the generic "fresh chat" message. **Where:** Client editor > Browse Inspirations > select a style > Design Assistant panel **How to test:** - Open any site, click "Browse Inspirations" or the style gallery - Select a template style and click "Use This Style" - Check that the Design Assistant shows: "Design DX was created from the '[Template Name]' template" **Watch for:** Message not appearing (rationale field missing), or message incorrectly showing for AI-generated variations (it should only appear for style gallery picks)
Cleaner theme/style browsing with stale preview clearing, cross-section mutual exclusivity, and search. **Where:** Client editor > Styles panel > Themes tab **How to test:** - Select a creative preset, then switch to Fonts tab — the preview CSS should clear (no stale colors) - Switch back to Themes — no stale selection persists - Select a creative preset, then select a color theme — the creative preset selection clears automatically - Select a color theme, then an alternating section pattern — the color theme clears - Type in the new search bar to filter themes and presets by name - Verify the selection banner shows when a theme is active and the "Clear" button works - On dark-mode sites, switch between dark presets — background colors should visibly change **Watch for:** Stale preview CSS persisting after tab switch, multiple sections appearing "selected" simultaneously
Fixed two issues where requesting color changes via the Design Assistant appeared to succeed but didn't visually update the site. **Hybrid CSS-variable sites:** Sites using both CSS variables and Tailwind arbitrary values (`bg-[#HEX]`) only had the Tailwind classes updated, leaving CSS-variable-driven colors unchanged. Now both are updated in one pass. **Variation color detection (D2+):** When editing Design 2 or later, the system was detecting the "old" colors from Design 1's code, so replacements silently failed because D2 uses different hex values. The system now re-detects colors from the variation's own code. **Where:** Client editor > Design Assistant > request any color change on D2+ or a hybrid-mode site **How to test:** - Open a site with multiple variations, switch to D2 - Ask the Design Assistant to change colors (e.g., "make the primary color blue") - Verify the preview actually updates with new colors - Try the same on a site that uses CSS variables (check for `--color-primary` in the code) **Watch for:** Colors still not changing — check if the site uses a completely different theme approach not covered by these fixes
End users accessing the client portal can now sign in with their Google account in addition to email/password. **Where:** Client portal login page (`/portal/[siteId]`) **How to test:** - Navigate to any portal login URL - Verify a "Sign in with Google" button appears alongside the email/password form - Click it and complete the Google OAuth flow - Verify you land in the portal with correct permissions - Verify restricted-scope users still only see their assigned sites **Watch for:** OAuth redirect errors, users created via Google not being linked to the correct organization
New users see a guided onboarding checklist in the client portal to help them set up their site. **Where:** Client portal > Home view (appears for new sites that haven't completed setup steps) **How to test:** - Create a new site and open the client portal - Verify the onboarding checklist appears with steps like "Edit your content", "Add your logo", "Connect a domain", "Publish your site" - Complete each step and verify the checklist updates - After all steps are done, verify the checklist dismisses or collapses **Watch for:** Checklist showing for fully-set-up sites, steps not marking as complete after the action is taken
Organization admins can now restrict team members to specific sites instead of giving them access to everything. **Where:** Dashboard > Organization > Members > click a member > "Manage Site Access" **How to test:** - Go to organization settings and find a team member - Set their access scope to "Restricted" - Grant them access to specific sites only - Log in as that member and verify they only see their assigned sites on the dashboard - Verify they cannot access other sites via direct URL - Grant access to additional sites and verify they appear immediately **Watch for:** Restricted members seeing all sites (access scope not applied), or admins accidentally restricting themselves
The variation picker has been completely redesigned with a unified gallery view, pick-to-clone flow, and integrated brainstorm chat for generating new variations. **Where:** Client editor > variation selector area (top of the editor) **How to test:** - Open any site with multiple variations in the client editor - Verify the new gallery view shows all variations with visual previews - Click a variation to select it for editing - Use the "pick-to-clone" action to duplicate a variation as a starting point - Try the brainstorm chat to request a new AI-generated variation - Verify switching between variations loads the correct code and preview **Watch for:** Clone modal showing chat prompt instead of site name, preview not updating after variation switch
The site creation wizard now analyzes your business description and intelligently pre-selects goals, audience scope, and suggests industry-specific differentiators — so you spend less time clicking and more time building. **Where:** Site creation wizard → Goals, Audience, and USPs cards **How to test:** - Create a new site with a clear business description (e.g., "Joe's Plumbing - emergency plumbing services in Dallas, TX") - On the Goals card, verify "Get leads & inquiries" is pre-selected with a purple "We picked this based on your business" banner - On the USPs card, verify the suggestion chips are industry-specific (e.g., "Licensed & Insured", "Same-Day Service") instead of generic - On the Audience card, verify "My local area" is pre-selected for local businesses - Change any pre-selected option and verify the prediction banner disappears - Try the "Not sure? Let's figure it out together" link on any card to open the brainstorm chat - In brainstorm mode, describe your business needs and verify suggestions get auto-applied to the wizard fields **Watch for:** Predictions not appearing (API timeout), brainstorm suggestions not populating wizard fields, prediction banners persisting after user changes
Three improvements to the post-generation experience and AI chat. **"How does this look?" feedback prompt** — After a design is generated, the AI assistant now asks for your reaction with three quick actions: "Love it! Polish the details", "Needs some changes", or "Try a different style". Replaces the generic welcome message in preview phase. **Contextual suggestion chips restored** — After each chat response, the assistant shows 2-3 contextual action chips based on your site's state (e.g., "Publish site", "Generate SEO", "Add a contact form"). Previously removed, now re-enabled. **Variation generation progress card** — When generating a new design variation, the preview switches to a status card showing what's being created and a time estimate (~2-3 min). You can click any existing design tab to browse while waiting, then click the "Generating..." tab to return to the status card. **Where:** Client portal → AI Assistant panel (right sidebar) and Preview area toolbar **How to test:** - Create a new site → after generation, check the AI assistant shows "How does this look?" with 3 buttons - Send a message to the assistant → verify suggestion chips appear below the response - Trigger a new variation (via "Try a different style" or approval modal) → verify the preview shows a progress card with your request summary - While generating, click an existing design tab → verify you can browse freely - Click the "Generating..." tab → verify the progress card returns **Watch for:** Progress card showing without any description text (should always have context about what's being generated)
Complete redesign of the website creation flow — from a single chat conversation to a focused guided wizard that builds your site faster with better results. **Where:** Client portal → Create New Site **What changed:** **Step 1 — Tell us about your business:** - Upload PDFs, brochures, menus, or photos and we automatically extract your services, pricing, testimonials, team, and contact info - Import content from your existing website URL - Everything pre-fills downstream — no retyping **Step 2 — Quick questions (one at a time, like Typeform):** - Goals: What should your site do? (leads, bookings, sales, showcase) - Differentiators: What makes you stand out? AI also extracts USPs from your description - Audience: Local, national, or global + city for local businesses - Style: Swipe through real design examples — like/dislike to set your visual direction. Search by style category. Theme (light/dark) and brand color pickers. **Step 3 — Review your site plan:** - AI-generated sections with editable hero headline - Smart feature toggles based on your industry (dentist sees Booking, SaaS sees Help Center) - Chat input to modify the plan with natural language - Your first design starts building in the background while you review **Step 4 — Add your details while we build:** - Contact info, social profiles, business hours, photos - Everything saves to your site in real-time - Progress bar shows generation status - No wasted time — you're productive while the site builds **3 design variations:** - V1: Custom AI-generated design (starts during plan review) - V2: Alternative creative direction (starts after V1) - V3: Adapted from a matching gallery template (starts after V1 content is ready) **How to test:** 1. Go to any client → Create New Site 2. Enter a business name and description (or upload a PDF) 3. Go through the 4-step flow 4. Check that you get 3 variations with different visual approaches 5. Try the contact/social fields during the "while building" screen **Watch for:** - V3 template variation should appear within 30-60 seconds after V1 (polls automatically) - Style preferences from vibe swipe should influence the generated design - Contact info entered during building should appear in the site's footer/contact section
The site plan now shows industry-relevant interactive features as toggleable chips. **Where:** Client portal → Create New Site → Plan step (Step 3) **What changed:** - Feature toggles appear below the section list, powered by `getRecommendedFeatures(industry)` - Recommendations are industry-specific with priority levels (essential, recommended, optional) - Fuzzy industry matching: "dental-services" → "dental", "restaurant-italian" → "restaurant" - Toggling a feature adds/removes the corresponding section from the plan - Essential features highlighted in blue with "rec'd" badge **Examples:** - Dentist: Online Booking (essential), Help Center (recommended) - Restaurant: Booking Requests (essential), Shopping Cart (essential) - SaaS: Help Center (essential), Plan Comparison (essential) - Photography: Booking (essential), Quote Request (recommended) - Real Estate: Inquiry Form (essential), Saved Properties (essential) **How to test:** 1. Create a new site for different industries 2. Check that the Plan step shows relevant feature chips 3. Toggle features on/off and verify sections are added/removed 4. Check that the generated site includes the selected features **Watch for:** Industries with uncommon slugs (e.g., "holistic-wellness") may not show features if not in the mapping
A new Marketing tab inside the Growth workspace that gives business owners an AI-powered marketing command center — directories to submit to, communities to join, content ideas, and a content calendar, all tailored to their specific business. **Where:** Client portal → Growth → Marketing tab **How to test:** - Open any site in the client portal and go to Growth → Marketing - Complete the 5-step onboarding wizard (audience, goals, channels, competitors, strengths) - After onboarding, an AI scan runs automatically and populates all tabs - Check "Get Listed" — should show relevant directories sorted by priority - Check "Communities" — should show Facebook Groups, Slack, Discord, Reddit, forums - Check "Get Featured" — podcasts, guest blogging, press opportunities - Check "Ideas" — marketing ideas with action step checklists - Check "Calendar" — content calendar grouped by week with copy starters - Check "Partnerships" — complementary businesses and influencer suggestions - Try updating statuses (Start, Submit, Verify, Skip) and confirm they persist - Click "New Scan" to generate fresh results **Growth Pro tabs (Keywords, Reviews, Backlinks):** - These show a paywall if Growth Pro is not active - With Growth Pro + DataForSEO configured, they pull real search data **Watch for:** AI scan returning empty results, status updates not persisting, onboarding wizard losing state between steps
Spreadsheet-style bulk editor for page titles, descriptions, and keywords across all pages at once. **Where:** Client portal → SEO → Pages tab → click the table icon (top right, next to expand/collapse) **Features:** - **Table view** — see all pages' titles, descriptions, keyword counts, and OG image status in one view - **Inline editing** — edit any title or description directly in the table, saves on blur - **Character counters** — color-coded (green=good, amber=wrong length, gray=empty) with live counts - **Empty field highlighting** — red border on missing titles/descriptions - **AI Fill Empty Fields** — one button generates AI-optimized titles, descriptions, and keywords for all empty fields using the existing auto-fix API **How to test:** - Open any site with multiple pages → SEO → Pages tab - Click the table icon in the top-right toolbar to switch to bulk view - Edit a title directly in the table → tab to next field → verify it saves - If any fields are empty, click "AI Fill X Empty Fields" → verify AI generates content for all empty fields - Switch back to card view via the list icon → verify changes persisted **Watch for:** Bulk AI fill failing if site has no blueprint/business info (needed for AI context), character counter not updating as you type
SEO reports upgraded from basic scorecard to a comprehensive professional audit with 7 new sections. **Where:** Client portal → SEO → Report tab; also visible on public share link **New sections:** - **Executive Summary** — AI-generated professional overview of site SEO health - **Technical SEO Status** — HTTPS, domain, robots.txt, sitemap, schema, mobile status - **AI & LLM Readiness** — llms.txt, AI crawler access, structured data, FAQ content - **Structured Data Coverage** — Active schema types with field counts - **Per-Page SEO Analysis** — Table showing title/description/keywords/OG image per page - **Priority Action Plan** — AI-generated phased action plan (Immediate, Short-term, Ongoing) - **Issues & Recommendations** — Upgraded with descriptions and more detail **How to test:** - Open any site → SEO → Report tab → verify new sections appear in the preview - Click "Share Report" → scroll to Report Content → toggle new sections on/off → Save → verify report updates - Click "Generate" next to "AI Summary & Action Plan" → verify executive summary and action plan appear - Open the public report URL → verify all new sections render with real data - Click "Download PDF" → verify all sections print cleanly **Watch for:** AI summary generation failing (check console for errors), empty sections when site has no schema/llms.txt configured (should just not show), toggle state not persisting after save
Replace multiple stock images at once with AI-generated alternatives that match your business. Preview each before/after and approve individually. **Where:** Editor toolbar → More menu → AI Images, or ask the AI assistant "regenerate all images" **How to test:** - Open any site in the editor - Click the More menu (three dots) → AI Images - Select images from the grid (or Select All) - Click "Regenerate" and wait for AI generation - Review before/after comparisons — toggle approval for each - Click "Apply" to replace approved images in your site - Alternatively, type "regenerate all images" in the chat assistant **Watch for:** Images that don't match the business context, broken thumbnails in the grid, changes not reflected after apply (try refreshing)
Agencies can now add custom content sections to SEO reports and save commonly used report settings as organization-wide defaults. **Where:** Client portal → SEO → Share Report modal **How to test:** - Open any site's SEO tab, click "Share Report" - Enable the report, scroll down to "Custom Sections" - Click "Add Section" to create a custom section with title, content, and position selector - Add multiple sections, choose different positions (after intro, after categories, etc.) - Save settings and preview the report — custom sections appear at the chosen positions - Use "Save as Defaults" to store current settings at the org level - Open a different site's SEO report, click "Load Defaults" to apply saved settings - Delete a custom section and verify it's removed from the report preview **Watch for:** Custom sections not appearing at the correct position in the rendered report. Load/Save defaults failing silently. Settings not persisting after page reload.
New Chrome extension with 5 tools for prospecting, design inspiration, and style harvesting — all from your browser. **Where:** Install from `chrome-extension/` directory (developer mode) or Chrome Web Store (when published) **How to test:** - Load the extension in Chrome via `chrome://extensions` → Developer mode → Load unpacked → select `chrome-extension/` folder - Visit any business website and open the extension popup — the Prospect tab auto-analyzes the page (business info extraction, site quality score) - Click "Clip Section" on the Inspire tab, then hover and click any section on the page to save it - Click "Extract Styles" to pull colors, fonts, animations, and components from any site - Open Google Maps, search for businesses — use the floating "Scan Map" button to find prospects without websites - Visit Dribbble and use the bookmark buttons on shots to collect design inspiration into mood boards - Right-click context menu provides quick access to all features **Watch for:** Content scripts not loading on certain pages (CSP restrictions), Google Maps selector changes breaking GMB scanner
SEO reports now include Google PageSpeed Insights performance scores and agencies can control what clients see in shared reports. **Where:** Client portal → SEO → Report tab **How to test:** - Open SEO → Report tab, click "Check PageSpeed" to fetch mobile + desktop performance scores - Scores show in the report with FCP, LCP, CLS, and TBT metrics - Results are cached for 1 hour to avoid excessive API calls - Click "Share Report" and look for the "Report Content" section - Toggle "Show only completed items" — incomplete checklist items disappear from the report - Toggle "Hide issues section" — the issues list is removed entirely - Click category pills to hide specific categories (e.g., hide Local SEO if not relevant) - Toggle "Show PageSpeed scores" to include/exclude performance data - Preview the report to verify visibility settings take effect **Watch for:** PageSpeed fetch failing on unpublished sites (expected — needs a live URL). Hidden categories still showing in the report. "Show only completed" not filtering the detailed checklist properly.
Forms, booking widgets, shopping carts, payment buttons, and course enrollment components now work interactively in the site editor preview — no need to publish first. **Where:** Client portal editor preview (any site with runtime features enabled) **How to test:** - Create a new site with a business that triggers runtime features (e.g., restaurant with online ordering, fitness studio with booking) - After generation, the preview should show working forms and interactive components - Submit a form in preview — should show "Test Submission Recorded!" confirmation - Booking widgets show sample time slots when a date is selected - Payment buttons show a simulated success state - Cart browsing works (add/remove items); checkout falls back to form-only mode **Watch for:** - `window.__MONDOVO_CONFIG__.featureManifest` should not be null in the preview iframe - No console errors about missing Runtime* component imports - Preview submissions should be tagged as test data (not mixed with real leads)
Agencies can now track SEO progress with an actionable checklist and share beautiful progress reports with their clients. **Where:** Client portal → SEO tab → Checklist and Report sub-tabs, plus "Share Report" button in the SEO header **How to test:** - Go to any site's SEO tab in the client portal - Click the "Checklist" tab to see 35+ categorized SEO action items across 6 categories: On-Page, Technical, Content, Local SEO, Social, and AI/LLM Visibility - Check off completed items, add notes (e.g., "Submitted to Google on 3/15"), and watch the progress bar update - Items that can be auto-detected (like proper meta tags or H1 headings) are automatically marked as complete - Click the "Report" tab to preview the shareable report clients will see - Click "Share Report" to generate a public link with agency branding customization (title, agency name, logo) - Open the share link in an incognito window to verify the public report loads correctly with health score, checklist progress, and issue breakdown - Try filtering the checklist by "To Do" or "Done" to focus on remaining work **Watch for:** Checklist state not persisting after page reload; auto-detected items incorrectly showing as complete; share link not working when report is disabled; report settings not saving
Shareable SEO reports are now properly readable on phones and small screens — scores, category cards, issue lists, and PageSpeed metrics all scale and wrap correctly instead of overflowing. **Where:** Public SEO report link (the page clients open when you share a report) **How to test:** - Go to any site → SEO tab → click "Share Report" to get a share link - Open that link on a mobile device or use browser DevTools to simulate a 375px-wide screen - Verify the health score, category breakdown cards, issue list, and PageSpeed metrics all fit without horizontal scrolling - Check that long site URLs are truncated rather than breaking the layout - Verify severity counts (critical/warnings/tips) wrap gracefully on narrow screens **Watch for:** Category cards still overflowing on very small screens; PageSpeed metric grid breaking the layout; issue titles not wrapping
Create multi-step conversion funnels (opt-in, sales, webinar, etc.) from a business description. **Where:** Client portal → Funnels in the left rail → "Create Funnel" button **How to test:** - Open a site in client editor, go to Funnels - Create a new funnel using AI generation — enter a business description, pick a type (e.g., opt-in) - Confirm multi-step flow renders (contact → summary → payment for checkout type) - Publish the site and visit the funnel URL on the published domain - Submit a form in the funnel → check form_submissions table for the entry **Watch for:** Steps not rendering in sequence, published funnel URL 404ing, payment step showing without payment configured
New intelligent onboarding wizard replaces the chat-based flow as the default. Four steps collect your business details and AI generates a complete, custom website plan you can review and tweak before generating. **Where:** Create new site (now the default experience) **How to test:** - Go to `/client/{clientId}/site/new` - **Step 1 (Business):** Enter your business name and a brief description of what you do. Optionally add a logo. - **Step 2 (Content):** If your business has specific content (menu, products, services, courses), the AI will ask for it. Upload a PDF/photo or paste a list. The AI extracts items with prices. Skip if you prefer placeholders. - **Step 3 (Goals):** Pick your site's main goal (get leads, sell online, get bookings, etc.). Choose your audience (local with city search, national, or global). Pick a visual vibe from real design screenshots or let AI decide. Add style preferences with quick-tap chips. - **Step 4 (AI Plan):** See your complete site plan — hero headline, sections with explanations, interactive checklists you can toggle. Edit the headline, add/remove sections, browse design inspiration. Write any custom instructions. Click "Generate My Site." - **Sidebar:** Click the sparkle icon to open the assistant panel for brainstorming, editing the blueprint, viewing the wireframe, or uploading assets. - Verify the generated site uses your real content (menu items, products, services) and matches your selected goals and style. **Watch for:** Content parsing failing on uploaded files (try pasting text instead). AI plan showing generic items when real content was uploaded. Style not matching vibe selection. Draft site limit error not showing before form submission.
Image generation prompts now use aspect ratios instead of pixel dimensions, improving output quality. **Where:** Affects all AI-generated images during site generation (no UI change — backend prompt improvement) **How to test:** - Generate a new site for any industry - Check that hero images, section images look well-composed and correctly proportioned - Compare with older generated sites if possible — images should look less cropped/stretched **Watch for:** Images with wrong aspect ratios, overly zoomed-in compositions, images that don't match the industry
Activating a feature now runs the full setup pipeline instead of just toggling it on. When you activate Help Center, Shopping Cart, Job Board, or any other feature, it automatically creates the content type, seeds sample items, injects the right components, and creates a dedicated page if needed. Features that need a choice (like Shopping Cart asking "What will you sell?") now show a step-by-step wizard. After activation, a success screen shows what was set up and what to do next. Active features with managed content (like products or services) now have a "Manage Items" button right in the Features view for quick CRUD access.
Fixed two display bugs in the Organization settings page — member email addresses were blank, and admin members were incorrectly shown with an "owner" badge. **Where:** Dashboard → Organization → Members list **How to test:** - Go to Dashboard → Organization and check the members list — each member should now show their email address - Invite or view an admin member (not the owner) — confirm their badge shows "Admin" not "Owner" - The actual owner of the org should still show the "Owner" badge **Watch for:** Member emails still blank after loading; admin members still showing "Owner" badge instead of "Admin"
Member email addresses and role badges now display correctly on the Organization page — emails were blank and admins were incorrectly shown as "owner". **Where:** Dashboard → Organization (team members section) **How to test:** - Go to Dashboard → Organization - Check that all team members show their email addresses (not blank) - Verify that admin members show the "admin" badge, and only the actual owner shows "owner" - Invite a new member and confirm their email appears immediately in the list **Watch for:** Members still showing blank emails after refresh, admin users incorrectly labeled as owner
Generate up to 5 design variations for any page and select which one goes live. **Where:** Client portal → Pages tab → click any page → "Generate Variation" button **How to test:** - Open an extracted site in the client editor - Go to Pages, pick a page, click Generate Variation - Wait for AI generation (SSE streaming progress) - Switch between variations using the variation selector - Select a variation, then publish — confirm only the selected variation deploys **Watch for:** Variation selector not updating, publish deploying wrong variation, variation count exceeding 5
AI-tagged image stock library with vision tagging, search, and auto-replacement of broken images. **Where:** Admin → Image Library (admin-only management). In client editor, broken images show a "Replace" suggestion pulling from this library. **How to test:** - Go to /admin/image-library → verify images load with tags and search works - Open a site that has broken/expired image URLs - Confirm the editor surfaces a suggestion to replace the broken image - Accept the replacement → verify the new image loads and is from the library **Watch for:** Search returning irrelevant results, broken image detection missing some images, replaced image not persisting after refresh
Sites now auto-detect which interactive features (booking, cart, help center, etc.) fit the business type and offer one-click activation. **Where:** Client portal → left rail → look for suggested features with activation badges **How to test:** - Create a new site for a restaurant → should suggest booking, menu/cart - Create a site for a law firm → should suggest inquiry form, help center - Click "Activate" on a suggested feature → confirm it adds the runtime component and portal view - Check that irrelevant features are NOT suggested (e.g., no course enrollment for a plumber) **Watch for:** Wrong features suggested for industry, activation failing silently, duplicate features after re-activation
Template gallery search box now pre-fills with the site's industry for better default results. **Where:** Client editor → template gallery / design selection step **How to test:** - Open a site for "plumbing" → go to template gallery - Confirm search box shows "plumbing" pre-filled and results are relevant - Clear the search, type something else → confirm it still works normally **Watch for:** Pre-fill not appearing, wrong industry shown, search not clearing properly
Preview toolbar decluttered — less-used actions moved to an overflow menu. **Where:** Client editor → top toolbar above the site preview **How to test:** - Open any site in the client editor - Confirm the toolbar looks cleaner with primary actions visible - Click the overflow menu (three dots or similar) → confirm secondary actions are there - Use actions from the overflow menu → confirm they work normally **Watch for:** Important actions hidden in overflow that should be primary, overflow menu not opening on mobile, actions disappearing entirely
Template gallery previews now adapt each block individually for a more accurate representation of the final design. **Where:** Client editor → template gallery → hover over a template to see its preview **How to test:** - Open the template gallery for any site - Hover over different templates → confirm preview popups render properly - Compare the preview to what you get after applying the template → should be close match - Try templates with different style categories (minimal, bold, etc.) **Watch for:** Preview showing blank/broken content, preview looking very different from applied result, hover preview flickering or not loading
Fixed several issues causing sites to fail during publish — icon aliases, static export errors. **Where:** Publish flow (client editor → Publish button → deploy to R2) **How to test:** - Pick any site in preview or extracted phase - Click Publish → confirm it completes without errors - Visit the deployed URL → confirm the site loads with correct icons and styling - Try publishing a second time (redeploy) → confirm it succeeds **Watch for:** Publish hanging or failing with vague errors, deployed site showing broken icons, CSS missing on published site
Editor detects text that's hard to read against its background and offers a one-click fix. **Where:** Client editor → when viewing the site preview, look for suggestion badges on low-contrast text **How to test:** - Open a site that has light text on a light background (or dark on dark) - Check if the editor surfaces a visibility warning/suggestion near the problematic text - Click the fix suggestion → confirm the text color updates to be readable - Verify the fix persists after page refresh **Watch for:** False positives on intentionally styled text (e.g., watermarks), suggestion not appearing on genuinely hard-to-read text, fix making text worse
You can now disagree with the AI during onboarding and it will update the blueprint on the spot. **Where:** Site creation wizard → AI chat → say something like "no that's wrong" or "actually we do X not Y" **How to test:** - Start a new site, let the AI make an assumption about your business - Correct it (e.g., "No, we're a B2B company, not B2C") - Check the brief/blueprint panel → confirm the correction is reflected immediately - Continue the conversation → confirm the AI uses the corrected info going forward **Watch for:** Correction not updating the blueprint, AI reverting to old assumption in later messages, brief panel showing stale data
Setup conversation remembers your decisions, stops repeating questions, and asks about location and existing website earlier. **Where:** Site creation wizard → the AI chat that gathers your business details **How to test:** - Start a new site → answer the first few questions - Confirm the AI doesn't re-ask something you already answered - Mention your location early → confirm it's captured in the brief - Mention an existing website → confirm it appears in the brief panel - Complete the flow → check the blueprint has location and website fields populated **Watch for:** AI still repeating questions, location/website not showing in brief, conversation going in circles
Fixed rendering issues with booking forms, help centers, and other interactive components. **Where:** Client editor → sites with runtime workflows (booking, help center, cart, etc.) **How to test:** - Open a site that has a booking form → confirm it renders and accepts input - Open a site with a help center → confirm FAQ accordion works - Open a site with a cart → confirm add-to-cart and checkout flow renders - Test on mobile viewport as well **Watch for:** Runtime components showing as blank, form submissions not going through, interactive elements unresponsive
Sites now support 17 built-in workflows: booking, help center, job applications, event registration, course enrollment, cart, and more. **Where:** Client portal → left rail navigation shows available workflows. Each has its own management view (e.g., Bookings, Help Center, Orders). **How to test:** - Open a site → check left rail for workflow-specific nav items (Bookings, Careers, Events, etc.) - Click into each workflow view → confirm CRUD works (create/edit/delete items) - Visit the published site → confirm the runtime component renders (e.g., booking form accepts submissions) - Submit a form on the published site → check the portal view for the submission **Watch for:** Workflow nav items missing for qualifying sites, CRUD operations failing, submissions not appearing in portal, runtime component blank on published site
Site editor assistant now greets by name, suggests relevant actions, and shares industry-specific expertise. **Where:** Client editor → AI assistant chat (bottom-right or side panel) **How to test:** - Open a restaurant site → open the assistant → confirm it mentions restaurant-relevant tips - Open a plumbing site → confirm different industry-specific suggestions - Check the welcome message includes the user's name (if available) - Ask "what should I do next?" → confirm suggestions are contextual to the site's current state **Watch for:** Generic suggestions that don't match the industry, assistant not knowing the site type, welcome message missing name or showing wrong name
Batch of 33 usability fixes: better status labels, clearer input hints, improved onboarding, template selection tweaks. **Where:** Across the entire client editor and onboarding flow **How to test:** - Walk through the full onboarding flow → check for clear labels, no confusing jargon - In the editor, look at status indicators (draft, published, etc.) → should be clear and consistent - Check input fields have helpful placeholder text/hints - Try template selection → labels and categories should make sense **Watch for:** Any remaining confusing labels, placeholder text that says "undefined" or is missing, status badges with wrong colors
Businesses can now have a careers page with job listings and application forms, managed from the portal. **Where:** Client portal → Careers in the left rail (only for sites where job_application workflow is active) **How to test:** - Open a site for a business that hires (e.g., a restaurant, agency) - Check left rail for "Careers" nav item - Create a job listing with title, description, requirements - Visit the published site → confirm the careers page shows the listing - Submit a test application → check the portal Careers view for the submission **Watch for:** Careers nav not appearing for qualifying businesses, job listing not showing on published site, application form validation errors, submissions not appearing in portal
Upload reference images and the AI generates designs inspired by their visual style, layout, and feel. **Where:** Site creation wizard → look for an "Inspire from Images" option or upload area during the design step **How to test:** - Start creating a new site - Upload 1-3 reference images (screenshots of sites you like) - Complete the wizard → confirm the generated design picks up visual cues from your references (color palette, layout style, mood) - Try with very different styles (minimalist vs. bold) → confirm output varies accordingly **Watch for:** Generated design ignoring the references entirely, upload failing silently, very slow processing without progress indication
Sites with payment features now support secure webhooks with step-by-step setup guides for Stripe and Razorpay. **Where:** Client portal → Settings → Payment settings (appears only for sites with payment features enabled) **How to test:** - Open a site that has payment collection enabled - Go to Settings → look for payment/webhook configuration - Confirm step-by-step instructions appear for the relevant provider (Stripe or Razorpay) - Webhook URLs should use the site's own subdomain - Verify webhook secret is required (not optional) **Watch for:** Setup guide showing wrong provider instructions, webhook URL pointing to wrong domain, ability to save without a webhook secret
Site generation now references a curated library of high-quality design patterns, resulting in more polished layouts. **Where:** No direct UI — affects the quality of AI-generated sites during generation, refinement, and page creation **How to test:** - Generate a new site for any industry → compare layout quality against older generated sites - Look for: better section composition, more consistent spacing, professional typography choices - Generate for different industries → confirm variety (a law firm shouldn't look like a restaurant) **Watch for:** All sites looking too similar (over-reliance on same patterns), generation taking noticeably longer, irrelevant design patterns leaking in
The site editor assistant is now backed by a 24-article knowledge base and remembers your preferences across sessions. **Where:** Client editor → AI assistant chat panel **How to test:** - Open the assistant and ask "how do I add a new page?" → should give a specific, accurate answer (not generic) - Ask an industry-specific question → confirm it references relevant knowledge - Make a preference statement ("I prefer minimal designs") → close and reopen → ask a design question → confirm it remembers - Ask something obscure → confirm it admits when it doesn't know instead of hallucinating **Watch for:** Generic/unhelpful answers to common questions, memory not persisting across sessions, assistant contradicting knowledge base articles