Checkbox selection no longer reloads the grid
Selecting a row checkbox called setSelectedIds(new Set(...)), which was listed in loadLeads' useCallback deps. That gave loadLeads a new identity on every click...
Use the full logo in the masthead (top-left)
Was the icon logo (64x64 square). Switch to variant="logoFull" (logo-full), sized 56px tall with auto width (capped 320px) so the wordmark isn't squished.
MLOS integration dropdown on market modal
Add a MLOS Integration dropdown **************** to the market Add/Edit modal, shown only for Service > Residential Mortgage markets, plus a Configure button be...
MeridianLink per-market Configure dialog
New MeridianLinkConfigDialog, modeled on the platform OAuth EditDialog, scoped to a single LeadMarket's connection via losConnectionApi (Phase 3 backend). Edits...
Center the watermark logo in the page area
Was pinned bottom-right (backgroundPosition "right -4% bottom -8%"). Center it in the content region — inset past the nav rail + top bar via --nav-pri-width / -...
Align losConnectionApi.remove return type
The DELETE endpoint returns {deleted:true, marketId}, not just {deleted:boolean} — align the client type to match the backend shape.
Real soft-delete + reactivate-on-upsert for LOS connection; safe test-connection message
I1: view()/testConnection() now read via the shared-lib's active-filtered finder so a soft-deleted (market,provider) connection reads as "not configured" instea...
Active-filtered MarketLosConnection finder
Adds **************** so consumers can treat a soft-deleted (isActive=false) LOS connection as absent, mirroring SocialConnectionController's active-filtered re...
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...
MeridianLink vendor client-id card on platform OAuth registry
Adds a MeridianLink Mortgage ProviderDef to the platform OAuth2 client registry **************** vendor client_id ("Vendor Client ID") + non-secret config.token...
PlatformOAuthProviderType append-order guard
Regression-locks the Phase 5 pull-forward: MERIDIANLINK(8,"meridianlink", "MeridianLink Mortgage") must stay the LAST constant so no existing provider's persist...
Market LOS connection proxy + client
Phase 3 (Task 3.2) kamo-internal half: the Next.js proxy + typed client for a market's MeridianLink connection, backed by SecurityService's MarketLosConnectionC...
Market LOS connection service/controller
Phase 3 (Tasks 3.1-3.2) of the MeridianLink external-LOS integration: CRUD + Test-Connection for a market's MeridianLink connection. - MarketLosConnectionServi...
Fail closed on blank MeridianLink Save status + OKWithWarning test
LO-XML field mapper
LoXmlFieldMapper translates Lead/LeadClaimMortgage <-> confirmed MeridianLink LO-XML ids (sLAmtCalc, sPurchPrice, sApprVal, sLPurposeT, aBFirstNm, aBLastNm) wit...
MeridianLink modified-loans + deep-link
Adds ListModifiedLoansByAppCode (parse ArrayOfString -> loan names), **************** and AppView.GetPmlLoanUrl (prefix the partial URL with the origination hos...
MeridianLink SOAP client create/save/load
MeridianLinkSoapClient wraps the Loan.asmx ops over a Spring-WS WebServiceTemplate (namespace **************** per-op SOAPAction): Loan.Create -> loan name; Loa...
MeridianLink auth ticket cache
MeridianLinkAuthService mints and caches the sTicket per (instanceBaseUrl + sha256(clientSecret)) with an injected Supplier<Instant> clock and a configurable TT...
MeridianLink creds resolver
Adds the Phase 2 SOAP-adapter package **************** with MeridianLinkCreds (secret-redacting record) + MarketLosConnectionResolver, which decrypts the per-ma...
LeadLosLink entity + repository
Tracks a lead's link into an external LOS loan file, one row per (lead, provider). Carries the sync bookkeeping (contentHash, lastPushedAt, lastPulledAt) that P...
MarketLosConnection entity + repository
Per-market credential/config connection to an external LOS (MeridianLink / KamoMLS / Encompass), one row per (market, provider). Secret lives only as an AES-256...
Send X-***-Token on the upload XHR (fixes all uploads failing)
The session moved from a cookie to per-tab sessionStorage (896ea516); window.fetch is monkey-patched to attach X-***-Token to /api/* calls, but the raw XMLHttpR...
LeadMarket.mlosIntegration column + DTO round-trip
Adds the MLOS_INTEGRATION column (STRING-stored, defaults NO_MLOS, null-guarded getter) plus DTO/create/update-request plumbing. LeadMarketService collapses the...
Console-background pref per-member in DB; clearer upload error
- useBackgroundMode now persists the plain/slideshow choice in the member's DB ui-preferences (follows the member across devices) instead of per-device loca...
Promote base mortgage-market leads to LeadClaimMortgage on save so mortgage fields persist
A lead whose market sub-type is (residential/commercial) mortgage was stored as a base Lead unless the backend salesType itself equaled the mortgage type, so up...
What-If Studio as 3rd form sub-tab; sandbox stacked to fit form column
Header KPIs show reliably (relax gate + wrap header row); swap output columns, **************** on left
Cap concurrent uploads (queue, max 3)
Multi-file upload fired every selected file at once, and the burst of concurrent server-side resizes OOM'd the image service. Queue the uploads and run at most ...
Outputs panel 2-col (Eligibility left, short menus right); drop KPIs/meters now in header
Bump memory to 2Gi (headroom for concurrent ffmpeg)
With the resize semaphore in place, give the pod room for the JVM plus up to 2 concurrent ffmpeg image decodes so multi-file wallpaper uploads no longer OOMKill...
Mortgage KPI + LTV/DTI/Complete summary in page header (all tabs, residential-mortgage only)
Bound concurrent ffmpeg to prevent OOM under upload bursts
A multi-file upload fires all files at once; each ffmpeg decode allocates the full uncompressed frame, so N concurrent large images blew past the pod's memory l...
Split fields into Mortgage Details / Property Address sub-tabs; drop card title
What-If overrides beside live comparison table; remove dead LeadScenarioWorkspace
Fields show as labels in view mode, inputs in edit mode; flagged state dropdown
Rebuild to pick up shared-lib mortgage fields (LeadClaimMortgage +6)
Downscale-only (never upscale small images)
**************** scaled small images UP to fill the box (800x600 -> 1440x1080). Compute a concrete downscale factor capped at 1.0 from the probed dimensions ins...
Harden ffmpeg resize (probe safety, dim caps, bomb guard)
Adversarial-review follow-ups on the ffmpeg rewrite: - probeDimensions redirects ffprobe output to a file and calls waitFor() FIRST (destroyForcibly on timeou...
Fail the upload if resize fails (no full-size fallback)
Reverts the store-original fallback: if ConversionService cannot resize the image, return 422 instead of storing the full-size original (a huge image would then...
Resize backgrounds via ffmpeg subprocess (crash-isolated)
ImageIO + webp-imageio could native-crash the JVM (SIGSEGV in libwebp-imageio, UpsampleBgraLinePair_SSE2) on certain WebP inputs, taking the whole ConversionSer...
Mortgage Details tab wiring + Contact Info rename; remove inline mortgage block
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.