Reset document.title in rebrand() when React overwrites it
React re-applies RSC payload after hydration, resetting the title to "analytics". Add a title check inside the MutationObserver callback so it gets corrected ev...
Redact tokens ≥32 chars in changelog sanitization
Any word (run of non-whitespace) that is 32 characters or longer is replaced with **************** before titles and descriptions are sent to the translation se...
Replace "analytics" text nodes with "Kamo Analytics" instead of clearing
Replace separate call/text icons in navtop with unified VoipButton dropdown
Use TreeWalker to remove all "analytics" text nodes from rendered DOM
The workspace nav title "analytics" comes from JS bundles loaded after auth, rendered as a text node next to the logo SVG. Uses TreeWalker to find and clear all...
Add guarded MutationObserver for client-side rendered logo/text
Login page and dashboard content is rendered by Next.js JS bundles, not in the HTML body, so sub_filter can't reach it. Adds a script with a busy-flag-guarded M...
Redirect favicons at nginx level, fix RSC payload escaping
- Serve favicon via nginx 302 redirect instead of trying to rewrite HTML/RSC payload href strings (cleaner, always works) - Fix RSC title replacement with pro...
Use pure sub_filter replacements instead of MutationObserver
MutationObserver caused infinite loop (DOM change -> observer fires -> DOM change). Switch to direct nginx sub_filter string replacements targeting both static ...
Load analytics by default and include www subdomain in allowed domains
- Track all visitors by default since analytics is cookieless/GDPR-friendly - Only disable if user explicitly denies analytics in cookie preferences - Add www.k...
Comprehensive analytics rebranding for login page and dashboard
- Replace title dynamically (handles "Login | analytics", "Dashboard | analytics" etc.) - Replace "analytics" h2 text on login page with Kamo logo image - Repla...
Use MutationObserver to rebrand analytics client-side rendered UI
analytics is a Next.js app that sets title/logo via JavaScript after initial HTML load. Replaces static sub_filter approach with injected script that uses Mutat...
Rebrand analytics analytics UI with Kamo logo, title, and favicon
Adds nginx sidecar proxy that injects CSS to replace the analytics logo with KamoCRM logo, changes the page title to "Kamo Analytics", and overrides the favicon...
Replace Google Analytics with analytics, add event tracking across site
- Remove Google Analytics (gtag.js) from layout - Add analyticsAnalytics component: consent-aware script loading via cookie preferences, data-do-not-track, do...
Add analytics analytics deployment and analytics.kamocrm.com routing
- New analytics/ directory: PostgreSQL StatefulSet + analytics deployment, services, and secret template - **************** routes analytics.kamocrm.com → analy...
Add legal fine print to footer across all locales
Adds protective legal disclaimers to the bottom of every page covering platform liability, AI/eSignature disclaimers, translation authority, terms agreement, an...
Integrate Google Analytics (G-W9K0Z7FYRV) via Next.js Script component
Fix translations — manual overrides + full delta retranslation
Manual overrides for nav/UI terms both engines consistently fail on: - nav.home, nav.company, nav.roadmap, nav.changeLog, nav.legal, nav.login, nav.documentat...
Show TXT domain ownership record in DNS setup UI
- DomainData/DnsStatus: add verificationToken, ownershipVerified, type fields - AliasStatusTable: show TxtOwnershipCard above CNAME table with copy button, in...
Fall through to next provider when translation equals source text
Bergamot was returning the source text unchanged for single-word nav items, acronym phrases (API, CRM), and compound words (Change Log) while reporting success ...
Generate TXT verification token on domain create, check in verify-dns
- createDomain: generate 32-char UUID token and store via setVerificationToken - verifyDns: check _kamo-verify TXT record for kamo-site-verification=<token> - T...
Add verification_token and ownership_verified columns to org_domains
Add domain ownership verification via DNS TXT record
- OrgDomain: add verificationToken and ownershipVerified fields - DomainService: add setVerificationToken() and setOwnershipVerified() - DomainDTO: expose verif...
Sticky header, updated aliases, always-visible plain-English DNS guide
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...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.