Changelog
v1.0.0All notable changes to XAIO are documented here.
Unlimited custom domains on paid plans
Website Builder Pro, Web App Builder and Platform Builder now include unlimited custom domains (Website Builder One keeps one). Connect as many of your own domains as you need — no per-domain limit.
Unlimited xaio.app subdomains on every plan
Every plan — including Free — can now publish to unlimited yourname.xaio.app subdomains. Free sites carry a "Built with XAIO" badge, which paid plans can remove.
Convert a Web App back to a Website
You can now switch a project from a Web App back to a simple Website. The change is blocked while a backend is still active, so you never lose connected data by accident.
Platform Builder marked as coming soon
The Platform Builder plan is now clearly labeled 'Coming soon' with its planned availability date. You can still explore the card, and choosing it opens a short note instead of starting checkout.
Clearer plan cards: unlimited domains and a free-plan badge
Plan cards now spell out unlimited custom and xaio.app domains where they apply, and the free plan clearly shows unlimited xaio.app domains plus the 'Built with XAIO' badge so you know exactly what's included.
Build web apps on every plan
You can now create web apps on any plan. Projects switch automatically between Website and Web App when you add or remove a backend integration, so you no longer manage the type by hand. Backend hosting and publishing remain part of the higher plans.
Upgrade prompts only when you need them
Backend and custom-domain options now stay visible but show a clear upgrade badge if your plan can't use them yet, with one click to the pricing page. The redundant upgrade banner that always sat at the top of the Backend tab is gone, and you'll only see the prompt when you try to publish.
Suggestion chips return after edits
After the AI edited your files, the follow-up suggestion chips stopped appearing. They now show up again to help you decide what to do next.
Available task balance shown correctly after a new period
On the free plan your available tasks now correctly reflect the monthly reset, so you no longer see a balance of zero once your period has rolled over.
Apps no longer lose their styling after a rebuild
Fixed a problem where your custom global styles could vanish when the app was regenerated, leaving the preview unstyled. Your styling now stays applied reliably.
Backend features now respect your plan
Adding a backend or database now requires a plan that supports backend hosting. If your plan doesn't, the chat clearly asks you to upgrade instead of failing silently.
Design Mode reference always shown and clickable
When you select an element in Design Mode, the chat now always shows which element you targeted, and clicking the reference opens the right file instead of getting stuck loading.
Sharper AI-generated social preview images
When you generate a social/preview image with AI, it now reflects your app's actual content and brand colors instead of a generic look. The result matches what your app is really about.
Preview toolbar shows up reliably
The preview toolbar buttons (design mode, console, reload, open in new tab) now reliably appear once your preview is rendered, instead of occasionally staying hidden for the whole session.
Plan changes now sync reliably
Fixed an issue where upgrading, downgrading, or cancelling a subscription could silently fail to update your plan and features. Your current plan now always reflects your latest billing change.
Team collaboration and external version control on Pro and higher
Inviting teammates to a project and connecting your own external Git repository are now available from the Pro plan upward. If you move to a lower plan, collaborators and external repo connections are removed automatically.
Backend hosting tied to your plan
Apps with a backend can now be hosted on the Web App Builder and Platform plans. If you leave Platform but keep backend hosting, larger instances are automatically scaled down to the Business size that Web App Builder includes.
Pricing page reflects your real plan limits
Plan cards now show accurate, up-to-date AI task allowances, domain limits and team-member counts straight from your plan, and we removed features that weren't actually offered. Hosting tiers are also shown more clearly per plan.
Redesigned tab navigation and fuller bilingual support
The top tab bar has a cleaner look with labels appearing on hover and smooth animations. The environment, integrations and database views are now fully translated in English and German, and database tables refresh automatically after the chat makes changes.
No more duplicate replies on a new project
When you started a new project, the first message sometimes triggered two replies and two questionnaires. New projects now start with a single, clean response.
See your actual thinking-token usage
The usage tooltip now shows the reasoning tokens actually used for your request instead of a fixed budget, and correctly labels the model provider.
Fairer pricing for non-Claude models
Chats using DeepSeek or Gemini were being charged at the higher Claude rate. They are now billed at each model's real price, so you only pay for what you actually use.
Plan and questionnaire cards show up again
The interactive plan and questionnaire cards sometimes failed to appear in the chat. They now render reliably so you can review plans and answer questions as intended.
The AI now thinks before it answers
Across all models, the AI reasons through your request before responding, leading to more reliable plans and edits. You can see when it was thinking right in the message details.
Clearer messages when a backend fails to start
If your app's backend doesn't come up during a deploy, you now see a concrete reason (out of memory, crash, stuck) instead of a vague timeout, and the deploy stops faster rather than waiting it out.
Publishing no longer fails late over a cache hiccup
A glitch while refreshing the CDN cache could abort a publish near the end even though your site was already live. Now your publish succeeds and you simply get a heads-up that the cache may take a moment to update.
Calmer, clearer loading experience
Starting a workspace now shows a calm progress indicator with a 'Workspace starting' cover and an elapsed / ~15s countdown, with a gentle 'taking longer than usual' note past 15 seconds. Previews fade in smoothly and reopening an already-running workspace no longer flashes a loading screen.
@help now works everywhere
Asking @help in the chat now reliably returns documentation answers, instead of coming back empty in some cases.
New model: DeepSeek V4 Pro
You can now choose DeepSeek V4 Pro as a model for your chats, giving you another option for building and editing your app.
More chat models to choose from
The model picker now includes DeepSeek V4 Pro and Opus 4.8, and shows the exact model variant you've selected (for example Sonnet 4.6 or Gemini 3.5 Flash) rather than just the brand.
Product announcements and updates
You now receive helpful product announcements, like new features and important notices, as polished emails or directly inside the app.
Your selected model is now respected
When you picked a specific Claude model, the chat sometimes still ran on a different one. Your choice is now always used and billed correctly.
Redesigned emails with a new look
All transactional emails, from sign-up and invites to invoices and notifications, now share a clean, consistent design with a bold hero banner and clear call-to-action buttons.
Previews no longer break on brief restarts
A short, momentary hiccup while your preview was starting up could leave it stuck on a "server not responding" error. Your preview now rides out these brief blips and stays available.
Plan and Ask modes in chat
Use plan mode to have the AI map out the work before making any changes, or ask mode to get answers about your project without touching your files. Both keep the AI strictly read-only.
In-app announcement banners
Important announcements now appear in a banner at the top of your workspace. High-priority messages stand out, longer messages can be scrolled, and you can mark them as read or dismiss them.
Cleaner questionnaires
Questions no longer add a redundant "Decide for me" option. Just leave a question blank and we'll decide for you.
Collaborators see all branches again
The branch list could appear empty for collaborators. It now always loads the current branches from your repository.
Deleting an environment variable now sticks
Removing a variable in the Environment tab now saves correctly, instead of the deleted entry quietly reappearing a moment later.
Crash alerts for your published apps
If a published app starts crash-looping and is automatically stopped to protect it, you now receive an email so you know to take a look.
Queued messages keep their images
Images attached to a message you queue while the assistant is still working are no longer dropped — they're now sent along with the message.
Clear errors when branches can't be loaded
If your Git branches can't be fetched (for example due to a credential problem), you now see a clear error instead of a silently empty branch list.
Export all your app's data
You can now download a complete export of your app's database and uploaded files as a single ZIP. Useful for backups and for your GDPR data-portability obligations.
Cancel a questionnaire mid-answer
When the assistant asks a set of questions, you can now cancel out of it. Cancelling lets the assistant decide for you and continue, so you're never stuck answering.
Message actions stay available while generating
The Edit, Copy and other actions on your messages are now always visible, including while a response is being generated. Copy stays usable, while edit is briefly unavailable mid-generation with a clear tooltip.
Rate AI responses with thumbs up or down
Rate any AI response with a thumbs up or down, and optionally leave a short comment. Your feedback helps us improve answer quality over time.
Redesigned team message banner
Direct messages from teammates now appear in a clearer, stacked layout — sender, the related project (one click to open) and a relative timestamp ("just now", "2 hours ago"). Links are clickable and open in a new tab, line breaks are preserved, and long messages scroll inside the banner.
Email alert when a published app keeps crashing
If one of your published apps repeatedly crashes on startup, XAIO now detects the crash loop, stops restarting it, and emails you so you can step in and fix it.
Team direct messages and @-mentions
Mention a teammate with @name in a project chat to send them a private direct message. They receive a notification banner and can reply inline. The @-command menu was redesigned for quicker access to mentions and commands.
Ask mode for read-only questions
A new Ask mode lets you ask questions about your project without triggering any code changes — ideal for understanding your app or planning next steps. The separate Plan mode has been removed; build plans still appear automatically when the AI needs your confirmation.
Private hosting for published apps
Purchase dedicated private hosting for an individual published app, with a one-time 6-hour free test phase per project so you can try it before buying. Existing Power apps can be migrated to the new hosting on a clear timeline.
Notification message center
A slim message banner now sits above the workspace and project list, surfacing important notices — hosting reminders, team messages — one at a time. Acknowledge or dismiss them with a click.
Language preference saved to your account
Your interface language (German or English) is now saved to your account and applied everywhere, including all emails and server messages.
Keep database and export data when unpublishing
When unpublishing an app you can now choose to keep its database, and export all of your data in a GDPR-compliant way so nothing is lost.
Claude Opus 4.8 in the model picker
Claude Opus 4.8, the most capable Claude model, is now selectable in the chat model picker.
Automatic commits pushed to your GitHub repo
When you have a GitHub repository connected, the automatic commits made by the AI are now pushed to your repo, keeping your history in sync.
Faster reopening of running projects
Reopening a project whose workspace is still warm is now noticeably faster, skipping unnecessary startup steps.
Real-time publish progress
Publishing now streams its progress live over a websocket instead of polling, so the publish dialog and button update instantly and reliably.
More reliable handling of large PDFs
The chat handles large PDFs more reliably now, with dedicated read modes and protection against truncating big documents.
Simpler project questionnaire
The initial project questionnaire now always offers a free-text answer and drops the "decide for me" option for a clearer flow.
Reliable balance top-ups
Fixed a Stripe webhook crash and a missing balance top-up grant, so balance top-ups are now credited reliably.
Richer plan cards with per-task details
Plan cards now show an expandable description for each task and replace "Done when" with actionable "How to validate" guidance.
Static pre-rendering (SSG) for web apps
Web app projects can now selectively pre-render pages as static HTML (SSG) via a simple router convention, improving load times and search engine indexing.
Push button for new branches
The source control panel now shows a Push button for newly created branches that are not yet on the remote.
Cancelled subscriptions remain active until period end
After cancelling a subscription, your plan now stays fully usable until the end of the paid period.
Design Mode — visual editor for your live preview
Click the pointer icon next to the chat input or in the preview toolbar to enter Design Mode. Select any element directly in the preview to inspect and edit its properties — colors, typography, spacing, and layout — all without writing code. Changes are applied instantly via Tailwind classes and written back to your source files.
Quick-action toolbar with direct property changes
When an element is selected in Design Mode, a contextual toolbar appears below the preview with one-click tools: Fill color, Border color, Border width, Font size, Font weight, Text color, Text alignment, plus Undo/Redo and Delete. Each tool opens an inline dropdown for instant changes — no AI prompt needed.
Professional color picker with HSV spectrum
The new color picker includes a list view with quick swatches, recent colors, and a full Tailwind palette — plus a spectrum view with an interactive HSV canvas, hue slider, HEX/RGB/HSL input modes, and EyeDropper API support. Works in both the Design Mode toolbar and the properties panel.
Design prompt bar — AI-powered element editing
Below the preview, a prompt input lets you describe changes to the selected element in natural language (e.g., "make this text red" or "add a shadow"). The AI applies changes directly to the correct source file and element — no plan confirmation needed for simple edits.
Element tree with live selection sync
The Design Mode panel shows a DOM element tree. Clicking an element in the tree highlights it in the preview and loads its properties. Selection syncs both ways — click in the preview or the tree. The element info (tag, classes, file) appears as a compact badge in the prompt bar and chat messages.
Plan rejection — say "no" to cancel a build plan
When the AI presents a build plan, you can now reject it by clicking "Nein" or typing phrases like "nein", "nicht bauen", "cancel", "skip" in both German and English. The plan is immediately discarded without calling the AI — no accidental builds.
Media library — paste external URLs
The "Extern" tab in the media library now lets you paste or type image/video URLs directly. A live preview shows the image before you confirm. Pasted URLs are automatically accepted in picker mode.
Image editor — web link input alongside media library
The image property editor now has a link button next to the media library button, allowing you to type or paste any image URL directly as the source.
Publish modal — less whitespace during build
The publish dialog now auto-sizes to its content during the build phase instead of using a fixed 700px height.
German translations for all design mode labels
All Design Mode section titles, toolbar labels, and property editors are now fully translated to German: Textinhalt, Bild, Filter, Layout, Abstände, Größe, Schrift, Farben, CSS-Klassen.
Keyboard hints hide on narrow chat panels
The "Enter to send · Shift+Enter new line" hint in the chat input now hides automatically when the chat panel is too narrow (e.g., when Design Mode is open). Based on actual container width, not viewport.
Voice input — speak your prompts
A new microphone button in the chat input and project creation screen lets you record voice messages. Your speech is transcribed via Gemini Flash and inserted into the text field for review before sending. Includes a real-time waveform visualizer and a blue shimmer animation during transcription.
Smart follow-up suggestions
After the AI modifies your project files, up to 3 contextual follow-up suggestions appear below the chat ("Continue with →"). Click to insert the prompt into the input, or Shift+Click to send directly. Suggestions are persisted and restored when you reopen the project.
New team role: Edit & Publish
A new collaborator role "Edit & Publish" lets team members edit projects and publish to production. The existing "Edit" role no longer includes publish access. Project deletion is now restricted to the project owner only.
Project list sorted by last modified
The project list now shows when a project was last modified instead of when it was created, and sorts by most recently edited first.
Editable message queue
Queue items can now be edited inline — click the text to open a multiline editor (Shift+Enter for new lines). A tooltip shows the full prompt text and an edit hint on hover.
Billing address and company name on invoices
Your billing name and address from Stripe are now displayed in the admin dashboard and used for invoicing. Existing customers are automatically backfilled from Stripe on the next service restart.
Subscription cancellation now shows immediately
When you cancel your subscription (via Settings or the Stripe Customer Portal), the "Expires on" status now appears immediately instead of waiting for a webhook. Cancellations made through the Stripe portal (which uses cancel_at instead of cancel_at_period_end) are now also correctly detected.
Clear chat history
A new "Clear chat" button lets you wipe the conversation history of any chat and start fresh. A confirmation dialog prevents accidental deletion, and the action syncs across multiple open tabs.
Faster chat loading with parallel probes
Token context and active task probes now run in parallel when opening a chat, noticeably reducing the time until the input field is ready. A brief grace period also prevents the loading shimmer from flickering on fast connections.
Database browser uses server-side credentials
The database browser no longer exposes database credentials to the browser. All queries now run through a secure server-side proxy, improving security for projects with connected databases.
Published app visible to editors and viewers
Collaborators with editor or viewer roles can now see the "Open site" button for published apps directly in the project overview.
Stop button preserves partial work correctly
Pressing Stop during code generation now properly saves any text already written, removes unfinished tool cards from the chat, and pauses the message queue so no queued follow-up fires after the stop.
GitHub import from welcome screen
You can now import an existing GitHub repository directly from the welcome screen and the project list. The imported repo appears as an assistant message in chat, and you can start working with AI right away.
Monitoring tab for published web apps
Published web apps now have a dedicated Monitoring tab showing runtime logs and health status. Also accessible from the mobile menu.
Republish detection — know when your site is outdated
The publish button now detects when your project has changed since the last deployment and shows a visual indicator (shimmer/split button). One click to republish with the latest changes.
AI-powered SEO metadata for published sites
When publishing, XAIO can now generate optimized SEO metadata (title, description, Open Graph tags) using AI. The new split-preview modal lets you review and edit before going live. Published sites are also pre-rendered as static HTML for better search engine indexing.
Premium Design chip on new projects
New projects can now add a "Premium Design" chip that instructs the AI to apply extra visual polish — refined spacing, typography, animations, and a professional color palette.
Live questionnaire and plan stream
The initial project questionnaire and the task plan now stream live in the chat with a shimmer animation, so you see progress immediately instead of waiting for the full response.
Generated images shown mid-stream
When the AI generates images during code creation, they now appear inline in the chat as they are produced — no need to wait until the full response is complete.
Consent modal for Austrian consumer protection (FAGG)
A three-checkbox consent modal is now shown at checkout, covering the right of withdrawal waiver, terms acceptance, and auto-renewal notice — in compliance with Austrian consumer protection law (FAGG).
Smarter plan view in chat
The live task plan in the chat is now only shown after you accept it, and duplicate renderings in different chat modes have been eliminated. The plan card also auto-advances completed tasks.
Workspace start: cross-replica + per-workspace Redis lock kills triple-start race
Under load multiple dev-server replicas could enter `start_workspace_on_node` for the same project at the same time, producing two or three runner-side bun installs and Vite spawns that fought over the same port. The handler now acquires a Redis lock keyed on the workspace id (per-ws) AND on the project id (cross-replica) before any side effect; the loser of the race waits for the winner's status flip instead of starting its own. Same project opened in two tabs no longer creates two workspaces.
Structured ws-trace logs across the workspace lifecycle
Every workspace lifecycle transition (create, sync, start, vite-up, restart, stop, delete) now emits a single-line structured log `[ws-trace event=… project=… user=… ws=… node=… elapsed_ms=… result=…]`. Across dev-server and workspace-runner the same event vocabulary is used so a single CloudWatch query can correlate a project end-to-end. Replaces a mix of unstructured `print()`/`logger.info()` lines that made post-mortem grepping hard.
Reliable backend health check with deploy-version verification
After a backend redeploy the health probe could see the OLD process answering 200 for several seconds before the new process bound the port — leading to false-green status. The probe now reads the deploy version (from `/api/info`) and only returns ready when the version matches the just-deployed build sha. Same logic mirrored in workspace-runner so the dev-server / runner handshake also waits for the right binary.
Tool-router waits for workspace before workspace-dependent tools
When the agent fired Read/Write/Bash tools immediately after `request_integration` enabled the backend, the workspace was not yet attached and the call failed with a misleading 404. The router now waits up to 10s for the workspace to be ready, re-imports `get_workspace_for_project` post-sync to pick up the freshly persisted state, and curl is routed through the workspace-runner proxy in all environments instead of two different paths for dev vs prod.
Idempotent `/restart-vite` on the runner — healthy Vite stays untouched
Calling `/api/workspace/{id}/restart-vite` while Vite was already healthy used to kill it and start a fresh one — costing ~5s and a screenshot regen. The handler now probes Vite before killing: HTTP 200 within 500ms => no-op, return 200 with status "already-healthy". Reduces unnecessary HMR resets across rapid edits.
Project-detail pre-warms the workspace in parallel with project fetch
Opening a project from the dashboard previously fetched the project metadata first, then started the workspace — sequential, ~3-4s. The detail page now fires both calls in parallel and the post-restart sleep was reduced from 5s to 1s, cutting open-to-preview by ~3s in the warm-runner case.
"Fix with AI" button when a publish build fails
When a publish run fails (build error, missing dep, type error), the build-error panel now offers a "Fix with AI" button that sends the error message + relevant log excerpt directly into chat as a new message — the agent picks it up and iterates a fix without the user having to copy-paste the trace.
Preview overlay during branch checkout + frontend status sync after generation
Switching git branches now keeps the preview overlay visible until the new content has actually reloaded, so the user no longer sees the previous branch's UI during the swap. The "elapsed >= 2min"-game-overlay during long restart_frontend stays visible until the preview really comes back (5s grace), and the post-generation workspace poll now writes `frontendStatus` so the chat panel reflects ready/error correctly.
Source-control modal: PR-merge syncs the base branch + chat-state guard
After merging a PR via the source-control modal, the workspace now checks out the base branch and re-syncs files from the merged commit — previously the working tree could stay on the now-deleted feature branch, which produced confusing "no changes" states on the next chat. Plus: chat-applied state now waits for the merge result before flipping, so a failed merge no longer marks the chat as applied.
Source-control modal i18n — DE + EN
Every label, tooltip, button, status text and error message in the Versionsverwaltung modal now ships in German and English, controlled by the existing language toggle.
node_modules.tar cache moved out of the source tree
The cached `node_modules.tar` blob the runner uses to skip bun-install on warm starts used to live inside the project sources directory — making git status noisy, swelling backups, and leaking into ZIP exports. It now lives under a sibling cache directory and is referenced by symlink, identically on dev-server and runner so both pick the same path.
Beta-Programm application backend (public form → Brevo email)
New public, no-auth endpoint `POST /api/public/beta/apply` accepts the xaio-beta-landing form (name, email, company, role, usecase[], vision, experience, hours, referral, consent), captures IP + user-agent, sends a Brevo confirmation mail to the applicant and an admin notification to BETA_ADMIN_EMAIL (falls back to ADMIN_EMAIL). Stores all submissions for the beta-cohort selection process.
Per-user project favorites — collaborators favorite without affecting others
The global `projects.is_favorite` column was replaced by a `project_favorites` join table keyed by (user_id, project_id). Each collaborator now has their own favorite list on shared projects — toggling a star no longer flips it for the entire team. Migration V076 moves existing owner favorites over and drops the legacy column. The update_project endpoint accepts owner OR collaborator role for the toggle.
cloud-local: management Flyway migrations now run on start
The cloud-local startup script previously skipped management-DB migrations, leaving developers on outdated local schemas (the "column resource_size does not exist" delete-error reproduced this). The orchestrator script now runs Flyway against `xaio_management` on every cloud-local start.
Per-message kebab popover with Bearbeitungszeit, AI Tasks and Geänderte Dateien
Every assistant message now has a 3-dot kebab on its action row. The popover shows two stat-pills (Clock + duration, Sparkles + AI Tasks used with the unit label muted), a "· N FILES" eyebrow, and a per-file diff list when the turn modified files. Each file row shows a TS/JS/PY/CSS language badge in neutral gray, the path, a 5-block proportional add/del bar, and +N -N counters; click the row to expand the unified diff inline. Empty popovers (no duration, no AI tasks, no files) hide the kebab entirely. Portal-rendered so it escapes the chat container overflow. Backend persists turn duration_ms and ai_tasks_used onto the iter row for survive-reload, and a new commit_sha field links each turn to its autocommit so per-file diffs are fetched via the existing /git/commits/{sha}/diff endpoint.
Telegram-style date separators in chat
Messages from different days now sit beneath a centered locale-aware pill ("May 1" / "1. Mai", year only when it differs from this year). On scroll, a sticky floating pill appears at the top with the date of the message under the viewport edge; it fades 1.2s after scroll stops and hides automatically when a static separator with the same date is already visible.
Auto-draining message queue with pause + drag-reorder
Sending a new message while a turn is still streaming queues it instead of bouncing the input. The queue header sits above the input as a collapsed pill with [count] [pause] [chevron]; expand reveals the full list with a drag-handle per item, an "as next"/"als nächstes" badge on item #0, and per-item remove. When the active turn ends, the head of the queue is automatically dispatched as the next turn — unless the user paused the queue. Resume after pause also drains. State lives in the chat panel so multiple ActionBar instances on the same message stay in sync.
Quiet welcome screen — Inter 500 + Instrument Serif accent, no dashed drop-zone
New "Was willst du bauen?" / "What do you want to build?" hero in Inter 500 with the last word ("bauen?" / "build?") rendered in Instrument Serif italic — the brand moment. Responsive sizes 52/40/32px with letter-spacing -1.6/-1.2/0px across breakpoints, line-height 1.05, color #111. Subtitle 15/1.5 muted #6b7280: "Ein Prompt." / "A prompt." (was "1 Prompt"). The dashed drop-zone box was removed; its function moved to a small 32×32 [+] icon button inside a single 52px footer with keyboard hint and ink-pill build button. A drag-onto-card overlay with "Drop files here" in Instrument Serif italic kicks in only during an actual drag. Keyboard hint and model picker only appear once the prompt has enough content to actually build.
Real Brevo-backed friend invitations with XAIO-styled email
The Invite-Friends modal now sends real transactional invitation emails through Brevo instead of opening a mailto. New POST /api/auth/referral/invite accepts a list of emails plus a language hint (de/en), validates + dedupes, fetches the sender's referral URL and dispatches a hand-styled HTML email per recipient: warm off-white card on a subtle gradient, +25 hero with tabular-nums, "AI Tasks" in Instrument Serif italic blue accent, ink CTA, 3-step block, footer disclaimer. Per-address result (sent / failed / invalid) is surfaced in the modal feedback line. Soft cap of 20 invitations per request. Counter switched from completed_referrals to total_referrals so the user sees real signups (label: "angemeldet" / "signed up", was misleadingly "eingeladen" / "invited").
Version Control reskin — XAIO branch glyph, timeline rail, light-mode diff
Versionsverwaltung modal now wears the full XAIO vocabulary: custom branch glyph instead of the GitHub icon, "verbunden" pill with green sync dot, "REPO" eyebrow with derived owner/repo slug + sync indicator, section headers per spec (chevron + icon + title + mono count-pill), "aktiv" chip in accent blue for the current branch, 28×24 white icon-buttons (Pull/Refresh/Merge/Push/PR/Checkout/Delete), 1px timeline rail with 10×10 commit nodes (accent-blue for HEAD), commit rows with mono short-hash + 13.5/500 title + author·time and a HEAD pill, file diff cards with +N / −N stats and "· Zeilen N–M" hunk headers, and a 4-col code grid (34/34/16/1fr). DiffViewer is now light-mode aware: same surface in dark, soft warm tones in light.
Mediathek redesign — 1080×720 modal with search, segmented tabs, neutral pill chrome
Media Library is now a centered 1080×720 dialog (radius 16, soft XAIO shadow). Top bar carries a folder-icon-box, "Medienbibliothek" title in Geist 14/600 plus a mono "· N FILES · 292 KB" sublabel, a 220px search field with ⌘K hint pill, a "Von URL" ghost button, and an ink primary "Hochladen" pill. Tabs are segmented with a mono 2-digit counter; an empty tab dims to muted-soft. Asset grid uses repeat(auto-fill, minmax(180,1fr)) with 14px gap and translateY(-1px) on hover. Pills (public / private / generated) switched from saturated solids to neutral mono-outline. New footer carries an LIMITS eyebrow with the size limits and a STRG+V kbd hint. ⌘K focuses the search field; search filters the active tab live.
Team modal redesign — owner mono-tag, role select, two-step removal
Team panel rebuilt as a 680px modal per spec. Header carries a Users-icon bubble, "Team" title and a mono · N MEMBERS sublabel. The inline-invite row accepts comma-separated email addresses (split + dedupe + RFC-light validate + parallel POST), reports per-address success / failure inline. Member rows show a 36px avatar (or accent-blue initial) plus name/email/"DU" tag; the Owner gets a non-clickable INHABER mono-tag with crown, everyone else gets a 28px-tall RoleSelect popover (Bearbeiten / Nur ansehen with role descriptions, a divider, and a red "Aus Team entfernen"). Removal goes through a confirm dialog with explicit pre-checks (no projectUuid, missing permission, owner-protect, self-protect) and surfaced HTTP errors — no more silent no-ops. RoleSelect popover is portal-rendered so the modal's overflow doesn't clip it.
Secrets in assistant messages are now masked with click-to-copy
When the model answers with an API key, password, database URL, bearer token or any other recognised secret pattern, it now renders inline as the same amber Shield-icon pill we use in user input — masked to first6...last3 with the env-var name in parentheses. Click copies the original value to the clipboard with a 1.2s "Kopiert" confirmation. Hooked into every text-bearing markdown tag (p, li, h1-h6, strong, em, blockquote, td/th, inline code, link text) plus the plain-text branch. Block <pre><code> stays untouched so multi-line snippets remain readable.
Sidebar shows the current user in the team avatar stack
The team avatar stack in the sidebar used to filter out the current user. It now includes you — moved to the front of the list so your avatar renders rightmost in the cascading stack (closest to the Team button, top of the painting pile). Fallback initials use solid accent-blue background with a white initial instead of the previous near-transparent treatment. Bottom divider in the footer also matches the top divider's mx-2.5 inset.
Edit/Copy/Revert action row on user messages
User messages now carry a hover-revealed thin-icon row (Edit, Copy, Revert). Hover-only by default so the chat stays calm; full keyboard navigation supported. Combined with the kebab popover on assistant messages this gives every turn a consistent, lightweight action vocabulary on both sides.
Recently opened projects in the sidebar
Sidebar now lists the last 5 opened projects under the Resources section (when expanded), with rectangular thumbnails (no border / padding) and a FolderOpen fallback. The list is sourced from a client-side localStorage map (xaio:lastOpened, max 50 entries, recency-sorted) and refreshes when you switch projects. The currently open project is filtered out so the list always shows alternatives.
Generated images now appear inline in chat messages
When the AI generates images via the generate_image tool, they now render in a small horizontal wrap-list directly inside the chat message — both in project view and dev view. Dev view places them at the bottom of the message above the timestamp, alongside the action bar.
Tab badges no longer get covered by sibling tab backgrounds
The error / info badges on the workspace tabs (Backend, Preview, Inbox, Runs) used to overflow into the next tab's area and disappear behind its solid background. They now sit at z-20 with a 2px halo ring (white in light, ink in dark) so they're always readable, regardless of which tab is active. pointer-events: none so they don't intercept clicks meant for the tab itself.
Locale-aware AI Tasks number formatting
AI Task counts now respect the document language: 1.48 in English, 1,48 in German. Token counts and detailed cost breakdowns are now hidden in prod and stage environments — they're only useful for development debugging.
Referral pending count fixed (Python `not` was dropping the WHERE filter)
`not UserReferral.referrer_bonus_granted` was being evaluated by Python at query-build time, coercing the column object to a literal True/False and silently dropping the WHERE clause. Switched to `.is_(False)` so SQLAlchemy emits the correct `WHERE referrer_bonus_granted = false`. Affects pending_referrals (used to come back as 0 or full total depending on coercion, never the actual pending set) and grant_referrer_reward (the lookup that decides whether a referrer is owed +25 AI Tasks could miss the real pending row).
Workspace runner — Vite config + index.html re-patched on every wake
When dev-server file-sync overwrites the runner's vite.config.ts (which carries the per-workspace base path), Vite serves wrong asset URLs and CloudFront returns HTML for missing /src/main.tsx. The runner's start() now re-patches vite.config and index.html every time, even when "already running". Extracted helpers _ensure_vite_config and _ensure_index_html_patched. Also: workspaces with dead nodes are now marked STOPPED instead of deleted to prevent data loss when runners are recycled.
Full DE/EN translation across the marketing site
All public marketing pages — /platform, /pricing, /about, /features, /product, /product/pipelines, /docs, /press — plus every landing component (header, footer, FAQ, how-it-works, pipelines preview, pricing preview, enterprise, social proof) now drive every visible string through the language dictionary. Switch via the existing EN/DE toggle in the header.
New /platform overview written for non-developers
Top-level entry point under Platform → Übersicht. Hero with workflow strip (Describe → Clarify → Adjust → Publish), nine plain-language capability cards (project management, chat agent, live preview, database, backend & APIs, one-click publishing, versioning, design-from-screenshot, local connector), audience bands (founders / operations / marketing), cross-references to Building Blocks, Use Cases and Features, and a dark CTA.
Pricing rewritten with the actual five plans
Pricing now reflects the real plans from plan_limits.py: Free (€0 · 50 tasks), Website Builder One (€10 · 100), Website Builder Pro (€25 · 150, highlighted), Web App Builder (€50 · 200), Platform Builder (€100 · 250). Toggle now defaults to monthly, "pro Nutzer / per user" line is shown explicitly, annual shows the strikethrough monthly price. Comparison table below has 12 rows with real values.
Honest feature audit — only what actually exists
/features dropped 10 entries with no code evidence (Magic Links, Schema Discovery, Edge Functions, Integrated DevTools, Undo/Redo, Preview Deployments, Instant Rollback, Status Page, Analytics, Secret Detection in chat-app context). Added real features: Website renewal (upload existing site, agent rebuilds modern version) and Migration from Lovable/Base44/Bolt. Renamed Monaco Editor to Source-Code Viewer to match what XAIO actually ships.
Founders section on /about with real photos
New section "Drei Operatoren, eine These." with portrait cards for Thomas Grausgruber (CEO, formerly XOOO & Emasos), Julian Breitenecker (CMO, formerly Growth Lead · Schoolfox) and Stephan Amling (COO, formerly COO · Forterro). Mission quote attribution fixed to Thomas. Timeline shortened to four real entries: 2025 Founding, 2026 Private Beta, Q3 2026 Public Launch, Vision.
Force light mode site-wide
A FORCE_LIGHT_MODE flag in lib/stores/theme-context.tsx now hard-locks the marketing site to light mode regardless of system preference or stored localStorage value. The dark CSS infrastructure (variables, .dark class, dark: utilities) stays intact for a future re-enable — flip the single constant and restore the FOUC script in app/layout.tsx.
Feature flags default to enabled only in development
features.goLive and features.agentFlow now default to true only when NODE_ENV === "development" (next dev). Any production build defaults them to false. CI/CD pipelines need no extra wiring; an environment that does want them on can override per-build via NEXT_PUBLIC_FEATURES_GO_LIVE=true / NEXT_PUBLIC_FEATURES_AGENT_FLOW=true.
Header restructure: Plattform · Docs · Preise · Blog · Unternehmen
Renamed top-level "Produkt" dropdown to "Plattform", with new first item "Übersicht" → /platform. Removed Roadmap from the dropdown (gated by goLive elsewhere). Integrationen menu entry now also gated by goLive. Blog menu entry gated by goLive. Hardcoded counts ("36 Plattform-Features", "7 Pipelines", "Sechs Pläne", "Von 1.200+ Teams genutzt") removed everywhere they were stale or unverified.
Application topic on the contact form
New "Bewerbung" pill on /contact between Support and Presse. Both "Initiativbewerbung" CTAs on /careers now route to /contact?topic=bewerbung, which auto-selects the pill. The /api/contact subject becomes "Bewerbung-Anfrage" and the topic field routes the admin notification accordingly.
Terminology: Pipelines → Bausteine, Use Cases stays separate
Output types (Website, Web App, Microservice, Agent Flow, Skills) are now consistently called Bausteine across the marketing site, with a separate Use Cases section under /product/pipelines for outcome-focused examples (landings, websites, web apps, agent flows, docs sites, shops, portals). The "Pipeline" term is reserved for CI/CD only.
Removed Mobile (Flutter) and Go Microservice from marketing
Mobile (Flutter) and Go Microservice are no longer advertised on /product, /product/pipelines, /docs, /platform, the FAQ, or the platform tech badges. Only output types XAIO actually ships (Website, Responsive Web App, Python Microservice, Agent Flow, Skills) are listed, and counts are computed from the visible array rather than hardcoded.
Compliance claims trimmed to what is actually true
ISO 27001 and SOC 2 mentions removed from the Enterprise tile, footer system status, FAQ and /about timeline. Only GDPR (EU hosting, GDPR-compliant out-of-the-box) is claimed.
New marketing site design
Complete rebuild of xaio.dev on a warm off-white canvas with Geist, Geist Mono, and Instrument Serif Italic typography. New hero with rotating use-cases, app-preview mock, audiences grid, seven-pipeline overview, how-it-works terminal, live prompt demo, enterprise block, pricing teaser, and FAQ accordion. All CTAs now route to /signup or /sales instead of opening modals.
Login and signup as dedicated pages
The Login and Signup modals have been replaced by full /login and /signup routes in a 50/50 split layout with an editorial dark panel. Includes Google and GitHub social sign-in, email + password, live 3-bar password-strength meter, 2FA, password reset, verification-pending screen with 60-second resend cooldown. The existing backend auth endpoints and Supabase-backed session handling are unchanged.
Product, Company, Features, Pricing, and Blog routes
New routes under /produkt (overview plus pipelines, agent-flow, integrationen, roadmap), the company section (/ueber-uns, /kunden, /karriere, /presse, /kontakt), the 36-feature grid at /features, the six-plan pricing page with monthly/yearly toggle and full comparison table at /preise, and a refreshed /blog feed. The top nav now offers Produkt and Unternehmen dropdowns with icon + title + description per entry.
Sales page with live calendar
New /sales page with a Solutions-Engineer trust row, three-step process, dark enterprise block (self-hosting, SSO/SAML, dedicated Slack, audit logs, SLA, DPA), full contact form with use-case chip toggle and interests multi-select, a 7-day calendar slot picker, sales-specific FAQ, and a final CTA. All "Mit Sales sprechen" and "Sales kontaktieren" buttons across the site now link here.
Contact form wired to Brevo with topic routing
Forms on /kontakt and /sales now submit to the management /api/contact endpoint. The endpoint has a new optional topic field that routes admin notifications to the Sales, Support, Press, or Security mailbox (configurable via SALES_EMAIL, SUPPORT_EMAIL, PRESS_EMAIL, SECURITY_EMAIL — falling back to ADMIN_EMAIL). Confirmation and admin mail are now sent asynchronously via Brevo so the request no longer blocks on the roundtrip.
Migration required:
Flyway migration V072__add_topic_to_contacts.sql adds a topic VARCHAR(64) column plus index to the contacts table. Applied automatically on the next management deploy.
docs.xaio.dev aligned with the new design system
The docs frontend now uses XAIO Blue (#3366EA), the off-white canvas, Geist + Geist Mono + Instrument Serif typography, and the shared xaio-chip, xaio-btn, and card primitives. The home page has a marketing-style hero with search pill, a 5-step journey grid, a why-XAIO feature row, and a quick-start CTA. The top nav keeps the docs-internal links (Docs · Anleitungen · Änderungen) plus search, language, theme toggle, Login, and Start Building.
Company name updated to XAIO FlexCo
Footer and legal mentions across all public surfaces switched from "XAIO Labs GmbH" to "XAIO FlexCo".
Custom Domains
Connect your own domain (e.g. www.my-site.com) directly to your published project. You can either attach a custom domain to an existing subdomain or publish straight to the custom domain without a subdomain. XAIO creates a dedicated CloudFront distribution per domain, issues the SSL certificate automatically, and guides you through DNS setup. A new pending_dns status shows you exactly when your domain is ready.
AI-Generated Design Styles
Design chips now call Gemini to generate unique colors, fonts, and design tokens tailored to your specific project — no more identical-looking results. The AI also automatically suggests a matching design style based on your prompt. Four new design chips added: Glassmorphism, Luxury, Neon, and Playful. Project title preview inherits the design color and font in real time.
Inline Project Creation
Create new projects directly from the sidebar without leaving your current workspace. The sidebar layout is now stable and no longer shifts when switching between views.
Faster Publishing for Frontend-Only Projects
Projects without a backend now skip the backend build and deploy step when publishing. Publishing is noticeably faster and no longer fails on missing backend configuration.
Smart Project Type Conversion
If you start a Website project and ask for Web App features (or vice versa), XAIO now asks before implementation if it should convert the project type — instead of silently generating the wrong stack. Conversion happens before the plan confirmation, so you stay in control.
Cache Savings in Cost Overview
The project cost detail view now shows how much you saved through prompt caching. Transparency on where your AI tokens actually go.
Clickable Support Ticket Attachments
Attachments in support tickets are now clickable and downloadable via secure pre-signed URLs.
Smarter Agent Loop
The AI agent now stops automatically when the same error keeps recurring instead of endlessly retrying. Context is deduplicated to prevent bloat, and concurrent git clones for the same project are serialized to avoid 500 errors under load.
Backend Pre-Flight Validation
Before starting your backend, XAIO now validates the Python code. Syntax errors are caught immediately — no more cryptic runtime crashes during startup.
CORS Errors Visible in Preview
The preview console now detects and clearly reports CORS errors, so you know right away when an API call is blocked by browser security. Routine 4xx responses (e.g. validation errors) are now shown as warnings instead of errors to reduce noise.
Per-Project Connection Allowlist (CSP)
Published sites now have a per-project Content Security Policy allowlist for external API calls. Your app can talk to the services it actually needs — without opening the door to everything.
Per-User Publish Rate Limiting
Publishing is now rate-limited per user instead of globally. Your publishes are not blocked anymore because someone else is deploying at the same time.
Backend-Mediated Authentication
Login now goes through the XAIO backend instead of directly to the auth provider. More secure, more consistent across browsers, and easier to recover from session issues.
Unpublish Confirm Button
Fixed: clicking "Unpublish" in the confirmation dialog sometimes did nothing due to a stale event listener.
Design Chip Regressions
Fixed: clicking a design chip no longer re-triggers title generation. No more flash back to default when switching chips. Text after a design block is preserved when switching designs.
Trialing Plan Add-on Purchases
Users on a trialing subscription can now purchase AI Task add-ons (previously blocked incorrectly).
Security Updates
Upgraded axios to resolve an SSRF vulnerability, and addressed a high-severity advisory in basic-ftp.
Website Migration from URL
Paste any website URL in your prompt (e.g. "Create a modern website based on example.com") and XAIO automatically scrapes the content, downloads all images to the media library, detects the language, and builds a completely new website with the original content. Works with JavaScript-rendered sites (Wix, Squarespace, Webflow) via Jina Reader API. Sub-pages are automatically discovered and included.
Post-Generation Migration Validator
After generating a migrated website, an automatic validator checks: broken image paths, missing logo in navbar, insufficient image usage (requires 50% of available), object-fit issues, and content completeness via Gemini Flash. Issues are reported in the restart_frontend result and the AI fixes them immediately.
Automatic Project Type Detection
When creating a new project (Web App Builder plan), the system automatically detects whether the prompt describes a Website or a Web App and pre-selects the correct type. Uses Gemini Flash in the same request as title generation.
Parallel Image Download
Website migration images are now downloaded in parallel batches of 10 instead of sequentially. Reduces download time from 3-4 minutes to ~15 seconds for 60+ images. 90-second total timeout ensures the AI starts even if some images fail.
Smarter Model Selection for Migrations
Website and ZIP migrations now automatically use Claude Sonnet (instead of Haiku) for stronger instruction-following. Image mapping, content completeness, and language rules are followed more reliably.
User-Uploaded Files Always Used
Files uploaded during project creation (logos, images) are now listed in the system prompt with usage instructions. Logos are automatically placed in the navbar. Previously, uploaded files were ignored during generation.
Mobile UX Improvements
Portrait-only mode on mobile devices. Compact welcome screen with flexible textarea. Project type filters based on user plan. "Open Published" link in project menu. File upload error messages shown inline.
Design Quality Prompt
New design quality rules for generated websites: bold color contrasts, asymmetric layouts, oversized typography, proper image sizing (object-top for portraits, aspect-ratio instead of fixed heights). Premium agency feel for migration projects.
Code Generation Prompt Improvements
Fixed: UUID primary keys use PostgreSQL native UUID type (not String(36)). Fixed: database.py template included in copy_backend_template. Fixed: Enum types require CREATE TYPE in migrations. Fixed: no alert(), no native select/date elements. Fixed: React Router BrowserRouter wrapping.
Publish Button Loading State
The Publish button now shows a spinner while the API call is in progress, preventing double-clicks. Build button in welcome screen resets after errors so users can retry.
Workspace Stability
Workspaces with dead nodes are now marked as STOPPED instead of deleted. Prevents data loss when runners are recycled. Fix Errors button only shown after generation completes (not during).
Stripe Plan Reconciliation with AI Tasks
The plan reconciliation tool now also adjusts AI Task balances when fixing plan mismatches. Shows adjustment details (+/- tasks) in the accounting dashboard.
Lambda Handler SSL Fix
Fixed published Web Apps failing with "connect() got an unexpected keyword argument sslmode/search_path". The Lambda handler now strips unsupported asyncpg connection parameters.
Project Migration from ZIP
Upload a ZIP file of any existing project (Lovable, Manus, Base44, Bolt, Replit, or custom) and say "Migrate this". XAIO auto-detects the tech stack, downloads images to the media library, extracts design tokens (colors, fonts, icons), and rebuilds everything in the XAIO stack. Works with React, Vue, Svelte, Next.js, and more.
ZIP File Upload Support
ZIP files (up to 20 MB) can now be uploaded in the chat and media library. Contents are automatically extracted and analyzed. Source code files are provided to the AI for context.
Migration Pre-Analysis (XAIO.md)
When a source project ZIP is uploaded, XAIO auto-generates a migration reference with exact colors, fonts, icon imports, pricing data, and image paths. This ensures the AI copies content verbatim instead of inventing its own version.
Generation Game Behavior
The Tic-Tac-Toe game now only appears during first-time project generation. It disappears as soon as the build starts. No more flash when reopening existing projects or "Ready to build" screen after generation.
Stripe Webhook Recovery
Fixed HTTP 500 errors on the Stripe webhook endpoint caused by a stripe v15 API change. Added a plan reconciliation tool to fix subscription mismatches from the outage period.
Browser Locale Formatting
Generated apps now automatically use the browser's locale (navigator.language) for formatting dates, numbers, and currencies. A shared format.ts utility is created at project setup.
Documentation Site
XAIO documentation is now available at docs.xaio.dev. Accessible from the Resources section in the sidebar (all environments). Uses IBM Plex Sans/Mono fonts.
Deployed Commit Tracking
All services now expose the Git commit SHA via their /api/info or /health endpoint. Easily verify which code version is running in any environment.
Generation Animation Reliability
The Tic-Tac-Toe game now only shows during first-time project creation and disappears when the frontend starts. No more flickering during subsequent chat changes. Variable AI difficulty makes the game more fun.
Better Active Filter Visibility
Active project type filters and view mode buttons now use XAIO blue with a subtle border — clearly visible in both light and dark mode.
Workspace Duplicate Prevention
Fixed a race condition where duplicate workspaces were created due to different Redis key formats. All lookup paths now search across all key variants.
Preview Loading Guard
Preview iframe no longer loads when workspace is in READY/CREATED state (Vite not running yet). Prevents brief "503 not running" flash.
AI Tasks Depleted Handling
When AI tasks run out, the thinking spinner now stops correctly and shows a clear message with "type Continue after upgrade" hint.
AI-Generated Project Titles
Project names are now automatically generated by AI (Gemini Flash) based on your description. Type at least 3 words and the title appears after 350ms. Lock it with the lock icon or edit manually anytime.
File Storage Quota
File storage usage is now visible in the integration settings. Shows current usage vs. plan limit with a progress bar. Enforced per plan (Free: 50MB, Starter: 500MB, Pro: 5GB, Enterprise: unlimited).
Runner Pool Status
The workspace status bar now shows the runner pool status for developers and admins.
Better AI Error Messages
When the AI service is temporarily unavailable, a friendly localized message explains the situation and tells you to continue by typing "Continue". Your work is always safe.
Chat Message Recovery
After an AI error, chat messages are now automatically restored from the server. No more missing messages — just refresh if needed.
Code Generation Standards
Generated code now follows stricter standards: UTC timestamps everywhere, mandatory database transactions, no native browser dialogs (alert/confirm), no native select/date inputs — custom Tailwind components instead.
Chat Avatar
Uploaded profile pictures now correctly appear in chat messages instead of showing a letter avatar.
File Storage in Published Apps
Fixed S3 upload handling in published apps: correct Lambda permissions, proper botocore packaging, and CSP headers for presigned URLs.
Clone Project
Duplicate any project with one click. The clone copies all source code, screenshot, and settings — but starts with a fresh chat and no git history. Enter a new name in the dialog (pre-filled with "Project Name (Clone)").
Escape to Close New Project
Press Escape while in the new project form to close it and return to the project list.
Faster Workspace Startup
File checks and workspace lookups now run in parallel, saving 1-2 seconds when opening a project.
Smarter Code Editing
The AI now avoids redundant edits — one Edit call per file instead of repeating the same change multiple times. Also checks for existing code before copying templates on cloned projects.
Workspace Runner Stability
Corrupt node_modules archives are now handled gracefully instead of crashing the workspace startup.
Startup Progress Indicator
When opening a project, a task-based progress overlay shows which steps are running: Workspace, Backend, and Frontend startup — each with elapsed time, estimated duration, and a progress bar. Completed steps show a green checkmark.
Tic-Tac-Toe Typewriter Intro
"Shall we play a game?" now appears letter by letter in a typewriter effect before the Tic-Tac-Toe board reveals. The animation starts only when the preview panel becomes visible.
Smooth Preview Panel Transition
When code generation starts, the chat smoothly shrinks and slides left before the preview panel fades in. The Tic-Tac-Toe game appears immediately after the animation.
File Upload to Workspace
Upload files directly to the workspace runner for use in your project.
Storage Usage Tracking
Project storage usage is now tracked and visible. Helps you manage resource consumption across your projects.
Student & Pupil Verification
Students can verify their status using a university email (SWOT database) or by uploading a student ID for manual verification.
New AI Models
Added support for Claude Haiku 4.5, Claude Sonnet 4.6, Claude Opus 4.6, Gemini, and GPT-4o in cost tracking and billing.
Faster Preview Loading
Reduced the grey overlay delay from 600ms to 150ms. Preview appears almost instantly after the iframe loads.
Mandatory Integration Check
After plan confirmation, the AI now always checks available integrations before generating code. Database and API integrations are requested upfront instead of being skipped.
Smarter File Storage Handling
Improved AI prompt for file_storage integration to prevent credential mishandling.
Concurrent Database Migrations
Fixed race conditions in database migrations using advisory locks. Schema names starting with digits (UUID-based projects) now work correctly.
Published App API Docs
Fixed OpenAPI docs routing for published apps on *.xaio.app — API docs now load correctly through the API Gateway.
Stripe v15 Compatibility
Updated management and accounting services for Stripe SDK v15 compatibility. Pinned all dependencies for reproducible builds.
Workspace Runner Stability
Prevented silent Vite startup failures with bun install retry and startup guards. Added boto3 for S3 file operations.
XAIO.md — Project Knowledge File
Every project now has an XAIO.md file that stores the design system, conventions, and important decisions. Created automatically after the first code generation. Persists across all chats — every new conversation respects the same design decisions. View it in the Files tab or Project Settings.
Image Analysis in Chat
The AI agent can now read and visually analyze project images (JPG, PNG, GIF, WebP). Ask it to describe any image in your project.
Project Type Conversion
Convert Website to Web App (and back) directly in Project Settings. Backend code is automatically initialized or archived.
Simplified Chat Management
Redesigned chat selector for non-technical users. Create new feature chats with a simple name input. Git branch details hidden under "Advanced". Each chat shows user avatar and message count instead of branch names.
Apply to Project (Merge)
New "Apply to project" button in the chat selector merges feature chat changes into the main project with one click. Applied chats are shown separately with a green checkmark. Status persists across page reloads.
Git Branch Actions Simplified
Branch actions (Pull, Push, Sync, PR, Checkout, Delete) are now always-visible icon buttons with instant tooltips instead of a hidden 3-dot menu. PR button moved from toolbar to each branch row.
Performance Rules for Generated Code
The AI no longer generates GPU-heavy infinite animations combined with blur effects. One-shot animations and gradients are used instead for cinematic designs.
Documentation Overhaul
All documentation pages updated. New journey-based navigation (Describe > Build > Integrate > Ship > Manage). SEO/GEO optimization with pre-rendering, sitemap, and FAQ schema.
AI Image Generation
The AI agent can now generate custom images for your project on request. Just ask in the chat, e.g. "generate a hero image for my landing page". Unsplash remains the default for stock photos.
Project Type Conversion
Convert your Website project to a Web App (and back) directly in Project Settings. Backend code is automatically initialized or archived.
Image Analysis in Chat
The AI agent can now read and visually analyze project images. Ask it to describe or analyze any image in your project.
Team Permissions & Ownership Transfer
Manage team member roles, invite collaborators via email, remove members, and transfer project ownership.
Media Library Download
Download any asset from the Media Library with the new download button. AI-generated images now show a "Generated" badge.
Smarter AI Cost Optimization
Simple requests like text or color changes are automatically handled by a faster, cheaper model. Complex multi-file features still use the most capable model. This saves significant AI Tasks.
Redesigned Project Creation
Project creation is now prompt-first: just type your idea and go. No more modal steps needed.
Project Settings Redesign
Project Settings now show a screenshot preview, color-coded project type badge, owner with avatar, and ownership transfer option.
Modern Email Templates
All transactional emails have been redesigned with a clean, modern look including the XAIO logo.
Published Sites
Fixed blank pages on published sites (*.xaio.app). PostgreSQL schema is now pre-provisioned for faster publishing.
Resizable Chat Panel
Drag the chat panel edge to resize it. The toolbar header adjusts automatically.
Hosting Options: XAIO Cloud & Private
Choose between XAIO Cloud hosting (managed) and XAIO Private (self-hosted) when publishing your project.
Smarter Toolbar
Toolbar buttons are now disabled during AI generation instead of hidden. No more flickering or layout shifts.
Upgrade Badges
Features that require a higher plan now show upgrade badges consistently across all environments.
Published Web App Database
Fixed multiple issues with database schema creation and connection handling for published Web Apps on *.xaio.app.
Promo Code Validation
Fixed issues with promo code validation and discount application at checkout.
Document Attachments in Chat
Document attachments (PDFs, images) are now resolved correctly in all chat messages, not just the latest.
Notification System
Get notified when your code generation completes, team members join, or AI Tasks run low. Supports Slack, Discord, and Telegram channels.
Database Browser (Dev & Prod)
Browse your project's PostgreSQL database directly in the workspace. Switch between Dev and Prod environments.
Avatar Upload
Upload a profile picture in Settings. Avatars are shown in the team panel and project settings.
Dark Mode Polish
Improved dark mode across notification settings, PostgreSQL integration modal, and database manager.
Workspace Stability
Workspace now stays alive while the AI agent is working, even when switching browser tabs.
Promo Codes & Discounts
Enter promo codes at checkout for discounts on plans and AI Task add-ons.
Password Strength Indicator
Signup and password change forms now show a visual password strength indicator. Strong passwords are enforced.
Community Page
New community page on the marketing website with resources and links.
Redesigned Landing Page
The marketing website has been completely redesigned with a dark premium theme and featured projects showcase.
Secret Detection
Improved detection of passwords and secrets in chat messages to prevent accidental exposure.
Referral Flow
Signup modal now opens automatically when visiting with a referral link. Language preference is sent during signup.
Chat Message Queue
Store messages for later sending with the new queue feature below the chat input.
Animated Sidebar
Smooth expand/collapse animations using framer-motion.
Long Message Truncation
Messages over 10 lines or 500 characters are now automatically truncated with Show more/less.
Escape Key for Modals
Press Escape to close any modal or dialog across the application.
Chat Input Brand Colors
Chat input now uses the XAIO brand color #2663eb when focused.
Design Mode Source Mapping
Fixed issues with element selection not correctly mapping to source files.
Preview Performance
Improved preview loading times by 40% with better caching.

