Changelog
Cosa c'è di nuovo.
Ogni miglioramento alla piattaforma, come si spedisce.
· kamo-internal
P1 frontend — coda di ricarica + timeline di audit
- losApi: chargeOffQueue / confermareChargeOff / auditByLoan - No, no. D120 recensione coda pagina; org utente recensioni ogni prestito, aggiunge un motivo, clicca Conferma → POST /api/los/charge-off /{id}/conferma. Supera il backend LoanChargeOffService. - Nuova componente <LoanAuditTimeline>: lettura Non e' vero. e rende il flusso LoanAuditEvent completo (tipo attore, tipo, quantità, timestamp). Progettato per collegare alla pagina dei dettagli del prestito org-side.
· kamolos
P1 lotto — webhooks stato avanzato, cron, commercio verticale
Movimento dei soldi (il nucleo P1): - LoanPaymentPostingService: markSucceedAndPost / markFailed / markReturnedAndReverse / markDisbursementSucceededed / markDrawDisbursed. Ordine di allocazione bloccato: tasse → interesse → preside. Auto-avanze di stato DELINQUENT ↔ ACTIVE ↔ PAID OFF basato sull'equilibrio risultante. - StripeWebhookService non è più log-only: payment intent.succeed / pagamento failed / charge.refunded (rimborso di ACH) / disputa.created+chiuso / pagamento.pagato + fatto tutti anticipare il registro tramite PostingService. - NachaReturnCode + RetryScheduler: NACHA-compliant R-code routing — R01/R09 riprova fino a 2× / 5 giorni di distanza, R07/R10/R29 revoca il mandato, ripiani esauriti flip LoanPaymentMethod → REQUIRES REVERIFY. Composizione commerciale-verticale: # Ora crea Engagement # (PERSONAL LOANS, COMITATO), Impegno (ACTIVE, con prezzi + termini JSON snapshot), Ordine (AUTHORIZED, subtotal=principal), e filetta i loro ID torna su Loan.commitmentUid / engagementUid / originOrderUid in la stessa transazione. Lavoro Cron (vera logica, non stubs): - CoolingOffAdvanceCategoria professionale: prevede un pagamento FINE DISBURSEMENT OUT per ogni PENDING DISBURGAMENTO prestito il cui raffreddamento è trascorso. - InteressiAccrualCategoria professionale: abituale quotidiano sul principaleBalance per i prestiti ACTIVE + DELINQUENT. - StatementGenerationCategoria professionale: installazione per-due-date dichiarazione, LOC per-ciclo dichiarazione con approssimazione ADB + valutazione annuale delle tasse + pagamento automatico Sto programmando. - AutoDebitRunCategoria professionale: incendi PENDING auto-debiti + pagamenti DISBURSEMENT OUT + Retries NACHA tramite StripeConnectService con chiavi idempotency. - RiconciliazioneCategoria professionale: riassorbimento notturno delle tasse/principale/equilibrio ledger; correzione alla deriva registrato + verificato. - ReminderDispatchJob: tira notifiche SCHEDULED oltre il loro programmatoFor e consegna tramite NotificationDispatchService. Notifica: - No, no. reale HTTP POST a EmailService (/api/email/transactional/send) e VOIPService (/api/voip/sms/send, /api/voip/voice/send), templateKey = "loan.{kind lowercase}". Validazione: - LoanProductValidationService: applica il tappo di stato APR ≤ (per genere), controlli proibiti, pena min/max-principale. agganciato in LoanProductService.create + aggiornamento. Caricamento: - LoanChargeOffService.queue() elenca i prestiti D120; a CHARGED OFF e scrive un evento di audit CHARGE OFF RECORDED. - LoanChargeOffController espone Non e' vero. Navigatore: - LoanAuditEventController espone Non e' vero
· kamo-internal
P0 indurimento — forme, risoluzione della sessione, metodi di pagamento
Forms (org-side): E' una cosa che non va. /{productUid} modificare pagine - Nuovo LoanProductForm: basi / prezzi / limiti / termini / conformità sezioni, campi di genere (installazione vs LOC), promissory-note modello UID, codici a stato consentiti - No, no. prodotto selezione (solo prodotti attivi da questo mercato), membro del mutuatario, principale, termine facoltativo, stato del mutuatario, "save Draft" vs "send" - /settings/features/lending: org-side Stripe Connect onboarding page (chiamate)************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ Indurimento sul bordo: - Nuovo usoCurrentSession() gancio risolve membroId/orgId da /api/user-info (canonical *** path) — sostituisce il falso KMEMBER/KORG cookie legge in My Loans, Dettaglio offerta, Dettaglio prestito, Impostazioni di prestito, PipelineLoanOffersTab, PipelineActiveLoansTab - Nuova BorrowerPaymentMethodsCard: il mutuatario può collegare la banca ACH (Stripe pagamento method id + mandato) o carta, vedere metodi collegati, impostare predefinito, revoca; incorporato in /loans/[loanId] pagina - losApi: + startStripeConnectOnboarding Impostazioni nav (2 di 3 posti per regola di memoria): - ImpostazioniStatusWindow aggiunge "Prodotti solidi" in commercio + voce del percorso Per il fatto che... - (sidebar.tsx non ha voce POS — no-op confermato)
· kamolos
Indurimento P0 — Stripe Connect endpoint + PDF flatten
- Fix EsignClient Importazioni: EsignGenericEnvelopeRepository / EsignSignatureRepository live in .esign.repos, not .esign root - Nuovo StripeConnectController POST Non e' vero. crea org account personalizzato + restituisce l'URL di bordo (delega a esistente StripeConnectService) - MediaServiceClient.fetchBlob: tira i byte di un blob immagazzinato per flusso di lavoro flatten/render - Nuovo PdfFlattenService: aggiunge un E-SIGN Firma conforme agli atti pagina di certificazione alla divulgazione sorgente PDF per ogni catturato firma (nome digitato reso in italico; signer/IP/UA/SHA-256 + busta UID registrato sulla pagina). Memorizza il nuovo blob appiattito tramite MediaService e restituisce blob id + SHA-256. - EsignClient.submitSignature ora appiattisce dopo la marcatura SIGNED e populati Non e' vero. + firmatoDocumentSha256. Tronchi di guasto Flatten ma non rotola indietro la firma stessa.
· kamo-internal
/api/los/* percorso proxy → KamoLOS via k8s DNS
Specchi il /api/billing/[...percorso] Delegazione del servizio di fatturazione: *** sessione risolta tramite Redis; X-Org-Id + X-Member-Id inoltrata - /api/los/webhooks/* skip session auth (Stripe firma-verified at KamoLOS); Stripe-Signature intestazione è passato attraverso - Intestazione Dio-moda passante conservato - 502 confezione su guasti a monte
· kamo-internal
Aggiungi PERSONAL LOANS tipo di commercio front-end
- engagementTypeLabels: estendere l'engagement Tipo unione + vocabolario - MarketCardGrid: PERSONAL LOANS colore (#14b8a6) + icona del marchio + contatore - Pagina dettagliata del mercato: nuove schede (Prodotti / Offerte / Crediti attivi / Regole di stato) gated su commerceTipo == 'PERSONAL LOANS' - losApi.ts: superficie DTO completa + impacco fetch sottile che colpisce /api/los/* per prodotti, offerte, prestiti, pagamenti, estrazioni, dichiarazioni, pagamento metodi, pagamento automatico, regole di stato, presentazione firma ESign - Nuovi prodotti MarketLoanTab / MarketLoanOffersTab / MarketActiveLoansTab / Componenti MarketLoanStateRulesTab - PipelineView: VERTICAL ICONS ingresso per personal loans - PipelineSezione verticale: PERSONAL LOANS in hasSubTabs + blocco di rendering Offerte (intenti) + Crediti attivi (impegni) subtabi - Nuovo PipelineLoanOffersTab / PipelineActiveLoansTab - Borrower (Membro) / superficie dei prestiti: indice, /loans/offers/[offer Id] con flusso di accettazione e firma (firma di tipo → accetta-offerta), /prezzi/[loanId] con saldo, dichiarazioni, pagamento storia, Pay Now, draws-for-LOC - impostazioni/page.tsx: commerce nav aggiunge la voce "Prodotti solitari"
· kamolos
Originaria personale iniziale + servizio di assistenza
New Spring Boot 3.1.5 / Java 21 microservice modellato su BillingService. Possiede dominio personale-loan end-to-end: - LoanProduct / LoanOffer / Loan CRUD con strato REST + DTO - LoanLifecycleService materializza Loan + commerce Engagement/Commitment sull'accettazione dell'offerta (un txn) - LoanPayment + LoanDraw + LoanStatement + LoanPaymentMethod + LoanRecurring PaymentPlan servizi + controller - Matematica: AmortizationEngine (Reg Z Appendix J), InterestAccrualEngine (ACT 365 / ACT 360 + ADB), PaymentAllocator (fees→interest→principal) - StripeConnectService (Custom-account onboarding, ACH erogazione, ACH addebito) + StripeWebhookService (idempotent via LoanStripeWebhookEvent) + endpoint webhook specifico per il collegamento - TilaRendererService rende la casella Reg Z Schumer (installazione) / comunicazione open-end (LOC) tramite PDFBox in MinIO - StateRuleSelfHealService boot-loads prestito state rules.json (50-stato registro + tappo MLA + raffreddamento-off) — riconciliare il modello dai diritti - EsignClient + EsignSignController completa il profilo dei membri mancanti percorso di presentazione firma (scrive EsignGenericEnvelope + EsignSignature in condiviso-lib) - NotificaDispatchService con programmazione a chiave dedup - Cron lavori: OffertaEspirazione, NormativaGenerazione, DelinquencySweep - k8s manifests (configmap / deploy / service), Dockerfile, Forgejo CI workflow (dual-cluster K1M1+K2M1) tutti allineati con Convenzioni del servizio di fatturazione
· kamo-shared-library
Aggiungere PERSONAL LOANS tipo di commercio + pacchetto entità
- CommerceType.PERSONAL LOANS + Engagement paralleloTipo + vocabolario - IntroduttivoVendorCategories per i fornitori personali-loan - 15 entità JPA personali loans (LoanProduct, LoanStateRule, LoanOffer, LoanOfferDecision, LoanDraw, LoanPayment, LoanPaymentMethod, LoanRecurringPaymentPlan, LoanStatement, LoanFee, LoanDisclosure, LoanAuditEvent, LoanStripeWebhookEvent, LoanNotification) + 15 riposi - 22 enumi personali loans (stato, livello, tipo, fonte, canale, ecc.) - esign EsignGenericEnvelope + EsignSignature + repos per non-mortgage creazione di buste e cattura firma conforme ai membri - KamoLOS → Rifs di commento KamoMLOS aggiornate solo su Organizzazione / CommercioMarketService / CommercioServizio La gestione dello schema rimane con KamoInitializerService; KamoLOS utilizza ddl-auto: nessuno.
· kamo-internal
Gli upload di album fotografici utilizzano la stessa pipeline WS della scheda Caricamenti
Estrae la pipeline di upload doc-manager (hashing → dedup check → registro-or-upload → conversione di WebSocket-driven) in un uso riutilizzabileImagingUploads gancio. Il gancio possiede la macchina di stato per-file, il progresso XHR, e l'abbonamento WebSocket in diretta di conversione che la scheda Carica utilizza. Photo-album dialogo riscritto per consumare il gancio: - File di coda automaticamente e elaborare uno alla volta. - Ogni file in-flight mostra la sua attuale etichetta scenica (Hashing → Checking → Uploading → Converting → Complete) con un LinearProgress, un'icona di controllo / errore / spinner, e un pulsante Retry dopo il fallimento. - La finestra di dialogo visualizza ora il messaggio di errore del server effettivo (ad esempio "Failed to upload to MinIO") invece di ingoiarlo, e un Salva è bloccato mentre gli upload sono ancora in volo. - I file caricati con successo si collegano automaticamente all'album come elementi.
· kamolos
Hide isActive=false programmi da mutuatari in tempo reale
useProgramCatalog ora filtra i programmi con isActive=false prima restituirli al mago del prestito. La bandiera è computerizzata lato server come (base.isActive E override.isActive), quindi quando un prestatore controlla un programma nella scheda Impostazioni Programmi Mortgage, la scheda corrispondente si ferma comparire nella selezione persona/programma — intrappolata dagli anni 60 esistenti soffitto staleTime.
· SecurityService
Backfill programma offerte per i mercati ipotecari esistenti sul boot
DataLoader ora chiama E' il momento giusto. dopo il backfill AppMortgage-engagement. Nuota ogni MORTGAGE esistente CommerceMarket e assicura che le sue offerte di programma sono fornite. Coperte i mercati che sono stati creati prima della creazioneIl gancio laterale del marchio è atterrato — specificatamente quelli che l'utente ha aggiunto tramite Markets & Fields prima di questo schierare. Idempotent: un sistema completamente avviato logs "tutti i mercati già provvisto" e skips.
· kamo-shared-library
Bootstrap programma mutuo offerte sul mercato creare + boot backfill
Quando l'utente crea un CommerceMarket con commerceType=MORTGAGE — tramite Impostazioni di mercati e campi scheda — il mercato ha bisogno di programma per le superfici di commercio a valle per puntare le intenzioni. Nelle puntate precedenti... è accaduto pigramente sul primo AppMortgage creare, così mutuo recentemente aggiunto i mercati si sedevano vuoti e gli amministratori KamoLOS-side non videro alcun effetto dall'aggiunta di uno. - Quando si chiama "MORTGAGE", chiama. Dopo il salvataggio. Sbagliato in prova/catch in modo che un guasto programma-seeding non blocca la creazione di mercato (KamoLOS legge i programmi del registro di sistema del programma, non le offerte). - No, no. spazzatrici ogni mercato MORTGAGE esistente e assicura che le sue offerte siano fornite. Utilizzato da SecurityService DataLoader sul boot per coprire i mercati creati prima questo gancio è atterrato. Idempotent — stivali a stato costante sono un no-op.
· kamo-internal
Duplicare leganti in modo che gli utenti possono forcheggiare senza influenzare l'originale
Aggiunge un'azione "Duplicata" accessibile dal menu contestuale dell'elenco dei raccoglitori e da un nuovo pulsante nell'intestazione dell'editor. Il duplicato parte dai metadati del raccoglitore di origine + elementi + modificatori, di proprietà dell'utente corrente senza azioni, e viene automaticamente selezionato in modo che l'utente atterra immediatamente sul nuovo ramo. Fili in su: - No, no. percorso - duplicateBinder() in binderApi.ts e usoBinderStore - voce di menu "Duplicato" in BinderListPanel (opera su qualsiasi legante visibile — di proprietà, condiviso o modello) - Pulsante icona duplicata + spinner in intestazione BinderEditor
· DocsService
Aggiunta di POST
Copre a fondo un legante che il richiedente può vedere (di proprietà, condiviso o modello) in un legante fresco di proprietà del richiedente. Copisce ogni elemento (DOC, SEPARATOR, GENERATED) con ordine, tipo, configJson e per-instance modifica intatto; copie modificatori a tutto il legante; lascia i documenti Img sottostanti da soli (entrambi i leganti fanno riferimento agli stessi documenti). La copia inizia senza azioni ed è Template=false.
· kamo-internal
Mortgage Programmi di gioco + MORTGAGE impegno deep-link
- MortgageProgramsPanel ora spedisce un vero Switch su ogni scheda di programma con aggiornamento ottimistico + rollback sul fallimento. Toggling delle chiamate di programma E' il momento di riflettere. efficace stato attivo computerizzato lato server dalla base + override. Il nuovo endpoint. - /commerce/engagements/[id] pagina: link APPLICAZIONETipo ora percorsi per /applicazioni/{linkId} (la pagina di dettaglio URLA), non mancante Non e' vero. MORTGAGE coinvolge auto-redirect in /applicazioni/{linkId} su carico in modo che gli utenti atterrano in dettaglio URLA direttamente invece della generica vista di fidanzamento.
· SecurityService
PUT /programs/{code}/active + deprecare i punti finali di POS di ipoteca legacy
MortgageProgramController guadagna PUT ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** con corpo {"isActive": bool}, gated su LOS TAKE APPLICATION. Delegati a Il che aumenta la riga OrgProgramOverride. - No, no. getMortgageAppById, creareMortgageApp, updateMortgageApp, updateMortgageAppStatus tutti contrassegnati @Deprecated con javadoc puntatori all'URLA-fidelity /api/security/mortgage-apps endpoints. I percorsi POS legacy rimangono funzionali per il back-compat.
· kamo-shared-library
Per-org abilitare/disabilitare + deprecare legacy commercio unico percorso ipotecario
- No, no. upserts una riga OrgProgramOverride con recordState.isActive=desiderato; listForOrg ora ed è il programma base bandierina attiva con il override, quindi un override disabilitato trasporta il doppio significa "questo org ha esplicitamente disabilitato questo programma". - OrgProgramOverrideRepository aggiunge findAllByOrganizationId e Per i percorsi upsert+ForOrg. - No, no. / trovareMortgageAppById / E' il momento giusto. / aggiornamentoMortgageApp / updateMortgageAppStatus sono @Deprecated. Funzionano solo sul commercio Intenti contrassegnati LOAN APPLICATION e non creare o leggere URLA AppMortgage ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** ma il nuovo codice deve usare AppMortgageService + /api/security/mortgage-apps.
· kamolos
Scrubbable day↔night tema con sole luna SkyToggle
- continue unità di posizione della scena t | [0,1] ~25 CSS proprietà personalizzate su :root tramite interpolazione lineare RGB tra giorno di carta calda e aurora notte ancora in lib/scene/palettes.ts - Predefiniti per l'ora locale del giorno in prima visita; override manuale è appiccicoso in un cookie, con un pulsante clock-icon per riattivare l'auto - SSR ScenePainter cuoce la tavolozza risolta prima della prima vernice così non c'è FOUC nelle visite di ritorno; la modalità auto di prima visita facilita da giorno in locale t over ~1.4s - SkyToggle: pollice ribaltabile il cui glifo lunare ruota in in tempo reale con t e morfi tra sole con raggi e luna crescente - PageGlow + StarField strati ambientali: ambra sun-glow a sinistra giorno, fresco luna-glow superiore a destra di notte, ~80 stelle semi sbiadiscono in dusk passato e twinkle via ridotto-motion-aware keyframe - Il tema MUI passa al limite del crepuscolo t≥0.5; CssBaseline colore del corpo legge da CSS vars così interpolation rimane continuo - Drops the hard-locked dark class + color-scheme; fissa due lungo-stale --superficie-base (mancante colore- prefisso) gradienti fallbacks in JourneyCrest e cerimoniaClient
· kamolos
Esporre gli UID di impegno/intent/commitment
AppMortgageDTO ora porta gli identificatori del ciclo-commercio che Il backend di SecurityService si basa su ogni applicazione del mutuo. KamoLOS non li usa ancora attivamente, ma digitarli attraverso mezzi futuri Le offerte in prestito ("la vostra domanda è stata impegnata") possono fare riferimento allo strato di commercio direttamente senza passare attraverso il modello URLA.
· kamo-internal
Mostra contesto commerciale + Impostazioni programmi
- /applicazioni eroe ora legge "Commerce > Residential Mortgages · URLA 2021" così il personale vede ipoteca come una verticale del modulo di commercio, non un pipeline indipendente. - Nuova scheda Programmi Mortgage sotto Impostazioni di Commercio — catalogo di sola lettura di programmi di prestito (CONV/FHA/VA/...) con versione attiva dello stato e del regolamento. Impostazioni nav aggiornate in tutte e tre le posizioni (subTopics, route, labelFor). - AppMortgageDTO/SummaryDTO + nuovo programmaDTO/LoanProgramCode tipo specchio i cambiamenti condivisi-lib (engagementUid / intentUid / engagementUid). - ipotecaAppsApi.listPrograms() colpisce l'endpoint /programs esistente.
· SecurityService
Enforce LOS rights + /commerce/engagements endpoint
- MortgageAppController: ogni punto finale ora cancelli su RoleRightType. Leggi richiedere LOS VIEW PIPELINE; creare una nuova applicazione richiede LOS TAKE APPLICATION; le modifiche accettano qualsiasi ruolo di scrittura LOS (take / process / sottoscrittura / chiusura / sospensione); cancellazione richiede LOS SUSPEND OR WITHDRAW. L'account di servizio di KamoLOS porta già il set completo di destra LOS in modo che il il viaggio del mutuatario non è interessato; gli utenti del personale sono gated per il loro ruolo. - CommerceEngagementController: new GET ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** (elenco con filtri tipo/status/date) e GET .../engagements/{uid} (particolare), è stato lanciato su ACCESS COMMERCE. Questa è la controparte verticale-agnostica alla ipoteca-apps endpoint — stesso formato di filo se stai leggendo un ipoteca, un ordine di vendita al dettaglio, o una prenotazione di noleggio.
· kamo-shared-library
Wire URLUn'ipoteca in Engagement/Intent/Commitment
Mortgage è una verticale del sistema di commercio — insieme al commercio al dettaglio, al noleggio, servizio, abbonamento e appalti. Questo cablaggi il mutuo URLA-fidelity impilare al ciclo di vita del commercio a dominio-agnostico così superfici cross-vertical (trascotti pipeline, analisi, portale clienti) vedere ipoteca come qualsiasi altro fidanzamento. - Applicazione: nuovo engagement id / intent id / engagement id FKs (nullable for file legacy). E' una cosa che non va. CommerceMarket + una offerta per LoanProgramCode sulla prima applicazione creare; attacca Engagement+Intent ad ogni AppMortgage; specchi LoanFile. stato su Intent.status e Engagement. stato; materializza un impegno FUNDED con l'istantanea dei termini di prestito. Idempotent end-to-end. - AppMortgageService: creareBlank/createDall'attacco al fidanzamento; setSelettoProgramCode rinfresca l'offerta di Intent. - LoanPipelineService.specchi di transizione dopo ogni transizione; commercio i guasti dello specchio non bloccano la progressione URLA (log + continuare). - AppMortgageDTO / AppMortgageSummaryDTO esporre impegno Uid / intentUid / impegnoUid per il frontend.
· kamo-internal
Aggiungere la scheda Organizzatore con leganti, separatori, documenti generati
Aggiunge l'Organizzatore al Doc Manager: - Nuova scheda "Organizzatore" (posizione 4) con una lista legante + editor vista divisa; le schede esistenti cambiano a destra - "Aggiungi all'organizzatore" azione su ogni riga doc apre un raccoglitore di leganti (esistenti leganti o crea nuovi) - Editor Binder: elementi drag-to-reorder (HTML5 DnD), aggiungere Separatore di pagina (colore + etichetta tramite ModernColorPicker), aggiungere Doc Generated (Cover Page, Table of Contents, Photo Album, Word Count) - Photo Album supporta upload-new-photos (anche aggiunge a doc manager) e browser-esistente - Il pannello modificatore a livello di binder riutilizza la forma modificatrice esign (numeri di pagina, etichetta, filigrana) - Il modificatore per-doc-instance sovrascrive tramite una finestra di dialogo per-item - La modalità anteprima rende il PDF fuso in un iframe - Scarica il pulsante richiama /api/docs/binders/{id}/render Nuovo negozio Zustand utilizzareBinderStore, REST client app/utils/binderApi.ts, e Next.js proxy percorsi sotto /api/docs/binders/* che rispecchia il modello proxy di imaging esistente.
· DocsService
Aggiungere l'organizzatore backend — CRUD, rendere, documenti generati
Nuova superficie REST sotto /api/docs/binders per la funzione Organizzatore: - BinderController: CRUD, add/update/remove/reorder, share, render - BinderService: controlli di accesso org-scoped, visibilità proprietario/share/template, gestione della posizione dell'oggetto - BinderRenderer: two-pass merge (deferred ToC/WordCount), si applica per-instance e modificatori a tutto il legante tramite PdfBuildUtils condiviso - Registro Generated-doc con i renders per Cover Page, Tabella dei contenuti, Word Count, Photo Album (utilizza MinIO per byte di immagine) Riutilizzo Per i documenti modificati con le dimissioni e per il controllo degli accessi.
· kamo-shared-library
Aggiungi Binder/BinderItem/BinderShare entità e repository
Aggiunge lo strato di persistenza per la nuova funzione Doc-manager Organizer: - Binder (Long id, proprietario, org-scoped, isTemplate, binder-wide modifierJson) - BinderShare (UUUID, membro del destinatarioId, ruolo READ/WRITE) - Deposito di dati di primavera JPA con domande org-scoped e un sindacato "visibile a membro" (di proprietà + condiviso + modello) Lo schema viene raccolto automaticamente da KamoInitializerService tramite il ddl-auto di Hibernate.
· kamolos
Immergere il banner di prova, adattare il viewport, aggiungere il consenso dei cookie
- TestModeBanner pubblica la sua altezza a --kamolos-banner-h e globals.css lo sottrae dal min-h-screen in modo che la home view no più a lungo trabocca la vista dai pixel del banner. - Banner guadagna un shimmer ambra scorrevole + impulso ombra lenta in modo che legge come un avviso attivo, rispecchiando la barra di anteprima di marketing. - Nuovo CookieConsentBanner (Accetta tutto / Gestisci con analisi toggle), reskinned dalla versione di marketing per utilizzare il buio superficie aurora + per-tenant --org-primary / --org-gradient.
· kamolos
Superficie SAFE Act NMLS ID per lender + assegnato LO
Aggiunge LoContactCard con avatar, polso di presenza, link NMLS verificato, e call/email/messaggio azioni nella parte superiore sinistra dell'eroe e applicare superfici, quindi l'autore del prestito autorizzato del mutuatario (nome + NMLS ID) è sempre uno toccare via — richiesto da SAFE Act §1503 e Reg Z §1026.36(g). Il prestatore Footer's NMLS è promosso a "Licensed · NMLS #" pillola di fiducia, e useAssignedLO ora restituisce un demo falso LO fino all'assegnazione del prestito terre. LoGuideChip ritorna alla voce solo dal momento che il LO ha una propria superficie.
· kamolos
Demo lender auto-carica quando nessun vero inquilino risolve
Il motivo "ancora non marcato" — nessun vero inquilino org esisteva per hostname che viene testato, così il fetch SSR restituito null e ogni la superficie di inclinazione del lender è caduta attraverso i default di Kamo in bundle. The sistema di branding stava lavorando; non aveva nulla a marchio CON. Ora spedisce una completa lender demo che auto-carica come il fallback quando il vero fetch non restituisce nulla E le stube sono permesse E' una cosa che non va. Produzione con i test disabilitati sono ancora in grado di eliminare i default di Kamo, quindi non mai spedire un vero e proprio mutuatario a "Apex Mortgage". - lib/org/demoOrg.ts: "Apex Mortgage" — burgundy (#8B1538) primario e oro (#D4A24C) secondario, deliberatamente lontano da aurora così il effetto marcato è inconfondibile. Popola completa: slogan ("Tre generazioni di portarti a casa."), NMLS #123456, telefono di supporto + email, anno stabilito 1989, entrambi EHO + EHL marca, lineare-135 direzione gradiente. Nuovo assetBasePath: '/demo-lender' sull'org tipo dice a ThemeLogo di caricare /demo-lender/logo-full. svg prima provare MinIO o il fallback globale. - No, no. + logo.svg: reale Apex Mortgage wordmark e mountain-peak nel borgognone → gradiente oro. No. solo una parola, un vero blocco. - lib/org/fetchOrganization.ts: restituisce DEMO ORG quando è a monte irraggiungibile o nessun org è registrato E le stube lo permettono. Real-host / la risoluzione reale vince quando è presente. - componenti/tema/temeLogo.tsx: consultare l'usoOrg(). mette quel prefisso davanti alla catena del candidato. Demo del creditore il logo terra; i beni di MinIO degli inquilini reali si risolvono ancora prima quando popolato. - app/layout.tsx: <link rel="preload"> traccia lo stesso ordine prioritario, così il precarico SSR mira il logo del creditore demo quando la modalità demo è attivo. # When org.id # il banner chiama fuori "Mostrare il creditore demo (nessun inquilino configurato per questo host)" così i tester sanno quale marca sono vedere è in scatola. Costruisci 32/32, 140 test pass. Ricaricare l'app del mutuatario e si dovrebbe ora vedi il logo Apex Mortgage + nome nell'intestazione, il borgognone e oro in tutto il CTA e nastri, "Benvenuto ad Apex Mortgage". l'eroe di atterraggio, NMLS #123456 + EHO + EHL nel piè di pagina, "Call Apex Mortgage (800) 555-2739" nella scheda di aiuto.
· kamolos
Rendere il creditore il marchio primario, non un accento
Ristruttura l'app in prestito da "Prodotto Kamo con accenti del prestatore" a "Prodotto del mittente, Kamo come motore". Ogni superficie ora conduce con l'identità del prestatore. - LenderLockup ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** marchio utilizzato ovunque. Scale sm → md → lg → xl → eroe. Coppie il logo (o wordmark fallback nel colore primario del lender) con il nome del prestatore; taglio facoltativo qui sotto. Utilizzato da ogni superficie che ha bisogno di sentire "sono al sito del mio prestatore". - BorrowerHeader — barra di intestazione cresce a h-14/h-16, logo + nome del prestatore sempre visibile (dimensione="md" forceWordmark), ombra a goccia stagnata nel Il prestatore e' primario. Il precedente piccolo angolo 24px è andato. Un nuovo click-to-call pulsante del telefono si siede accanto a Aiuto con il creditore bordo principale + bagliore; sul cellulare crolla a un pulsante icona. The accento nastro è 4px (was 2px) e ancora pende il gradiente del lender. - Eroe di pagina di atterraggio — incentrato, dominato dal blocco del lender all'eroe scala all'interno di una carta di vetro con forte --org-primario bagliore. Sopra fold legge "Welcome to {LenderName}" (il lender inclinato nome è il titolo), con lo slogan del prestatore come il sottotitolo. Una pillola colorata dice "{Lender} · Loan onboarding" invece di generico "Kamoville". Il pulsante CTA è più grande e porta un forte --or-primario bagliore esterno. - LenderFoooter — riga di attribuzione completa: nome del prestatore + NMLS Consumatore Collegamento di accesso + telefono + e-mail + sito web + marchio EHO/EHL. Copyright line legge "© 2023-2026 {LenderName}. Tutti i diritti riservati." con un piccolo Credito "Onboarding by Kamo". Visibile su superfici eroiche. - HeroBrandIntro — Splash abita 3.4s (era 2.4s), mostra in prima visita E ogni ritorno di 30 minuti (era una volta per sessione). Crescita della carta logo a taglia="eroe" all'interno di una carta di vetro più forte con un --or-primario bagliore esterno. "Benvenuto a {LenderName}" è il titolo; lo slogan del prestatore è il sottotitolo. - generateMetadata — Next.js modello di titolo è ora `%s · {LenderName} con il nome predefinito è solo il nome del creditore. Ogni pagina dei bambini legge lender-first nella scheda del browser e schede OG. siteName, titolo, e descrizione tutto il flusso dal record org. Costruisci 32/32, 140 test pass. Se il vostro inquilino config ha popolato slogan / nmlsId / phoneSupport / emailSupporto / annoEst / colorePri / coloreSec / logo asset, il sito Ora sembra senza ambiguità come il prodotto del vostro finanziatore. Con niente popolato si degrada con grazia a "Kamo" di default.
· InitializerService
Migrazione per le colonne di comunicazione del mutuatario
Aggiunge le sette colonne nullable il kamo-shared-library Organization entità dichiara ora (TAGLINE / NMLS ID / PHONE SUPPORT / EMAIL SUPPORT / EQUAL HOUSING DISCLOSURE / ON PRIMARY TEXT / GRADIENT DIRECTION) so l'applicazione del mutuatario kamo-los può raccogliere il marchio del prestatore senza schema errori sulle righe esistenti. @Order(35) — corre dopo LogoFullExtMigrationRunner (30) e prima LeadCompanyColumnRunner (40). Idemponte tramite ADD COLUMN IF NON ESISTI; sicuro da rifare. Per politica di progetto questo file non è eseguito qui — KamoInitializerService è iniziato dall'utente.

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