Mabadiliko
Nini kipya.
Kila kuboresha jukwaa, kama ni meli.
· kamo-internal
Web Chat Integration tab — list, create, snippet (BFF + UI)
Phase 2 core of the Web Chat Integration settings tab: BFF routes proxying to the Phase-1a MediaService CRUD, a typed client, and the /settings/features/chat tab where an org lists integrations, creates one (name + required website origins + AI/Support modes), and gets the raw site key + embeddable snippet once. Design customizer and readiness checklist are later phases.
· kamo-register
Usajili wa Kamo unaheshimu programu auth alama + jina
DynamicMetaLoader: kusoma utambulisho wa programu + auth selectors kutoka kwa config.json, kutatua Jina la tab, endelea alama ya auth / jina la nchi kwa kikao - brand.ts + ThemeLogo: kujiandikisha alama auto-kufuata utambulisho auth-logo (reactive) - kutumiaAuthName: kujiandikisha jina maandiko (landing + mtiririko) ifuatavyo auth-jina utambulisho, Ufanisi juu ya mzigo wa usanidi wa mandhari; huanguka nyuma ya kampuni
· kamo-login
Kamo-login honors software auth logo + tab title
DynamicMetaLoader: kusoma utambulisho wa programu + auth selectors kutoka config.json, kuweka tab kichwa kutoka jina kutatuliwa (authNameBrandSource), kuendelea auth-logo hali ya kikao - brand.ts + ThemeLogo: alama za kuingia auto-kufuata kitambulisho cha auth-logo (kampuni / programu), upya kwenye mzigo wa usanidi wa mandhari; hakuna mabadiliko ya tovuti ya simu zinazohitajika
· kamo-internal
LabelManager software identity UI + internal tab title
- Company Info: software name/short-name + login/register name + tab-title selectors - Branding: software full/simple logo uploads, override toggles, and per-surface identity selectors (watermark, navpri, login/register logos) - forced-legal surfaces communicated as always-company (documents/email/invoices/etc.) - layout: internal browser tab title resolves via internalTabBrandSource
· kamo-internal
3 hatua org onboarding mwongozo (kuunda → kumaliza DNS kuingia)
Kukusanya shujaa wa kwanza katika jopo moja la mwongozo wa hatua moja muhimu kwenye hesabu ya mwanachama inayomilikiwa na shirika + DNS (kutoka /api / usalama / shirika / mitandao yangu): Kujenga - kumiliki hakuna mtoto org | uzinduzi wa kwanza White-label org (mtandao / kuunda) dns - inamiliki 1, DNS haijathibitishwa → kumaliza kuanzisha kikoa (/setup / dns?orgId =.) Kuingia - inamiliki 1, DNS kamili → kuingia (kama OTK <domain>) Mara baada ya kumiliki org ya pili, hakuna jopo linaonyesha - wanajua kamba. Mtandao wa DNS Inaonyesha utawala wa ukurasa wa mtandao hasa (eneo la mteja & domainSetup=== = uongo; www.kamocrm.com hauhitaji DNS. Kila moja ya hatua hizo ina familia yake mwenyewe. (watu / kazi /crm), icon na nakala; CTA ni kiungo cha kuunda / dns na async Nenda hatua kwa hatua kwa hatua. Hakuna njia ya mkato ya kufanikiwa.
· kamo-internal
Kampuni mbili / ufumbuzi wa programu + utoaji + matumizi
- Shirika.ts: kutoa utambulisho wa programu + kwa kila nyuso selectors kupitia OrgContext Picha zote na Wizara ya Mambo ya Ndani ya Nchi. .................................................................... (+ vitest, 8 kesi) ThemeLogo: logoSoftware/logoFullSoftware - NavPri: navpri alama + maandishi kufuata nembo ya programu ya ndani BackgroundWatermark + Backdrop: watermark inaheshimu utambulisho wa programu (njia zote)
· SecurityService
Software logo upload types + config.json bake
- uploadLogo: explicit object-key switch **************** with rejecting default so a software upload can never clobber the company logo.svg - copyFolder: preserve uploaded software logos on template re-copy - config.json: bake software identity + auth-surface selectors for login/register - tests: UploadLogoObjectKeyTest, buildConfigJson software cases
· kamo-shared-library
Add software white-label branding columns to Organization
· kamo-shared-library
Persist software branding fields via patchOrganization whitelist
· kamo-internal
First-org CTA hero for members on the platform org
Show an onboarding hero at the top of the home launchpad inviting a KamoCRM-platform member (not a team member) who hasn't yet created a child org to spin up their first white-label organization. A prominent CTA button and an inline 'click here' link both route to /network/create, and the copy points to the 'My {branches}' nav above. Gated on userInfo.memberType === MEMBER + organization.isTopLevel; stays hidden unless /api/security/org/my-networks confirms they own no child org, and fails safe (hidden) on any fetch error. Follows the Instrument Panel design language (people accent, kglass, operator-label, house easing, reduced-motion-gated). Strings under home.firstOrg.
· VOIPService
TURN-REST credentials endpoint for the mobile softphone
GET /api/voip/turn/credentials mints ephemeral coturn creds (HMAC-SHA1 over "<expiry>:<memberId>" with the shared static-auth-secret) so native/cellular WebRTC can relay through 47.181.8.84:3478. Auth via the same X-***-Token the SIP endpoint uses; returns configured:false (STUN-only) when the secret is absent. Wires KAMO_TURN_SECRET from the existing *** (optional).
· SecurityService
Expose per-org primaryColor + logo URLs on /my-networks
Each org row now carries primaryColor (Organization.colors.colorPri, '#'-prefixed to match config.json) and derived logoUrl/logoSimpleUrl (theme.<domain>/public/ logos and per-org hex-head border colors.
· MediaService
Snapshot mtandao-chat ushirikiano id juu ya msaada mgeni + tiketi
Resolves the WebChatIntegration by creatingKeyHash (enabled-filtered, consistent with bootstrap()/AI-prompt resolution) once in createSupportSession and stamps its id onto both PublicChatVisitor and SupportTicket for per-website attribution. Null/blank keyHash or no matching enabled integration leaves the columns null.
· AIService
Kuunganishwa kwa umma AI haraka + kikao
Upgrade the public-chat system-prompt waterfall from per-org to per-integration: PublicAiChatController now reads the X-Public-Chat-Key-Hash header (nullable) forwarded by APIService and passes it to **************** which resolves the WebChatIntegration by hash and prefers its aiSystemPrompt over the AiOrgSettings default, falling back to the generic prompt. The resolved AiChatSession is also stamped with webChatIntegrationId for stable attribution that survives key rotation. Extracted the waterfall into a static, unit-tested resolvePrompt helper (integration-wins / org-fallback / generic-fallback / blank handling).
· APIService
GET /api/public-chat/bootstrap gateway route
Add bootstrap endpoint that reuses the existing proxyWithAuth pipeline (key validation + opt-in origin + PUBLIC_CHAT scope + rate-limit + X-Public-Chat-Key-Hash) and proxies to the MediaService bootstrap endpoint.
· MediaService
Chaguo la bootstrap config
Adds an internal GET **************** that resolves a WebChatIntegration by X-Public-Chat-Key-Hash and returns its resolved design/behavior config (default-filled via WebChatDefaultConfig.merge so a key with no integration row still renders like today's widget). Falls back to the active PublicChatApiKey's org when no integration exists; 404s when the key hash doesn't resolve at all.
· MediaService
WebChatIntegration CRUD (mints key + integration, org-scoped)
Org-facing management API for the Phase-2 web-chat settings tab. On create, mints the underlying PublicChatApiKey (same key-gen approach as PublicChatKeyController) alongside the WebChatIntegration row and returns the raw key once. list/get/update/delete are org-ownership checked; update busts the (Task-5) bootstrap cache when designConfig or enabled changes.
· kamo-shared-library
Add WEB_CHAT_INTEGRATION_ID attribution columns to visitor/ticket/ai-session
· kamo-shared-library
WebChatIntegration entity + repo + DTO + default design config
· kamo-internal
Add "Access Copilot Mobile App" entry points on home + NavPri
Both surfaces dispatch an `open-interaction-center` event that NavTop listens for to open the Interaction Center on the Setup Mobile App tab. Home shows a labeled pill under the wallpaper controls; NavPri shows a logo icon below the trial pill (label when expanded, tooltip when collapsed). Both gated by the ALLOW_MOBILE_ACCESS right.
· kamo-internal
Password-gate QR, tab moja-line, logo-kushoto header, 10min code
Mwanachama lazima aingizwe tena nywila yao (iliyothibitishwa kupitia / api / mobile-access-otk, Kabla ya kupanda, mmea lazima uwe wazi. kwenye kompyuta ambayo tayari imesajiliwa kwa ajili ya kuisajili. QR / OTK sasa inaishi dakika 10 (600s); kuhesabu tena. - Lebo ya Tab kulazimishwa kwa mstari mmoja; nembo ilihamishwa kushoto kwa kichwa ili kuokoa nafasi ya wima; Kuondoa "Configuring kwa ajili ya" kidonge.
· SecurityService
POST **************** — gate Mobile Copilot QR
Verifies the caller's own password (passwordEncoder.matches against their session's user) without changing anything. Used by the mobile-access-otk BFF route so the setup QR is only minted after re-confirming the password.
· kamo-internal
Setup Mobile Access tab – QR kufunga + auto-configure Mkono Copilot
Kichupo kipya cha 3rd katika NavTopPanel (iliyotolewa na ALLOW MOBILE ACCESS kulia): inaonyesha alama ya alama QR encoding kiungo kirefu cha muda mfupi cha OTK (kamocopilot://configure) ambacho kinaonyesha mwanachama katika simu zao na defaults programu kwa org sasa. Ukarabati wa magari Picha zote na Wizara ya Mambo ya Ndani ya Nchi. .................................................................... Kuongeza
· kamo-shared-library
Add ALLOW_MOBILE_ACCESS (167) general right for Mobile Copilot
New RoleRightType (serviceType=null → General group) gating the 'Setup Mobile Access' interaction-center tab. RoleRightsSyncService backfills it to all roles on SecurityService restart; appears under General Permissions in the role editor.
· AIService
Per-org public prompt, human-handoff on no provider, anon daily message cap
· kamo-shared-library
Add anon usage count query for public web-chat quota
· APIService
Verify *** PoW at the edge on public session create (enforced when payload present)
· MediaService
Bust APIService key cache immediately on public-chat key toggle/delete
· MediaService
Persist creating key hash on public-chat visitor + ticket for attribution
· kamo-shared-library
Kuongeza publicDailyMessageCap kwa AiOrgSettings kwa anon web-chat upendeleo

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