Nenda kwenye maudhui
KAMOUniverse

Mabadiliko

Nini kipya.

Kila kuboresha jukwaa, kama ni meli.

  1. · SecurityService

    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} endpoint. Resolves the org by exact OrgDomain match, then retries after dropping the deepest hostname alias (apply.lender.com → lender.com) so kamo-los's SSR org fetch lands the lender's record on first paint. 404 when no org owns any matching domain. 2. **************** is rewritten to emit: - The original keys (siteName, siteNameShort, backgroundImageCount, logoFullExt, themeRevision, description) — unchanged shape. - The full colour palette: colorPri, colorPriLight, colorPriLightest, colorSec, colorSecLight, colorSecLightest. Previously the colours only landed in the per-org globals.css; kamo-los expects them in config.json so DynamicMetaLoader can write --org-* CSS vars before fetching any stylesheet. - The new Organization fields (tagline, nmlsId, phoneSupport, emailSupport, equalHousingDisclosure, onPrimaryText, gradientDirection, yearEst). phoneSupport falls back to org.phoneTollFree.number when not explicitly set — most orgs use the same line for both. Old String-based buildConfigJson(...) signature kept as a back-compat wrapper so no existing call site breaks. JSON is built via a small StringBuilder helper with proper escaping for \, ", \n, \r, \t and control chars; values still come from a controlled source (DB columns) but the escape pass means a lender's pasted tagline with quotes won't corrupt the file. Compiles clean against the updated shared-library Organization entity.

  2. · 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).

  3. · 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.

  4. · kamolos

    Make org branding loud — animated splash, ribbon, glow, footer

    The subtle 1px accent ribbon and header logo weren't doing enough to celebrate the lender's brand. Now every hero surface delivers a real brand arrival moment. - OrgProvider context: the SSR org fetch result is now passed through React context (lib/org/OrgContext.tsx) so client components can read title, titleShort, yearEst, etc. without re-fetching. - HeroBrandIntro: one-shot, full-screen brand splash that fires on the first visit to a hero surface in a given session. Conic-gradient halo in the org's primary→secondary colours, a 16-particle ring spiralling outward, the lender's logo (or wordmark fallback) centred in a glass card with an --org-primary glow, "Welcome — let's get you home" subtitle, "tap anywhere to skip" hint. Auto-dismisses after 2.4s. Respects prefers-reduced-motion (skipped entirely). - BorrowerHeader: ribbon is now 2px and animated — gradient pans org-primary → org-secondary → org-primary on a slow 8s loop (CSS keyframe @kamo-org-ribbon). Logo gets a framer-motion entrance (fade + slide), hover scale, tap squeeze, and a soft --org-primary drop-shadow glow that follows the brand colour. - JourneyCrest progress bar: was solid bg-aurora, now uses the same org-primary → org-secondary panning gradient as the header ribbon with a soft glow. Every step the borrower completes lights up in the lender's colours. - LenderFooter: persistent attribution at the bottom of hero surfaces showing "Powered by <Lender> · since <year>" with a small org-tinted dot and an Equal Housing Opportunity mark. Fades in at 1.2s delay so it lands after the CTA cluster has settled. Respects reduced motion. All animations honour prefers-reduced-motion. Build 32/32 routes, 140 tests pass.

  5. · 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.

  6. · kamolos

    Port public chat support from kamo-marketing, restyled for aurora theme

    Brings the AI + live-support chat widget from kamo-marketing into the borrower-facing app, recoloured to the kamo-los aurora palette (surface-base / ink / aurora / ring-white) so it sits cleanly on the dark navy surfaces instead of the marketing site's forest-green. - lib/chat/proxyConfig.ts centralises PUBLIC_CHAT_API_BASE + PUBLIC_CHAT_API_KEY resolution. Env vars (PUBLIC_CHAT_API_KEY, API_SERVICE_URL, NEXT_PUBLIC_DOMAIN) wired through lib/env.ts. - 6 thin Next.js proxy routes under app/api/chat/* forward to APIService /api/public-chat/* with the standard X-Public-Chat-Key header and X-Session-Token where the route requires it. Translate endpoint preserved for incoming-agent-message translation. - **************** dynamically (ssr:false) loads PublicChatWidget. Mounted globally in app/layout.tsx so the launcher follows the borrower across every surface (landing, apply, waypoints, workspace, ceremonies). - PublicChatWidget pre-fills the visitor name from **************** when there's no saved localStorage value, so borrowers who typed their name in the conversational flow don't re-enter it in the chat header. - AiChatPanel and LiveSupportPanel keep the marketing site's mode separation (AI = HTTP request-reply, support = STOMP WebSocket with presence heartbeat + per-message translation queue) but use kamo-los tokens for surfaces, bubbles, inputs, and accents. - ***Provider keeps the Capcha PoW widget but recolours via CSS vars to the aurora purple. Falls back to capcha.<NEXT_PUBLIC_DOMAIN> when the host is localhost or an IP. - JourneyHero Rex sprite moved to bottom-LEFT on all breakpoints (was bottom-right on mobile) so the chat launcher in the bottom-right corner doesn't sit on top of him. - vendor/kamo-capcha-widget copied from the marketing site as a local file: dep. .gitignore updated to skip the transient vendor/**/node_modules npm creates during install. Build 32/32 routes (6 new chat endpoints), 140 tests pass.

  7. · kamolos

    Layered scene with parallax, ambient motion, real atmosphere

    The first cut shipped a tiny static SVG behind an aggressive vignette, so EMPTY_LOT looked like a blank screen. Replace it with a real layered scene that actually has something on every state. - New lib/journey/scene/ module with discrete parallax layers: sky (gradient + sun-arc + twinkling stars), drifting clouds with smooth SVG-native animation, silhouette hills + distant skyline with lit windows after dusk, the home itself (state-aware from surveyor tape to lights-on), foreground (mailbox with rocking flag, grass, swaying flowers, trees), and an optional birds layer. - EMPTY_LOT now shows surveyor tape, a SITE sign, and the empty lot in context — no more blank screen at the default state. - Sun arcs across the sky as journey progress advances; windows pulse warmly when lit; chimney smoke rises when lights are on; flowers sway; the mailbox flag rocks; distant skyline windows flicker independently. - Pointer parallax on JourneyHero: 6 depth layers translate at different - Rex returns as a 56px corner sprite on the hero with a gentle bob. - Hero vignette is now a top/bottom fade only, never darkening the middle of the screen where the illustration lives. - Persona accents render on top of the finished facade: veteran's flag waves, retiree's garden has flowers, investor's duplex shows unit numbers, etc. Each persona stays visually distinct across states. Build 28/28 routes, typecheck clean, 140 tests pass.

  8. · kamolos

    Replace 3D world with 2D illustrated journey

    Kill the procedural three.js scene end-to-end and rebuild the borrower's visual journey as a flat, accessible, mobile-friendly module that ships with full SSR support and a swap-in point for higher-fidelity art later. - lib/journey/ takes over: illustrated hero / crest / thumbnail surfaces, a manifest-backed asset resolver, three persona-aware journey tracks (purchase 8-state, refi 5-state polish, construction 8-state literal), and a parameterized SVG placeholder renderer keyed by persona + state. - New TaskHub on /workspace surfaces all 14 waypoints grouped by phase with done/current/todo status. Inline TaskStepper renders at the top of every waypoint page for in-flow movement. - Rex drops the procedural box-dinosaur body and becomes a flat SVG avatar in chat bubbles and the LO guide chip. - /apply/* loses the half-screen 3D side panel; gets a slim illustrated crest at top so the form fills the viewport on mobile. - Drops @react-three/fiber, @react-three/drei, @react-three/postprocessing, three, and @types/three from the bundle. KamovilleMinimap, the world Zustand store, camera rig, weather rain particles, ceremony queue, and all procedural-scene geometry deleted. - Build prerenders all 28 routes, 24 test files / 140 tests pass.

  9. · kamolos

    Infinite ground tiers + horizon depth + proper lawn signs

    Ground — no more cube - SkyDome: 420 m back-side sphere coloured to the active TOD horizon, sits behind drei <Sky> so any seam at the camera corners is filled - FarTerrainDisc: 360 m plane with 80×80 segments, vertex displacement via blended sin/cos noise on a radial ramp — close ground stays flat, far ground gets gentle 2-3 m hills - MidNeighbourhood: 140 m grass ring with mild undulation, tints between the lot and the far terrain - DistantNeighbours: 14 procedural box+roof houses placed in a ring at 60-95 m, with deterministic colour/yaw variation and occasional emissive windows; reads as a real suburb - HorizonHills: 96-segment bumpy ring at radius 145 m, coloured to fog so it fades into the sky band — gives the world vertical containment - Road + sidewalk extended from 40 m to 240 m so they converge into fog - Lane dashes auto-spread along the longer road (every 4 m) Fog now ramps [32, 160] (was [18, 90]), matched to the TOD-driven horizon colour so the disc rim, hills, and neighbour silhouettes all dissolve into the sky without a visible boundary. Signs — full rewrite with real-estate anatomy - Double-rail posts (two 0.07 m posts on either side of the plaque, with spike-into-ground bottoms and gold finial ball caps) - Frame trim wrapping a white plaque body, both faces materialised - Coloured header band per program; band emits subtly so it pops - Mounting brackets where plaque meets posts - Per-program palette: CONV indigo, FHA green, VA red, USDA ochre, JUMBO aurora, DSCR steel, HELOC teal, REVERSE plum, CONSTRUCTION yellow, RENOVATION amber, ITIN magenta, BRIDGE orange, plus an aurora default - Winner now meaningfully dramatised: - taller posts, larger plaque, larger text - spotLight pinned overhead in the program's accent colour - rider topper plaque with "BEST FIT" text, gently bobbing - accent-tinted ring halo on the ground - All text uses drei <Billboard> so it stays legible from any camera angle, with outline pass for contrast against any band colour - Layout: winner forward and centre, supporters in a 1.4-rad fan behind, no more clustered overlap with the driveway - castShadow + receiveShadow on every sign component so they look planted

  10. · 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

  11. · 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.

  12. · 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.

  13. · kamolos

    12 remaining waypoint sheets + 8 ceremony scene impls

    Phase C foundation — every waypoint and ceremony slug in the spec now has a real, statically-prerendered surface. Stub adapters back the connect-first flows; URLA writes will swap in per-vendor as their real adapters graduate. Waypoint sheets (12 new): - property-cards (property-data stub) - bank-vault (asset connect stub) - bank-statement-upload (file picker, OCR pipeline lands M3d) - credit-ledger (soft credit pull stub) - reo-carousel (REO list w/ inline add) - declarations-stand (10 yes/no toggles) - hmda-pavilion (ethnicity/race/sex w/ decoder option) - lo-desk-military (veteran branch + dates + VA payment) - lawn-signs-detail (program catalog + selected-program write) - reviewing-porch (per-section progress + submit via useSubmitApplication) - closing-desk (esign stub envelope) - mailbox-econsent (4 consent toggles) Ceremony scenes (8 new + Ceremony primitive): - Shared Ceremony component: gradient backdrop + timed dialogue beats + framer-motion entrance + Continue CTA (serviceable, not Apple-keynote) - PersonaReveal, IdVerifyFrontDoor, CreditReturn, ProgramReveal, AuthorizeAndSubmit, AusFindingsArrival, ClearToClose, Eclose - Registry now ships an Impl ComponentType per ceremony; /ceremonies/[id] renders the real scene via CeremonyClient ('Continue' returns to /) All 14 waypoints + 8 ceremonies pass tsc + vitest + next build.

  14. · kamolos

    M3a foundation — connections client, hooks, 2 hero waypoint sheets

    Front-end half of the M3a connect-first foundation that the shared-lib Connection + VerifiedFact backend just landed. - lib/los/connections-client.ts — typed client for /connections + /verified-facts - lib/los/app-context.ts — useAppUid hook (URL ?app=<uid> with store fallback) - 4 React Query hooks: useStartConnection, useGetConnections, useVerifiedFacts, useReconcileFacts - /waypoints/front-door — ID-verify hero sheet using the id-verify stub adapter - /waypoints/paystub-clipboard — income connect hero sheet using the income stub adapter - /waypoints/layout.tsx now frames waypoints inside JourneyShell - /persona now calls useSetPersona via the real API when ?app= is present - SceneRoot reads a persona prop (flag / garden / build-crew accents) instead of cycling demos; usePersona reads ?persona= from URL and is threaded through WorldShell, MobileCrest, JourneyShell - JourneyShell wraps its world panels in Suspense so useSearchParams reads no longer bail static pages (/apply/done) out of prerendering Stub adapters are the default everywhere — real Plaid Income, Persona ID, ATTOM, and CRA wiring land per-vendor in M3b+.

  15. · SecurityService

    MortgageConnectController — connections + verified-facts + reconcile endpoints

    Exposes the connect-first capture surface at **************** - GET/POST /connections + POST /connections/{id}/complete - GET/POST /verified-facts + POST /verified-facts/reconcile Borrower-facing — no rights gate per the internal-features rule. Authorization mirrors MortgageAppController via orgId() from BaseLosController.

  16. · kamo-shared-library

    Connection + VerifiedFact foundation for connect-first capture

    Adds the M3a backend foundation for vendor connections and provenance-tracked verified facts. Stub-only end-to-end — real vendor SDK wiring (Plaid, Persona, ATTOM, credit bureaus) graduates per-vendor in M3b/M3c/M3d. - ConnectionVendor / ConnectionStatus / VerifiedFactSource enums - Connection entity (LOS_CONNECTIONS): one row per vendor session, holds externalRef + Vault accessTokenRef (NEVER raw values), references AppMortgage and optional Borrower by uid - VerifiedFact entity (LOS_VERIFIED_FACTS): one row per harvested value with fieldPath, valueJson, source provenance, and optional connection/document refs - Spring Data repositories with @Query active-only lookups by app uid + vendor - DTOs serialize Long uids as String (Jackson JsonFormat) to avoid JS MAX_SAFE_INTEGER overflow on CockroachDB unique_rowid() - **************** + VerifiedFactService.record + **************** (M3a scaffold; per-vendor field mapping ships alongside real adapters in M3b) User must reboot KamoInitializerService so Hibernate ddl-auto=update creates LOS_CONNECTIONS and LOS_VERIFIED_FACTS tables before SecurityService comes up.

  17. · kamolos

    Frame the legacy URLA wizard inside JourneyShell

    Phase A of the borrower-journey hand-off: the 3D world stays in view while the borrower works through every section. On wide viewports (≥xl) the world fills a sticky 40% right panel; below xl it shrinks to a 28vh crest above the work surface. The home now advances states from EMPTY_LOT through LIGHTS_ON as wizard sections are completed and the loan-file status moves. - New lib/world/JourneyShell wraps /apply/[section], /start, /persona - New deriveHomeState reduces app + section progress to a HomeState - **************** now take homeState as a prop (defaulting via useHomeState); the M1 demo cycling loop is gone - WizardShell's right rail hides at xl+ so JourneyShell owns the right column - isSectionDone extracted from computeSectionStates as a pure export

  18. · kamolos

    World becomes homepage — / serves the 3D scene, /start is the conversational porch, /journey paths flattened to /persona /waypoints/[id] /ceremonies/[id]

    Borrower lands directly in the new experience on the public URL instead of the legacy conversational landing. Homepage CTA flips between 'Start your application' (fresh visitor → /start) and 'Continue your application' (returning visitor with appUid → /apply/property).

  19. · kamolos

    LawnSigns r3f component + SignSheet + CompareMode + demo signs wired into SceneRoot

  20. · kamolos

    Persona selection flow at /journey/persona (8 personas grid)

  21. · kamolos

    Programs-client + hooks (useProgramCatalog, useSetPersona, useSetSelectedProgram, useLiveProgramScores)

  22. · kamolos

    Pure scoring engine + tests covering **************** boundaries

  23. · kamolos

    17 program rulesets (Zod-validated) + index keyed by LoanProgramCode

  24. · SecurityService

    Add MortgageProgramController — list programs, set persona, set selected program

  25. · kamo-shared-library

    Add setPersona + setSelectedProgramCode methods

  26. · InitializerService

    ProgramSeederRunner - seed 17 baseline LoanProgramCode programs (idempotent)

  27. · kamo-shared-library

    Repositories, DTOs, ProgramService (read-only catalog with naive overlay merge)

  28. · kamo-shared-library

    Add lenderModel column (additive; null = BROKER default at app layer)

  29. · kamo-shared-library

    Add persona + selectedProgramCode columns (additive)

  30. · kamo-shared-library

    Add Program + OrgProgramOverride entities (catalog + per-org overlay)

Ulimwengu wako unasubiri.

Kuanza bure katika dakika. Ongeza bidhaa wakati wowote wewe ni tayari - hakuna uhamiaji, hakuna logins mpya.

Bure milele - hakuna kadi ya mkopo inahitajika