← Back

What's New

The latest updates and improvements to our platform.

Tuesday, May 19, 2026

New

Sell digital products with secure, expiring download links

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

Improved

Shipping labels are now permanently stored and always accessible

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.

Fixed

Shipping rate selected at checkout is always charged correctly

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

Fixed

Shop, cart, and checkout pages now show your site's header and footer

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

New

Shopping cart persists across devices and browsers

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

Fixed

Site thumbnails now match the actual content users see in the editor

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

Fixed

Store pages no longer auto-inject on sites without products

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

Fixed

Streaming progress works correctly across all long-running operations

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

Fixed

Variants editor no longer goes blank when filtering or removing options

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

Fixed

Version restore now applies to the correct design and refreshes the editor

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

New

WhatsApp AI replies now use interactive buttons and menus

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

New

WhatsApp Business onboarding via official Meta Embedded Signup

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

Fixed

WhatsApp Connect popup now opens reliably

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.

Monday, May 18, 2026

Fixed

AI assistant button stays in place on mobile

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.

Fixed

AI assistant no longer delegates back after you answer a clarifying question

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.

New

Campaigns now track leads and orders automatically

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.

Fixed

Ecommerce checkout and shipping reliability fixes

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.

Fixed

Fixed crash during business details step in site creation

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.

New

Live revenue figures on campaign cards

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

Improved

Marketing strategy matrix adapts to narrow screens

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.

New

Marketing Strategy Matrix: one audience map, every campaign

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.

Improved

Marketing Today tasks on the MC home screen

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.

New

Notifications bell in the site editor header

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.

Fixed

Published sites no longer appear in the Designs tab

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.

Fixed

Re-sending team invitations now works

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.

Fixed

WhatsApp AI replies no longer contain markdown symbols

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.

New

WhatsApp AI replies now use interactive buttons and lists

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.

Fixed

WhatsApp connect flow is more reliable on slower connections

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.

Sunday, May 17, 2026

Improved

AI-suggested color palettes in site wizard

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.

Fixed

Catalog filter reliability fixes

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.

New

Filterable product and listing catalogs with sidebar facets

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.

Improved

Industry-specific labels for trades and home-services sites

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.

New

Marketing Strategy Matrix with multi-channel campaigns

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.

Fixed

Marketing Strategy: navigation, CSV safety, and performance fixes

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.

Friday, May 15, 2026

Fixed

'Decide for me' button and question numbers restored in intake form

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

New

Add and manage product or service collections directly in the editor

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"

Fixed

Adding pages no longer fails on freshly generated sites

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

Improved

AI correctly updates multi-collection content like services and products in one edit

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

Fixed

AI follows the section you name in your message, not the one currently selected

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

Fixed

AI image replacements using stock photos now apply correctly every time

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

Fixed

AI now targets the correct section when refining specific parts of your site

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

Fixed

Automation, blueprint, and chat history features restored after API update

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

Improved

Blueprint progress overlay now shows rotating pro tips while your plan is being built

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

Fixed

Catalog collections and items now appear correctly after generating fashion, restaurant, and e-commerce sites

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

Improved

Catalog detail pages now match your site's design instead of using a generic layout

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

New

Catalog sites can now filter products, rooms, courses, and properties by attributes

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

Improved

Cloned sites now carry their catalog collections and content into the new copy

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

Collection detail pages now show the right item when two collections share a slug

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

Fixed

Design comparison screen no longer skips to the editor before you've chosen

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

Fixed

Editor no longer redirects back to the setup screen while a site is being generated

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

Fixed

Gallery image replacements are now instant instead of queued

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.

Improved

Image library groups now follow page section order

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

Improved

Image replacement now searches your library and stock photos before generating AI images

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

Fixed

Images inside links now show 'Replace image' quick-edit actions

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

Improved

Intake form answers for product lists and services now populate catalog collections

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

Fixed

Intake form answers now reliably save when you submit

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

Improved

Navigation menu stays stable during bulk edits — use AI Suggest to add missing pages

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

New

New Catalog tab in the design assistant for managing your product or service collections

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

Improved

Preview catalog detail pages in the editor before publishing

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

New

Product prices and stock levels update in real time on published catalog pages

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

Fixed

Regenerated images now appear in the preview immediately

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

Fixed

Replacing an image now works correctly on all site types

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

Fixed

Restoring a page now keeps its original position in your navigation menu

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

Fixed

Restoring a single page from version history no longer overwrites the rest of your site

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

Fixed

Site setup chat now asks one question at a time

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

Improved

Sites cloned from existing websites no longer carry the original brand's text

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

Improved

Template preview now opens a full live page with animations

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.

Fixed

Uploaded images now actually replace the hero, even on tricky sections

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

Version history now shows all changes in preview-phase variation editing

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.

Thursday, May 14, 2026

Improved

"+ New Site" goes straight to the chat — no name modal first

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

Fixed

Business location no longer accumulates duplicates in site setup wizard

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

New

Category landing pages are now auto-generated at publish

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

New

Category tree picker for assigning items to nested categories

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

Fixed

Changing an image no longer accidentally resets other content on the page

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

Fixed

Chat conversation continues even if site creation is temporarily blocked

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

Fixed

Chat empty state simplified to a single greeting — input field is now obvious

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

Fixed

Clearer error message when site generation fails or times out

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

Fixed

Cloned sites generate fresh designs and no longer reuse duplicate images

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

Improved

Cloning a site captures more accurate content from JavaScript-rendered pages

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

Fixed

Collection item detail panel now stays in sync with browser navigation

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

New

Collection Manager — categories, variants, drag-reorder, CSV export, AI brief-to-rows

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.

New

Confirmation prompt when a design change would affect many template pages at once

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

Improved

CSV import now remembers your column mapping from last time

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

Improved

Customer portal login, sessions, and email verification improvements

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

Fixed

Customer portal magic link, device recognition, and account creation fixes

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

New

Customer portal supports Google sign-in, magic links, and password login

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

Fixed

Design variation switching is more reliable and no longer gets stuck

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

Fixed

Disabled enrollment buttons now show correct gray color

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

Improved

Double-click text or images to edit them directly in the preview

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

New

Drag and drop to reorder items in your content collection

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

New

Edit collection fields inline without opening a detail panel

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

New

Export your content collection as a CSV

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

Fixed

Fashion, café, and wedding sites now generate products and catalogs correctly

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

New

Generate collection items from a plain text brief

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

Fixed

Generate now enabled as soon as a plan exists — no more blocking checklist

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

Fixed

Inline text editing no longer activates before the editor is ready

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

Improved

Intake form is now fully optional with pre-filled assets and cleaner sections

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

Improved

Intake form questions are now smarter and better prioritized

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

Fixed

Move-up / Move-down buttons restored in the Plan tab page list

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

New

New variants editor for managing product options like size and color

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