webhouse.appwebhouse.appdocs
13 releases · 1343+ changes

Changelog

Every release of @webhouse/cms from day one.

unreleased

Unreleased

Unreleased Changes

207 changes since v0.2.13

Features

  • feat: wire HelpCard learnMorePath links to docs.webhouse.app
  • feat: F109 Inline Proofreading + tab isolation fix
  • feat: add F117 MCP ↔ Chat Tool Parity to roadmap (Tier 2)
  • feat: F114 master memory — immutable product identity in every chat
  • feat: Visibility card on Dashboard with combined SEO + GEO score
  • feat: import preview with merge confirmation + timestamps in memory export
  • feat: F114 full chat export/import — portable ZIP archive
  • feat: F114 Phase 4 — memory import/export + conversation search
  • feat: F116 Contextual Help — HelpCard framework with 10 articles
  • feat: F114 Chat Memory — cross-conversation intelligence
  • feat: add F116 Contextual Help (HelpCard Framework) to feature roadmap
  • feat: F112 G05 — Visibility dashboard (SEO + GEO combined)
  • feat: F48 session — previewable flag, chat fixes, link translations tool
  • feat: rename Performance → AI Analytics, add Visibility page placeholder
  • feat: previewable flag on collections + Copy ID in chat history
  • feat: add F115 CMS Help Chat — product knowledge base for chat
  • feat: RSS feed generator — /feed.xml with configurable collections
  • feat: content search covers ALL data fields (tags, author, category, etc.)
  • feat: search_content now searches ALL content including media tags
  • feat: F112 G08 — GEO settings panel (robots.txt strategy, organization, API keys)
  • feat: Link translations tool in Properties + fix chat hydration error
  • feat: show thinking toggle in chat input area
  • feat: F112 G07 — GEO Optimizer agent for AI citation-friendly content
  • feat: F112 G04 — 5 new JSON-LD templates (HowTo, Service, Software, Breadcrumb, WebSite)
  • feat: F112 G02 UI — dual SEO + GEO score in panel and dashboard API
  • feat: F112 G02 — GEO score with 8 AI visibility rules + combined Visibility Score
  • feat: add F114 Chat Memory & Cross-Conversation Intelligence
  • feat: collection list — Preview in context menu + menu on grid cards
  • feat: create_document accepts locale parameter from chat AI
  • feat: F112 G03 — llms-full.txt + per-page .md markdown endpoints
  • feat: F112 G01 — smart robots.txt generator with 4 AI crawler strategies
  • feat: F48 final locale coverage — AI routes, SEO score, JSON-LD
  • feat: chat avatars use Gravatar + larger matching size
  • feat: side-by-side tabs for 3+ locales
  • feat: search_media returns locale-specific alt-text and captions
  • feat: force-change locale in Properties drawer + No locale indicator
  • feat: F48 chat i18n — auto-translate toggle + locale-aware chat
  • feat: chat create_document auto-translates to all configured locales
  • feat: thumbnail size control (S/M/L) in media action bar
  • feat: rotate images from media lightbox toolbar
  • feat: extend F104 with Fase 6 — Frontend Media UI Performance
  • feat: F63 audit as Sharp PNG billboard — 25 components, Illustrator-ready
  • feat: F63 audit SVG with 25 precise element screenshots via data-testid
  • feat: interactive translate auto-flips direction when language detected
  • feat: F80 selector-map.json + Playwright helpers + roadmap update
  • feat: F80 Admin Selector Map — 65 data-testid attributes across 17 files
  • feat: interactive translate detects actual language from HTML lang attr
  • feat: side-by-side for interactives — preview sibling alongside editor
  • feat: F63 component audit — Playwright screenshots + Sharp crops + SVG visual reference
  • feat: translate endpoint swaps interactive IDs to locale versions
  • feat: side-by-side always available — equal partners, no source concept
  • feat: restore stale banner as info-only (no re-translate button)
  • feat: showStaleTranslations site config toggle — OFF by default
  • feat: F48 translationGroup — bidirectional ID-based translation partners
  • feat: F27 backup includes cms.config.ts + feature markers for i18n compatibility
  • feat: interactives list view matches collection-list pattern exactly
  • feat: interactives list view uses table layout matching collections
  • feat: Interactive editor — locale switcher + download in menu
  • feat: F48 i18n — Interactive translation as first-class feature
  • feat: F48 i18n — Interactive translation
  • feat: F48 i18n — complete remaining features
  • feat: F13 Notification Channels — shared webhook dispatcher + wire all automations
  • feat: F48 i18n — upload auto-analyzes for all site locales
  • feat: F48 i18n — translate endpoint replaces image alt-text per locale
  • feat: F48 i18n — lightbox AI panel with per-locale caption/alt pills
  • feat: F48 i18n — per-locale media metadata + SEO translation
  • feat: F48 i18n — build.ts with DA/EN locale support + flag toggle
  • feat: F48 i18n — AI-generated translated slugs
  • feat: F48 i18n — locale switcher navigation + new document locale picker
  • feat: F48 i18n — localeStrategy setting + bulk locale on existing docs
  • feat: F48 i18n Phase 6 — SEO locale filter, header locale indicator
  • feat: F48 i18n Phase 5 — hreflang sitemap, locale URL prefixes, JSON-LD inLanguage
  • feat: F48 i18n Phase 4 — auto-translate on publish, bulk translate, chat tools
  • feat: F48 i18n Phase 3 — translate API, AI translation dialog, stale detection
  • feat: F48 i18n — Playwright E2E tests + dev-token auth fixes
  • feat: chat renders Edit/View pills on document references
  • feat: add build_site tool to chat — auto-build after content changes
  • feat: F48 i18n — collection list locale filter + translation badges
  • feat: chat thinking toggle + elapsed timer
  • feat: F48 i18n Phase 1+2 — locale foundation + AI locale-awareness
  • feat: F99 Phase A — test infrastructure framework
  • feat: rewrite F99 — test infrastructure framework + continuous coverage
  • feat: rewrite F48 i18n plan — full AI auto-translation, 6 phases, 18 files
  • feat: rename site from Sites dashboard dropdown menu
  • feat(F12): mark One-Click Publish as Done
  • feat(F42): mark Framework Boilerplates as Done

Bug Fixes

  • fix: MCP site-scoped key resolution — API key determines site, not cookies
  • fix: zoom controls larger — 28px buttons, 0.75rem percentage, text ±
  • fix: editor zoom tool uses CSS zoom instead of fontSize
  • fix: MCP session persistence — globalThis survives Next.js HMR
  • fix: rename Conversations → Chats, server-side chat search
  • fix: F116 HelpCard — always visible, collapsible instead of dismissible
  • fix: Edit pill uses SPA navigation — preserves chat session
  • fix: Edit pill navigates to doc with ?mode=admin to exit chat mode
  • fix: DocPill View uses correct endpoints + schema returns urlPrefix
  • fix: search_media includes user tags in results (was only showing AI tags)
  • fix: click outside Properties drawer to close it
  • fix: link famous/bekannte ski posts with shared translationGroup
  • fix: chat View pill resolves exact preview URL with locale + category
  • fix: document editor preview URL includes locale prefix
  • fix: chat preview base uses previewSiteUrl first, sirv as fallback
  • fix: grid context menu in title bar + preview available on all collections
  • fix: resolve preview base URL in both grid and list views
  • fix: collection status filter persisted in localStorage per collection
  • fix: build.ts reads locales from site config + chat preview uses locale prefix
  • fix: chat system prompt — NEVER create_document twice for translations
  • fix: chat avatar uses sessionStorage cache instead of fetching /api/auth/me
  • fix: chat user avatar reads from d.user.gravatarUrl (not d.gravatarUrl)
  • fix: chat avatar vertically centered with first tool call card
  • fix: chat page path includes category segment when collection has category field
  • fix: chat get_document resolves hierarchical URLs (categories in path)
  • fix: chat preview card respects previewSiteUrl — same fix as preview page
  • fix: preview respects previewSiteUrl — never overrides with sirv
  • fix: translate button spinner + flushSync error in richtext editor
  • fix: locale dropdown shows only locale code, interactives get locale on upload
  • fix: link traening/training ski pages with shared translationGroup
  • fix: ALL document creation paths always set locale
  • fix: chat SEO generation uses document locale, not site default
  • fix: translate endpoint stamps locale on source doc if missing
  • fix: chat create_document sets locale on creation for multi-locale sites
  • fix: rotate buttons grouped with border for visibility
  • fix: media grid uses ⋮ dropdown menu + rotate buttons show for all images
  • fix: pass thumbMinWidth to GridView + robust rotate button check
  • fix: auto-correct locale before rejection check
  • fix: interactive translate shows error toast + reloads on locale correction
  • fix: EN ski post uses EN interactive (ski-vinter-slideshow-en)
  • fix: use xlink:href for SVG images — Adobe Illustrator compatibility
  • fix: richtext editor skips onChange when content didn't actually change
  • fix: side-by-side button matches sibling link style exactly
  • fix: TipTap onCreate dispatch no longer triggers dirty flag
  • fix: key={doc.id} on DocumentEditor — fresh state on doc navigation
  • fix: side-by-side reads localStorage after hydration to avoid dirty flag
  • fix: side-by-side button always says 'Side-by-side', yellow when active
  • fix: side-by-side persists across navigation via localStorage
  • fix: side-by-side button matches sibling link height exactly
  • fix: move side-by-side button to translations bar, compact size
  • fix: Language section toggles now trigger settings dirty state
  • fix: side-by-side shows default-locale source on translation docs
  • fix: remove all stale translation code, auto-translate only with toggle
  • fix: auto-translate only on first publish, remove stale triangles
  • fix: remove stale banner, preserve status on re-translate
  • fix: stale banner — only on non-default-locale docs + persistent dismiss
  • fix: stale banner only shows when a sibling is actually newer
  • fix: re-translate uses correct targetLocale fallback + better error messages
  • fix: stale banner — dismiss button + no page refresh on re-translate
  • fix: Re-translate button calls translate API directly instead of opening dialog
  • fix: interactives remembers grid/list view in localStorage
  • fix: interactives page uses same 2rem padding as collection pages
  • fix: interactives context menu uses same style as sites cards
  • fix: Interactive grid — context menu always visible in info bar
  • fix: Interactive i18n — match document editor design + locale badges
  • fix: Interactive code editor was permanently read-only
  • fix: side-by-side uses FieldEditor with locked=true for identical rendering
  • fix: side-by-side — inline heading/code/link styles without prose class
  • fix: side-by-side — proper heading rendering + field alignment spacing
  • fix: side-by-side parses TipTap image title for float/width styling
  • fix: side-by-side renders markdown content with mini converter
  • fix: side-by-side source pane styling — prose class, better field types
  • fix: side-by-side uses server-provided source data instead of API fetch
  • fix: move side-by-side button to action bar for visibility
  • fix: upload AI analysis — log errors instead of silently swallowing
  • fix: AI metadata popover captures per-locale fields after re-analyze
  • fix: EN pages use canonical paths (/en/about/ not /en/about-en/)
  • fix: add gap between EXIF labels and values
  • fix: AI panel shows Analyze button when no AI data exists + reverse geocoding
  • fix: remove CopyField reference — use inline click-to-copy on ID
  • fix: copy button on ID in Properties panel + translation chain guard
  • fix: only source documents can create translations + copyable doc ID
  • fix: create_document strips reserved doc-level fields from data
  • fix: locale badge is read-only, not a dropdown selector
  • fix: hide "+ Add translation" when all locales are covered
  • fix: CreateTranslationDialog only shows available locales
  • fix: editor reads locales from siteConfig instead of cms.config.ts
  • fix: create_document validates and remaps field names to schema
  • fix: Edit pill opens in admin mode, not chat mode
  • fix: chat history saves complete conversation including AI response
  • fix: AI prompts use field names instead of labels for JSON keys
  • fix: show Live button for sites with previewUrl — fallback when no deployProductionUrl
  • fix: allow iframe embedding in Next.js boilerplates
  • fix: persist GitHub OAuth token as service token on site creation
  • fix: link webhouse.app in footer across all 3 boilerplates

Other Changes

  • docs: mark F109 Inline Proofreading as done (milestone #36)
  • docs: F31 session prompt — build docs.webhouse.app dogfooded on CMS
  • docs: complete rewrite of F31 Documentation Site plan
  • docs: mark F48 i18n as Done in roadmap
  • docs: MCP setup guide + tool parity analysis (MCP vs Chat)
  • chore: update pnpm-lock.yaml for minisearch dependency
  • chore: add pnpm clean to root package.json
  • chore: add clean script to cms-admin
  • docs: mark F112 GEO as Done in roadmap
  • docs: absorb G06 Index Checker into G05 Visibility Monitor
  • docs: update F112 GEO plan with all shipped features (RSS, llms-full, robots, GEO score, agents, settings)
  • docs: F48 i18n — mark as DONE with implementation summary
  • docs: update F112 GEO progress — 5 of 8 phases complete
  • docs: F114 — add token budget section, bump default aiChatMaxTokens to 16384
  • docs: mark F13 Notification Channels as done in roadmap
  • docs: mark F84 Move Site to Org as done
  • docs: comprehensive roadmap audit — mark 7 more features as done
  • docs: mark F42, F67, F79, F96, F97, F99 as done in roadmap
  • docs: mark F48 i18n as Done
  • docs: add F48 i18n requirements to 56 content-facing feature plans
  • content: add 10 ski vacation posts + fix scenario test doc field names
  • docs: add F99 testing requirements to F96 + exclude .md from NEXT_PUBLIC check
  • docs: add F99 testing requirements to all 107 feature plans
  • docs: move F83 Vibe Site Builder to Tier 2 top priority
  • docs(F93): add Phase 2 — OAuth provider integration for Vercel/Netlify
  • docs: mark F89 Post-Build Enrichment as Done
v0.2.13

Release v0.2.13

What's New in v0.2.13

619 changes released on 2026-03-28

Features

  • feat(F42): Next.js GitHub boilerplate — webhook revalidation + LiveRefresh
  • feat(F42): Next.js boilerplate — Next.js 16 + React 19 + Tailwind v4
  • feat(F42): static site boilerplate — complete starter template
  • feat: add F112 GEO Generative Engine Optimization (Tier 1)
  • feat: add F111 External Publishing to feature roadmap (Tier 2)
  • feat(F67): Discord notification on security gate failure + weekly scan
  • feat(F67): security gate — pre-commit hook, CI workflow, custom CMS scanner
  • feat(F79): site config validator — friendly errors, validate button, suggestion engine
  • feat(F96): interactive map preview in TipTap editor
  • feat(F96): add Map option to richtext media insert dropdown
  • feat(F96): embeddable maps — OSM/Leaflet map field type, richtext embed, interactive template
  • feat: ESC closes history drawer
  • feat: More menu on history items — Star, Rename, Delete
  • feat(F97): canonical URL, social preview, readability, rewrite-for-keyword, duplicate title detection
  • feat(F97): SEO dashboard tabs + keyword coverage on Dashboard card
  • feat(F97): complete SEO module — keyword tracker, JSON-LD templates, export
  • feat: delete conversations from history drawer
  • feat: restructure AI defaults panel to match model resolver
  • feat: F97 — SEO card on Dashboard + auto-generate OG images with Sharp
  • feat: AI-powered SEO auto-generation on document creation in chat
  • feat: configurable chat limits — model, max tokens, tool iterations
  • feat: increase chat limits — 25 tool iterations, 8192 max_tokens
  • feat: F97 Phase 2 — SEO Dashboard, bulk optimize, chat integration
  • feat: expose EXIF/GPS data in chat media tools
  • feat: add Phase 4 bulk tools — bulk_publish, bulk_update, schedule_publish
  • feat: empty_trash tool — permanently delete all trashed items
  • feat: arrow up on empty input recalls last user message
  • feat: F97 SEO Module Phase 1 — per-document SEO panel
  • feat: F102 schema drift auto-fix — remove orphaned fields from content
  • feat: Simple Blog build.ts renders !!INTERACTIVE and !!FILE embeds
  • feat: F110 Digital Island Apps — artifact cards in chat
  • feat: add F110 Digital Island Apps to feature roadmap
  • feat: file type validation + AI knows about upload capabilities
  • feat: Media tags — comma to add tag + paste comma-separated list
  • feat: mark F103 AI Image Analysis as Done
  • feat: server-side PDF and Word text extraction for chat uploads
  • feat: Claude Desktop-style input — textarea top, buttons bottom row
  • feat: upload CSV, Markdown, Word, PowerPoint, PDF, HTML in chat
  • feat: cancel button on building preview cards
  • feat: AI Chat tools tab in Help & Support drawer
  • feat: history drawer from left side + Danish datetime format
  • feat: rename conversations in history panel
  • feat: 15 new chat tools — calendar, agents, curation, deploy, more
  • feat: image upload in chat — + button and drag & drop
  • feat: update_site_settings tool — change settings via chat
  • feat: rename 'View schema' to 'Site info' — broader and friendlier
  • feat: add 'What can you do?' and 'Edit a page' to welcome screen
  • feat: F107 Phase 3 — Inline edit forms in chat
  • feat: mark F102 Schema Drift Detection as Done
  • feat: F102 Schema Drift Detection — warns when content has fields missing from schema
  • feat: mark F106 + F108 as Done, F108 shipped 2026-03-27
  • feat: teach chat AI about image sizing and float in richtext
  • feat: add F109 Inline Proofreading to feature roadmap
  • feat: F108 Rich Text Editor Enhancements
  • feat: media library tools — list_media + search_media for chat
  • feat: include draft documents in preview builds with visible DRAFT banner
  • feat: add F108 Rich Text Editor Enhancements to roadmap
  • feat: table context toolbar — add/delete rows, columns, and table
  • feat: branded 404 page with real SVG wordmark logo and favicon
  • feat: copy buttons, branded 404 page, preview path fix
  • feat: page preview cards in chat — iframe preview of actual pages
  • feat: rich markdown rendering in chat messages
  • feat: F107 Phase 2 — Create & Edit via chat
  • feat: support both Ctrl+Shift+C and Cmd+Shift+. for chat toggle
  • feat: add Chat shortcuts to Help & Support keyboard shortcuts list
  • feat: F106 TipTap v3 upgrade (2.27→3.20)
  • feat: F107 Chat with Your Site — Phase 1 (read & search)
  • feat: add F107 Chat with Your Site to feature roadmap
  • feat: add F106 TipTap v3 Upgrade to roadmap (Tier 1)
  • feat: user tags on media files — add, remove, filter, search
  • feat: media sort, search improvements, hide variants, remove folder upload
  • feat: F44 configurable media processing settings + mark F44 as Done
  • feat: add F105 Voice Module to feature roadmap
  • feat: add clear (X) button to media search field
  • feat: Cmd+K media results navigate to filtered view, inline search matches AI metadata
  • feat: AI image analysis runs automatically on upload (non-blocking)
  • feat: Cmd+K searches media by EXIF + AI metadata
  • feat: Analyze/Optimize on selected media + hide dotfiles from Media Library
  • feat: F44 complete — auto WebP on upload, Optimize All button, EXIF persistence, enrichment
  • feat: EXIF data panel in Media Library lightbox
  • feat: build.ts renders markdown + auto-upgrades images to WebP
  • feat: F44 Phase 2 — Media Library filter, build.ts, EXIF extraction
  • feat: add F104 Performance & Data Optimization to feature roadmap
  • feat: enriched scheduler notifications — org, site, title, instance
  • feat: multi-select in Media — select files and bulk delete
  • feat: F44 Media Processing Pipeline — Sharp + WebP variants + batch optimization
  • feat: F103 video analysis + video thumbnails + media improvements
  • feat: video thumbnails + video playback in Media lightbox
  • feat: Apply alt-text button in AI popover + auto-fill on insert
  • feat: AI Image overwrite setting in Org Settings + inheritance
  • feat: AI Image Analysis — filter, overwrite setting, org hoist
  • feat: F103 complete — batch analyze, grid badges, editor auto-fill
  • feat: add AI metadata panel to Media lightbox zoom view
  • feat: auto-slug from title for drafts + "Update from title" button
  • feat: AI chat is field-type-aware — generates titles for text fields
  • feat: implement F103 AI Image Analysis — foundation + UI integration
  • feat: add F103 AI Image Analysis to feature roadmap (Tier 1)
  • feat: add Source toggle button to rich text editor
  • feat: add Export JSON button to Link Checker
  • feat: extend Link Checker with broken image detection (F16)
  • feat: F84 Move Site to Other Organization
  • feat: color temperature themes — 6 themes via dual-axis selector
  • feat: screenshot cache for grid view + No Preview for collections without pages
  • feat: F102 Schema Drift Detection — plan doc + roadmap
  • feat: add Grid/List view toggle to all collection pages
  • feat: F87 badges — "configured" in Org Settings, "inherited from X" in Site Settings
  • feat: F87 Phase 2 — full Org Settings UI + AI config integration
  • feat: expand F87 scope — AI keys, web search, automation, webhooks, MCP, GitHub token
  • feat: add F101 Update Manager to feature roadmap
  • feat: implement F87 Org-Level Global Settings
  • feat: add Feature Implementation Process to CLAUDE.md + F87 test suite (38 tests)
  • feat: add F100 Custom Domain DNS Validation to roadmap
  • feat: Fly.io org auto-detection + org field in deploy settings
  • feat: add F99 End-to-End Testing Suite to feature roadmap
  • feat: implement Fly.io deploy provider (F12)
  • feat: branded README for auto-created GitHub repos
  • feat: site intro card with sirv fallback — always shows preview
  • feat: Dashboard intro card — site thumbnail + name + preview link
  • feat: richtext features whitelist + default CSS for all elements
  • feat: builtin blocks for all field types — text, richtext, image, tags, etc.
  • feat: Add Block picker — type-ahead search + scrollable dropdown
  • feat: F75 AI Site Builder Guide — split monolithic CLAUDE.md into 20 modules
  • feat: add F98 Performance Audit (Lighthouse) to roadmap (Tier 2)
  • feat: F91 Login with GitHub — sign in via GitHub OAuth
  • feat: update Bridgeberg example with Christian Broberg's real profile and projects
  • feat: F89 × F97 — _seo fields as first-class enrichment input
  • feat: add F97 SEO Module to roadmap (Tier 1)
  • feat: add F96 Embeddable Maps to feature roadmap (Tier 1)
  • feat: add F95 Cloud Backup Providers to roadmap (Tier 2)
  • feat: F89 Post-Build Enrichment — auto SEO, OG, JSON-LD, sitemap, robots.txt, llms.txt
  • feat: add F94 Favorites to roadmap (Tier 2)
  • feat: add /api/cms/heartbeat endpoint + major OpenAPI spec update
  • feat: functional site filters — All, Local, GitHub, Live
  • feat: preview button becomes dropdown when site has live URL
  • feat: org switch → Sites overview when org has 2+ sites
  • feat: add F93 Next.js App Deployment to feature roadmap
  • feat: separate deploy/ dir from dist/ — preview always works
  • feat: Connect GitHub button in Deploy tab + hasGitHubToken check
  • feat: add F92 Desktop PWA to roadmap (Tier 2)
  • feat: add F90 Marketing Content Bank + F91 Login with GitHub
  • feat: health dots on Sites dashboard cards
  • feat: health dots for all sites in dropdown — batch health check
  • feat: add Bridgeberg static example site — monospace developer blog/portfolio
  • feat: F86 — migrate interactives list to shared ActionBar
  • feat: add F89 Post-Build Enrichment to feature roadmap (Tier 1)
  • feat: deploy toast on auto-deploy — shows progress and result
  • feat: F86 Phase 2 — document editor, agents, interactives use ActionBar
  • feat: custom domain support for GitHub Pages deploys
  • feat: add Deploy tab to Site Settings — status, history, manual deploy
  • feat: auto-deploy on save — rebuild and push to GitHub Pages when content changes
  • feat: auto-create GitHub repo for filesystem static sites
  • feat: GitHub Pages deploy — build static HTML → push to gh-pages
  • feat: zero-config deploy for GitHub-backed sites + Get token links
  • feat: GitHub Pages auto-enable + friendly error messages
  • feat: production URL field in deploy config
  • feat: deploy provider compatibility warnings + docs link
  • feat: F12 One-Click Deploy — provider config + deploy button + API
  • feat: add F88 MCP Server Validation to feature roadmap
  • feat: JSON pill toggle + copy button on MCP server config
  • feat: copy-to-clipboard buttons on settings input fields
  • feat: wrap AI, AI Defaults, AI Prompts panels in SettingsCard
  • feat: SettingsCard component + wrap Automation and Email panels
  • feat: add F87 Org-Level Global Settings to feature roadmap
  • feat: actionable commands in ⌘K command palette
  • feat: org switching from command palette
  • feat: all Settings tabs searchable in command palette
  • feat: Save button shows dimmed/Unsaved state based on dirty tracking
  • feat: unified Save in ActionBar for all Settings tabs + Cockpit + Agent
  • feat: move Save to ActionBar on Cockpit + Agent detail
  • feat: F86 ActionBar rollout across all admin pages
  • feat: F86 ActionBar component + first adoption on Backup page
  • feat: add F86 Action Bar to feature roadmap
  • feat: send test button on each webhook + remove old scheduler notifs
  • feat: Automation tab with per-job webhook lists + link checker time
  • feat: site switching from ⌘K command palette
  • feat: "c" keyboard shortcut to close active tab
  • feat: preview button in header bar with keyboard shortcut (p)
  • feat: dynamic browser title + tools scheduler execution
  • feat: calendar event types for Backup & Link Check + schedule settings
  • feat: add F85 CC Hooks & Quality Gates to feature roadmap
  • feat: add Tools sidebar group with Backup & Restore (F27)
  • feat: delete organization with confirmation dialog
  • feat: org-level sidebar for empty orgs — Sites + Org Settings only
  • feat: /admin/organizations/settings — Supabase-style org settings
  • feat: dedicated /admin/organizations/new route with Name, Type, Plan
  • feat: /admin/organizations page — grid view of all orgs
  • feat: F76 Create New Organization
  • feat: add F84 Move Site to Organization to roadmap (Tier 2)
  • feat: click thumbnail to edit URL in image gallery
  • feat: add Impact Analysis section to /feature skill
  • feat: auto-rebuild static sites on Save
  • feat: Rebuild + Reload buttons in preview toolbar
  • feat: add Browse Media + Add URL to image gallery editor
  • feat: add F83 Vibe Site Builder to roadmap (Tier 1)
  • feat: add AURA. luxury fashion boutique static template
  • feat: add F82 Loaders & Spinners to roadmap (Tier 2)
  • feat: native Browse button + drag & drop for site import
  • feat: Import from folder on New Site page
  • feat: add F81 Homepage Designation to roadmap (Tier 2)
  • feat: F78 preview server — sirv-based static file server for dist/
  • feat: built-in static site preview server (F78 core)
  • feat: add F80 Admin Selector Map to roadmap (Tier 1)
  • feat: add install-site.sh script for registering static sites in CMS admin
  • feat: add F79 Site Config Validator + fix portfolio-squared to read all content from JSON
  • feat: add missing pages JSON content to all 5 static templates
  • feat: add F78 Bundled Preview Server to roadmap (Tier 1)
  • feat: add F77 Middleware to Proxy Migration to roadmap (Tier 1)
  • feat: add F76 Create New Organization to roadmap (Tier 1)
  • feat: add 5 static website templates (portfolio, agency, blog, studio, freelancer)
  • feat: add F75 AI Site Builder Guide (Modular Docs) to roadmap (Tier 1)
  • feat: add F73 Troubleshooting Guide + F74 System Status Page to roadmap
  • feat: context-aware tab icons matching sidebar + hide status dot on non-document tabs
  • feat: add F72 Website Screenshots to roadmap (Tier 2)
  • feat: 'h' keyboard shortcut for Help drawer (in addition to '?')
  • feat: Help drawer with tabbed Help + Shortcuts pages
  • feat: Help & Support drawer with docs, community, and keyboard shortcuts
  • feat: 't' keyboard shortcut to open new tab
  • feat: add F68-F71 — Shop, Social Media, Managed SaaS, Multi-Player
  • feat: add View Landing Page to command palette (opens in new tab)
  • feat: add debug and local login flow tests with detailed logging

Bug Fixes

  • fix: exclude boilerplates from pnpm workspace + Discord only on failure
  • fix: add .gitleaks.toml — suppress test file false positives
  • fix: gitignore deploy output, WebP variants, revisions, example uploads
  • fix: internal link search uses collection name as URL fallback
  • fix(F96): map embed geocodes address with Nominatim + renders Leaflet map
  • fix: JSON-LD hides duplicate fields, chat creates full _seo with score + OG image
  • fix: harmonize + and send button sizes — both 32px circular
  • fix: row menu uses fixed positioning to avoid overflow clipping
  • fix: React key warning on keyword tracker list — Fragment needs key, not child tr
  • fix: dashboard media count excludes WebP variants and dotfiles
  • fix: cap chat limits — max 32768 tokens, max 50 tool iterations
  • fix: OG image generator — auto-rotate based on EXIF before resize
  • fix: SEO Save button — visual feedback (Saving… → Saved ✓ → Save)
  • fix: invisible scrollbar globally — visible only on hover
  • fix: hidden scrollbar on main content + purple dot for scheduled docs
  • fix: SEO uses configurable aiContentModel instead of hardcoded Haiku
  • fix: remove min-h-screen from Media + Interactives — no forced scrollbar
  • fix: remove min-h-screen from Link Checker — caused unnecessary scrollbar
  • fix: apply overflow-y:overlay to sidebar-inset (main content area)
  • fix: use overflow-y:overlay — scrollbar floats over content, no shift
  • fix: scrollbar-gutter:stable prevents layout shift between pages
  • fix: remove flex:1 + overflowY from SEO content wrapper
  • fix: SEO page uses fragment wrapper like all other pages
  • fix: Optimize All button in ActionBar actions slot (right side)
  • fix: Optimize All button — variant="primary" to match Link Checker
  • fix: SEO dashboard — status dot indicator on each document
  • fix: SEO dashboard — use ActionButton for Optimize All, add Tools breadcrumb
  • fix: SEO tab title shows "SEO" not "seo"
  • fix: bulk SEO optimize — use doc.id not doc.slug for cms.content.update
  • fix: grid view builds with drafts before serving previews
  • fix: grid view always attempts preview — fallback to //
  • fix: eliminate Edge Runtime compile warnings from instrumentation
  • fix: meta description textarea taller (100px min) to show 160 chars
  • fix: SEO check messages — actionable, tell you exactly what to do
  • fix: include field name in SEO score messages
  • fix: restore 120-160 char requirement, fix AI prompt to hit target
  • fix: lower meta description minimum from 120 to 70 chars
  • fix: always re-extract OG image on AI optimize
  • fix: OG image extraction — only accept valid /uploads/ paths
  • fix: hide broken OG image preview — onError hides the img element
  • fix: OG image extraction — only capture URL, not markdown title attr
  • fix: AI Optimize auto-fills OG image from content
  • fix: list_trash now includes media files, not just documents
  • fix: SEO panel — Save button, auto-save after AI, better prompt, collapsible preview
  • fix: unescaped backtick in system prompt caused "uploads is not defined"
  • fix: SEO panel — lastOptimized flag + re-optimize warning + save reminder
  • fix: use CustomSelect for robots directive in SEO panel
  • fix: SEO panel renders as fixed sidebar drawer (same as Properties)
  • fix: respect devInspector site setting — only render DevInspector when enabled
  • fix: dynamic import getDocumentUrl to prevent Turbopack crash
  • fix: dynamic import pdf-parse and mammoth to prevent Turbopack crash
  • fix: wrap chat init in try-catch with descriptive error message
  • fix: schema drift fix — use direct file writes instead of cms.content.update
  • fix: auto-resize interactive iframes to content height
  • fix: interactive thumbnails — add allow-same-origin to sandbox
  • fix: interactive iframe path — /uploads/interactives/ not /interactives/
  • fix: add immediatelyRender: false to TipTap useEditor for SSR
  • fix: artifact card injects tag for relative image URLs
  • fix: Command Palette media results pass search term to Media filter
  • fix: Command Palette search includes user-defined media tags
  • fix: import pdf-parse/lib/pdf-parse.js to skip test file loader
  • fix: static import of pdf-parse — Turbopack requires top-level import
  • fix: pdf-parse + mammoth in root deps + robust import strategies
  • fix: Empty Trash — race condition + missing file tolerance
  • fix: dedicated /api/extract-text endpoint for PDF/DOCX extraction
  • fix: inline PDF/DOCX extraction with require() in upload route
  • fix: use createRequire for pdf-parse (CJS module in Turbopack)
  • fix: PDF extraction working — pdf-parse v1 + logging + border fix
  • fix: larger send button — 40px circle with 18px icon
  • fix: send button always gold circle — visible when empty (30% opacity)
  • fix: restore exact original send button style
  • fix: send button always gold circle, dims when empty
  • fix: restore send button to 32px with 16px icon
  • fix: align message list with chat input — same maxWidth + padding
  • fix:   entities decoded + preview cards share single build
  • fix: history titles wrap to max 2 lines, edit button always aligned
  • fix: widen history drawer from 300px to 400px
  • fix: bot avatar aligned with tool cards (marginTop 2px for assistant)
  • fix: pixel-center icons in tool call cards
  • fix: pixel-center avatars with first line of text
  • fix: strict guardrail — only use image URLs from tool results
  • fix: remove immediatelyRender:false to eliminate flushSync warning
  • fix: suppress flushSync warning — add shouldRerenderOnTransaction: false
  • fix: all content is Markdown — never generate HTML
  • fix: teach AI to detect richtext format (HTML vs Markdown)
  • fix: preview build works for all sites + fresh server restart
  • fix: add CSS for highlight marks, underline, sup/sub, text-align
  • fix: preview button opens in new window when in chat mode
  • fix: move New + History buttons into AdminHeader (always visible)
  • fix: prevent duplicate text output in chat
  • fix: preview card rebuilds site before showing iframe
  • fix: chat toolbar (+ New / History) is now sticky at top
  • fix: 404 page — transparent logo (no white bg), fix Turbopack error
  • fix: use getDocumentUrl from routing resolver for preview paths
  • fix: preview path resolves against actual dist/ files
  • fix: remove webpack config — incompatible with Turbopack
  • fix: tabs system no longer hijacks navigation after site switch
  • fix: re-focus chat input when AI finishes responding
  • fix: Cmd+S stale closure — save was using old doc.data
  • fix: chat input text scrolled out of view
  • fix: make chat input placeholder text more visible
  • fix: auto-focus chat input when switching to chat mode
  • fix: chat input — auto-focus on mount + fix invisible text color
  • fix: simplify RTE value sync — no guards, just compare and set
  • fix: RTE sync — compare with actual editor content, not last emitted
  • fix: use globalThis for doc state cache — survives HMR module re-eval
  • fix: module-level doc state cache survives tab navigation
  • fix: prevent content loss — remove router.refresh + ignore dist/ in webpack watcher
  • fix: hide sidebar in chat mode
  • fix: stronger guard against content overwrite on save/build
  • fix: prevent content loss on save — skip round-trip setContent
  • fix: Cmd+Shift+S no longer triggers save — only strikethrough
  • fix: cache session user in sessionStorage to prevent avatar flash
  • fix: toolbar state reactivity for TipTap v3
  • fix: change chat toggle shortcut to Cmd+Shift+. (avoids Chrome DevTools)
  • fix: wrap chat mode in TabsProvider to prevent useTabs crash
  • fix: image picker dialog — paginated (50 at a time) + fixed height
  • fix: clearfix on richtext editor so floated images don't overflow
  • fix: images contained within richtext editor bounds
  • fix: clear ?q= from URL after reading initial media search param
  • fix: batch AI analyze skips optimized variants, respects selection
  • fix: make Media sidebar sticky when scrolling through files
  • fix: AI popover shows "Applied ✓" when alt-text already matches
  • fix: Tools menu in sidebar defaults to closed
  • fix: headings clear floated images, more bottom padding on floats
  • fix: add padding on text-side of floated images, not opposite side
  • fix: prevent bullets from overlapping floated images (overflow:hidden)
  • fix: build.ts converts image title attributes to inline styles
  • fix: filter WebP variants at load time — all counts now exclude generated files
  • fix: auto-rotate images based on EXIF orientation before generating WebP variants
  • fix: create content/ and public/uploads/ when adding a filesystem site
  • fix: clean preview URLs — use encodeURI instead of encodeURIComponent
  • fix: preview page preserves path when re-resolving sirv base URL
  • fix: skip category path segment when it matches urlPrefix
  • fix: refresh AI analyzed count when closing media lightbox
  • fix: rename "Organization settings" to "Settings" on org card menu
  • fix: media type counts respect active folder, AI, and search filters
  • fix: trigger site rebuild after slug rename in Properties panel
  • fix: tags-input paste support — split comma-separated text into tags
  • fix: switch F103 image analysis to Anthropic-first, drop Google dependency
  • fix: richtext toolbar always sticky, including inside blocks
  • fix: Link Checker incorrectly flagging linked-images as broken links
  • fix: flushSync error when toggling Source view in richtext editor
  • fix: Add Block dropdown opens upward when near bottom of viewport
  • fix: hydration mismatch — read localStorage in useEffect, not useState
  • fix: grid view probes URLs before showing iframe, hides 404 pages
  • fix: site activation uses window.location.href — eliminates router.push race condition
  • fix: org switch uses sessionStorage flag to prevent tab restoration
  • fix: org switch clears active site — always land on Sites page clean
  • fix: org switch always lands on /admin/sites — never stale routes
  • fix: Move Site navigates to /admin immediately — prevents 404 from stale tab routes
  • fix: widen Move Site org selector (min-width 200px) for long org names
  • fix: use CustomSelect for Move Site org dropdown — never native