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