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...
Reset translation hash — LibreTranslate OOMKill fixed, retry translations
Translate all remaining hardcoded UI strings site-wide
- PreviewBanner, PublicChatWidget, AiChatPanel, LiveSupportPanel, ExitIntentModal, FloatingSupportWidget now use useTranslations() - Added previewBanner, chat...
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...
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...
Reduce translation chunk size to 50 keys with exponential backoff
150 keys still too large for some providers (long paragraph values in privacy/terms/GDPR). Now: 50 keys per chunk, 4 retries with exponential backoff (2s→4s→8s→...
Chunk translation requests to prevent fetch timeouts on large payloads
With 1500+ keys, the single batch request payload was causing connection timeouts for some translation providers. Now splits into chunks of 150 keys with 3 retr...
Add /calculator and /pricing/offer to all sitemaps; i18n HTML sitemap labels
- app/sitemap.ts: add /pricing/offer and /calculator entries with locale alternates - app/api/sitemap/route.ts: add Pricing Calculator and Special Offer entries...
Delete translation hash to force full re-translation of expanded en.json
All page body content has been extracted to en.json (4 parallel agents added ~500+ new keys across features, home, about, security, privacy, terms, gdpr, cookie...
Fully extract remaining body strings from product, blog, pricing, demo, contact, calculator
Fully extract body strings from security, privacy, terms, gdpr, cookies, legal
Fully extract body strings from careers, company, community, resources, roadmap
Re-login to registry immediately before build to prevent auth expiry after long translation step
Force re-translation and commit locale files back to repo after translate step
Wire locale through dynamic fetches and add hash-based translation skip
- Forward locale param to SecurityService changelog API (page + route + client) - Forward locale param to KBService article/tree fetches (section + slug pages) ...
Wire useTranslations into all client components
Replaces all hardcoded strings in every (pages)/*Client.tsx with t("key") calls using next-intl useTranslations. Covers 25 files: security, contact, demo, prici...
Expand messages/en.json with full page body copy coverage
Grew the translation catalogue from 172 keys (~12 namespaces) to 300+ keys across 26 namespaces, extracting every user-visible hardcoded English string from all...
Resolve DYNAMIC_SERVER_USAGE 500 errors and missing calculator route
- Add force-dynamic to [locale]/layout.tsx (getMessages() uses headers() internally) - Remove generateStaticParams from [kbSection]/page.tsx (KB content is dyna...
Add tooltips and fix scroll behaviour on language selector
- Add englishName to LOCALE_CONFIG for all 22 locales - Add title={englishName} to each language button (desktop + mobile) so hovering shows the English name ...
Widen language selector dropdown to prevent horizontal scrollbar
260px was too narrow for entries like 'Bahasa Indonesia'. Increase to 310px and add overflow-x: hidden to eliminate the scrollbar entirely.
Port-forward TranslateService to reach it from CI runner
The Forgejo runner runs on k0m1 which cannot resolve .svc.cluster.local DNS. Use kubectl port-forward to tunnel kamowstranslate-service:80 to localhost:18080 du...
Remove pre-i18n app/(pages)/ and app/page.tsx
These were accidentally restored by git checkout -- app/ during a previous vendor fix. Both old and new route structures existing caused Next.js to try generati...
Upgrade Dockerfile to node:24-alpine
ships npm 10 which can't read the lock file and fails npm ci with a missing @swc/helpers@0.5.21 error.
Bump Node.js to 24 to match local dev environment
npm ci under Node 22 / npm 10 fails because the two versions resolve transitive deps (e.g. @swc/helpers) to different versions.
Add concurrency group to prevent duplicate workflow runs
When a push triggers a workflow and workflow_dispatch is also fired (or two pushes arrive in quick succession), both runs would execute simultaneously. Adding a...
Commit package-lock.json with next-intl and tsx dependencies
next-intl and tsx were installed but package-lock.json was not committed alongside the i18n implementation, causing Docker builds to fail with Cannot find modul...
Replace offer badge with language selector in nav
Add a 2-column flag+name dropdown to the header navigation allowing users to switch between all 22 supported locales. Locale switching uses next-intl router.rep...
Implement next-intl i18n with 22 locales, translate script, and [locale] routing
Replace paginated count loop with single backend today-count endpoint call
Chat *** — fix verify timing and improve banner copy
- ***Provider: triggerVerify effect now depends on challengeUrl so verify() is only called after the widget is mounted; uses rAF to ensure the DOM has paint...
Remove totalPages dependency in today count — paginate until empty page or older entry found
Integrate kamo *** (proof-of-work) into contact form, demo form, and chat widget
- Add ***Provider reusable component wrapping Capcha-widget with dark theme styling - Contact form: auto-verify on focus, gate submission until verified - Demo ...
Email as paid add-on, update all fallback pricing data
- KamoMail Hosting: $5/user/mo add-on (not free — liability concern) - 3rd Party Email Integration: $2/user/mo add-on - Updated calculator page fallback data (w...
Add animated cookie consent banner with glassmorphism design
Floating bottom-left card with spring animations, essential/analytics cookie toggles, localStorage persistence, and a Cookie Settings link in the footer to re-o...
Use 18DOFF promo code, update expiry to April 30, 2026
Reverted promo code from EARLYBIRD back to 18DOFF to match nav headers. Updated nav text from "Prelaunch" to "Early Bird" for consistency. Set offer expiry to 2...
Update fallback pricing data to match new production prices
The API returns 401 so the marketing site uses hardcoded fallback data. Updated all fallback plans, addons, bundles, and comparison table to match the new prici...
Update marketing site for new production pricing
- Added eSignatures to addon icon maps and calculator toggle - Email hosting shown as "Included Free" instead of paid add-on toggle - Updated FAQs: added TCO co...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.