Changelog
Ada kabar baru.
Setiap perbaikan pada platform, sebagai kapal.
· kamo-internal
Frrontend P1 - charge-off antrian + audit timeline
- Losapi: chargeOffQueue / confirmamChargeOff / auditByLoan - * * * * * * * * * * * * * * Halaman antrian review D120; org pengguna meninjau setiap pinjaman, menambahkan alasan, klik Konfirmasi POST / api / los / charge- off / {id} / konfirmasi. Permukaan backend LoanChargeOffService. - Komponen Baru < LoanAudititTimeline >: baca * * * * * * * * * * * * * * * dan membuat arus LoanAuditEvent penuh (tipe aktor, jenis, jumlah, timestamp). Dirancang untuk plug ke halaman sisi org-.
· kamolos
P1 batch - kondisi muka webhook, kron, vertikal perdagangan
Gerakan uang (inti P1): - LoanPaymentPostingService: markSuccededAndPost / markFailed / MarkReturnedAndReverse / markDisbursePenjaranSukses / markDrawDisbursed. Perintah alokasi terkunci: biaya ££# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $# $$$$$$$$$$$$$$$$$$$$$$# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$... $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$........................ Status auto- maju DELINQUENT ACTIVE AFPAID _ OFF berdasarkan keseimbangan yang dihasilkan. - StripeWebhookService tidak lagi log -only: pembayaran _ intent.succedst / pembayaran _ failed / charge.refuneded (ACH return) / dispute.created + closed / payout.paid + gagal semua memajukan buku besar melalui PostingService. - NachareturnCode + RetryScheduler: RACHA- compliant R-code routing - R01 / R09 coba ulang hingga 2 x / 5 hari terpisah, R07 / R10 / R29 mencabut mandat, kelelahan mencoba membalikkan metode LoanPayMenthod: REQUIRES _ REVERIFY. Materialisasi vertikal perdagangan: - * * * * * * * * * * * * * * * sekarang menciptakan Pertunangan (PENERJEMAH = SUGENG PRAYITNO) snapshots), Order (AUTHORIZED, subtotal = principal), dan benang ID mereka kembali ke Loan.completments Uid / engagemment Uid / original OrderUid dalam transaksi yang sama. Pekerjaan Cron (logika nyata, bukan stubs): - Pekerjaan CoolingOffadvanceJob: enqueues sebuah DISBURSEMENT _ OUT pembayaran untuk Every PENDING _ DISBURSEMENT Pinjaman yang pendingin-off berlalu. - InterestAccrualJob: sederhana setiap hari - bunga Accrual pada prinsip keseimbangan untuk pinjaman ACTIVE + DELINQUENT. - Pekerjaan Statementation GenerationJob: memasang pernyataan perdue- date, LOC per- cycle pernyataan dengan pendekatan ADB + biaya tahunan penilaian + otomatis-pay penjadwalan. - AutoDebitRunJob: kebakaran PENDING auto-debit + dissburSEMENT _ OUT payout + NACHA mencoba melalui StripeConnectService dengan kunci idempotency. - Pekerjaan rekonstruksi: jumlah biaya / pokok / keseimbangan malam dari buku besar; drift koreksi log + audit. - Pengingat DispatchJob: menarik pemberitahuan SCHEDUULED masa lalu tajuk jadwal untuk dan memberikan melalui NotificationDispatchService. Pemberitahuan: - * * * * * * * * * * * * * * POST HTTP nyata ke Layanan Surat (/ api / email / transaksional / kirim) dan VOIPService (/ api / voip / sms / send, / api / voip / voice / send), templateKey = "pinjaman. {kind _ lowercase}". Validasi: - LoanProductValidationService: memaksa APR DEPAN cap (per jenis), pemeriksaan prohibited- jenis, mental min / max-principal. Terkait ke LoanProductService.create + update. Charge- off: - LoanChargeOffService.queue () daftar D120 pinjaman; .confirm () status flip to CHARGED _ OFF and write a CHARGE _ OFF _ RECORDED audit event. - LoanChargeOffController mengekspos * * * * * * * * * * * * * * * Audit browse: - LoanAudititEventController mengekspos * * * * * * * * * * * * * * *
· kamo-internal
P0 hardening - formulir, penyelesaian sesi, metode pembayaran
Format (org-side): - * * * * * * * * * * * * / {produkUid} edit halaman - New LoanProductForm: dasar-dasar / harga / batas / syarat / kepatuhan daerah, fields kind- sadar (cicilan vs LOC), promissory- catatan template UID, alloud- states- codes - * * * * * * * * * * * * * * produk seleksi (hanya produk aktif dari pasar ini), peminjam - anggota, prinsipal, term opsional, kondisi peminjam, "save draft" vs "send" - / pengaturan / fitur / pinjaman: halaman org-side Stripe Hubungkan onboarding (panggilan * * * * * * * * * * * * * * * * mengarahkan kembali ke Stripe) Borrower- side hardening: - Baru Useenceed Sesi () kait menyelesaikan memberId / orgId dari / api / user-info (canonical * * path) - menggantikan KMEMBER palsu / KORG Cookie dibaca di My Loans, Penawaran Penawaran, Loan Detail, Pengaturan Pinjaman, PipelineLoanOffersTab, PipelineActiveLoansTab - New BorrowerPayment MethodsCard: peminjam dapat menghubungkan bank ACH (Stripe page _ method id + mandat) atau kartu, lihat metode terkait, set default, batalkan; tertanam pada / pinjaman / [loanId] halaman - losApi: + startStripeConnectOnboarding Pengaturan nav (2 dari 3 tempat per aturan memori): - SettingsStatusWindow menambahkan "Loan Products" di bawah entri rute Commerce + untuk... - (side bar.tsx tidak memiliki masukan POS - dikonfirmasi no- op)
· kamolos
P0 hardening - Stripe Connect endpoint + PDF flatten
- Perbaiki impor EsignClient: EsignGenericEnvelopeRepositori / EsignSignatureRepositori tinggal di .esign.repos, bukan akar .esign - POST StripeConnectController Baru * * * * * * * * * * * * * * * Membuat org Customy-account + kembali onboarding URL (delegates ke StripeConnectService yang ada) - MediaServiceClient.fetchBlob: menarik sebuah byte yang disimpan blob untuk meratakan / ubah arus kerja - New PdfFlattenService: menambahkan sebuah E- SIGN Signature act-compliant halaman sertifikasi ke sumber pengungkapan PDF untuk masing-masing ditangkap signature (typed-name dirender dalam miring; signer / IP / UA / SHA-256 + amplop UID direkam di halaman). Stores the new flatened blob via MediaService dan mengembalikan id blob + SHA-256. - EsignClient.submitSignature sekarang flattens setelah ditandai SIGNED dan Mempopulasi * * * * * * * * * * * * * * * + signedDokuments Sha256. Ratakan log kegagalan tetapi tidak menggulung kembali tanda tangan itu sendiri.
· kamo-internal
/ api / los / * proxy route 1f KamoLOS via k8s DNS
Cermin / api / billing / [[... path]]] Proksi Layanan BillingService: - * * * sesi diselesaikan via Redis; X-Organs-Id + X-Anggota-Id diteruskan - / api / los / webhooks / * lewati sesi auth (Stripe signature- diverifikasi di KamoLOS); Stripe-Signature header melewati - Tuhan-mode header pass- melalui diawetkan - 502 pembungkus pada kegagalan upstream
· kamo-internal
Tambahkan jenis perdagangan PERSONAL _ LOANS sebelum akhir
- Perkembangan TypeLabel: Perpanjang Pertunangan Tipe union + kosa kata - MarketCardGrid: warna PERSONAL _ LOANS (# 14b8a6) + ikon Landmark + counter - Halaman detail pasar: tab baru (Loan Products / Offers / Aktif Loans / Aturan Negara) diberi gated pada commerceType = = 'PERSONAL _ LOANS' - losApi.ts: permukaan DTO penuh + tipis mengambil pembungkus memukul / api / los / * untuk produk, penawaran, pinjaman, pembayaran, menarik, pernyataan, pembayaran metode, auto- pay, aturan negara, penyerahan tanda tangan ESIgn - New MarketLoanProductsTab / MarketLoanOffersTab / MarketActiveLoansTab / Komponen MarketLoanStateRulesTab - PipelineView: masukan VERTICAL _ ICONS untuk _ pinjaman pribadi - PipelineVerticalSection: PERSONAL _ LOANS dalam hasSubTAbs + render block route Offers (intents) + Active Loans (commitments) sub-tab - New PipelineLoanOffersTab / PipelineActiveLoansTab - Peminjam (Anggota) / pinjaman permukaan: indeks, / pinjaman / penawaran / [penawaran Id] dengan pengajuan penerimaan -and -sign (tanda-tangan typed < designign > submisersi accept-offer), / pinjaman / [loanId] dengan keseimbangan, pernyataan, pembayaran sejarah, Pay Now, draws- for- LOC - pengaturan / page.tsx: nav perdagangan menambahkan entri "Pinjaman Produk"
· kamolos
Initial personal- loan initiation + service service
New Spring Boot 3.1,5 / Java 21 microervice dimodelkan pada BillingService. Memiliki domain pribadi-pinjaman end-to-end: - LoanProduct / LoanOffer / Loan CRUD dengan lapisan REST + DTO - LoanLifecycleService mengmaterializes Loan + commerce Enangment / Komitmen pada menawarkan penerimaan (satu txn) - LoanPacipage + LoanDraw + LoanStatement + LoanPayment Method + LoanRecurring Layanan Payment Plan + controller - Math: (ACT _ 365 / ACT _ 360 + ADB), Paymentment Allocator (biaya soundinterest 1f) - StripeConnectService (Custom- account onboarding, disbursement ACH, Debit ACE) + StripeWebhookService (idempoten via LoanStripeWebhookEvent) + connect-specific titik akhir webhook - TilaRendererService membuat Reg Z Schumer kotak (angsuran) / open-end pengungkapan (LOC) melalui PDFBox ke MinIO - StateRuleSelfHeaalService boot-loads lend _ state _ rules.json (50- state registry + MLA cap + cooling -off) - conquit patterns from rights - EsignClient + EsignSignagController melengkapi anggota yang hilang yang dihadapi jalur pengiriman tandatangan (tulis Envelope EsignGeneric+ EsignSignature dalam shared- lib) - NotificationDispatchService dengan penjadwalan dedup- keyed - Cron job: OfferExpiration, Statement Generation, DelincecySweep - k8s manifessts (konfigurasi peta / penyebaran / layanan), Dockerfile, Forgejo CI workflow (dual- cluster K1M1 + K2M1) semua selaras dengan Pertemuan Layanan BillingService
· kamo-shared-library
Tambah paket perdagangan tipe% s% s
- CommerceType.PERSONAL _ LOANS + parallel EngagerType + kosakata - Entri BuiltinVsupportKategori untuk vendor-pinjaman pribadi - 15 entitas JPA (LoanProduct, LoanStateRule, LoanOffer, LoanOfferDecision, Loan, LoanDraw, LoanPapayges, LoanPayment Method, LoanRecurringPaytPlan, LoanPernyataan, LoanFee, LoanDisclosure, LoanAudititEvent, LoanStripeWebhookEvent, LoanNotification) + 15 repos - 22 forum pinjaman pribadi (status, tier, jenis, sumber, saluran, dll) - esign EsignGenericAmplop + EsignSignature + repos untuk bukan-hipotek amplop penciptaan dan anggota menghadapi penangkapan tanda tangan - KAMOLOS AUD KAMOMLOS community - hanya refs diperbarui di Organisasi / CommerceMarketService / CommerceService Skema manajemen tetap dengan KamoInisialerService; KamoloS menggunakan ddl- auto: tidak ada.
· kamo-internal
Foto-album uploads memakai pipeline WS yang sama dengan tab Upload
Mengekstrak aplikasi-manajer upload pipeline (hashing shandedup cek lema register- atau -upload converse WebSocket- didorong konversi) ke dalam kail Userable ImaginUpload. Kait ini memiliki mesin negara bagian per- file, kemajuan XHR, dan langganan langsung conversion- progress WebSocket yang digunakan tab Upload. Dialog album foto ditulis ulang untuk mengkonsumsi kait: - Berkas antrian secara otomatis dan proses satu per satu. - Setiap berkas in- penerbangan menampilkan label stage saat ini (Hashing dorf Checking Affing Complete) dengan Linearprogress, ikon check / error / spinner, dan tombol coba ulang setelah gagal. - Dialog sekarang menampilkan pesan galat server yang sebenarnya (mis. "Gagal mengunggah ke MinIO") daripada menelannya, dan Save diblok saat upload masih dalam penerbangan. - Berhasil mengunggah berkas secara otomatis melampirkan ke album sebagai butir.
· kamolos
Sembunyikan isaktif = program palsu dari peminjam secara real time
useProgramCatalog sekarang menyaring program dengan iAktif = false sebelum Kembalikan mereka ke ahli pinjaman. Flag dihitung server- side sebagai (base.isActive AND override.isactive), jadi ketika rentenderttoggsprogram mati di tab pengaturan Program Pajak, kartu korespondensi berhenti Muncul dalam pilihan persona / program - oleh 60-an yang ada langitwaktu.
· SecurityService
Menawarkan program pengisian ulang bagi pasar hipotek yang ada pada boot
Dataloader sekarang memanggil * * * * * * * * * * * * * * * setelah AppMortgag - keterlibatan backfill. Menyapu setiap MORTGAGE yang ada CommerceMarket dan memastikan program yang ditawarkan. Penyedia Pasar yang dibuat sebelum creatTeMarket- sisi hook mendarat - khususnya yang ditambahkan pengguna melalui Market & Fields sebelum ini Bersiap. Idempoten: fully- bootlounded sistem log "semua pasar sudah ditetapkan "dan melompat.
· kamo-shared-library
Bootstrap penawaran program hipotek di pasar membuat + boot backfill
Ketika pengguna membuat Pasar Perdagangan dengan Tipe Komersial = MORTGAGE - melalui Pasar & Pengaturan Fields tab - pasar membutuhkan program Offerings di bawahnya untuk downstream commerce surface untuk titik maksud di. Sebelumnya hanya ini terjadi lazily pada pertama penciptaan AppMortgage, sehingga baru ditambahkan hipotek Pasar duduk kosong dan iklan sisi KamoLOS-mins tidak melihat efek dari menambahkan satu. - * * * * * * * * * * * * * ketika tipe = MORTGUGE, panggil * * * * * * * * * * * * pasar) setelah menyimpan. Dibungkus dalam mencoba / menangkap sehingga sebuah pemrograman-bibit kegagalan tidak memblokir pembuatan pasar (KamoLOS membaca program dari registry Program, bukan Offerings). - * * * * * * * * * * * * * * menyapu Setiap pasar Mortgage yang ada dan memastikan persembahan diberikan. Digunakan oleh SecurityService DataLoader pada boot untuk menutupi pasar dibuat sebelum hook ini mendarat. Idempoent - diam-negara sepatu bot adalah no- op.
· kamo-internal
Pengikatan ganda sehingga pengguna dapat fork tanpa mempengaruhi yang asli
Tambahkan aksi "Duplikasi" yang dapat diakses dari menu konteks daftar binder dan dari tombol baru di kepala penyunting. Duplikat dimulai dari metadata sumber binder + item + pemodifikasi, yang dimiliki oleh pengguna saat ini tanpa saham, dan secara otomatis dipilih sehingga pengguna mendarat di cabang baru segera. Kabel naik: - * * * * * * * * * * * * * * rute proksi - dupliccateBinder () dalam binderApi.ts dan useBinderStore - "Duplikasi" menu item dalam BinderList Panel (bekerja pada binder terlihat - dimiliki, dibagi, atau template) - Duplikasi tombol ikon + spinner dalam header BinderEditor
· DocsService
Tambahkan POST * * * * * * * * * * * * * * * * * * * * * *
Deep-copy sebuah binder yang dapat dilihat pemohon (dimiliki, dimiliki, berbagi, atau template) menjadi binder segar yang dimiliki oleh pemohon. Salinan setiap item (DOC, SEPARATOR, GENERATOR) dengan urutan, tipe, configJson, dan pemodifikasi perinstance overrides utuh; salinan binderwide pemodifikasi; meninggalkan dokumen Img yang mendasari saja (kedua binders referensi docs sama). Salinan dimulai dengan tidak ada saham dan isTemplate = false.
· kamo-internal
Program Mortgage menjungkitkan + MORTGAGE pertunangannya deep- link
- MortgageProgramsPanel sekarang kapal Switch nyata pada setiap kartu program dengan pemutakhiran optimis + rollback pada kegagalan. Menandai panggilan program PUT * * * * * * * * * * * * * * * * dan mencerminkan efektif negara yang dihitung server- sisi aktif dari basis + override. - * * * * * * * * * * * * * * * Aktif) membungkus titik akhir baru. - / commerce / perjanjian / [id] halaman: APPLIKASI linkType sekarang rute ke / aplikasi / {linkId} (halaman detail URLA), bukan yang hilang * * * * * * * * * * * * * * * Pertunangan MORTGAGE otomatis dialihkan ke / aplikasi / {linkId} di load sehingga pengguna mendarat dalam detail URLA secara langsung daripada tampilan keterlibatan generik.
· SecurityService
PUT / program / {kode} / active + deprecate hipotek warisan POS titik akhir
- MortgageProgramController memperoleh PUT * * * * * * * * * * * * * dengan tubuh {"isaktif": bool}, gated on LOS _ TAKE _ APPLIKASI. Delegasikan ke * * * * * * * * * * * * * yang upserts baris Programboard. - * * * * * * * * * * * * * * getMortgageAppById, creatMortgageApp, updateMortgageApp, updateMortgageAppStatus semua ditandai @ Desopended dengan Javadoc menunjuk penelepon di URLA- kesetiaan / api / keamanan / hipotek-aplikasi titik akhir. Jalur POS warisan tetap fungsional untuk kembali compat.
· kamo-shared-library
Per-org aktifkan / nonaktifkan + deprecate inlegacy commerce -only hipotek path
- * * * * * * * * * * * * * * upserts sebuah baris Organ ProgramOverride dengan recordState.isActive = diinginkan; listForOrg sekarang AND 's program dasar tanda aktif dengan override 's, sehingga disabled override membawa dual berarti "org ini secara eksplisit mematikan program ini". - Programs Organik OverrideRepositori menambahkan findAllByOrganizationId dan * * * * * * * * * * * * * * * untuk jalur upsert + listForOrg. - * * * * * * * * * * * * * * # FindMortgageAppById # * * * * * * * * * * * * * * * / updateMortgageApp / updateMortgageAppStatus adalah @ Decated. Mereka beroperasi pada komersial-saja Intents tag LOAN _ APPLIKASI dan jangan buat atau baca URLA AppMortgation catatan - disimpan untuk kembali compat dengan * * * * * * * * * * * * * * * * tetapi kode baru harus menggunakan AppMortgageService + / api / keamanan / hipotek-aplikasi.
· kamolos
Tema hari yang dapat digosok pada malam hari dengan sun- moon SkyJggle
- Continuous t Achone [0,1] posisi drive ~ 25 CSS properti custom pada: root melalui interpolasi RGB linear antara hari perang-kertas dan aurora night anchors in lib / scene / palettes.ts - Baku untuk waktu lokal pada kunjungan pertama; penimpaan manual adalah lengket dalam cookie, dengan tombol icon jarum jam untuk mengaktifkan mengikuti otomatis - SSR Cenepainter membuat palet diselesaikan sebelum cat pertama jadi tidak ada FOUC saat kembali kunjungan; kunjungan pertama mode mobil berhenti dari hari ke local- jam t lebih ~ 1.4s - SkyJunge: jempol pointer- draggable yang matahari-bulan berputar di real time with t and morphs between sun- with-rays and crescent moon - PageGlow + Starfield ambient layer: amber sun- glow upper- kiri di day, cool moon- glow upper- right at night, ~ 80 seeded stars fade in past dusk and twinkle via reduced- motion-aware keyframe - Tombol tema MUI di batas matahari. dibaca dari CSS vars sehingga interpolasi tetap berkelanjutan - Menjatuhkan hard- terkunci kelas gelap + warna-skema; perbaikan dua long-stale --surface-base (hilang warna-prefix) gradien fallback dalam Wartawan Crest dan CeremonyClient
· kamolos
Tampilkan UID keterlibatan / maksud / komitmen
Applain MortgageDTO sekarang membawa iklan-lifecycle identifikasi bahwa Backend SecurityService mengisi setiap aplikasi hipotek. KAMOLOS tidak aktif menggunakannya belum, tetapi mengetik mereka melalui berarti masa depan peminjam - menghadapi penawaran ("aplikasi Anda telah berkomitmen") dapat referensi lapisan perdagangan langsung tanpa akan melalui model URLA.
· kamo-internal
Tampilkan tab pengaturan konteks Commerce + Programs
- / pahlawan aplikasi sekarang membaca "Perdagangan > Mortgages perumahan sehingga staf melihat hipotek sebagai salah satu vertikal modul perdagangan, bukan pipa berdiri sendirian. - New Mortgage Programs tab di bawah pengaturan Niaga - hanya baca katalog program pinjaman (CONV / FHA / VA /...) dengan versi negara aktif dan ruleset. Pengaturan nav diperbarui di semua tiga lokasi (subTopics, rute, labelfor). - Appt MortgageDto / SummaryDTO + new ProgramDTO / LoanProgramCode tipe cermin shared-lib perubahan (engagementUid / intentUid / commitment Uid). - APpsAppsApp.listPrograms hipotek () hits endpoint program yang ada.
· SecurityService
Paksa hak LOS + / commerce / keterlibatan titik akhir
- MortgageAppController: setiap titik akhir sekarang gerbang di RoleRightType. Baca membutuhkan LOS _ VIEW _ PIPELINE; membuat aplikasi baru memerlukan LOS _ TAKE _ APPLIKASI; Edits menerima peran penulisan LOS (ambil / proses / proses / underwrite / close / suspensi); penghapusan membutuhkan LOS _ SUSPEND _ OR _ WITHDRAW. Akun layanan KamoLOS sudah membawa set penuh LOS kanan sehingga Perjalanan peminjam tidak terpengaruh; pengguna staf dibagi per peran mereka. - CommerceEngagemController: NEW GET * * * * * * * * * * * * * (list dengan tipe / status / date filter) dan GET... / keterlibatan / {uid} (detail), gated on access _ commerce. Ini adalah vertical- agnostik mitra ke hipotek - aplikasi titik akhir - format kawat sama apakah Anda membaca hipotek, pesanan ritel, atau pemesanan sewa.
· kamo-shared-library
Wire URLA hipotek ke Pertunangan / Intent / Komitmen
Mortgage adalah salah satu vertikal dari sistem perdagangan - bersama ritel, sewa, layanan, berlangganan, dan pengadaan. Ini kabel hipotek URLA- kesetiaan stack ke Domain- agnostic commerce lifecycle sehingga cross- vertikal permukaan (dasbor pipa, analitik, portal pelanggan) melihat hipotek seperti yang lain pertunangan. - Aplikasi: keterlibatan _ id / niat _ id / komitmen _ id FK (nulable untuk (Dan demi rombongan yang menggiring dengan sebenar-benarnya) demi para malaikat yang menggiring atau mengarak awan. - * * * * * * * * * * * * * * bootstraps org MORTGAge CommerceMarket + one Menawarkan per LoanProgramCode pada aplikasi pertama; attaches Pertunangan + Intent untuk setiap AppMortgage; cermin LoanFile. status Ke Intent.status dan Pertunangan. status; mewujudkan Komitmen pada FUNDED dengan syarat pinjaman snapshot. Aku hampir selesai. - Appt MortgageService: createBlank / createFromLead melampirkan ke keterlibatan; setSelecteProgramCode menyegarkan penawaran Intent. - LoanPipelineService.transisi cermin setelah setiap transisi; perdagangan kegagalan cermin tidak memblokir progression URLA (log + melanjutkan). - Appt MortgageDto / AppMortgageSummaryDto mengekspos keterlibatan Uid / intentUid / komitmen Uid untuk frontend.
· kamo-internal
Tambah tab Penyelenggara dengan binder, pemisah, docs yang dihasilkan
Tambahkan Penyelenggara ke manajer doc: - Tab "Organizer" baru (posisi 4) dengan daftar binder + tampilan split editor; tab shift kanan yang ada - "Tambahkan ke Penyelenggara" aksi pada setiap baris doc membuka pemetik binder (binders ada atau membuat baru) - Penyunting binder: drag -to -order item (HTML5 DnD), tambahkan Pemisah Halaman (color + label via ModernColor Picker), tambahkan Doc (Cover Page, Tabel Isi, Album Foto, Cacah Kata) - Foto Album mendukung upload- new- foto (juga menambahkan ke manajer doc) dan browse- ada - Panel pengubah lebar Binder- menggunakan bentuk pemodifikasi esign (nomor halaman, label, watermark) - Per- doc- instance pemodifikasi overrides melalui dialog per- item - Mode pratilik merender tergabung PDF dalam iframe - Unduh pengucapan tombol / api / docs / binders / {id} / render Toko baru Zustand useBinderStore, aplikasi klien REST / utils / binderApi.ts, dan Rute proksi Next.js dibawah / api / docs / binders / * mencerminkan pola proksi pencitraan yang ada.
· DocsService
Tambah backend Organizer - CRUD, render, pembuatan dokumen
Permukaan REST baru di bawah / api / docs / binders untuk fitur Organisasi: - BinderController: CRUD, item add / update / remove / reorder, share, render - BinderService: org-scoped pemeriksaan akses, pemilik / share / template visibility, manajemen posisi - BinderRenderer: gabungan dua- lulus (deferred ToC / WordCount), berlaku perinstance dan binderlebar pemodifikasi melalui PdfBuildUtils terbagi - Generated- doc registry dengan render untuk Cover Page, Tabel dari Isi, Kata Cacah, Album Foto (menggunakan MinIO untuk bytes image) Reses * * * * * * * * * * * * * untuk esign- dimodifikasi docs dan * * * * * * * * * * * * * * * * * * * * * * * untuk kontrol akses.
· kamo-shared-library
Tambahkan Entiti Binder / BinderShare dan repositori
Tambahkan lapisan kegigihan untuk fitur pengelola dokter baru: - Binder (ID panjang, anggota pemilik, org- scoped, isTemplate, binderwide modifierjson) - BinderShare (UUID, penerima, peran READ / WRITE) - Repositor data JPA dengan org- scoped queries dan sebuah "terlihat ke anggota" union (dimiliki + shared + template) Skema diambil secara otomatis oleh KamoInitializerService via Hibernate apos; s ddl- otomatis.
· kamolos
Glimmer spanduk tes, sesuai viewport, tambahkan persetujuan cookie
- TestModeBanner mempublikasikan tingginya menjadi --kamolos- banner-h dan globals.css mengurangi dari layar menambang sehingga tampilan rumah tidak ada lagi overflow viewport oleh banner 's piksel. - Banner memperoleh ember shimmer + bayangan lambat pulse sehingga dibaca sebagai peringatan aktif, mencerminkan pratinjau pemasaran bar. - New CookieConagner (Terima Semua / Kelola dengan analisis toggle), dikuliti dari versi pemasaran untuk menggunakan gelap permukaan aurora + per- penyewa --org-primer / --org- gradien.
· kamolos
Undang-Undang Aman Permukaan NMLS ID untuk lender + asted LO
Tambahkan LoContactCard dengan avatar, pulsa kehadiran, link NMLS yang diverifikasi, dan call / email / message aksi di atas kiri dari pahlawan dan menerapkan permukaan, jadi peminjaman pinjaman berlisensi (nama + NMLS ID) selalu satu Dibutuhkan oleh SAFE Act 1503 dan Reg Z 1026.36. Lender NMLS footer dipromosikan menjadi pil kepercayaan, dan useAssignnedLO now return a fake demo LO until loan-file LO assignmen tanah. LoGuideChip berubah menjadi suara-hanya karena LO memiliki permukaan sendiri.
· kamolos
Lemo lender otomatis ketika tidak ada penyewa nyata menyelesaikan
Alasan "masih tidak dicap" - tidak ada penyewa nyata org ada untuk nama host sedang diuji, jadi SSR fetch mengembalikan null dan setiap Pinjaman-menghadap permukaan jatuh melalui ke bundled Kamo default. The Sistem branding sedang bekerja; tidak ada merek DENGAN. Sekarang kapal sebuah pemutar demo lengkap yang otomatis beban sebagai fallback ketika real fetch return nothing AND stubs diijinkan * * * * * * * * * * * * * * * * * yang default). Produksi dengan stubs dinonaktifkan masih jatuh melalui untuk telanjang default Kamo sehingga kita tidak Pernah kapal peminjam nyata untuk "Apex Mortgage". - lib / org / demoOrg.ts: "Apex Mortgage" - burkson (# 8B1538) primer dan emas (# D4A24C) sekunder, sengaja jauh dari aurora sehingga Efek bermerek jelas. Populasi penuh: tagline ("Tiga generasi dari mendapatkan rumah Anda ".), NMLS # 123456, dukungan telepon + email, tahun 1989 didirikan, baik EHO + EHL tanda, line- 135 arah gradien. AsettBasePath baru: '/ demo-lender' di org type tells Theme Logo to load / demo-lender / logo-full. svg sebelum mencoba MinIO atau fallback global. - * * * * * * * * * * * * * * + logo.svg: real Apex Mortgage Kata-kata dan puncak gunung tanda dalam gradien emas burtiani. Tidak hanya sebuah kata, sebuah penjara yang sebenarnya. - lib / org / fetchOrganiation.ts: mengembalikan DEMO _ ORG ketika upstream tidak dapat dicapai atau tidak ada org terdaftar dan stubs memungkinkan itu. Real- host / Resolusi real-penyewa menang ketika hadir. - Komponen / tema / Tema Logo.tsx: Konsultasi useOrg () .assetBasePath dan menempatkan awalan yang di depan rantai kandidat. Demo lender logo tanah; real penyewa 'MinIO aset masih menyelesaikan pertama ketika penduduk. - app / layout.tsx: < link rel = "preload" > melacak urutan prioritas yang sama, sehingga SSR preload menarget logo demo lender ketika mode demo aktif. - * * * * * * * * * * * * * ketika org.id = = 'demo-apex', banner memanggil keluar "Menampilkan pemberi demo (tidak ada penyewa org dikonfigurasi untuk host ini) "jadi penguji tahu merek mana mereka melihat kaleng. Bangun 32 / 32, 140 tes lulus. Muat ulang aplikasi peminjam dan Anda harus Sekarang lihat logo Apex Mortgage + nama di header, burconnya dan emas seluruh CTA dan pita, "Selamat datang di Apex Mortgage". pada pahlawan pendaratan, NMLS # 123456 + EHO + EHL di footer, "Call Apex Mortgage (800) 555-2739 "dalam lembar bantuan.
· kamolos
Membuat rentenir merek primer, bukan aksen
Reframes peminjam-menghadap aplikasi dari "Produk Kamo dengan aksen lentur" untuk "produk lentur, Kamo sebagai mesin". Setiap permukaan sekarang mengarah dengan identitas rentenir. - LenderLockup * * * * * * * * * * * * * * * merek yang digunakan di mana-mana. Skales sm shammd înlg complexl hero. Pairs logo (atau kata-kata fallback dalam warna primer pemberi pinjaman) dengan nama pemberi pinjaman; slogan opsional di bawah. Digunakan oleh setiap permukaan yang perlu merasa "Aku di situs pemberi pinjaman saya". - BorrowerHeader - batang header tumbuh menjadi h-14 / h-16, logo + nama lender always visible (size = "md" forceWordmark), drop-shadow tinted in the Lener utama. Tanda 24px kecil sebelumnya hilang. Sebuah baru klik-to-call tombol telepon duduk di samping Bantuan dengan pemberi pinjaman batas utama + glow; pada mobile itu runtuh ke sebuah tombol ikon. The Aksen pita adalah 4px (adalah 2px) dan masih panci gradien lender. - Landing halaman pahlawan - berpusat, didominasi oleh rentenir penjara di pahlawan skala dalam kartu kaca dengan cahaya --org- primer yang kuat. Di atas fold berbunyi "Welcome to {LenderName}". (the gradient- terpotong pemberi pinjaman nama adalah judul), dengan slogan rentenir sebagai subjudul. Sebuah pil berwarna mengatakan "{Lender}" generik "Kamoville". Tombol CTA lebih besar dan membawa kuat --org- primary outside glow. - LenderFooter - full atclairrow: nama lender+ NMLS Consumer Akses link + phone + email + website + EHO / EHL tanda. Garis hak cipta membaca "© 2023- 2026 {LenderName}. Semua hak disediakan". dengan kecil Kredit "Onboarding by Kamo". Terlihat di permukaan pahlawan. - HeroBrandenIntro - Splash menempati 3.4s (adalah 2.4s), acara pada kunjungan pertama Dan setiap 30 menit kembali menganggur (sekali-per- sesi). Kartu Logo tumbuh untuk ukuran = "pahlawan" dalam kartu kaca yang lebih kuat dengan lebih berat --org- primary outside glow. "Selamat datang di {LenderName}". adalah headline; slogan rentenir adalah subjudul. - generateMetadata - Templat judul Next.js sekarang '% s dengan default hanya nama rentenir. Setiap halaman anak dibaca Pinjaman pertama dalam tab browser dan kartu OG. sitName, title, and keterangan semua aliran dari catatan org. Bangun 32 / 32, 140 tes lulus. Jika penyewanya memiliki penduduk tagline / nmlsId / phoneSupport / dukungan email / tahun Est / warna Pri / warna Sec / logo aset, situs sekarang terlihat jelas seperti produk rentenir Anda. Dengan apa-apa penduduk itu dengan anggun diturunkan menjadi "Kamo" default.
· InitializerService
Migrasi untuk kolom peminjam-menghadap merek + pengungkapan
Tambahkan kolom tujuh bernull yang kamo- shared- perpustakaan Organisasi entitas sekarang mendeklarasikan (TAGLINE / NMLS _ ID / PHONE _ SUPPORT / EMAIL _ SUPPORT / EQUAL _ HOUSING _ DISEKSI / ON _ PRIMARY _ TEXT / GRADIENT _ DIREKSI) jadi aplikasi kamo-los peminjam dapat mengambil percabangan lender tanpa skema kesalahan pada baris orgs yang ada. @ Order (35) - berjalan setelah LogoFullExtMigrationRunner (30) dan sebelum Lead CompanyColumnRunner (40). Idempotent via ADD COLUMN JIKA TIDAK EXISTS; aman untuk kembali. Kebijakan projek berkas ini tidak dijalankan di sini - KamoInitializerService dimulai oleh pengguna.

Alam semestamu menunggu.
Mulai gratis dalam beberapa menit. Tambahkan produk kapanpun Anda siap — tidak ada migrasi, tidak ada login baru.
Gratis selamanya — tidak diperlukan kartu kredit