Changelog
Cosa c'è di nuovo.
Ogni miglioramento alla piattaforma, come si spedisce.
· SecurityService
Emettere il marchio di creditore + i campi di divulgazione in per-org config.json
Due cambiamenti che terminano il canale di marca Kamo-los: 1. OrganizationController ottiene un GET pubblico /api/security/org/domain/{host} endpoint. Risolve l'org con l'esatta partita di OrgDomain, poi torna dopo cadere il nome host più profondo alias (apply.lender.com → lender.com) così kamo-los SSR org fetch atterra il record del lender sulla prima vernice. 404 quando nessun org possiede un dominio corrispondente. ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** - Le chiavi originali (siteName, siteNameShort, backgroundImageCount, logoFullExt, temaRevisione, descrizione) — forma immutata. - La tavolozza di colori completa: colorePri, colorePriLight, colorePriLightest, coloreSec, coloreSecLight, coloreSecLightest. Precedentemente i colori solo atterrato in per-org globals.css; kamo-los li aspetta in config.json così DynamicMetaLoader può scrivere --org-* vars CSS prima prendere qualsiasi foglio di stile. - I nuovi campi organizzativi (tagline, nmlsId, phoneSupport, emailSupporto, equalHousingDisclosure, suPrimaryText, gradienteDirezione, annoEst). phoneSupport rientra a org.phoneTollFree.number quando non esplicitamente impostato — la maggior parte degli org utilizza la stessa linea per entrambi. Old String-based buildConfigJson(...) firma tenuta come un back-compat wrapper quindi nessun sito di chiamata esistente si rompe. JSON è costruito tramite un piccolo aiutante StringBuilder con una corretta fuga per \, ", \n, \r, \t e chars di controllo; i valori vengono ancora da fonte controllata ( colonne DDB) ma il passaggio di fuga significa un lender slogan incollato con citazioni non corrompere il file. Compili puliti contro l'entità dell'organizzazione condivisa aggiornata.
· kamo-shared-library
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 splash + footer - NMLS_ID — NMLS Consumer Access identifier - PHONE_SUPPORT — borrower-facing support phone (falls back to phone_toll_free) - EMAIL_SUPPORT — borrower-facing support email - EQUAL_HOUSING_DISCLOSURE — 'EHO' | 'EHL' | 'BOTH' (NULL = EHO default) - ON_PRIMARY_TEXT — explicit foreground hex over primary brand fill (overrides kamo-los's luminance auto-pick) - GRADIENT_DIRECTION — 'linear-135' | 'linear-90' | 'radial' | 'conic' All seven are read by SecurityService's OrgThemeProvisionService into the per-org MinIO config.json, then consumed by kamo-los's DynamicMetaLoader, LenderFooter, HelpSheet, and HeroBrandIntro. Unbranded orgs fall back to neutral kamo-los defaults at the UI layer. Matching DDL goes in KamoInitializerService (OrgBrandingFieldsMigration).
· kamolos
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 now picks up the lender's brand colours when an org record is provisioned, while status colours, Kamo brand assets, and borrower-personal colours stay product-canonical. Foundations: - Server-rendered <style> tag **************** bakes the org's --org-* CSS vars into :root before first paint, killing the default-aurora → tenant-colour flash. - WCAG luminance helper (lib/org/luminance.ts) computes --org-on-primary from the brand colour so text on the primary fill stays AA-readable even with pale or busy lender brands. Lenders can override via the new onPrimaryText field on Organization. - New --org-* vars: --org-on-primary, --org-gradient, --org-primary-rgb, --org-secondary-rgb. Tailwind v4 @theme block adds bg-org-primary / text-org-primary / ring-org-primary / border-org-primary / text-org-on-primary / bg-org-gradient utilities that resolve to those vars at render-time. Opacity modifiers work via color-mix. - DynamicMetaLoader recomputes the same values on mount and supports a ?themeOverride.* query-string escape hatch for QA / support previews. - <link rel="preload" as="image"> for the lender logo in the SSR head. Organization DTO expansion: - tagline, nmlsId, phoneSupport, emailSupport, equalHousingDisclosure ('EHO' | 'EHL' | 'BOTH'), onPrimaryText, gradientDirection. - LenderFooter renders NMLS Consumer Access link + EHO/EHL mark. - HelpSheet uses lender phone/email when set, falls back to Kamo defaults otherwise. - HeroBrandIntro shows the lender tagline. - /apply/done timeline + "Call us instead" CTA use lender contact. Surface swap (35 files): - Every bg-aurora CTA across landing / start / personality / resume / apply/done / ceremonies / 15 waypoint pages / workspace widgets / conversation flows / chat send buttons → bg-org-gradient text-org-on-primary. - bg-aurora/N opacity variants → bg-org-primary/N. - text-aurora → text-org-primary, border-aurora → border-org-primary, ring-aurora/N → ring-org-primary/N. - Hardcoded #7B61FF and #21D4A6 hex literals in chat / TRex bubbles / ChoiceGrid / MoneyDial / EstimateReveal / CelebrationStage / ProgressArc / DocumentUploadZone / ConversationTextField swapped to rgba(var(--org-primary-rgb), N) / rgba(var(--org-secondary-rgb), N). - PulseGlow defaults to rgba(var(--org-primary-rgb), 0.55) so every pulse on the app picks up tenant brand without per-call-site work. Explicit color overrides at the 3 prior call sites removed so the default flows through. - AmbientField orbs: first two pulled from --org-primary / --org-secondary via color-mix; third stays a dusky violet for chromatic contrast. - TaskHub current-task pill + TaskStepper progress bar already on the org gradient via the swap pass. - Form focus rings (focus:ring-aurora/40) flipped to focus:ring-org-primary/40. Logo + ThemeLogo: - Walks a fallback chain: logo-full-on-dark.{ext} → logo-full.{ext} → logo-on-dark.svg → logo.svg → wordmark fallback prop. On each 404 the next candidate loads; only when the chain is exhausted does the fallback render. Tenant simulator: - /styleguide gains a TenantSimulator component with six representative presets (corporate navy, warm orange, conservative grey, electric green, rose, midnight). Clicking a preset writes ?themeOverride.* params and reloads so the whole app re-skins live — lets designers and engineers verify any surface under any lender brand without standing up real bucket configs. Surfaces deliberately NOT themed (stay product-canonical): - StatusBanner success/warn (universal status signals) - TestModeBanner (safety signal) - AutosaveBadge teal/amber - Persona picker accent colours (borrower's choice, not lender's) - Rex avatar (Kamo mascot) - Time-of-day sky tints (journey narrative) - Personality accent colours (chat voice = borrower's pick) - Confetti palette (intentionally multi-colour for celebration) - Skip-to-content focus link (brand-neutral by design) Build 32/32, 140 tests pass.
· kamolos
Fare org branding forte — splash animato, nastro, bagliore, footer
Il sottile nastro di accento 1px e il logo dell'intestazione non stavano facendo abbastanza per celebrare il marchio del prestatore. Ora ogni superficie dell'eroe offre un reale momento di arrivo del marchio. - contesto di OrgProvider: il risultato di SSR org fetch è ora passato attraverso React contest (lib/org/OrgContext.tsx) in modo che i componenti del cliente possano leggere titolo, titoloShort, yearEst, ecc. senza re-fetching. - HeroBrandIntro: spruzzo di marca a schermo intero che spara sul prima visita a una superficie di eroe in una data sessione. Conico-gradiente alo nei colori primari→secondari dell'org, un anello a 16 particelle a spirale verso l'esterno, il logo del prestatore (o wordmark fallback) incentrato in un vetro carta con un --org-primario bagliore, "Benvenuto - ti portiamo a casa" sottotitolo, "tap where to skip" suggerimento. Auto-dismessa dopo 2.4s. I rispetti preferiscono-ridotta-mozione (scippato interamente). - BorrowerHeader: il nastro è ora 2px e animato — pentole sfumate org-primary → org-secondario → org-primary su un loop lento 8s (CSS keyframe @kamo-org-ribbon). Logo ottiene un framer-motion ingresso (fade + slide), scala hover, compressione del rubinetto e un morbido --org-primario bagliore ombreggiato che segue il colore del marchio. - Barra di avanzamento di JourneyCrest: era solido bg-aurora, ora utilizza lo stesso org-primary → gradiente di panning org-secondario come il nastro di intestazione con un bagliore morbido. Ogni passo il mutuatario completa le luci in i colori del prestatore. - LenderFooter: attribuzione persistente in fondo alle superfici eroiche che mostra "Powered by <Lender> · dal <year>" con un piccolo org dot e un marchio Equal Housing Opportunity. Fades in a 1.2s ritardo così atterra dopo che il cluster CTA si è stabilito. Rispetti di movimento ridotto. Tutte le animazioni onorano preferisce-ridotto-mozione. Costruisci 32/32 percorsi, 140 I test passano.
· kamolos
Port org-scheme theming from kamo-internal so borrower surfaces pick up lender branding
Ports the subdomain-driven org-theme system from kamo-internal into kamo-los, scoped down to what makes sense for an unauthenticated borrower-facing surface (no admin provisioning UI, no multi-tenant switching, no force-light-mode override since kamo-los is dark-by- design). How it works: - lib/org/theme.ts mirrors kamo-internal's Theme.tsx — getThemePath / buildThemeBaseForFqdn / orgFqdnFromHostname / KAMO_THEME_CONFIG_LOADED. Drops the deepest alias from the hostname so the borrower at apply.lender.com resolves to org FQDN lender.com → bucket folder lender-com → MinIO base **************** - lib/org/fetchOrganization.ts does the SSR org lookup against **************** via the existing proxy, with the optional KAMOLOS_SERVICE_ACCOUNT_*** for auth. Used by the root layout's generateMetadata() to seed the HTML title + description from the lender's org record before the page even hydrates. - **************** runs on mount, fetches <theme>/json/config.json, then: 1. sets document.title / apple-mobile-web-app-title / description 2. caches themeRevision + logoFullExt to sessionStorage for cache- busting and ThemeLogo 3. injects the favicons (96px, svg, ico, apple-touch, manifest) 4. maps the org's six colour slots onto the --org-* CSS var namespace at :root (NOT --color-*, so the aurora chrome stays canonical across orgs and only accent points opt-in) 5. dispatches KAMO_THEME_CONFIG_LOADED so logo + accent consumers can refresh Skips kamo-internal's force-light-mode <style> injection — kamo-los is intentionally dark. - components/theme/ThemeLogo.tsx renders the org logo from MinIO with aspect-ratio preservation, max-width/height caps, and a fallback prop for when the org isn't provisioned yet (so a broken image never ships). - globals.css gains the --org-primary / -light / -lighter / --org-secondary / -light / -lighter slots, defaulted to the aurora palette (#7B61FF / #21D4A6). - app/layout.tsx mounts DynamicMetaLoader and uses generateMetadata to seed initial title from the SSR org fetch. - BorrowerHeader: the left-side brand mark is now <ThemeLogo variant="logoFull" /> with a "Kamo" wordmark fallback. A 1px --org-primary accent ribbon sits above the header bar so the lender's colour shows up on every post-application surface without disturbing the dark surface palette. Build 32/32, 140 tests pass.
· kamolos
Port pubblico chat di supporto da kamo-marketing, ridisegnato per aurora tema
Porta il widget di chat di AI + supporto dal vivo da kamo-marketing nel app in prestito, ricolore alla tavolozza kamo-los aurora (base-superficie / inchiostro / aurora / anello-bianco) in modo che si sieda pulito sul superfici navy scure al posto della foresta-verde del sito di marketing. - lib/chat/proxyConfig.ts centralizza PUBLIC CHAT API BASE + Risoluzione PUBLIC CHAT API KEY. Valori (PUBLIC CHAT API KEY, API SERVICE URL, NEXT PUBLIC DOMAIN) cablato tramite lib/env.ts. - 6 percorsi proxy Next.js sottili sotto app/api/chat/* in avanti APIService /api/public-chat/* con lo standard X-Public-Chat-Key intestazione e X-Session-Token dove il percorso richiede. Traduttore endpoint conservato per la traduzione di incoming-agent-message. - carichi dinamicamente (ssr:false) PublicChatWidget. Montato a livello globale in app/layout.tsx così il lanciatore segue il mutuatario su ogni superficie (terraggio, applicazione, waypoints, spazio di lavoro, cerimonie). - PublicChatWidget pre-riempisce il nome del visitatore dal # When there's no salvato localStorage # valore, quindi i mutuatari che hanno digitato il loro nome nel flusso conversazione Non rientri nell'intestazione della chat. - AiChatPanel e LiveSupportPanel mantengono la modalità del sito di marketing separazione (AI = risposta richiesta HTTP, supporto = STOMP WebSocket con presenza battito cardiaco + coda di traduzione per messaggio) ma utilizzare kamo-los gettoni per superfici, bolle, ingressi e accenti. - ***Provider mantiene il widget Capcha PoW ma ricolora tramite CSS vars al viola aurora. Torna a Capcha. quando l'host è localhost o un IP. - JourneyHero Rex sprite spostato in basso-LEFT su tutti i punti di rottura (era in basso a destra su mobile) quindi il lanciatore di chat in basso a destra L'angolo non siede sopra di lui. - vendor/kamo-capcha-widget copiato dal sito di marketing come locale file: dep. .gitignore aggiornato per saltare il transito vendor/**/node modules npm crea durante l'installazione. Costruisci 32/32 percorsi (6 nuovi endpoint chat), 140 test passano.
· kamolos
Scena a strati con parallasse, movimento ambientale, atmosfera reale
Il primo taglio ha spedito un piccolo SVG statico dietro una vignetta aggressiva, quindi EMPTY LOT sembrava uno schermo vuoto. Sostituiscilo con una vera scena a strati che in realtà ha qualcosa su ogni stato. - Nuovo modulo lib/journey/scene/ con strati di parallax discreti: cielo (gradiente + sole-arc + stelle twinkling), nuvole alla deriva con liscia SVG-native animazione, silhouette Hills + skyline lontano con illuminato finestre dopo crepuscolo, la casa stessa (consapevole dello stato dal nastro dell'indagine a luci-on), primo piano (mailbox con bandiera a dondolo, erba, swaying fiori, alberi), e uno strato di uccelli opzionale. - EMPTY LOT mostra ora il nastro del sondatore, un segno SITE e il lotto vuoto in contesto — non più schermo vuoto allo stato predefinito. - Il sole attraversa il cielo mentre avanza il cammino; il polso delle finestre caldamente quando acceso; fumo di camino si alza quando le luci sono accese; fiori sway; la cassetta postale bandiera rocce; le finestre dello skyline distanti flicker indipendentemente. - Parallax puntatore su JourneyHero: 6 strati di profondità si traducono in diversi - Rex ritorna come uno sprite angolo 56px sull'eroe con un bob delicato. - La vignetta dell'eroe è ora una dissolvenza top/bottom, mai oscurante al centro dello schermo dove vive l'illustrazione. - Gli accenti di Persona rendono sulla parte superiore della facciata finita: bandiera del veterano onde, giardino di retiree ha fiori, il duplex dell'investitore mostra unità numeri, ecc. Ogni persona rimane visivamente distinta in tutti gli stati. Costruisci 28/28 percorsi, digitcheck clean, 140 test pass.
· kamolos
Sostituire il mondo 3D con il viaggio illustrato 2D
Uccidere la scena procedurale tre.js fine-fine e ricostruire il mutuatario viaggio visivo come modulo piatto, accessibile e mobile-friendly che navi con il supporto SSR completo e un punto di swap-in per l'arte ad alta fedeltà più tardi. - lib/journey/ prende il sopravvento: eroe illustrato / cresta / superfici di miniature, un risolutore patrimoniale, tre tracce di viaggio di persona-consapevole (acquisto 8-stato, refi 5-stato polacco, costruzione 8-stato letterale), e un segnaposto SVG parametrizzato resore chiave da persona + stato. - Nuova TaskHub su superfici /workspace tutti i 14 waypoint raggruppati per fase con stato fatto/corrente/todo. Inline TaskStepper rende in alto di ogni pagina waypoint per il movimento a flusso. - Rex lascia cadere il corpo procedurale box-dinosaur e diventa SVG piatto avatar in chat bolle e il chip guida LO. - /apply/* perde il pannello laterale 3D a semischermo; ottiene un sottile illustrato cresta in cima in modo che il modulo riempia la vista su mobile. - Gocce @react-tre/fibra, @react-tre/drei, @react-tre/postprocessing, tre, e @types/tre dal bundle. KamovilleMinimap, il mondo Negozio di zustand, macchina fotografica, particelle di pioggia, coda di cerimonia, e tutte le geometrie procedurali-scenali cancellate. - Costruisci prerender tutti i 28 percorsi, 24 file di prova / 140 test passa.
· kamolos
Infiniti livelli di terra + orizzonte profondità + segni di prato appropriati
Terra — non più cubo - SkyDome: sfera posteriore di 420 m colorata all'orizzonte TOD attivo, siede dietro drei <Sky> quindi qualsiasi cucitura agli angoli della fotocamera è riempita - FarTerrainDisc: piano a 360 m con segmenti 80×80, spostamento vertex attraverso il rumore del peccato/cos miscelato su una rampa radiale — il terreno vicino rimane piatto, lontano terra ottiene dolce 2-3 m colline - Mezzo vicinato: anello di erba di 140 m con undulazione mite, tinte tra il lotto e il terreno lontano - DistantNeighbours: 14 case processuali + tetto poste in un anello 60-95 m, con colori deterministici/variazioni di frusta ed emissivi occasionali finestre; legge come una vera periferia - HorizonHills: anello da 96 segmenti a raggi 145 m, colorato per nebbia sbiadisce nella banda del cielo — dà il contenimento verticale del mondo - Strada + marciapiede esteso da 40 m a 240 m in modo che convergano in nebbia - Lane trattiene auto-diffusione lungo la strada più lunga (ogni 4 m) Schiuma ora rampe [32, 160] (era [18, 90]), abbinato all'orizzonte di TOD-driven colore in modo che il cerchio del disco, le colline e le silhouette vicine si dissolvano nel cielo senza un confine visibile. Segni — riscrittura completa con anatomia immobiliare - Posti a doppia fila (due 0.07 m posti su entrambi i lati della placca, con punte-into-terra e tappi a sfera finiti oro) - Telaio che avvolge un corpo in placca bianca, entrambi i volti materializzati - Banda intestata colorata per programma; band emette subtly in modo che pops - Staffe di montaggio dove la placca incontra i post - tavolozza per programma: CONV indigo, FHA green, VA red, USDA ochre, JUMBO aurora, DSCR steel, HELOC teal, REVERSE plum, CONSTRUCTION yellow, RENOVATION ambra, ITIN magenta, BRIDGE arancione, più un aurora predefinito - Vincitore ora drammaticamente drammatizzato: - post più alti, placca più grande, testo più grande - spotLight puntato sopra la testa nel colore accento del programma - placca di tramoggia del pilota con testo "BEST FIT", delicatamente bobbing - l'alo dell'anello con accento sul terreno - Tutto il testo utilizza drei <Billboard> in modo che rimanga leggibile da qualsiasi telecamera angolo, con passante per contrasto contro qualsiasi colore della banda - Layout: vincitore in avanti e in centro, sostenitori in un ventilatore 1.4-rad dietro, non più sovrapposizione raggruppata con il vialetto - castShadow + ricevereShadow su ogni componente di segno in modo da guardare piantato
· kamolos
Cinematic 3D pass — postprocessing, materials, geometry, motion, weather
The 7-day analysis from the chat, executed: Day 1 — Foundations: - @react-three/postprocessing added: EffectComposer with SMAA, N8AO (ambient occlusion), Bloom (window glow), ACES Filmic ToneMapping, Vignette - gl tone mapping = ACESFilmic, output color space = sRGB, exposure 1.05 - AdaptiveDpr + AdaptiveEvents — drops resolution while interacting - New useTimeOfDay hook drives Environment preset, Sky inclination/rayleigh, Stars (at night), background, fog, ambient/hemi/sun/fill color, cloud color from useWorldStore.dayNightProgress - AccumulativeShadows + RandomizedLight replace the flat ContactShadows Day 2 — Procedural PBR-style materials (zero asset files, generated at runtime via canvas): - grass: mottled green base + 1200 grass-blade strokes - asphalt: dark gray with pepper aggregate - concrete: light gray with expansion joints + grain - vinyl siding: tinted base + lap lines + faux bevels + grain - shingles: staggered rectangle pattern with per-row colour variance + bevels - wood: planks with vertical grooves + grain + knots - bark: vertical stroke pattern - brick: staggered rows with per-brick colour variance and mortar gaps Applied to walls (siding or brick per persona), roof, ground, road, sidewalk, fence, tree trunks. Day 3 — Geometry refinement in Home: - Stepped foundation (two layers, slightly recessed top slab) - Gable roof (two slanted shingle planes + triangular gable end walls, custom bufferGeometry) replacing flat cones for most personas - Hipped roof variant for RETIREE / EXISTING - Eave overhang of 0.45 m on all roofs - Window assemblies: 4 trim sides + mullion cross + emissive pane - Door assembly: trim, recessed backing, hinged panel with 3 raised recess insets, escutcheon plate, golden knob, doormat - Two-story personas (DUPLEX, EXISTING) get a trim band + a second-floor window row - Garage with panelled door + own hipped roof - Home-office wing for SELF_EMPLOYED - Construction scaffolding for BUILDING - Porch deck + step + posts + slim roof on tall houses - Chimney smoke replaced with 6 alpha-card billboards drifting up and fading - Wreath + passport-stamp door details Day 4 — Motion: - CameraRig: settle-timer + Ken-Burns idle orbit + triggerCameraShake() impulse function (used on closing stamp + submit ceremony) - Trees: wind sway on canopy (per-instance phase, gentle elliptical rotation + subtle bob) - Birds (new component): 3 stylised birds orbiting on lazy ellipses with flapping wing planes (Z-axis rotation) and body pitch sway Day 5 — Interactivity: drei Html label floating above with accent glow, hover sound tick, click sound + haptic + router.push to the linked waypoint - Wired to: front door (-> /waypoints/front-door), mailbox (-> /waypoints/mailbox-econsent), workshop crate (-> /waypoints/bank-vault), lawn signs (-> /waypoints/lawn-signs-detail) Day 6 — Per-persona depth (new PersonaProps component): - 6 distinct car models in the driveway: starter sedan (FIRST_TIME), white work van (SELF_EMPLOYED), forest pickup (VETERAN + BUILDING), black luxury (INVESTOR + ALREADY_OWN), red sedan (NEWCOMER), gray classic (RETIREE) — all with bodies, windows, wheels, head/tail lights - RETIREE_EQUITY: birdbath, rocking chair, garden gnome - NEWCOMER_ITIN: paired lanterns flanking the door with emissive flames + point lights - ALREADY_OWN_CASH: ivy planters, "paid in full" sign in window - BUILDING: rotating crane (cabin yaws slowly), lumber stack, port-a-john - VETERAN: 4 trimmed hedges across the front + brass service plaque - INVESTOR: second mailbox in blue + "For Rent" yard sign - FIRST_TIME: emissive teal "SOLD!" sign in the front lawn - SELF_EMPLOYED: a small coffee cup on the porch Day 7 — Weather: - New Weather3D component bound to useWorldStore.weather - RAIN: 1200-point GPU rain particle field falling at 28 m/s, additive blending, plus a slick metallic overlay on the road for wet reflection - LightningFlash: directional flash bursts every 12-25s during RAIN - OVERCAST / RAIN modes ramp turbidity in <Sky> and add 2 extra darker Cloud volumes Bonus perf: - Fence posts + road lane dashes are now Instances (one geometry instead of 50+ meshes) - Birds reuse a small mesh, body materials kept under the bloom threshold
· kamolos
Real 3D environment + neighbourhood scenery + bolder home CTAs
3D scene was generic procedural boxes on a flat plane. Brought it up to a believable neighbourhood: - WorldScene: add drei <Environment preset="sunset"> for image-based lighting so PBR materials actually look lit, drei <Sky> for procedural atmosphere with proper sun position + Rayleigh scatter, drei <ContactShadows> for soft ground contact under the house, drei <Clouds> with 3 volumetric layers. - New 4-light rig: bright key sun + cool fill from opposite side + hemisphere for sky/ground bounce + ambient. Adds fog for atmospheric depth. Lot rewritten: - Far grass + lot grass tiers - Sidewalk strip running across the front - Asphalt road with painted lane dashes - Driveway from house to the road - Picket fence around the perimeter with horizontal rails + a gap at the front - 5 trees with multi-sphere canopies Home page (/) made obviously different from the pre-change version: - Hero headline overlay top-left ("Welcome home. Let's build it.") with aurora-clip gradient + Kamoville eyebrow pill - CTA cluster bottom-centre is now a backdrop-blurred raised panel holding both "Start your application" (with arrow) and "Pick your guide" with the selected guide's accent ring - Top-centre guide chip with the active guide's avatar, accent glow, name, and tagline — links to /personality LoAvatarChip now opens /personality and shows the selected guide's avatar + first name + accent glow, instead of the dead "your loan officer" pill.
· kamolos
3D cinematic journey + 10 personalities + persona homes
Major UI overhaul to lean into the existing 3D world rather than overlaying 2D chrome on top of it. - Rewrite Home with animated wall lerps, swinging front door, lit-window cascade, chimney sparkles, per-state spark bursts. - Add 8 persona-specific home styles (duplex with two doors, home-office wing + garage, flagpole, welcome wreath + passport stamp, mature garden trim, always-built EXISTING, scaffolded BARE_LOT_ACTIVE_BUILD). - Add Rex3D character that walks alongside the active camera target with a walk-cycle bob and yaw toward the destination. - Add 3D Mailbox with a flag that flips when the camera dollies to it; add WorkshopCrate that grows with HomeState; add TenantPassby for INVESTOR. - Add RouteCameraDriver that maps each waypoint route to a CameraTarget and drives pointCamera() on navigation. - Add SubmitPapers ceremony: 7 paper meshes fly in parabolic arcs from porch to mailbox when ReviewingPorch submits, with camera dolly to MAILBOX and Sparkles burst on landing. - Add door override in worldState so ClosingDesk swings the 3D door open on signing, with key/chime sounds. New animation primitives (components/motion): - SoundChannel + SoundToggle: Web Audio synthesized voices (tick, chime, drumroll, whoosh, clack, stamp, lock, sparkle, jingle, door, error) with persisted mute, prefers-reduced-motion respected. - ConfettiBurst: canvas particle system with imperative fire() handle. - NumberTicker: reusable count-up for currency/rate/integer/score. - ScoreDial: banded gauge with sweeping needle for credit/DTI/LTV. - ProgressArc + JourneyProgress + JourneyProgressLive: 14-stop journey ring pinned top-left, syncs to backend section completion. - KamovilleMinimap: persistent top-down SVG map with a pulsing borrower dot that springs to the active camera target. - PulseGlow, SuccessCheck, SignatureCanvas (stroke-replayed signing), CelebrationStage (orchestrates confetti + sound + haptics), haptics helper. Hero moments rebuilt: - EstimateReveal: cinematic with embedded 3D EstimateCrest (camera dollies OVERVIEW -> DRIVEWAY -> FRONT_DOOR, home advances to LIGHTS_ON, drei Sparkles fire on reveal). NumberTicker for payment + rate. Lock-in clack. - CreditLedger: drumroll on pull, ScoreDial sweep on result, NumberTicker for trade lines + negative items, medium CelebrationStage. - ClosingDesk: SignatureCanvas with stroke replay, notary stamp slam, 3D door swing via doorOverride, epic CelebrationStage on complete. - ReviewingPorch: paper-liftoff overlay + 3D SubmitPapers ceremony + camera dolly to mailbox + epic celebration on success. WaypointSheet themed per location (vault doors split, mailbox flag flip, lawn-sign stakes rise, porch glow), with entrance sound per theme. Wired to all 14 waypoint pages. ChoiceGrid: spring scale, hover tick, selected gradient wash. MoneyDial: spring-tracked aurora-gradient fill, per-step ticks + haptics, number scales with value, glow halo intensifies with position. ConversationTextField: focus glow, shake-on-error, SuccessCheck on submit. DocumentUploadZone: drag-zone bob, success checkmark, filing-cabinet stack of completed uploads. Personality system rebuilt with 10 distinct guides: - Thomas "T-Rex" Rex (warm-pragmatic), Maya Park (crisp-professional), Sunny Halverson (playful-bright), Walter Hayes (dry-mentor), Carmen Ortiz (gentle-coach), Devon Chase (sharp-strategist), Eleanor Whitfield (concierge-formal), Theo Banks (optimist-enthusiast), Sgt. Kowalski (veteran-direct), Bea Calhoun (storyteller-folksy). - Each has gradient-initial SVG avatar, accent color, tagline, and 16-intent copy bank rewritten in voice. - New /personality picker page with sample dialogue and accent glow. - Resolver supports selection + localStorage persistence. TRexBubble: mood prop **************** with bobbing animation and mood-tinted glow ring. Home page (/): new "Pick your guide" CTA + top-centre current-guide chip linking to /personality; minimap + HomeStateChimes pulled into WorldShell.
· kamolos
12 fogli waypoint rimanenti + 8 scena cerimonia impls
La fondazione di fase C — ogni punto di vista e la cerimonia slitta nella spec ora ha un superficie reale, stabilmente prerenderata. Adattatori Stub back the connect-first flussi; le scritture URLA si scambiano in per-vendor come i loro veri adattatori laureati. Fogli di waypoint (12 nuovi): - schede di proprietà (stubo di dati di proprietà) - bank-vault (asset connect stub) - banca-stato-upload (file picker, OCR pipeline terre M3d) - credit-ledger (soft credit pull stub) - reo-carousel (REO list w/ inline add) - portachiavi (10 si/no toggles) - hmda-pavilion (opzione etnicità/race/sex w/ decoder) - lo-desk-militare (diramazione veteran + date + pagamento VA) - lawn-signs-detail (catalogo del programma + scrittura del programma selezionato) - revisione-porch (avanzamento per sezione + presentazione tramite usoSubmitApplication) - chiusura-desk (involucro a spillo) - mailbox-econsent (4 consensi alle operazioni) Scene di cerimonia (8 nuove + cerimonia primitiva): - Componente cerimonia condivisa: sfondo gradiente + battiti di dialogo timed + ingresso framer-motion + Continua CTA (servizio, non Apple-keynote) - PersonaReveal, IdVerifyFrontDoor, CreditReturn, ProgramReveal, AutorizzareAndSubmit, AusFindingsArrival, ClearToClose, Eclose - La registrazione ora spedisce un Impl ComponentType per cerimonia; /ceremonies/[id] rende la scena reale tramite CereremonyClient ('Continue' ritorna a /) Tutti 14 waypoints + 8 cerimonie passare tsc + vitest + successiva costruzione.
· kamolos
Fondazione M3a — client di connessioni, ganci, 2 fogli waypoint eroe
Metà di fine anteriore della fondazione M3a Connect-first che il condiviso-lib Connessione + Verificato Il fato e' appena atterrato. - lib/los/connections-client.ts — client digitato per /connections + /verified-facts - lib/los/app-context.ts — useAppUid hook (URL ?app=θuid> with store fallback) - 4 ganci di query reatti: utilizzareStartConnection, useGetConnections, useVerified Fatti, utilizzareReconcileFatti - /waypoints/front-door — ID-verify foglio eroe utilizzando l'adattatore a stub id-verify - /waypoints/paystub-clipboard — il reddito collega il foglio dell'eroe utilizzando il reddito adattatore per borchie - /waypoints/layout.tsx ora monta waypoints all'interno di JourneyShell - /persona ora chiama utilizzareSetPersona tramite la vera API quando ?app= è presente - SceneRoot legge un personaggio prop (flag / giardino / accenti di crepa) invece di demo del ciclismo; usarePersona legge ?persona= dall'URL ed è filettato attraverso WorldShell, MobileCrest, JourneyShell - JourneyShell avvolge i suoi pannelli mondiali in Suspense quindi usaSearchParams legge non salva più le pagine statiche (/apply/done) dal prerendering Adattatori Stub sono il default ovunque — reddito reale Plaid, Persona ID, ATTOM, e CRA cablaggio terra per-vendor in M3b+.
· SecurityService
MortgageConnectController — connessioni + fatti verificati + riconciliare endpoint
Esprime la prima superficie di cattura a ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ - GET/POST /connections + POST /connections/{id}/completo - GET/POST/fattori verificati + POST/realizzato/reconcile Rivestimento del portafoglio — nessun cancello di diritti per la regola delle caratteristiche interne. Autorizzazione specchi MortgageAppController via orgId() da BaseLosController.
· kamo-shared-library
Connessione + Verificato Fondamenti fatti per la prima cattura di connessione
Aggiunge la fondazione backend M3a per le connessioni dei fornitori e la provenienza-tracciata fatti verificati. Cablaggio SDK (Plaid, Persona, ATTOM, uffici di credito) laureati per-vendor in M3b/M3c/M3d. - ConnessioneVendor / ConnectionStatus / verificato FactSource enums - entità di connessione (LOS CONNECTIONS): una riga per sessione di fornitori, detiene esternoRef + Vault accessTokenRef (valori mai grezzi), riferimenti AppMortgage e Borrower opzionale da uid - Ente verificato (LOS VERIFIED FACTS): una riga per valore raccolto con campoPath, valueJson, provenienza di origine e ref di connessione/documenti facoltativi - Deposito di dati di primavera con @Query solo ricerche attive da app uid + venditore - DTO serializza i long uids come String (Jackson JsonFormat) per evitare JS MAX SAFE INTEGER overflow su CockroachDB Unique rowid() - No, no. + VerifiedFactService.record + Non e' vero. (M3a ponteggio; per-vendor campo mappatura navi insieme vero adattatori in M3b) L'utente deve riavviare KamoInitializerService così Hibernate ddl-auto=update crea Le tabelle LOS CONNECTIONS e LOS VERIFIED FACTS prima che arrivi il servizio di sicurezza.
· kamolos
Incorniciare il legacy URLA wizard all'interno di JourneyShell
Fase A del prestito-giornale: il mondo 3D rimane in vista mentre il mutuatario funziona attraverso ogni sezione. Su ampie porte (≥xl) il mondo riempie un pannello destro del 40% appiccicoso; sotto xl si restringe a una cresta di 28vh sopra la superficie di lavoro. La casa ora avanza stati da EMPTY LOT attraverso LIGHTS ON come sezioni wizard sono completate e lo stato del prestito si muove. - Nuova lib/world/JourneyShell avvolge /apply/[sezione], /start, /persona - Nuovo risultatoHomeState riduce il progresso app + sezione a un HomeState Ora porta a casaState come un oggetto di scena. (defaulting via useHomeState); il ciclo di ciclismo demo M1 è andato - La guida destra di WizardShell si nasconde a xl+ quindi JourneyShell possiede la colonna destra - èSectionDone estratto da computeSectionStates come pura esportazione
· kamolos
Mondo diventa homepage — / serve la scena 3D, /start è il portico conversazione, /giornali percorsi appiattiti a /persona /waypoints/[id] /ceremonies/[id]
Borrower atterra direttamente nella nuova esperienza sull'URL pubblico invece dell'atterraggio di conversazione legacy. Homepage CTA capovolge tra 'Start your application' (ospite fresco → /start) e 'Continue your application' (ritorno visitatore con appUid → /apply/property).
· kamolos
LawnSigns componente r3f + SignSheet + ConfrontaMode + segni demo cablati in SceneRoot
· kamolos
Flusso di selezione personale a /journey/persona (8 personas griglia)
· kamolos
Programmi-cliente + ganci (usoProgramCatalog, usoSetPersona, usoSetSelettoProgramma, usoLiveProgramScores)
· kamolos
Motore di punteggio puro + test che coprono i limiti
· kamolos
17 regole del programma (Zod-validated) + indice chiave LoanProgramCode
· SecurityService
Aggiungi MortgageProgramController — programmi di elenco, set persona, set programma selezionato
· kamo-shared-library
Aggiungi setPersona + setSelezionato Metodi ProgramCode
· InitializerService
ProgrammaSeederRunner - seme 17 baseline LoanProgramCode programmi (idempotent)
· kamo-shared-library
Repositories, DTOs, ProgramService (catalogo di sola lettura con fusione sovrapposizione ingenua)
· kamo-shared-library
Aggiungi la colonna lenderModel (additivo; null = BROKER predefinito a livello app)
· kamo-shared-library
Aggiungi persona + selezionatoProgramCode colonne (additivo)
· kamo-shared-library
Aggiungi Programma + entità OrgProgramOverride (catalogo + per-org overlay)

Il tuo universo ti sta aspettando.
Aggiungi i prodotti quando sei pronto: nessuna migrazione, nessun nuovo login, nessuna richiesta di pagamento.
Gratis per sempre — nessuna carta di credito richiesta