Remove standalone Applications icon — LOS lives under Commerce
The mortgage application pipeline is one vertical of the commerce system, not a top-level nav. Loan officers, processors, and underwriters reach it via Commerce...
Duplicate binders so users can fork without affecting the original
Adds a "Duplicate" action accessible from the binder list's context menu and from a new button in the editor header. The duplicate starts from the source binder...
Mortgage Programs toggle + MORTGAGE engagement deep-link
- MortgageProgramsPanel now ships a real Switch on each program card with optimistic update + rollback on failure. Toggling a program calls PUT ************...
Show Engaged / Committed badge on application cards
Each mortgage card in /applications now renders a tiny chip next to the pair count: green "Committed" when the loan has a Commitment (funded), indigo "Engaged" ...
Flatten add-item menu so Generated Docs are reachable
The "Add Generated Doc" submenu approach didn't work: clicking the menu item closed the parent menu, which unmounted the MenuItem before the nested Menu could a...
Show Commerce context + Programs settings tab
- /applications hero now reads "Commerce > Residential Mortgages · URLA 2021" so staff see mortgage as one vertical of the commerce module, not a standalone...
Stop double-appending render query string; add share + meta dialogs
Render fix: - **************** was manually appending ?inline=true to apiPath, but forwardToApi already preserves the incoming query string. The duplicated quer...
Add Organizer tab with binders, separators, generated docs
Adds the Organizer to the doc manager: - New "Organizer" tab (position 4) with a binder list + editor split view; existing tabs shift right - "Add to Organizer"...
Bypass service worker for attachment + inline-image fetches
Clicking an <a download> attachment row navigated to the file instead of downloading it. The email service worker was intercepting every /api/email/* GET, inclu...
Resolve cid: inline images at sanitize time to stop signature flicker
Cid: rewriting was happening in a post-commit useEffect, so the sanitized HTML hit the DOM with literal src="cid:..." and the effect mutated each img on the nex...
Surface previousMilestoneSha256 in pipeline timeline
The hash-chain link is rendered as a small monospaced 'prev <hash>' chip next to the existing snapshot hash, with the full value in the title tooltip. No new tr...
Surface HMDA LAR validation issues in the UI
HmdaLarRecordDTO now carries an issues array; HmdaLarClient renders: - an amber banner above the table summarising rows-with-issues (Σ errors / Σ warnings) ...
Unify all dashed empty-state boxes into <EmptyState />
A dozen inline copies of "rounded-xl border-dashed border-white/10 bg-white/[0.015] …" across the section files, the kanban column, the HMDA LAR list, and the a...
Surface preTransitionLint warnings in TransitionDialog
Both TransitionDialog implementations (detail Pipeline section + kanban board) now fire the lint endpoint when the user picks a target status and render an ambe...
Global toast queue with provider + useToast hook
New ToastProvider at the layout level renders a Framer Motion stack of context-managed toasts and exposes a typed useToast() API (success/error/info/warn). Pipe...
Promote ModalShell/ModalActions and SaveSpot to shared modules
Eight section files plus the webhooks admin page each defined their own copy of ModalShell + ModalActions and/or a SaveSpot save-state chip. All now live in [ui...
Merge partial DTOs into local state, drop refetch-after-patch
Every edit-style autosave (name fields, employment, assets, liabilities, REO, declarations, military, HMDA demographics, originator) used to issue a full mortga...
Recover gracefully from CONCURRENT_MODIFICATION on transitions
Promotes API error handling to a MortgageApiError class that preserves the backend error code; transition handlers in PipelineSection and the pipeline kanban de...
Name display, REO lien editor, webhook admin, string cleanup
Polish pass aligning the frontend with the corresponding backend changes: - Components now render the resolved *MemberName fields from the backend (PipelineS...
Pricing, disclosures, HMDA LAR UI
Three more sub-projects shipped end-to-end: Sub-project 5 — Pricing & AUS section on the detail page: - Pricing snapshots list with add dialog (program, invest...
LOS pipeline UI — kanban, detail section, template admin
Sub-project 4 frontend, end-to-end: - /applications/pipeline (PipelineBoardClient): kanban grouped by LoanFileStatus with off-ramp lanes below the happy-path...
Originator & Submissions sections UI
Closes out Sub-project 3: the originator route gets a two-block editor (individual NMLS + organization NMLS + org address) wired to patchOriginator with the sta...
HMDA Demographics section UI
Replaces the Coming-Soon placeholder for the hmda route. Ethnicity uses the tri-state lookup with an inline sub-checkbox block when Hispanic is selected (Mexica...
Military Service section UI
Replaces the Coming-Soon placeholder for the military route. The everServed switch upserts via mortgageAppsApi.putMilitary; toggling it off also clears the serv...
Real Estate Owned section UI
Replaces the Coming-Soon placeholder for the REO route. Each property card edits the address, occupancy/status/intended-use, market value, monthly insurance+tax...
Liabilities & Expenses section UI
Replaces the Coming-Soon placeholder for the liabilities route. Section 2c liabilities track unpaid balance, monthly payment, months remaining, and the three UR...
Assets & Credits section UI
Replaces the Coming-Soon placeholder for the assets route. Splits the borrower's asset list into Section 2a (bank/retirement/other accounts, type id < 50) and S...
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...
Je, unaona nini kuhusu usafiri?
Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.