Update subdomain map comment KamoLOS → KamoMLOS
The /Next.js/KamoLOS project was renamed to KamoMLOS (Kamo Mortgage Loan Origination System). The KamoLOS name is now used for the new personal-loan service. Th...
/api/los/* proxy route → KamoLOS via k8s DNS
Mirrors the /api/billing/[[...path]] BillingService proxy: - *** session resolved via Redis; X-Org-Id + X-Member-Id forwarded - /api/los/webhooks/* skip session...
Add PERSONAL_LOANS commerce type front-end
- engagementTypeLabels: extend EngagementType union + vocabulary - MarketCardGrid: PERSONAL_LOANS color (#14b8a6) + Landmark icon + counter - Market detail page...
Email-preview links open in a new tab again
The sanitizer already sets target="_blank" on every link, but the document-level click handler in NavigationInterceptor was firing for every link click — includ...
Initial personal-loan origination + servicing service
New Spring Boot 3.1.5 / Java 21 microservice modeled on BillingService. Owns personal-loan domain end-to-end: - LoanProduct / LoanOffer / Loan CRUD with REST +...
Add PERSONAL_LOANS commerce type + entity package
- CommerceType.PERSONAL_LOANS + parallel EngagementType + vocabulary - BuiltinVendorCategories entries for personal-loan vendors - 15 personal_loans JPA entitie...
Photo-album uploads use the same WS pipeline as the Uploads tab
Extracts the doc-manager upload pipeline (hashing → dedup check → register-or-upload → WebSocket-driven conversion) into a reusable useImagingUploads hook. The ...
Add /api/security/mortgage-apps catch-all proxy — 404 root cause
The kamo-internal app proxies every Java backend path through an explicit Next.js route handler (one per top-level segment: /commerce-markets, /pos, /leads, …)....
Hide isActive=false programs from borrowers in real time
useProgramCatalog now filters out programs with isActive=false before returning them to the loan wizard. The flag is computed server-side as (base.isActive AND ...
/pipeline/{vertical}/{x} 404s — namespace was renamed to /commerce/
The /pipeline namespace has no routes in this app — every link going to /pipeline/applications/{x}, /pipeline/orders/{x}, /pipeline/engagements/{x}, /pipeline/s...
Backfill program offerings for existing mortgage markets on boot
DataLoader now calls **************** after the AppMortgage-engagement backfill. Sweeps every existing MORTGAGE CommerceMarket and ensures its program Offerings...
Bootstrap mortgage program offerings on market create + boot backfill
When the user creates a CommerceMarket with commerceType=MORTGAGE — via the Markets & Fields settings tab — the market needs program Offerings under it for down...
Detach before replacing features collection in /org/domain
The previous fix wired the applied-model projection into **************** but called org.setFeatures(projected) on the still-managed entity. The Organization.fe...
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...
Resolve ambiguous /org/domain handler — Commerce nav was disappearing
SecurityController had a second **************** that collided with **************** Spring rejected the request with "Ambiguous handler methods mapped" → 500 →...
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...
Add POST ****************
Deep-copies a binder the requester can see (owned, shared, or template) into a fresh binder owned by the requester. Copies every item (DOC, SEPARATOR, GENERATED...
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 ************...
PUT /programs/{code}/active + deprecate legacy mortgage POS endpoints
- MortgageProgramController gains PUT **************** with body {"isActive": bool}, gated on LOS_TAKE_APPLICATION. Delegates to **************** which upse...
Per-org enable/disable + deprecate legacy commerce-only mortgage path
- **************** upserts an OrgProgramOverride row with recordState.isActive=desired; listForOrg now AND's the base program's active flag with the overrid...
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" ...
Backfill mortgage engagements on boot
DataLoader now invokes **************** after rights sync and System User backfill. Idempotent — once an app is attached to its engagement+intent, subsequent bo...
Polish — backfill, delete cleanup, amount sync, appUid links
- **************** heals AppMortgages predating the wiring; called from SecurityService DataLoader. - AppMortgageService.delete cancels the engagement+intent ...
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...
Drive journey sky from SkyToggle, unstack from personality chip
- Move SkyToggle to its own top-right row at top-14 so the slider stops overlapping LoGuideChip, which is positioned at right-14 assuming it only needs to c...
Scrubbable day↔night theme with sun-moon SkyToggle
- Continuous t ∈ [0,1] scene position drives ~25 CSS custom properties on :root via linear RGB interpolation between warm-paper day and aurora night anchors...
Expose engagement/intent/commitment UIDs
AppMortgageDTO now carries the commerce-lifecycle identifiers that the SecurityService backend populates on every mortgage application. KamoLOS doesn't actively...
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...
Enforce LOS rights + /commerce/engagements endpoint
- MortgageAppController: every endpoint now gates on RoleRightType. Reads require LOS_VIEW_PIPELINE; creating a new application requires LOS_TAKE_APPLICATIO...
Wire URLA mortgage into Engagement/Intent/Commitment
Mortgage is one vertical of the commerce system — alongside retail, rental, service, subscription, and procurement. This wires the URLA-fidelity mortgage stack ...
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...
Include com.kamo.z.shared.binder in @EnableJpaRepositories
DocsService boots with an explicit basePackages list, not classpath scanning, so BinderRepository wasn't being discovered — startup failed with "No qualifying b...
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"...
Add Organizer backend — CRUD, render, generated docs
New REST surface under /api/docs/binders for the Organizer feature: - BinderController: CRUD, item add/update/remove/reorder, share, render - BinderService: org...
Add Binder/BinderItem/BinderShare entities and repositories
Adds the persistence layer for the new doc-manager Organizer feature: - Binder (Long id, owner member, org-scoped, isTemplate, binder-wide modifierJson) - Binde...
Lift home CTA cluster above the LenderFooter
Buttons at bottom-12/sm:bottom-14 were clipped by the lender attribution footer (~76px tall on desktop). Bumped offsets so the cluster clears it.
Glimmer the test banner, fit the viewport, add cookie consent
- TestModeBanner publishes its height to --kamolos-banner-h and globals.css subtracts it from min-h-screen so the home view no longer overflows the viewport...
Surface SAFE Act NMLS IDs for lender + assigned LO
Adds LoContactCard with avatar, presence pulse, verified NMLS link, and call/email/message actions in the top-left of hero and apply surfaces, so the borrower's...
Stop personality chip overlapping the SoundToggle
LoGuideChip was absolutely positioned at top-3/right-3 in JourneyHero and JourneyApplyLayout, the same spot as the global SoundToggle in app/layout.tsx. Shifted...
Stop racing hydration with a 404 — render the logo URL that actually exists
The tenant MinIO bucket holds logo-full.svg / logo.svg as canonical names; nobody uploads the -on-dark variants. We were trying the dark-mode URL first, 404'ing...
Unwrap SecurityService's nested color wire-format so tenant brand vars actually populate
SecurityService returns Organization with colors nested inside an EmbColorPalettePair ({ colors: { colorPri: { colorPri, colorLight, ... } } }) and stores hex w...
Render the logo img on the SSR pass — no more wordmark-only flash
ThemeLogo's empty-string initial logoSrc + useEffect-to-fill pattern meant the SSR render returned the wordmark fallback, then hydration populated the src. If a...
Kill fake-tenant defaults, render the actual org's branding only
Removes the Apex Mortgage demo I should never have added and the Kamo "default" fallback I replaced it with. Both were just papering over a missing-tenant condi...
Demo lender auto-loads when no real tenant resolves
The reason "still not branded" — no real tenant org existed for the hostname being tested, so the SSR fetch returned null and every lender-facing surface fell t...
Ship default logos so unbranded hosts render a real lockup
Ported ThemeLogo dropped the local-file fallback the kamo-internal original had, so any host whose tenant MinIO bucket hadn't been provisioned (or doesn't exist...
Make the lender the primary brand, not an accent
Reframes the borrower-facing app from "Kamo product with lender accents" to "lender's product, Kamo as the engine." Every surface now leads with the lender's id...
Migration for borrower-facing brand + disclosure columns
Adds the seven nullable columns the kamo-shared-library Organization entity now declares (TAGLINE / NMLS_ID / PHONE_SUPPORT / EMAIL_SUPPORT / EQUAL_HOUSING_DISC...
Emit lender brand + disclosure fields into per-org config.json
Two changes that finish the kamo-los borrower-facing branding pipeline: 1. OrganizationController gains a public GET /api/security/org/domain/{host} endpoin...
Add borrower-facing brand + disclosure fields to Organization
Seven new nullable columns powering the lender-branded surfaces in kamo-los's borrower app: - TAGLINE — marketing line shown on the brand-intro spl...
Deep org-theming integration across every borrower surface
Executes the full plan from the org-theming analysis: every CTA, glow, progress bar, focus ring, ambient orb, chat surface, header logo, and attribution line no...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.