Employment & Income section UI
Replaces the Coming-Soon placeholder for the employment route with a full URLA Section 1d-1g editor. Per-borrower chip selector mirrors the declarations pattern...
URLA 2021 mortgage application UI
Adds the new /applications route group, the typed mortgageAppsApi client that talks to SecurityService /api/security/mortgage-apps, full TS types mirroring the ...
Route NavTop picker through /me/language
The picker called the generic member PUT, which SystemUserGuard 403s for the System User signed into a sub-org. The catch logged silently, so the kamo-locale co...
Resolve subdomain-tenant org bucket to its own MinIO folder
getThemePath() was reducing the hostname to apex+tld (mainDomain.tld) for both the themed host AND the bucket folder. For subdomain tenants like gnosia.demo.kam...
Stop clipping dark-variant color inputs in ModernColorGroup
Color picker rows had a hardcoded 280px wrapper inside a 1fr 1fr grid with overflow:hidden, so the input was chopped on narrow columns. Use flex:1 + minWidth:0 ...
Treat thrown subscription stub as no-subscription, not error
The legacy getCurrentSubscription stub throws by design so callers fall back to the ungated path. StatsManager was surfacing the throw as "Could not load subscr...
Return empty meters instead of null from getCurrentUsage
StatsManager rendered <UsageMeters usage={null}> when the legacy stub resolved to null, crashing on usage.meters. Return { meters: [] } so the component takes t...
Gate My Account slide-out section on CONFIGURE_SYSTEM
Hide the "My Account" menu from members who lack CONFIGURE_SYSTEM so they don't see links (Stats & Costs, Apps & Features, Branch Types, Automation Streams) tha...
Revert "fix(account-settings): auto-route child-org owners to their permitted org"
This reverts commit ****************
Auto-route child-org owners to their permitted org
When /settings/account loads for a user who lacks CONFIGURE_SYSTEM on the current org, the previous behavior was a silent redirect to /settings — a dead-end for...
Use full FQDN, not eTLD+1, when fetching org by domain
registrableDomainFromAlias strips any multi-label subdomain (e.g. "gnosia.demo.kamocrm.com") down to its eTLD+1 ("kamocrm.com"). That was fine for the API base ...
Don't show global loading overlay for client-handled forms
NavigationInterceptor's submit listener treated any form whose form.action was truthy and method=get as a navigation, and called setLoading(true) on the global ...
Wrap toolbar and shrink search/date so New Event stays on-page
Toolbar packed too much fixed-width content into a single non-wrapping flex row; with the parent main area set to overflow: hidden, the right section (New Event...
Read *** from master after session refresh to avoid replica lag
The previous fix had /api/user-info call /api/security/session/refresh before reading Redis, but the read went through readKsemJsonFromRedisWithRetry which uses...
Track tab by name + refresh session before reading user-info
Two related navigation bugs that both manifest as "the wrong tab opens": 1. SettingsView tracked the active tab by *index*. childrenArray can recompose ...
Gate Docs tab on VIEW_DOCUMENTS / MANAGE_DOCS_SETTINGS
Mirrors the Email + Phone tab gates. A member without VIEW_DOCUMENTS (basic user-level access) and without MANAGE_DOCS_SETTINGS (admin) no longer sees the Docs ...
Gate Email + Phone tabs on rights, gate VOIP config edit, periodic session refresh
Adds the missing right-gating so a basic Member without ACCESS_MAIL / ACCESS_VOIP can no longer see the Email & Mailbox or Phone Settings tabs on their own acco...
Align Type/Name/TTL fields by moving TTL hint to a tooltip
The TTL field rendered its 'use 1 hour if your registrar shows a dropdown' hint as a paragraph below the input. That column ended up taller than Type and Name, ...
SSL card stops claiming records are verified before they are
The SSL card had two states (installing / complete) so the "installing" copy ("All required records are verified, we're installing the certificate now") was sho...
Remove header gap, ungate subdomains, drop registrar picker
- Move DnsProvisioningPanel inside DnsSetupStudio so the empty px:4 pt:3 wrapper around it (which created a band of whitespace above the hero when the panel...
Unified DNS Setup Studio with inline help per record
Replaces the split DnsProgressView + AliasStatusTable + ManualDnsGuide trio with a single guided experience: each TXT/CNAME record now lives in one card alongsi...
Land on parent's /setup/dns after org create
The wizard previously redirected the creator to **************** right after POST /api/security/org returned. The new org's domain has no DNS yet, so the redire...
Retrigger build to pick up fully-translated dictionary
The deployed image ec1a3dad was built before kamo-translation-dictionary zh.json crossed from ~0.06% Chinese to 99.9% Chinese. The build step copies messages/ f...
Wire t() into remaining hardcoded UI strings across ~88 files
Replaces hardcoded English with next-intl t() calls in places the prior conversion missed: DataGrid headerName values (~238 across pipeline, account, leads, doc...
Render inline cid: images via the new EmailService endpoint
When a message exposes inline parts (each carrying a contentId), the email renderer now rewrites <img src="cid:..."> references at mount time to ***************...
Broken inline images, attachment downloads, and view-pane flicker
- Strip <img> with cid: src in the email sanitizer so embedded images don't render as a flickering broken-image icon, and hide images that fail at runtime v...
Fix doubly-namespaced t() calls in clubhouse member list
Calls were resolving to **************** instead of **************** — switch to use the properly-scoped tMember handle for searchPlaceholder, searchAriaLabel, ...
Translate remaining UI strings outside main batches
NavInfo (placeholder name), NavTab (Print/Share buttons), NotImplemented (message), SecureIFrame (iframe title), useUserInfo HOCs (Loading/Please log in/permiss...
Translate POS6 (10 final files) — pos batch complete
97 strings across MarketCardGrid, MarketAgreementTemplates, MarketRentalAssets, MarketSubscriptionPlans, and 6 SubscriptionPlan* tabs (AddOns, Bundles, Details,...
Translate provider help (10 setup guides)
117 strings across BigCommerce, Ecwid, Magento, OpenCart, PrestaShop, Shift4Shop, Shopify, Squarespace, Wix, WooCommerce setup guides. Step text uses t.rich() w...
Translate POS4 ****************
74 strings. **************** **************** keys.
Translate POS3 ****************
92 strings. **************** **************** keys.
Translate MarketProducts + MarketCustomers
118 strings. **************** marketCustomers}.* keys with ICU plural patterns and refactored SUB_VIEWS/ATTR_TYPE_LABELS to hold translation keys instead of lit...
Translate MarketTaxShipping + MarketDiscounts
151 strings (78+73). **************** marketDiscounts}.* keys with ICU plural patterns for method/entry counts. DiscountTypeBadge refactored from helper into su...
Translate E5 (16 small files) — email batch complete
61 strings. **************** **************** **************** **************** signatureTemplateSelector}.* keys. All 27 email files now at 0 audit hits.
Translate E4 ****************
62 strings. **************** **************** keys.
Translate E3 ****************
74 strings. **************** domainManager,caldavPersonal}.* keys.
Translate E2 ****************
92 strings. **************** **************** keys.
Translate EmailTemplateEdit (114 strings)
Largest file in the email batch. Refactored module-level legalTextOptions constant into buildLegalTextOptions(t) function for runtime translation. Inner EmailFr...
Translate P5 (6 medium tabs)
96 strings across VerticalSection, EngagementsTab, RetailFulfillmentTab, RetailCustomersTab, VendorsTab, SignupsTab. Uses t() with **************** ************...
Translate Commitments tab
34 strings. Uses t() with **************** keys.
Translate P3 (Applications+Dashboard) + P4
7 files. P3 partial — Commitments reverted (rate-limit kill mid-batch), Applications and Dashboard salvaged with 0 audit hits. P4 complete (ServiceRequests, Ret...
Translate WorkOrders + Procurement tabs
116 strings. Reused existing **************** procurementTab keys aggressively plus common.fields/actions/states.
Translate Bookings + Orders tabs
101 strings. Reused existing **************** keys plus common.* (status, dates, fields, actions).
Translate 5 essential settings managers
206 strings across DepartmentManager, JobTitleManager, LabelManager, SecurityRoleManager, SubdomainBranchesDialog. Uses t() with **************** **************...
Translate 6 security settings tabs
195 strings across APIManager, AccessBlockManager, OAuth2Manager, SuspiciousManager, SystemAccessLogsManager, SystemDebug. Uses t() with **************** access...
Translate 7 account settings components
130 strings across BranchSetupManager, DefaultRoleTemplatesSection, FeaturesManager, RelationshipManager, **************** **************** StatsManager. Uses t...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.