Stop forking the signing surface, and offer the whole signed record
kamo-internal carried a hand-copied fork of the external signer app β fifteen files under app/lib/esign, app/stores/esign and app/components/esign/signing, each...
One table per game, and drop the cast the union forced
Follow-up polish on the Games entitlement gate. No behaviour change; the tests that pin it are unchanged and still pass. **************** was typed `GamesOrgan...
Move the balance out of the top bar and into the Games menu
The bar is fixed chrome and already crowded β greeting, branches, availability, the compliance clock, the bell, chat, language, account β and a balance is not s...
Drop aiThinking from the client mirror too
It was always false on the wire and nothing rendered it. Removed alongside the server field so the two shapes stay identical β a mirror that keeps a field the s...
One module owns the link from the plan page to the billing tab
Every action on /myplan is a link into Plans & billing, and it has to land on the right sub-tab or "Payment and invoices" opens on Subscriptions and looks broke...
Drop the unused dense prop from OrgOAuthAppSection
No call site passed it, and all eight embeds want the full header. A prop kept for a caller that does not exist is API surface someone has to reason about later...
Drop the container ref nothing reads
containerRef was declared and attached to MessageBrowser's root element, but containerRef.current is never read anywhere in the file β it has been dead since it...
Rename Copilot Mobile App to KamoMobile
The mobile app is KamoMobile now. This renames every reference to it in this repo β the strings members read, the route, the i18n namespace, the components, the...
Eight clinical reasons were being collected by window.prompt
Stopping a medication, closing an order loop, cancelling an appointment, merging two patients, declaring two records not a match, withdrawing portal access, dec...
The tab's own session names its organization; `?org=` leaves the URL
Builds directly on 05ff51b3, which established the right source of truth β the tab asks its own session which workspace it is in, over a call the per-tab token ...
One window per session, and the shared column
AI chat was the only tool deriving "maximized" from a ResizeObserver threshold instead of reading the flag every other tool reads, and the only one switching co...
Render the shared pane, and widen to 550
NavTopPanel's Chats tab now renders ConversationsPane instead of the old ChatsList, keeping its own search field and passing **************** so members keep th...
The settings tab opens the calendar's editor
Sharing the day picker was the half-measure. It left two forms that still had to agree with each other about recurrence, times, effective range, note, save sema...
Rebuild the console on the house design language
The first pass was wrong and it was wrong in a way that should have been obvious before a line was written: I built Tailwind divs, MUI Tabs and hardcoded rgba c...
Lift the wallpaper and widget shortcuts above the media pod
The profile header band laid "My Wallpapers", "My Widgets" and the media chrome out as one wrapping row, so the two shortcuts read as a fourth switch sitting al...
Hand the editor what it needs instead of re-asking
DocumentEditor fired POST /api/docs/form-fillable/{id} on every mount purely to read classicEditable β a write used as a query, re-deriving a row the call that ...
Make the Modify rules testable, and drop a dead field
Both rules the Modify menu encodes have shipped wrong once β form fillable was disabled on the rows whose fields are meant to stay editable, and it was offered ...
Drop the masthead stat rail, move the filter to the bar
The five counted tiles are gone from the header. It now states what the page is and gives the rest of its width to the primary action. They were also the only ...
One loading screen instead of four, all on the full logo
There were four copies of the same full-screen loading markup β the navigation screen, both of /validate's pre-result screens, and /logout β identical down to t...
The player is a module singleton, not a React value
Firing a sound read a context, which made every call site's POSITION IN THE TREE part of its correctness. A component rendered above SoundProvider got a no-op a...
Sign inside the app shell, behind one page header
The wizard opened as a fullScreen MUI Dialog, so signing a package threw the member out of the product: NavTop and NavPri were covered, there was no rail and no...
Fold the back arrow and book icon into the header title
The /kb body repeated the gradient header title verbatim. Drop the duplicate, move its book icon onto the h1 and park the back arrow to the right of it.
Drop the speed dial heading
The tab is reached by its own icon and the rows say what they are, so a title and a sentence of explanation above them only cost vertical space in a panel that ...
One Plans & Billing screen instead of two that each answered half
The platform had two billing screens. /settings/account?tab=billing answered what the organization pays; Plans & Billing on the member profile answered what a p...
One strip β filter and refresh beside the sub-tabs
The controls sat in a second full-width row under the tab strip holding three short words and an icon, spending a whole band of the pane on what fits in the spa...
One writer of the *** TTL, and it is the activity tracker
/api/user-info wrote the session TTL straight to Redis, bypassing every service-side rule β and useUserInfo polls it every five minutes forever, so that one lin...
Make the accept-popup's judgement calls testable, and settle the deferred minors
Drop the Notes settings page and section
The Notes settings page was only a ComingSoonTab placeholder, so it gave members a nav entry and a landing card that led nowhere. Remove the route along with ev...
Consolidate the member surface onto ?tab=legal-compliance
The standalone **************** route rendered the same component as the settings tab behind a second URL. Delete it and keep the tab: one surface, one entrance...
Drive the remaining polled screens from NATS/WebSocket
Fifteen network polls across the app, replaced with the events that were already happening or with events added to the services that own the state. Mail β the ...
Put per-file upload settings inline to halve card height
The Description/Folder/Doc Type/Access Level fields sat on a second line under the file row, so every pending upload cost ~108px. Move them into the top row bet...
Move System Debug under Platform Administration
**************** diagnostics are operator tooling, not an access rule, so the tab now sits at **************** behind the platform-admin guard instead of MANAGE...
Move break glass into the primary rail
The activation control was a fixed pill anchored to the bottom-left of the viewport. That put a privileged action somewhere nothing else lives, which reads as a...
Drop the dead 'just extended' UI from the timeout popup
justExtended was never set to true β the popup closes on extension rather than showing a success state β so the CheckCircle2/Shield branches, the alternate titl...
Translate the steward console panels; drop the label escape hatch
Catalog, Identifiers, Ingestion, Loan Sale Desk and the Pipeline table rendered hardcoded English inside a console whose other screens were fully translated. Al...
Use next-intl keys for the Mobile Devices strings
Swaps the literal labels added with the Devices sub-tabs for **************** and .mobileDevices.* keys, now published in the translation dictionary (CI fans th...
Fold Document QC into Documents & Conditions; PDF ingest notices
Document QC had its own steward screen for work that is the same documents, on the same loans, done by the same reviewer. Splitting it across two tabs made some...
Consume @kamo/* shared libs, delete duplicated web copies
kamo-internal now imports the shared TS packages it originally seeded (one - avatarUrlTransform β re-exports @kamo/media-core (getAvatarSizedUrl, transformAva...
I18n the LabelManager software-identity labels via next-intl
Replace literal strings with **************** keys (added to the translation dictionary). English fallback covers locales pending translation.
Phase 2 review polish β drop dead prop, dedupe LTV/equity warn, guard 0-value mismatch checks
Split form into Loan / Borrower / Subject Property tabs
Splits the mortgage sub-form's mega-grid into four sub-tabs (Loan, Borrower, Subject Property, What-If Studio) and renames "Property Address" to "Subject Proper...
Use dictionary t() keys for MLOS integration UI strings
Replaces the `// i18n: dictionary key TODO` placeholder literals in LeadMarketManager (MLOS Integration select), MeridianLinkConfigDialog (field labels, Test Co...
Drop the collapsible box around upload + gallery
The "Your wallpapers" section was a collapsible SectionHeader + Collapse β no reason to hide the upload and gallery behind an expand toggle. Replace with a stat...
Drop the Background & Theme section from My Account
Completes the consolidation onto the dedicated wallpaper page: removes the org-vs-own switch, its handler, the "My Wallpapers" link and the now-unused backgroun...
Render the console background globally in the layout, not per page
The background switch stays on the home page, but the chosen background (plain gradient or org slideshow) should be behind EVERY page, not just the two landings...
Move status editor onto the tabs row; note callback auto-note
- Status/sub-status editor now shares the primary-tabs row: tabs left, status aligned right (removes the separate row under the action buttons). - Callback di...
Remove Vendor Product ID from mappable fields
The vendor product is selected once at the run/template level (Configure step) and applied to every row; the backend importer already ignores a mapped vendorPro...
Single Integrations tab replaces AUS-only tab (D40)
MortgageIntegrationsTab: all 15 vendor categories (credit, AUS, eSign, closing- docs, title, flood, β¦) in one tab, each an expandable section with add/remove co...
Drop redundant in-view titles on Templates/Past-Imports tabs
The sub-tab labels already name the view, so remove the h4 title + subtitle from LeadImportTemplateManager and LeadImportHistoryManager; keep the refresh action...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.