Add an Apps & Features tab and fix the Allowed Apps list
The new tab, to the right of Organizations, controls what every organization is offered: availability, development stage, display name, description, an operator...
Show negotiated pricing instead of $0.00 for enterprise-only add-ons
The origination add-ons carry no list price — they are negotiated per agreement — and formatCurrency(null) renders $0.00, advertising an enterprise module as fr...
Design the platform app catalog behind an Apps & Features tab
Apps on /settings/account?tab=apps are compile-time constants in the ServiceType enum, so "Available" (stage == COMPLETED), the stage itself, the display name a...
Server-paginated organizations console
The tab loaded every organization in one request and rendered a card each, with the backend fanning out per org, then per account, then per subscription. Search...
Implementation plan for the platform organizations console
17 TDD tasks across BillingService, the translation dictionary and kamo-internal. Physical table names verified against the live cluster -- the org table is 'or...
Rename LOS to MLOS, add Personal Loan Origination System, gate commerce verticals
Apps tab now shows 'Commerce: Mortgage Loan Origination System' (the title is served from the backend enum, not the TS mirror) and a new 'Commerce: Personal Loa...
Design for the platform organizations console
Redesigns **************** from an unbounded card list into a server-paginated console. The current tab loads every org at once and PlatformAdminService fans o...
Raise the Next body cap that was truncating every large upload
THE cause of the failing 3 GiB attachments, and it was ours, not the network. **************** was '500mb'. It is not a rewrite/middleware setting: Next wraps ...
Stop a dead upload spinning forever, and say what 100% means
A stalled upload sat at 100% with the bar full and no way out. Three separate reasons, all of them mine. XMLHttpRequest has no useful read timeout: when bytes ...
Let an in-flight upload finish instead of dying on a rollout
A 2 GiB chat attachment reached 100% and then failed with 'Bad Gateway' because a deploy landed on top of it: the pod took SIGTERM at 03:34:36 and the transfer,...
Email a member from their row
Adds a mail action beside chat, call and profile on a member row, opening the Messages tool with the recipient already filled in. It is hidden unless the org ha...
Make a failed upload say what happened, and log enough to diagnose it
A 2 GiB attachment failed at the end of a four-minute transfer with 'Upload failed: upload failed Internal Server Error' — a doubled prefix wrapped around a mes...
Apply custom status labels to the status tabs
Every other status display on /leads resolves its description through resolveLabel() from useStatusLabels — the grid cell renderers, both filter dropdowns, and ...
Report user idle time so an abandoned tab can expire
The client activity tracker only ever gated whether we asked to extend; it never told the backend anything. SecurityService renewed the session TTL on every req...
Make the accept-popup's judgement calls testable, and settle the deferred minors
Title the mortgage form panes Borrower(s)
The Loan/Borrower/Subject Property form serves every borrower on the file, so the tab and pane titles now come from translations and read Borrower(s). Loan and ...
Leave the individual out of a department signature too
A message sent from a department mailbox is written by the department: the reply lands there, not with whoever typed it, so signing it with a member's name and ...
Drive the email template off the From address, behind an on/off switch
The template picker in the composer footer is gone. Which template a message wears is not a separate decision from who it is sent as: the member's own primary a...
Stop next/image breaking every proxied logo preview
The org branding screen **************** showed the full and simple logos as missing images even though the very same files render fine everywhere else in the a...
Sort departments alphabetically
The roster rendered department sections in whatever order the backend returned them. Sort the section keys A→Z (locale-aware); member order inside each section ...
Stop the first list row wearing a permanent focus ring
is but hide its ring until j/k is actually pressed; the first press just reveals it in place, and changing folders hides it again.
Share the accept-popup snooze across tabs, and stop a poll race clearing a live offer
Switch mailboxes from the same searchable picker the composer uses
The switcher was the weaker half of the pair: a select holding every mailbox the member can open, which for org-wide access is every mailbox in the org. It also...
Download the executed document, and choose a real signing order
The sender had no route to the finished document at all. EnvelopeSummary advertised a signedDocumentUrl pointing inside the kamo-signer app's own BFF, authentic...
Rebuild the mortgage market settings into seven coherent tabs
The MORTGAGE market page carried fifteen tabs, twelve of them lender config, and several answered the same question in two places: hedging was switched on under...
Pick the From address from a searchable dialog, not a dropdown
A select cannot hold this list. Everything the /messages switcher offers is sendable, and for a member with ACCESS_ALL_MEMBER_MAILBOXES that is every mailbox in...
Match the TypeScript DTOs to the Java ones they proxy
/api/webinar/* is a passthrough, so every TS field name that drifted from the Java DTO silently read as undefined instead of failing to compile. The settings ta...
Record the compatibility bridge and what retires it
The bridge is invisible from the code that will eventually delete it -- the field looks like a real part of the request. Name the condition that ends it: Securi...
Assign a mailbox to a department and to the organization
The department dialog's contact email was free text, so it could name an address the org does not own. It becomes a picker over the org's real mailboxes -- the ...
Populate the Quick Tips and use the shared help primitives
The scheduled-support tips rendered four placeholder strings ("How Step1"…); replace them with real guidance covering the type → presenters → slots → reminders ...
Compose from the mailbox you have open, and offer every one you can access
New Message opened the composer on the member's default mailbox: only onBehalfOf was passed, and only for another member's mailbox, so a personal or shared mail...
A Manager field on Position, and one people picker for the whole app
The Position card gains Manager, optional. It is a search, not a dropdown: an org can hold thousands of names, and the only thing a select with all of them guar...
Draw departments as an org chart with a parent picker
The departments tab was a flat list, so an org with Operations > Customer Success > Onboarding had no way to say so and no way to see it. Add/edit gets a Paren...
Grow the To/Cc/Bcc fields to three rows, then scroll
The recipient fields in the compose tool window were a single nowrap row that had to be dragged sideways to read, and the window is 360px wide and not resizable...
Make org creation survivable, and offer every branding option up front
The wizard could fail a customer in ways nothing on screen explained, and it asked for a fraction of what Settings → Behavior & Labeling exposes. Creation reli...
Make the create-account form tell you what happened
Creating an account from a lead appeared to do nothing. The server was returning a 500 (see the AccountAddress fix in kamo-shared-library), but the only error U...
Make the create-account form tell you what happened
Creating an account from a lead appeared to do nothing. The server was returning a 500 (see the AccountAddress fix in kamo-shared-library), but the only error U...
Keep the right-click menus inside the viewport
Right-clicking a folder low in the sidebar opened its menu below the fold. The flip-at-the-edge logic was there but never ran: the component returns null until ...
Send the editor's back button where the member came from
The wallpaper editor was a dead end — no way out but the nav rail. Both entry points (the home top-bar chip and the member profile header shortcut) now stamp th...
Stop a menu click on an open settings page from bouncing back, and repair the dead tab links
Clicking Apps & Features (or Stats & Costs) while /settings/account was already open landed on the tab you came from. Next.js swaps the query string without rem...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.