변경 로그
무슨 일이야?
플랫폼에 대한 모든 개선 사항, 그것이 선적.
· SecurityService
Emit lender 브랜드 + 공개 필드 per-org config.json
Kamo-los 납세자를 직면하는 두 가지 변화 : 1. OrganizationController는 public GET /api/security/org/domain/{host}를 얻습니다. 끝점. 정확한 OrgDomain 경기에 의해 org를 해결, 그 후 retries 가장 깊은 호스트 이름 별명을 드롭 (apply.lender.com → lender.com) 그래서 kamo-los의 SSR org fetch는 첫 번째 페인트에 lender의 기록. 404 언제 no org 모든 일치 도메인을 소유. 2. ***********는 방출하는 rewritten입니다: - 원래 키 (siteName, siteNameShort, backgroundImageCount, LogoFullExt, themeRevision, description) - 변하지 않은 모양. - 풀 컬러 팔레트 : colorPri, colorPriLight, colorPriLightest, colorSec, colorSecLight, 컬러SecLightest. 이전 색상 오직 per-org globals.css에 착륙했습니다; kamo-los는 그들에 기대합니다 config.json 그래서 DynamicMetaLoader 쓰기 할 수 있습니다 --org-* CSS vars 전에 모든 스타일 시트를 가져 가라. - 새로운 조직 분야 (tagline, nmlsId, 전화 지원, 이메일Support, 동급휴대용, onPrimaryText, gradientDirection, 년. PhoneSupport는 org.phoneTollFree.number로 돌아갑니다. 명시적으로 설정 — 대부분의 orgs는 모두 동일한 라인을 사용합니다. 오래된 문자열 기반 buildConfigJson(...) 서명은 back-compat로 유지 wrapper 그래서 기존의 호출 사이트 휴식. JSON은 적절한 escaping과 작은 StringBuilder 헬퍼를 통해 구축됩니다. \, ", \n, \r, \t 및 제어 chars; 값은 여전히 통제되는 근원 (DB 란) 그러나 탈출 통행은 lender's를 의미합니다 견적을 가진 지난 tagline은 파일을 손상시키지 않습니다. 업데이트 된 공유 라이브러리 조직에 대해 깨끗한 Compiles.
· 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
Org 브랜딩 크래프트 만들기 — animated splash, 리본, 광택, footer
미묘한 1px 악센트 리본과 우두머리 로고는 충분히 하지 않습니다 lender의 브랜드를 축하합니다. 이제 모든 영웅 표면은 실제 브랜드 도착 순간. - OrgProvider context : SSR org fetch 결과가 이제 통과됩니다. React 컨텍스트 (lib/org/OrgContext.tsx) 그래서 클라이언트 구성 요소를 읽을 수 있습니다 제목, titleShort, yearEst, 등 re-fetching 없이. - HeroBrandIntro : 원샷, 풀스크린 브랜드 스플래쉬 주어진 세션에서 영웅 표면에 처음 방문. Conic-gradient 해로 org's primary→secondary 색상, 16 입자 링 나선형 밖으로, lender의 로고 (또는 wordmark fallback) 유리에 중심 --org-primary glow가있는 카드, "Welcome - 집에 가져 가자" 자막, "무엇을 건너"힌트. 2.4s 후에 자동 배출. Respects는 전적으로 감소한 모션을 선호합니다. - BorrowerHeader : 리본은 이제 2px 및 애니메이션입니다. - gradient 팬 org-primary → org-secondary → 느린 8s 반복에 org-primary (CSS) 키 프레임 @kamo-org-ribbon). 로고는 framer-motion 입구를 가져옵니다 (fade + 슬라이드), 호버 스케일, 테이프, 부드러운 --org-primary 브랜드 색상을 따르는 drop-shadow glow. - JourneyCrest 진행 막대 : 고체 bg-aurora였습니다. 이제 동일합니다. org-primary → 헤더 리본으로 org-secondary panning gradient 부드러운 빛으로. 모든 단계의 차용자는 불빛을 올립니다. lender의 색상. - LenderFooter : 영웅 표면의 바닥에 지속적 인 특성 "Powered by <Lender> · 년부터 <year>" 작은 org-tinted dot와 Equal 주거 기회 표. 에 파드 1.2s 지연 그래서 CTA 클러스터가 정착 한 후 땅. 감소된 움직임. 모든 애니메이션 명예 선호-reduced-motion. 32/32 경로를 구축, 140 테스트 패스.
· 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
Kamo-marketing의 포트 공공 채팅 지원, aurora 테마에 대한 restyled
Kamo-marketing에서 AI + 라이브 지원 채팅 위젯을 가져옵니다 카모 로스 aurora 팔레트에 recoloured (surface-base / 잉크 / aurora / 링 화이트) 그래서 그것은 깨끗하게 앉아 마케팅 사이트의 숲 녹색 대신 어두운 해군 표면. - lib/chat/proxyConfig.ts 중앙 집중식 PUBLIC CHAT API BASE + PUBLIC CHAT API KEY 해상도. Env vars (PUBLIC CHAT API KEY, 한국어 API SERVICE URL, NEXT PUBLIC DOMAIN)는 lib/env.ts를 통해 타전했습니다. - app/api/chat/*의 밑에 6개의 얇은 Next.js 프록시 노선 APIService /api/public-chat/* 표준 X-Public-Chat-Key 경로를 요구하는 헤더 및 X-Session-Token. 이름 * endpoint incoming-agent-message 번역에 보존. - *********** 역동적으로 (ssr: false) 짐 PublicChatWidget에 대해 app/layout.tsx에서 전 세계적으로 마운트됨 각 표면의 차용기를 따르십시오 ( 착륙, 적용, 통로, 작업 공간, 의식). - PublicChatWidget에서 방문자 이름을 미리 채우기 *********** 저장된 localStorage가 없을 때 값, 그래서 차용자는 대화의 흐름에 자신의 이름을 입력 채팅 헤더에 의존하지 마십시오. - AiChatPanel 및 LiveSupportPanel은 마케팅 사이트 모드를 유지합니다. 분리 (AI = HTTP 요청 리턴, 지원 = STOMP WebSocket with 존재 heartbeat + per-message 번역 큐) 하지만 사용 kamo-los 표면, 거품, 입력 및 악센트를 위한 토큰. - ***Provider는 Capcha PoW 위젯을 유지하지만 CSS를 통해 재앙 aurora 보라색에 vars. capcha로 돌아가십시오.<NEXT PUBLIC DOMAIN> 호스트가 로컬 호스트 또는 IP입니다. - JourneyHero Rex 스프라이트는 모든 Breakpoints (was)의 하단에 이동 모바일에 하단 오른쪽) 그래서 하단 오른쪽의 채팅 실행기 코너는 그 위에 앉아 있지 않습니다. - 마케팅 사이트에서 복사 한 공급 업체 / kamo-capcha-widget 파일: dep. .gitignore는 일시 중지를 업데이트 납품업자/**/node modules npm는 설치 중에 만듭니다. 32/32 경로를 구축 (6 새로운 채팅 엔드 포인트), 140 테스트 패스.
· kamolos
층의 장면과 parallax, 주변 모션, 실제 분위기
첫번째 커트는 공격적인 vignette의 뒤에 작은 정체되는 SVG를 발송했습니다, 그래서 EMPTY LOT는 빈 화면처럼 보입니다. 그것을 실제 layered 장면으로 바꾸기 실제로 모든 상태에 뭔가가있다. - 새로운 lib/journey/scene/ 단위는 discrete parallax 층을 가진: 스카이 (그라디언트 + sun-arc + twinkling stars), 부드러운 구름을 드리기 SVG-native 생기, silhouette 언덕 + 빛과 먼 스카이라인 듀스크 후 창, 홈 자체 (조사기 테이프에서 상태 인식) light-on), 전경 (기화 깃발, 잔디, swaying를 가진 mailbox 꽃, 나무) 및 옵션 새 층. - EMPTY LOT는 설문 조사 테이프, 사이트 서명 및 빈 많이 보여줍니다. context - 기본 상태에 더 많은 공백 스크린 없음. - 하늘을 가로지르는 선 아크는 여행 진전으로 전진합니다; 창 맥박 점화할 때 온난하게; 빛이 켜질 때 굴뚝 연기 상승; 꽃 길; mailbox 깃발 바위; 자주적으로 먼 스카이라인 창 흔들림. - JourneyHero의 Pointer parallax : 다른 6 깊이 레이어 번역 - Rex는 56px 코너 스프라이트로 영웅에 부드러운 bob로 돌려줍니다. - 영웅 vignette는 이제 최고 / bottom fade 만, 결코 어둡게 일러스트가 살아가는 화면의 중간. - Persona 악센트는 완성된 정면의 정상에 렌더링합니다: 베테랑의 깃발 파도, 은퇴의 정원에는 꽃, 투자자의 쌍신회로 쇼 단위가 있습니다 번호, 등. 각 인사는 국가의 시각적으로 구별됩니다. 28/28 노선, Typecheck를 깨끗하게 구축, 140 테스트 패스.
· kamolos
3D 세계를 2D로 대체
Procedural three.js 장면 끝을 죽이고 차용인의 재건 평면으로 시각 여행, 접근 가능, 자동차 친화적 인 모듈 전체 SSR 지원 및 더 높은 수준의 예술에 대한 스왑 인 포인트. - lib/journey/가입: illustrated hero / crest / thumbnail 표면, 세 사람 aware 여행 트랙 (8-state, refi 5state 광택, 건설 8-state 리터럴), 그리고 매개 변수 SVG placeholder 렌더링기는 사람 + 상태에 의해 키. - New TaskHub on /workspace 표면 전체 14 waypoints 단계별 수행/현재/todo 상태. Inline TaskStepper는 상단에 있습니다. in-flow 운동을 위한 각 waypoint 페이지의. - Rex는 procedural 상자 공룡 몸을 떨어 뜨리고 평평한 SVG가됩니다. 채팅 거품과 LO 가이드 칩에서 아바타. - /apply/*는 반 스크린 3D 측 패널을 잃습니다; 호쾌한 설명이 납니다 상단에서 가장 좋아하는 형태는 모바일에서 시청자를 채웁니다. - 드롭 @react-three/fiber, @react-three/drei, @react-three/postprocessing, 3, 그리고 뭉치에서 @types/three. KamovilleMinimap, 세계 저장, 사진기 의장, 날씨 비 입자, 의식 큐, 및 모든 procedural-scene 기하학 삭제. - 모든 28 노선, 24 테스트 파일 / 140 테스트 패스를 미리 설치하십시오.
· kamolos
무한한 지상 층 + 수평선 깊이 + 적당한 잔디 표지판
지상 — 더 많은 큐브 없음 - SkyDome : 420m 뒤쪽 영역은 활성 TOD 수평선으로 착색되어 앉아 drei 뒤에 <Sky> 그래서 카메라 코너에 어떤 솔기 채워집니다 - FarTerrainDisc: 80×80 세그먼트, 베텍스 진지변환을 가진 360 m 비행기 블렌딩된 sin/cos 소음을 통해 방사형 경사로 - 가까운 지상은 평평하게 체재합니다, 멀리 땅은 온화한 2-3 m 언덕을 얻습니다 - MidNeighbourhood : 140m 잔디 링 온화한 undulation, 사이 주석 훨씬 멀리 지형 - DistantNeighbours: 14개의 procedural box+roof 집은 반지에 둡니다 60-95 m, deterministic color/yaw 변이와 때때로 emissive 창; 진짜 교외로 읽으십시오 - HorizonHills: 반경에 96 세그먼트 풍부한 반지 145 m, fog에 착색해 그것은 하늘 밴드로 퇴색 - 세계 수직 담수 - 도로 + 보도는 40m에서 240m로 확장되어있어 안개에 융합합니다. - 더 긴 도로를 따라 자동 확산 차선 (4m 이상) 안개는 이제 경사로 [32, 160] (와스 [18, 90]), TOD 구동 수평선 일치 색깔 그래서 원판 변죽, 언덕 및 neighbour silhouettes 모든 녹 눈에 보이는 경계없이 하늘에. Signs - 실제 anatomy와 전체 재 작성 - 두 배 가로장 포스트 (백클의 측에 2개의 0.07 m 포스트, spike-into-ground 바닥과 골드 파이널 볼 캡) - 백색 plaque 몸을 감싸는 구조 손질, 물자로 두 얼굴 - 프로그램 당 착색한 우두머리 밴드; 밴드는 subtly 이렇게 팝s를 방출합니다 - plaque가 게시물을 만나는 장착 브래킷 - 프로그램 팔레트 : CONV indigo, FHA 녹색, VA 빨강, USDA ochre, JUMBO aurora, DSCR 강철, HELOC 찻잔, REVERSE 배관, CONSTRUCTION 황색, RENOVATION amber, ITIN magenta, BRIDGE 오렌지, 과 aurora 기본 - 현재 의미있는 드라마: - 더 높은 게시물, 더 큰 plaque, 더 큰 텍스트 - SpotLight는 프로그램 악센트 색깔에 있는 머리 위를 핀으로 꼿습니다 - "BEST FIT" 텍스트, 부드럽게 끓는 라이더 - 배경에 악센트 연속 링 halo - 모든 텍스트는 drei <Billboard>를 사용하므로 모든 카메라에서 사용할 수 있습니다. 각, 어떤 밴드 색깔에 대하여 대조를 위한 개요 통행 - 배치: 승자 앞으로와 센터, 뒤에 1.4 rad 팬에 있는 지지자, 더 많은 클러스터링 오버랩 - castShadow + receiveShadow는 각 표시 성분에 이렇게 그들은 심었습니다
· 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 잔여 통로 장 + 8 의식 장면 단순
단계 C 기초 — spec에서 각 waypoint 및 의식 슬러그는 지금 가지고 있습니다 진짜, statically prerendered 표면. Stub 어댑터 다시 연결-first flows; URLA 쓰기는 실제 어댑터 졸업생으로 per-vendor에서 교환합니다. Waypoint 시트 (12 새로운) : - 속성 카드 (property-data stub) - 은행 볼트 (스텁 연결) - 은행-statement-upload (파일 픽업, OCR 파이프라인 토지 M3d) - 신용 서약 (soft credit pull stub) - reo-carousel (REO 목록 w/ 인라인 추가) - 선언하에 (10 예/노 토글) - hmda-pavilion (영역/레이스/sex w/ 디코더 옵션) - lo-desk-military (베터란 지점 + 날짜 + VA 결제) - 잔디-signs-detail (프로그램 카탈로그 + 선택 프로그램 쓰기) - reviewing-porch (per-section progress + useSubmitApplication을 통해 제출) - 닫히는 책상 (esign stub 봉투) - mailbox-econsent (4개의 동의 견인삭) 시상식 장면 (8 새로운 + 의식 원시): - 공유식 구성품 : gradient backdrop + 시간 대화가 + Framer-motion 입구 + CTA 계속 (Apple-keynote가 아닌 서비스 가능) - PersonaReveal, IdVerifyFrontDoor, CreditReturn, 프로그램추천, AuthorizeAndSubmit, AusFindingsArrival, ClearToClose, 에 닫히는 - 레지스트리(Registtry)는 의식 당 임의 구성요소를 발송합니다. /ceremonies/[id] careerClient('Continue' return to /)를 통해 실제 장면을 렌더링합니다. 모든 14 waypoints + 8 ceremonies 패스 tsc + vitest + 다음 빌드.
· kamolos
M3a 기초 — 연결 클라이언트, 걸이, 2개의 영웅 waypoint 장
M3a Connect-first 기초의 절반을 공유합니다. 연결 + 검증 Fact backend 그냥 착륙. - lib/los/connections-client.ts - /connections + /verified-facts에 대한 클라이언트를 입력 - lib/los/app-context.ts - useAppUid Hook (URL ?app=<uid> 저장 fallback) - 4 React Query Hooks: useStartConnection, useGetConnections, useVerified 사실, 사용ReconcileFacts - /waypoints/front-door - id-verify stub 어댑터를 사용하여 ID-verify 영웅 시트 - /waypoints/paystub-clipboard - 소득을 사용하여 영웅 시트를 연결 stub 어댑터 - /waypoints/layout.tsx는 이제 JourneyShell 내부의 통로를 프레임 - /persona는 현재 ?app=이 존재할 때 real API를 통해 useSetPersona를 호출합니다. - SceneRoot는 대신 원사 (flag / garden / build-crew 악센트)을 읽습니다. 사이클 데모; usePersona 읽기 ?persona= URL에서 스레드 WorldShell을 통해 MobileCrest, JourneyShell - JourneyShell은 Suspense에서 세계 패널을 감싸고 있습니다. 더 이상 bail 정적 페이지 (/apply/done) 사전 렌더링 Stub 어댑터는 기본적으로 어디에 있습니다. - 실제 Plaid Income, Persona ID, ATTOM 및 M3b +의 CRA 배선 토지 per-vendor.
· SecurityService
MortgageConnectController - 연결 + 검증된 제조 + 재조합 엔드 포인트
Connect-first 캡처 표면 노출 *********** - GET/POST /connections + POST /connections/{id}/complete - GET/POST /verified-facts + POST /verified-facts/reconcile Borrower-facing - 내부 기능 규칙 당 권한 문 없음. 이름 * BaseLosController에서 orgId()를 통해 MortgageAppController를 미러링합니다.
· kamo-shared-library
연결 + 검증 Connect-first 캡처의 기초
공급업체 연결 및 검증 추적을 위한 M3a 백엔드 기반 추가 확인 된 사실. Stub-only end-to-end - 실제 공급 업체 SDK 배선 (Plaid, Persona, ATTOM, 신용국) M3b / M3c / M3d의 검증자. - ConnectionVendor / ConnectionStatus / 인증 FactSource의 의견 - 연결성 (LOS CONNECTIONS): 납품업자 회의 당 1개의 줄, 파악 externalRef + Vault accessTokenRef (NEVER raw 값), 참조 AppMortgage 그리고 uid에 의하여 선택적인 Borrower - VerifiedFact 엔터티티 (LOS VERIFIED FACTS) : 수확 값 당 한 행 fieldPath, valueJson, 근원 입증 및 선택적인 연결/document refs - @Query Active-only lookup by app uid + 공급 업체와 스프링 데이터 저장소 - DTOs는 JS를 피하기 위해 문자열 (Jackson JsonFormat)로 긴 uids를 serialize CockroachDB unique rowid()에 MAX SAFE INTEGER 오버플로우 -********** + 인증FactService.record + *************** (M3a 비계; per-vendor M3b의 실제 어댑터와 함께 필드 매핑 배) 사용자는 KamoInitializerService를 재부팅해야 합니다. Hibernate ddl-auto=update 생성 LOS CONNECTIONS 및 LOS VERIFIED FACTS 테이블 보안 서비스 제공.
· kamolos
레거시 URLA 마법사 내부 JourneyShell
차용차 여행의 A 단계 : 3D 세계가 전망에 머물면서 차용자는 각 섹션을 통해 작동합니다. 와이드 뷰포트(≥xl)에서 세계 끈적한 40% 적당한 패널을 채우십시오; xl의 밑에 그것은 위에 28vh까지 주름을 잡습니다 일 표면. 이제는 EMPTY LOT의 주가 되었습니다. LIGHTS ON은 마법사 섹션을 완료하고, 대출 파일 상태를 이동합니다. - 새로운 lib/world/JourneyShell 포장 /apply/[section], /start, /persona - 새로운 deriveHomeState는 앱 + 섹션을 HomeState로 감소시킵니다. - *********** 이제 homeState를 버립니다. (UseHomeState를 통해 과태); M1 데모 순환 루프가 사라집니다 - WizardShell의 오른쪽 레일은 xl+에서 숨깁니다. - isSectionDone는 순수한 수출으로 computeSectionStates에서 추출했습니다
· kamolos
세계가 홈페이지가 됩니다. / 3D 장면을 봉사, /start는 대화 형 사기, /journey 경로는 평평하게 /persona /waypoints/[id] /ceremonies/[id]
Borrower 토지는 기존의 대화 착륙 대신 공공 URL의 새로운 경험에 직접. 'AppUid → /apply/property로 방문자를 돌려주는'웹 브라우저 CTA 플립.
· kamolos
LawnSigns r3f 구성 요소 + SignSheet + CompareMode + 데모는 SceneRoot로 유선
· kamolos
/journey/persona (8인승 격자)
· kamolos
프로그램 클라이언트 + 후크 (useProgramCatalog, useSetPersona, useSetSelectedProgram, useLiveProgramScores)
· kamolos
순수한 득점 엔진 + 시험 덮음 *********** 경계
· kamolos
17 프로그램 규칙 (Zod-validated) + LoanProgramCode에 의해 키 인덱스
· SecurityService
MortgageProgramController 추가 — 목록 프로그램, set persona, set selected program
· kamo-shared-library
SetPersona + setSelected 추가하기 ProgramCode 방법
· InitializerService
ProgramSeederRunner - 씨앗 17 기본 LoanProgramCode 프로그램 (idempotent)
· kamo-shared-library
Repositories, DTOs, ProgramService (Nive overlay 병합이있는 읽기 전용 카탈로그)
· kamo-shared-library
LenderModel 열 추가 (additive; null = App layer에서 BROKER 기본값)
· kamo-shared-library
Persona + selectedProgramCode 열 추가 (추가)
· kamo-shared-library
프로그램 추가 + OrgProgramOverride entities (catalog + per-org overlay)

당신의 우주는 기다리고 있습니다.
몇 분 안에 무료로 시작하세요. 준비가 되면 언제든지 제품을 추가할 수 있습니다.
영원히 무료 - 신용 카드 필요 없음