Disable Docker BuildKit cache so every pipeline run does a full rebuild
Sets no-cache on both image build steps so npm ci and npm run build always run, even when the source tree is unchanged.
Bust Docker BuildKit cache per commit so npm run build runs every push
Identical checkout trees (e.g. empty commits) reused cached layers and skipped a real Next build. Pass GIT_COMMIT from the workflow and label the image revision...
Serialize member-security and members PUT calls to avoid CockroachDB conflict
Two concurrent writes to the same `members` row caused a serializable isolation conflict — member-security read the row while the members endpoint wrote to it (...
Show Manage Domain button for top-level org owners and system members
Unwrap catalog and calculation from backend response envelope
getSubscriptionCatalog returned { catalog: {...} } but was cast directly as SubscriptionCatalog, leaving catalog.plans undefined and the plan selection step bla...
Use ss instead of fuser to kill stale port-forward (fuser not on k0m1)
fuser and lsof are not installed on the runner host. Use ss -tlnp with grep to extract the PID holding port 18080 and kill it directly. Also switch pkill to SIG...
Clean up stale port-forward so cancelled translate job doesn't block next run
Bash doesn't forward signals to backgrounded processes, so kubectl port-forward outlived cancelled workflow runs and held port 18080, blocking every subsequent ...
Restore all broken placeholder values across pages
Salvage-keys script had grabbed CSS classNames, inline styles, and JS template literals instead of the original English text for 114 message keys spanning notes...
Show Set Up Billing button for org owners with no account
When an org owner opens the plans-billing tab and no billing accounts exist, display a bootstrap prompt instead of the generic "contact your org owner" message....
Restore leads page hero title and subtitle from git history
heroTitle was 'Hero Title' (placeholder), heroSubtitle was 'flex gap-2' (salvage-keys accidentally grabbed the adjacent CSS class name). Correct values recovere...
Add statusWindow labels namespace and fix all setting placeholders
- Add **************** (50 keys) so the settings nav sidebar shows real text instead of key paths - Fix branchTypesLabel ICU format: \${branchLabel} → {branch...
Wave 3 conversions, fallback fix, and auto-translate CI
- Replace all hardcoded English strings with t() calls across wave 3 components (chat, clubhouse, support, notes, pipeline, leads, nav, etc.) - Merge wave 3 f...
Match other tool windows' size + color scheme
- defaultSize and minSize now 320x650, resizable: false (matches Softphone, Chat, Calculator, SMS, AI Chat) - Switched from dark slate gradient to the standard ...
Wire next-intl with member.language as locale source
Adds next-intl-based internationalization across kamo-internal without URL locale prefixes. Active locale is read from the kamo-locale cookie, which mirrors the...
Forward Range header so audio playback can scrub
Without this the VOIPService recording-streaming endpoint always returns the full file (Range header is dropped by buildForwardHeaders), which works for play-fr...
Drop dead masterAccountHolder/isMaster UI, refresh stale comments
Account schema no longer carries masterAccountHolder or per-member isMaster flags — those were removed alongside the Account-as-billing-principal refactor. Acco...
Split member APIs; show subs' target org; add billing-owner promote UI
billingApi splits members into accountMembers (canManageBilling, isAccountManager) and subscriptionMembers (isLicensee, canManageSubscription) under ***********...
AccountGroup -> AccountTier; customer-group routes -> customer-tier
Frontend types and API calls updated to match the shared-lib + service rename of AccountGroup to AccountTier. The "Group" naming was leaking into the customer-s...
Rename AccountBillingMember -> AccountMember; isGroupPlanManager -> isAccountManager
Type-level rename across the billing client and the PlansBillingTab: - AccountBillingMember type -> AccountMember - isGroupPlanManager flag -> isAccountManager ...
Add language + default currency to Regional Settings card
Member profile's Regional Settings card now exposes editable Language (22 supported locales mirroring the marketing site) and Default Currency (searchable Autoc...
Rewrite billingApi client onto Account-based endpoints
billingApi now talks to **************** instead of the old /groups/{groupId} routes. Top-level types renamed: - BillingGroup -> AccountBilling - Bill...
Mirror live/snapshot address shape in CartItem2 and DraftOrderItem types
CartItem2 gains **************** and shippingAddress/billingAddress fields populated from the customer's primary shipping/billing AccountAddress profile. DraftO...
/account/new copy-from-lead UX, full name fields, dual phones, address; account-level address management
Frontend: - /account/new: per-section "Copy from Lead" buttons + header "Copy all from Lead" button (when leadId param) - Name section: prefix, first, middle, l...
Production-grade History + Voicemail tabs with media-player tool
History tab (SoftphoneHistoryTab.tsx): - Infinite scroll via IntersectionObserver inside the panel's scroll container - Filter chips: All / Inbound / Outbound /...
Remove redundant Field history title from history panel
Tab label already conveys context — title and subtitle were wasting screen space. Reload button moved inline into the toolbar.
Remove layout prop causing email body bouncing
The outer motion.div's `layout` prop fought with the inner AnimatePresence height: 'auto' animation, creating a FLIP feedback loop on emails with unstable heigh...
Add History tab — paginated audit timeline with search and filters
- LeadHistoryPanel: sticky filter toolbar with debounced search, **************** filters, MUI table with pagination, color-coded event chips, member-name resol...
Add lead-account assignment UI, currency system, assign/new account pages, settings currency field
Dynamic member type label in My Account page title
Title now reads "My {Member|Team Member} Account" using the org-configured behavior labels, switching automatically once the member's type is loaded.
Move Create Document button into DocManager toolbar
The button was only available on /doc/manager via the actions prop. Moved all logic (state, handler, DOC_TYPES, menu) into DocManager so it appears on every emb...
Always show Create Document button on doc manager page
Removed the getMemberId() > 0 guard that was hiding the button during the useUserInfo loading window. The page is already behind auth so no client-side membersh...
Move Mailing Address into 3-column row with Lead Info and Primary Contact
Restore organization import removed by accident
organization.id is still needed in the handleCreateDocument request body; only the isDocsEditor condition should have been removed.
Show Create Document button to all logged-in members
The org feature flag check (isDocsEditor → isDocs → hasFeature DOCS) was returning false because org features use deprecated key types. The button is now shown ...
International support — CountrySelect, LanguageSelect, SubdivisionField across all forms
- Add reusable CountrySelect (207 countries, flag icons), LanguageSelect (26 languages, flag icons), SubdivisionField (US state dropdown with flags; other cou...
Remove datagrid field-level filters and floating filter row
Disabled all column filters and the floating filter input row so the grid shows only column headers and data rows. Also removed the Filters tool panel from the ...
Move Upload button into DocManager toolbar
The Upload trigger was only in the /doc/manager page's actions prop, making it invisible when DocManager is embedded in other pages. Moved the Upload button dir...
Allow upload options to scroll in embedded DocManager
Uploads tab container was overflow:hidden, clipping per-file options (description, folder, doc type, access level) in height-constrained embedded contexts. Chan...
Fix 400 feed error and add communications sub-tabs with URL params
Fix double-? bug in MediaStream where feedEndpoint already contained query params but the fetch appended ?page=... instead of &page=..., causing a malformed URL...
Make 'All Leads' a real menu item with icons in agent filter
- Replace placeholder empty-value item with __ALL__ so the dropdown never shows blank when All Leads is selected - Add Group icon to All Leads and PersonOff i...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.