Update required aliases — add app, capcha, docs, sign; remove legacy
Reset translation hash — LibreTranslate OOMKill fixed, retry translations
Populate DNS statuses when already confirmed; show org name prominently throughout
Translate all remaining hardcoded UI strings site-wide
- PreviewBanner, PublicChatWidget, AiChatPanel, LiveSupportPanel, ExitIntentModal, FloatingSupportWidget now use useTranslations() - Added previewBanner, chat...
Prominently warn that www record is optional and can break existing sites
Delta translation engine + wire all hardcoded UI strings to i18n
Translation system: - translate.ts now operates in delta mode — only keys that are missing or still identical to English are sent to the API; existing transla...
Suppress Chrome auto-translate popup on locale-switched pages
Add translate="no" to <html> and <meta name="google" content="notranslate"> so Chrome does not offer to translate pages the user has already intentionally switc...
Bound translation concurrency to 3 threads to prevent DB pool exhaustion
Unbounded @Async (SimpleAsyncTaskExecutor) created 50 threads simultaneously when the retry scheduler fired, each opening a DB transaction and draining HikariCP...
Three bugs preventing changelog translations from being saved
1. **************** was discarding events because handleWebhook() had no @Transactional — save + publishEvent() ran outside any transaction. Add @Transact...
Query CommitLogs with LEFT JOIN so zero-translation records are caught by retry
The old query selected from CommitLogTranslation — commit logs with no translations at all were invisible to it. Use LEFT JOIN from CommitLog so the HAVING COUN...
Add /setup/dns page and domain setup flow to /network
- New /setup/dns page with two-phase flow: domain entry then DNS verification with 60-second auto-polling and SSL confirmation - ManualDnsGuide: collapsible s...
Add /setup/dns backend — one-domain enforcement, SSL probe, new aliases
- Enforce one custom domain per org in POST /api/security/domains - Add capcha, docs, sign to standard aliases; remove legacy aliases - Update verify-dns to tra...
Add ssl_confirmed and ssl_confirmed_at columns to org_domains
Adds idempotent ALTER TABLE statements to provision the two new columns needed for DNS setup SSL confirmation tracking.
Add sslConfirmed/sslConfirmedAt fields to OrgDomain and DomainDTO
Adds two new fields to OrgDomain entity and DomainDTO to track SSL certificate confirmation status after the auto-cert service issues a certificate. Also adds s...
Apply word replacement at translation time, not ingestion
Original text is preserved in the DB so that adding a new rule and re-triggering translation is all that is needed to update existing records. Changes: - Chang...
Remove client-side changelog censoring — now handled by backend
Word replacement and secret redaction moved to ChangelogSanitizationService (SecurityService) so sanitization happens before DB storage and translation. The fro...
Move changelog word replacement to backend before translation
Text replacements (Docs→Docs, Meet→Meet, etc.) and secret name redaction (K8s secret names→***) were previously applied client-side in ChangelogClient.tsx, mean...
Handle empty API responses and graceful degradation on billing tab
- billingApi get/put helpers now safely handle empty response bodies instead of crashing on res.json() with empty input - PlansBillingTab loadData wraps every...
Check TeamMember.isOrganizationOwner flag for owner detection in my-networks endpoint
The previous check only looked at org.getOwner() (user_id_owner column) which can be null for existing orgs. The authoritative owner flag lives on the TeamMembe...
Resolve org/member context from *** session for billing proxy
BillingService controllers require X-Org-Id and X-Member-Id headers. When calling directly (bypassing APIService), these weren't being set. Now the Next.js prox...
Use string type for org/member IDs in network page to handle CockroachDB unique_rowid() precision
Serialize org and member IDs as strings in my-networks endpoint to prevent JS precision loss
Call BillingService directly via k8s DNS instead of through APIService
Next.js server-side proxy now calls BillingService at **************** directly, skipping the unnecessary hop through APIService. Uses BILLING_SERVICE_URL env v...
Add Next.js API proxy route for /api/billing/*
The billing API client was calling /api/billing/* as a relative URL, which hit the Next.js server instead of the APIService gateway. Added a catch-all proxy rou...
Replace storage add-on toggle with quantity slider
Additional Storage is usage-based ($4/25GB block), not a simple on/off add-on. Replaced the toggle switch with a slider (0-1000GB in 25GB steps) plus a numeric ...
Include parent org in /org/domain response
The getOrganizationByDomain endpoint manually builds a response map but never included the parent organization reference. This prevented the frontend from knowi...
Add parentId and parent to OrgProviderProps type
The Organization props interface was missing parentId and parent fields, causing them to be dropped during TypeScript compilation even though the backend sends ...
Wire BillingManager and RelationshipManager to real backends
BillingManager (account billing tab): - Replaced 100% local-state mock with real Stripe-backed payment method management via billingApi - Loads payment method...
Purge incomplete model directories in init container
The service crashes on startup if it finds a directory in /models that has missing or partial model files. Add a sweep at init start that removes any directory ...
Remove GitHub LFS downloads, use only data.statmt.org models
GitHub raw URLs return LFS pointer files, not actual binaries. Drop enru/enar downloads entirely — LibreTranslate handles those locales. Only download the 4 pai...
Narrow bergamot to es/fr/de/pl, restore bergamot-first order
GitHub LFS files can't be downloaded with plain curl (raw URL returns the pointer not the content). Removing enru/enar from bergamot scope; those locales fall t...
Restore bergamot with working model sources and correct image
- replicas: 1 - Init container (alpine): downloads 4 pairs from data.statmt.org (tarballs for enes/enfr/ende/enpl) and 2 from firefox-translations-models GitH...
Narrow BergamotProvider targets to 6 pairs with available models
pt, it, uk, tr, ro, id, vi have no bergamot model source — LibreTranslate handles them. bergamot now claims: es, fr, de, pl, ru, ar.
Scale bergamot to 0, update image to mozilla/translation-service
The Google Cloud Storage model download bucket (bergamot-models-sandbox) returns 404 for all files and the firefox-translations-models repo was archived Dec 202...
Route all translations through LibreTranslate while bergamot is offline
BergamotProvider is moved to fallback position. LibreTranslate supports all 13 locales bergamot was handling **************** so this eliminates the flood of "C...
Replace mock stats page with live KamoCRM subscription dashboard
Rebuilt /settings/account?tab=stats into a fully wired, read-only insight dashboard. Replaces all mock data with parallel calls to BillingService via the existi...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.