Nenda kwenye maudhui
KAMOUniverse

Mabadiliko

Nini kipya.

Kila kuboresha jukwaa, kama ni meli.

  1. · kamo-internal

    Enterprise Materials workspace (P0) — folders, search, bulk, real preview, shared email composer

    Inabadilisha gridi ya gorofa ya mita 200 na nafasi kamili ya kazi ya hati juu ya picha zilizopo backend (ambayo tayari inasaidia folda, takataka, kugawana, historia, wingi kwa MATERIALS): Folder sidebar (kuunda / jina / kufuta, drag-to-folder) + All / Maoni ya Trash - Kutafuta, aina, gridi <-> orodha ya toggle, paginated 'load zaidi' (removes 200 cap) - Wingi kuchagua + wingi download (ZIP) / barua pepe / hoja / kufuta Mchapishaji wa maelezo ya mkono wa kulia: preview halisi, jina la upya + maelezo, hoja-kwa-folder, Kushiriki ndani (wanachama, kuruhusu, expiry) na historia ya shughuli Barua pepe sasa inatumia mtunzi wa ujumbe wa pamoja kupitia chombo cha kimataifa: tukio la wazi (Kutoka / barua pepe, CC / BCC, mwili tajiri, saini, rasimu) badala ya fomu ya bespoke - Njia mpya za upigaji picha: folda huunda /[id rename +delete / move-doc, rename, Maelezo, kurejesha, kiwango cha upatikanaji - Inaondoa vifaa vya supersed MaterialsLibrary; vipengele vyote vya Canva (kuunda / kuingiza /autofill / mipango ya utekelezaji). ImgIds ilishughulikia kama kamba sahihi wakati wote.

  2. · kamo-internal

    Overhaul /messages — iframe rendering, list context menu, threading, races, a11y

    Implements the audit of the /messages page end-to-end. Reported issues: - Reply/Reply All/Forward buttons now show text labels; removed from the more-actions dropdown (they're adjacent buttons) while the new list menu keeps them. - Message-list rows now open the shared action menu on right-click and touch long-press **************** rows gain a focus ring (j/k), selection checkbox (x), and scroll-into-view. - Email now renders in a sandboxed auto-height iframe (srcdoc) instead of inline dangerouslySetInnerHTML. This isolates email CSS/layout, which fixes the reading-pane "bounce" and the mid-drag text-selection loss, closes the app-wide CSS-leak, and adds a default "external images blocked" tracking-pixel gate. Correctness/bugs: - Full-compose Reply/Reply-All now set In-Reply-To/References (unified DraftMessage type) so replies stay threaded; quick-reply threads References + parent id, HTML- escapes the body, and sends from the active shared/member mailbox. - Forward carries the original attachments; reply/forward resolve the full message (fetching body for list-row actions) instead of quoting whatever is open. - Race guards (latest-wins) on loadMessages / message select / thread load / conversation load; poll no longer yanks paged users to page 0; WS reload filtered to the active folder; searchPage resets on query change. - ThreadDetail expand state keyed by folder+uid (cross-folder collision); markRead only when unread; retry uses the folder prop. - Compose: flush typed-but-uncommitted recipient on Send/Draft; attachment dedupe + 40MB aggregate cap + functional updates; drop the redundant client OTK. - Proxy: forward Range + caching validators for attachment/inline streaming; close the multipart carve-out on guarded provisioning paths. - Email WebSocket: real stop after max retries, exponential backoff, stable-connection retry reset; memoized context value to cut consumer re-render churn. Quality: unified **************** a11y (aria-labels, aria-pressed, keyboard-operable rows/toggles); i18n (folder names, list dates, pagers, ICU plural); removed dead code and phantom keyboard-shortcut entries.

  3. · kamo-internal

    Instrument Panel redesign — accent families, masthead, section-index nav, unified glass card

    Redesigns the two most-visited landings into a permission-shaped operator's console. Foundation - Turn on the already-bundled Geist Sans/Mono (were discarded by an Arial fallback); route MUI typography through Geist. - Add white-label-safe --accent-* module-family tokens, an elevation ladder, a lit-glass top-edge, Operator-Label + .tabular utilities, and an --ease-house token. Fix --gradient-primary-transparent (was hardcoded blue → now derived from --color-primary). Shared FeatureCard (one component, keyboard-correct) - Now a real anchor (NextLink): Tab/Enter/middle-click work and the focus-visible ring can finally fire. Adds useReducedMotion guard, whileInView entrance on the house ease, family-accent lit chip, attention count pip, weight tiers, and onClick passthrough. Revives the per-module colour intent that was discarded on render. Deletes the forked inline home card. Home - Masthead (mono kicker + time/name greeting + tabular status strip) replaces the org-only banner; oklab Backdrop replaces the grayscale-multiply watermark; permission-shaped two-tier launchpad (usage-ordered primary + grouped directory) with a "Needs you today" attention strip and "Jump back in" (new useHomeRecent + global RecentRouteTracker); adaptive sparse/empty states; real <h1> + landmarks. Settings - Registry-driven render replaces 18 copy-pasted Collapse blocks: sticky section-index rail + IntersectionObserver scroll-spy + live counts, 4 super-groups, progressive disclosure (Personal open, recent-aware, last-section restore, expand/collapse all), SectionHeader instrument rows, and a fixed Quick Access (correct MAX_RECENT slice + relative-time + Start here). Preserves every permission/product-flag gate exactly. Cross-cutting: skeleton + EmptyState, prefers-reduced-transparency + reduced-motion paths, per-locale Operator-Label caps opt-out. New UI strings land in the kamo-translation-dictionary (en) in a companion commit.

  4. · kamo-shared-library

    **************** targeted update

    Async uongofu (vipengele vya kawaida) na sweeps iliyopangwa kushikilia ImgDat ya detached; kuokoa () / merge () cascades katika orphanRemoval = ukusanyaji wa picha za kweli na kutupa Mkusanyiko wa cascade = wote-kufuta-orphan haukutajwa tena na kumiliki mfano wa kuigwa.” UPDATE wingi wa safu thumbnails tu kuepuka chombo graph Ni salama kabisa na salama kutoka kwa wadudu wowote.

  5. · kamo-internal

    Ongeza majibu Yote kwa ujumbe kusoma pane na mtazamo thread

    Reply All was advertised (keyboard-shortcut label + i18n key) but had no handler. Wire it up: new computeReplyAllRecipients helper puts the sender in To and every other original recipient in Cc, excluding self and de-duping case-insensitively. Adds a button, the `a` shortcut, and a context-menu entry in MessageBrowser, plus a per-message button in ThreadDetailView.

  6. · InitializerService

    Partial-unique index enforcing one active closing package per loan (eClose double-close backstop)

    CREQUE INDEX uk mlos closing pkg active loan Kuhusu mlos closing package (loan file uid) ambapo hali <> 'inawezekana'. Nyuma ya nyuma Ulinzi wa idempotency ya ndani ya programu: mfuko wa kufunga kazi wa duplicate Kujiandikisha kwa MERS + fedha (karibu mara mbili). Ufungaji maisha katika pamoja-lib na tu yasiyo ya kipekee @Index entries na hawezi kueleza Sehemu ya vikwazo vya umoja kupitia JPA, kwa hivyo imeandikwa kwa mkono DDL hapa (KI inamiliki mpango). ^ Tnn., “katika siku za mwisho.”.

  7. · MediaService

    Thumbnail scheduled-generated materials in-process

    A headless sweep can't drive ConversionService's OTK thumbnail pipeline, so generate a page-0 PNG thumbnail via ImageIO right after storing the export — scheduled materials now render in the grid like any other, no backfill needed.

  8. · kamo-internal

    Recurring generation schedules UI

    ScheduleManager: create/list/delete schedules (recipe + daily/weekly/monthly + hour/day + optional auto-post targets + caption); launched from Materials, gated on the Canva autofill (Enterprise) capability. + canvaApi + /api/canva/schedules proxies.

  9. · MediaService

    Scheduled generation — sweep runs recipes on a cadence

    - CanvaScheduleController: CRUD for org schedules (recipe + cadence + hour/day + optional social targets), computes nextRunAt - CanvaGenerationService: headless **************** as a Material (in-process ImageService; thumbnail-less until backfill) - CanvaScheduleSweep: @Scheduled sweep, atomic per-schedule claim, generates and best-effort auto-posts the result to the target social connections via the signed public-URL seam

  10. · kamo-shared-library

    CanvaSchedule entity + repo (recurring generation)

    Org-scoped recurring schedule (recipe + cadence + optional social targets) with an atomic-claim query so a MediaService sweep runs each due schedule once.

  11. · kamo-internal

    Inline expandable Whisper transcript on softphone voicemail + call-history rows

    Kila mstari ulioandikwa (barua pepe na historia ya wito) hupata "Transcript" ili kuingiza hiyo. Kuingiza nakala ya sauti ya Whisper juu ya mahitaji na inaonyesha inline, hivyo Wanachama wanaweza kusoma bila kufungua mchezaji. Bonyeza kwa ajili ya kurekodi.

  12. · kamo-internal

    Save + reuse autofill recipes

    TemplateAutofill: "Saved recipes" chips load a template + prefilled mapping; "Save as recipe" persists the current template + field values org-wide. + canvaApi list/save/delete + /api/canva/recipes proxies.

  13. · MediaService

    Saved autofill recipes CRUD (org-scoped)

    CanvaRecipeController: GET/POST /api/media/canva/recipes + DELETE /{id} — save/list/soft-delete a named brand-template + field mapping, scoped to the caller's org.

  14. · kamo-shared-library

    CanvaAutofillRecipe entity + repo (saved autofill recipes)

    Org-shared named binding of a Canva brand template to field values (literal text or a Materials image), so stewards can re-run a standard data-merge.

  15. · kamo-internal

    Add Material ID field to create form, details page, and imports

    Threads a nullable materialId (max 40) through the Lead type, leadsApi (create + update wire requests), and the shared leadFields system-field list — which drives both the manual import wizard and the API/vendor intake mapping UI (plus the downloadable CSV template). Adds the input to /leads/new and a view/edit row on the lead details page, wired to the realtime pane-flash map. Labels via leads.new.fields / leads.view.fields / leads.view.rows (materialId).

  16. · kamo-internal

    Biashara ya Autofill UI - templates za chapa ya data

    TemplateAutofill: chagua template ya brand ya Canva, kujaza kila uwanja na halisi Nakala, ishara ya org/compliance (NMLS #, ufunuo wa makazi sawa, jina la org / simu / tovuti / anwani, jina la mwanachama), au picha ya Vifaa; kuzalisha data-merged Kubuni na kuingiza ndani ya vifaa. ^ Tnn., “juu ya mti.” uwezo wa kuingia. + mbinu za canvaApi na /api / Canva / {templates za chapa, Kwa mfano, *** ya proxies.

  17. · MediaService

    Autofill ya Biashara - templates za bidhaa za data

    - CanvaApiClient: list brand templates (dataset=non_empty), get dataset, asset-upload jobs, create/get autofill jobs - CanvaController: GET /brand-templates, GET /brand-templates/{id}/dataset, POST /autofill — resolves image fields by uploading the referenced MATERIALS material to Canva as an asset, then data-merges; polls to the new design. Canva 403 (no autofill capability) surfaces as autofill_not_available.

  18. · SecurityService

    Persist mapped Material ID on manual import + API intake

    Both setDirectFieldOnCreateRequest switches lack a default case, so an unmapped systemFieldPath is silently dropped. Add a materialId case to the manual-import (LeadImportController) and vendor/API-intake (LeadIntakeController) dispatchers so a mapped Material ID column/field actually persists.

  19. · kamo-shared-library

    Add Material ID field end-to-end in shared-lib

    Adds a nullable, max-40-char materialId to the Lead entity (MATERIAL_ID VARCHAR(40)), registers it in LeadHistoryFieldRegistry (Profile category) so edits are audited, threads it through Create/Update/Read DTOs and LeadService create/update (trim + truncate to 40, mirroring companyName), and preserves it across base<->mortgage lead conversion.

  20. · kamo-internal

    Social attach + email-a-material + public links

    Distribution for marketing materials, built on the new signed public-URL seam. - materialsApi.publicLink(imgId) + /api/materials/link proxy - Materials: "Copy public link" and "Email this material" (attaches the file to an outbound send via the existing multipart /api/email/send, gated on org email) - MaterialPickerDialog (reusable grid over the MATERIALS assoc) - SocialComposer: the once-disabled photo button now opens the picker and attaches a material as post media via its public URL (works for Meta/Telegram/Discord)

  21. · MediaService

    Short-lived signed public URLs for marketing assets

    Lets social providers (Meta) and email fetch a specific material for a bounded window without exposing the private imaging-materials bucket. - MaterialUrlSigner: HMAC-SHA256 (platform.enc-key) token = imgId:orgId:exp, 1h TTL - MaterialsController: POST /api/media/materials/link (auth → mint URL for an org-owned MATERIALS image) + GET **************** (unauth → serve bytes for a valid token; org + assoc checked). Rides the existing sessionless /api/media/** forward — no APIService change needed.

  22. · kamo-shared-library

    First-class borrower self-submit transition ****************

    DRAFT→APPLICATION_TAKEN for a borrower (a loan party, not an operator, so no LOS_TAKE_APPLICATION). Routes through transition() with a scoped predicate that grants ONLY the take-application right and a pinned toStatusId, so the borrower submit becomes a proper pipeline transition — state-machine legality, the hash-chained milestone, the ApplicationSubmission (INITIAL_DISCLOSURE), and the afterCommit STATUS_CHANGE event — instead of a silent loan-file status poke. Loan-party membership is verified by the caller.

  23. · kamo-internal

    Delete + preview + import-file-to-Canva

    - delete a material (gated on MANAGE_MATERIALS) with confirmation - click a thumbnail to preview it in a lightbox - "Import a file" turns a PDF/PPTX/image into an editable Canva design (proxy rebuilds the multipart body like the imaging uploader)

  24. · MediaService

    Kuingiza faili katika Canva kama kubuni inayoweza kuhaririwa

    Kwa mfano, *** (Uzalishaji wa Design) - CanvaController POST /imports (multipart) → kuunda kazi ya kuagiza → mhariri Kiungo cha kina na uwiano state kwa kurudi-nav - kushuka sasa unused Base64 kuagiza katika CanvaOAuthController

  25. · InitializerService

    Migration adds recordings.transcript TEXT column

  26. · VOIPService

    Return transcript in recording metadata for the softphone player

  27. · kamo-internal

    Show Whisper transcript in the softphone media player

  28. · ConversionService

    Shared TranscriptionService + generic endpoint; transcribe VOIP recordings

    - Extract a reusable TranscriptionService (ffmpeg normalize -> whisper-asr) and a generic POST /api/conversion/transcribe endpoint, replacing the meet-specific controller. Meet + VOIP now share one transcription path. - RecordingProcessController: transcribe each finalized VOIP recording/voicemail in-process (non-fatal on failure) and store the transcript on the Recording.

  29. · kamo-shared-library

    Transcript column on Recording + RecordingMetadata

    Adds a TRANSCRIPT TEXT column to the Recording entity and threads a transcript through **************** (with backwards-compat constructors so existing 5- and 9-arg callers are unaffected). Populated by the recording-finalize flow via Whisper; created by KI migration.

  30. · MediaService

    Verify return-nav JWT signature; tidy token refresh

    - CanvaJwtVerifier: verify the correlation_jwt's Ed25519 signature against Canva's JWKS (/connect/keys), plus aud/exp/type; keys cached by kid. Return-nav now fails closed to manual import if verification fails. - CanvaTokenService: drop the ineffective @Transactional on the self-invoked refresh/markDown helpers (Spring Data's per-call tx + the per-member lock already make token rotation correct); clarify with a comment.

Ulimwengu wako unasubiri.

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

Bure milele - hakuna kadi ya mkopo inahitajika