Webby - AI-Powered No-Code Website Builder SaaS Platform v1.0.4
Webby - AI-Powered No-Code Website Builder SaaS Platform Changelog
Changelog v1.0.4
Webby (Laravel)
- Added chat file attachment support via @mention autocomplete and drag-and-drop uploads with Lexical editor nodes (FileMentionNode, FileMentionPlugin, ChatUploadButton) and public file serving endpoint
- Added graceful error handling that maps raw builder API errors to user-friendly, translatable messages across 13 error categories (rate limit, auth, model, context limit, content filter, connection, timeout, server, overloaded, bad request, credits, no builders, active session)
- Added Italian language support with full translations across all 17 JSON locale files
- Added Simplified Chinese language support with full translations across all 17 JSON locale files
- Added Indonesian language support with full translations across all 17 JSON locale files
- Added Brazilian Portuguese language support with full translations across all 17 JSON locale files
- Added landing page content translations for all 4 new languages via migration and seeder
- Added short 10-character alphanumeric referral codes replacing UUID-based codes for better readability and shareability
- Added app version badge display on admin overview page header read from .version file
- Added custom domain verification via A record (replacing CNAME) with server IP admin setting, auto-verify polling, and apex domain support
- Added CustomDomainCard component extracted from ProjectSettingsPanel with step-by-step DNS instructions and SSL status display
- Added EnsureAdminAccess middleware to gate all /admin routes by admin role
- Added free plan (price=0) subscription handler in PaymentGatewayController enabling plan upgrades without a payment gateway
- Added SubscriptionObserver that provisions build credits on subscription activation, covering all activation paths (admin, approval, webhooks, referral credits)
- Added build credit provisioning on user registration via UserObserver so new users receive credits from their default plan
- Added real-time credit balance broadcasting after build completion in the idempotent TrackBuildCreditUsage path
- Added admin user impersonation feature via ImpersonateController with audit logging
- Added payment method constants on Subscription and Transaction models (PAYMENT_STRIPE, PAYMENT_RAZORPAY, PAYMENT_PAYSTACK, PAYMENT_CRYPTO_COM, PAYMENT_REFERRAL)
- Added ZIP path traversal protection in PluginManager::installFromZip()
- Added backend validation error display via toast on the Plans billing page
- Fixed plan upgrade flow by removing hard block on active subscriptions; old subscription cancelled by webhook after payment or immediately for free/referral plans
- Fixed subscription_id → external_subscription_id column mismatch in Stripe, Razorpay, Paystack, and CryptoCom payment plugins
- Fixed cron status showing "Never Run" in non-English locales by querying job_class instead of translated job_name
- Fixed plan settings boolean toggles defaulting to old value instead of false on update
- Fixed webhook race conditions in BuilderWebhookController using DB row locks (lockForUpdate) to prevent duplicate message persistence between message and complete handlers
- Fixed oversized builder event payloads (thinking, tool call, tool result) truncated at 8KB to prevent WebSocket message size failures
- Fixed Chat.tsx callback references wrapped in useCallback to prevent unnecessary recreation of triggerBuild and auto-build useEffect
- Fixed useBuilderChat dedup to use ref-based tracking instead of stale state closures
- Fixed registration email uniqueness race condition via UniqueConstraintViolationException handling
- Fixed Reverb localhost broadcasting so server-side connection uses 127.0.0.1 to avoid TLS/DNS issues
- Fixed custom domain middleware to fall back to APP_URL host when no base domain is configured
- Fixed subscription details page translation keys to use natural language strings matching the admin JSON system
- Fixed plugin install directory naming to use PascalCase (Str::studly) for PSR-4 autoloading on case-sensitive filesystems
- Fixed ZIP wrapper detection in plugin installer to only treat single subdirectory as wrapper if it contains plugin.json
- Fixed Template model ZIP path accessor to use Storage::disk('local')->path() instead of hardcoded storage_path
- Fixed plugin getConfigSchema endpoint using wrong key ('class' → 'namespace') with error handling for class instantiation
- Fixed plugin uninstall guard to match all possible payment_method variants including slug-derived and constant values
- Fixed auto-verify email for admin-created user accounts
- Fixed autosetup.sh to dynamically detect PHP version for FPM restart
Builder (Go)
- Added repeated prompt detection using Jaccard similarity to suggest different approaches when users repeatedly ask about the same issue
- Added model-aware circuit breaker thresholds that adjust failure limits for standard-tier models (DeepSeek, ZhipuAI, mini/nano variants)
- Added per-file failure tracking for editFile so repeated failures on the same file trigger recovery guidance after 2 attempts
- Added per-tool circuit breaker overrides for verifyBuild (5 failures) and verifyIntegration (4 failures)
- Added compact system prompt for standard-tier models to reduce token usage while preserving critical instructions
- Added auto dependency install (npm install) before first file write to enable TypeScript validation
- Added import validation warnings after createFile and editFile that check packages against package.json
- Added two-phase batch edit writes with automatic rollback if any file write fails
- Added duplicate file path detection in batch execution to prevent stale-content edits on the same file
- Added symlink-aware path validation to prevent workspace escape via symlinks
- Added duration_ms and iteration fields to builder tool result events
- Added per-tool context window truncation limits (verifyBuild: 12000, readFile/analyzeProject/searchFiles: 8000, default: 6000)
- Added summarizer retry with progressive turn trimming on context overflow errors (up to 3 retries, trimming 33% each time)
- Added mid-turn compaction failure fallback that truncates to recent messages instead of failing
- Added nil client guard in summarizer to prevent panics when API key is missing
- Added provider-specific default context windows (Anthropic: 200k, DeepSeek: 64k, Grok: 131k, OpenAI: 128k)
- Added file change tracking for batchEditFiles, deleteFile, and useTemplate tools via IsFileModifying() registry
- Added context-aware completion message that differentiates between builds with file changes and no-change sessions
- Added nudge mechanism for empty AI responses to request a final summary instead of silently completing
- Increased default summarizer max tokens from 500 to 1500 for better conversation summaries
- Reduced default global circuit breaker failure limit from 15 to 10
- Replaced Hero Icons references with Lucide React in icon tool descriptions and usage examples
- Replaced duplicated path validation logic in API handlers with shared ResolveAndValidatePath utility
- Improved editFile recovery guidance to suggest createFile rewrite after multiple failures on the same file
- Fixed auto-build not triggering after eager template initialization by setting FilesChanged flag before agent loop
- Fixed session state (FilesChanged, buildSucceeded, buildMessage) not resetting between continuation chats