Jurnal de schimbări
Ce e nou.
Fiecare îmbunătățire a platformei, pe măsură ce se livrează.
· kamo-internal
Arată istoricul de proprietate al domeniului TXT în configurarea DNS UI
- DomainData/DnsStatus: adăugați verificareToken, proprietateCâmpuri verificate, de tip - AliasStatustable: arată TxtOwnershipCard deasupra mesei CNAME cu buton copiat, indigo în curs / styling verificat verde; filtre TXT din CNAME număr verificat - ManualDnsGuide: acceptă verificarea Token prop; arată TXT record ca Pasul 3a înainte de înregistrările CNAME (etapa 3b) cu butonul de copiere Inline - DnsProgressView: pass domain.verificationToken to ManualDnsGuide
· SecurityService
Generate TXT verification token on domain create, check in verify-dns
- createDomain: generate 32-char UUID token and store via setVerificationToken - verifyDns: check _kamo-verify TXT record for kamo-site-verification=<token> - TXT verification counts toward requiredTotal/requiredVerified - Once ownership_verified=true, cache result so member can remove TXT record - CNAME statuses now include type="CNAME"; TXT status includes type="TXT"
· InitializerService
Add verification_token and ownership_verified columns to org_domains
· kamo-shared-library
Adaugă verificarea proprietății domeniului prin intermediul înregistrării DNS TXT
- OrgDomain: adăugați verificareToken și proprietateCâmpuri verificate - DomainService: add setVerificationToken() and setOwnershipVerified() - DomainDTO: expunere verificareToken și proprietateVerificat în răspunsurile API - DnsStatusDTO: adăugați câmpul de tip pentru a distinge TXT de statutul CNAME
· kamo-internal
Cap lipicios, pseudonime actualizate, ghid DNS simplu-englez întotdeauna vizibil
· SecurityService
Update required aliases — add app, capcha, docs, sign; remove legacy
· kamo-internal
Arată întotdeauna butonul DNS pentru proprietari, adaugă fluxul de domeniu de schimbare
· kamo-internal
Pass orgId prin configurare / flux dns pentru managementul domeniului trans-org
· SecurityService
Allow cross-org domain management by verifying user ownership
· kamo-internal
Adăugați / configurare / dns pagina și fluxul de configurare domeniu la / rețea
- Pagină nouă /setare/dns cu flux bifazic: intrare domeniu apoi DNS verificare cu 60 secunde auto-polling și confirmarea SSL - ManualDnsGuide: instrucțiuni DNS pas cu pas pentru toți nivele de calificare cu butoane de copiere pentru nume de înregistrare și valoarea țintă - AliasStatustable: live per-alias CNAME stare de verificare cu Cipuri verificate / în așteptare / Eroare și insigna opțională pentru www - DnsProgressView: indicator de fază (DNS → SSL → Gata), bară de progres, Numărătoare inversă cronometru, Check Now buton, auto-avansuri la starea de succes - DomainEntryForm: intrare domeniu cu www toggle și simplu de limbă UX - / pagina de rețea: dezactivați Introdu butonul pentru orgi cu personalizare neconfirmată domeniu; arată butonul de configurare Domain pentru proprietarii care au nevoie de configurare
· SecurityService
Add /setup/dns backend — one-domain enforcement, SSL probe, new aliases
- Enforce one custom domain per org in POST /api/security/domains - Add capcha, docs, sign to standard aliases; remove legacy aliases - Update verify-dns to track required vs optional CNAMEs, auto-trigger HTTP seeds to Traefik logs when all required CNAMEs verified, and HTTPS-probe for SSL confirmation (marks sslConfirmed on parent domain) - Add SslProbeService with triggerHttpSeed() and probeHttps() methods - Expose domainSetupComplete per org in GET /api/security/org/my-networks
· InitializerService
Add ssl_confirmed and ssl_confirmed_at columns to org_domains
Adds idempotent ALTER TABLE statements to provision the two new columns needed for DNS setup SSL confirmation tracking.
· kamo-shared-library
Adaugă sslConfirmat/sslConfirmatAt fields to OrgDomain and DomainDTO
Adaugă două noi câmpuri la entitatea OrgDomain și DomainDTO pentru a urmări SSL starea confirmării certificatului după eliberarea serviciului autocert un certificat. De asemenea, adaugă setSsslConfirmat() helper la DomainService.
· kamo-marketing
Eliminați cenzurarea changelog-ului client-side
Înlocuirea cuvintelor și redactarea secretă s-au mutat la ChangelogSanitizarea Serviciu (SecuritySecurityService) deci sanitizarea se intampla inainte de stocarea si traducerea DB. Frontul nu mai trebuie să atingă textul.
· SecurityService
Move changelog word replacement to backend before translation
Text replacements (Docs→Docs, Meet→Meet, etc.) and secret name redaction (K8s secret names→***) were previously applied client-side in ChangelogClient.tsx, meaning the raw sensitive terms were stored in the database and transmitted to the translation service — so translated records could expose internal names in other languages. Both lists are now applied in ChangelogSanitizationService before the commit is persisted. replaceText() covers titles; sanitize() covers descriptions (strip-patterns run first, then replaceText). The frontend no longer needs to do any censoring.
· kamo-internal
Înlocuiți comutatorul suplimentar de stocare cu slider-ul de cantitate
Stocare suplimentară se bazează pe utilizare ($4/25GB bloc), nu un simplu on/off Add-on. A înlocuit întrerupătorul cu un diapozitiv (0-1000GB în 25GB pași) plus un câmp numeric de intrare. Defalcarea costurilor arată acum stocarea ca un element de linie separat. PlanSelection include suplimentarStorageGB pentru platforma pentru a configura facturarea contorizată corespunzător.
· kamo-internal
Wire BillingManager și RelațieManager la suport reale
BillingManager (cont facturare fila): - Înlocuit 100% local-stat de batjocură cu metoda reală de plată cu dungi management prin facturareApi - Încărcarea metodelor de plată de la GET /api / facturare / plata-metodele de montare - Adăugați metoda de plată flux folosește creaseSetupIntent → StripeProvider + Metoda de platăForm → confirmCardSetup → ataşatMetoda de plată (identical fluxul către PlansBillingTab) - Setează implicit prin ***************** cu optimist Pictogramă stea și rotitor în zbor pe rând - Ștergere prin BillingApi.deleteMetoda de plată cu dialog de confirmare; Ștergere implicită a cardului este blocată cu vârful instrumentului - Pictograme ale mărcii cardului (Visa/Mastercard/Amex/Discover) prezentate din datele existente Active SVG; iconiță generică creditCard pentru mărci necunoscute - Încărcare scheletică, eroare per-secțiune cu retry, feedback bara de gustare RelationManager (cont relations tab): - Starea locala goala inlocuita cu GET /api/security/org/my- networks - Classifica retelele: isOwner=fals → Retele de parinti (orgs the user aparține), isOwner=real → Child Networks (orgs the user gestiones) - Afișează inițialele Avatar, titlul org, tipul/domeniu meta și cipul de rol - Legături de acțiune profil la domeniul org atunci când este disponibil - Acţiune pentru drepturile de acces cu tip instrument (gestionată prin intermediul org admin) - Rezumat chips-uri arată live părinte / copil conte - Add/remote is intenţionat read- only; info alert directs to Network pagina pentru managementul relaţiei (nu există niciun criteriu final CRUD)
· KlusterServices
Restore bergamot with working model sources and correct image
- replicas: 1 - Init container (alpine): downloads 4 pairs from data.statmt.org (tarballs for enes/enfr/ende/enpl) and 2 from firefox-translations-models GitHub LFS (individual .gz files for enru/enar) - Image: mozilla/translation-service (proper HTTP server, was WASM library) - Port: 8080 via PORT env var (service defaults to 8000) - Health probes: TCP socket (service has no /health HTTP endpoint) - Remaining 7 locales (pt/it/uk/tr/ro/id/vi) fall through to LibreTranslate
· kamo-internal
Înlocuiți pagina de statistici machete cu tabloul de bord de abonament live KamoCRM
Rebuilt /settings / account?tab=stats into a full wireless, ready- only perspicacitate bord. Înlocuiește toate datele simulate cu apeluri paralele la BillingService prin clientul existent de facturare Api. Aranjament: - Top 2-col grilă: Plan Prezentare generală card (numele planului, insigna de stare, numărul scaunului, ciclu de facturare, perioadă, anulare avertisment, listă de caracteristici) + Sumar de facturare card (suma viitoare a facturii, prețul unitar, add-on-uri active, soldul creditului, plata metoda ultima 4) - Secţiune utilizare completă: carduri de progres pe metru (emailuri trimise, e-mail depozitare, stocare fișiere, documente) cu bare de progres codate în culori derivate de la limitele caracteristicilor planului - Full-with Invoice History table: numberfacture, period, status chip, subtotal/impozit/total, link de descărcare PDF; până la 20 cele mai recente facturi Date: getCurrentSubscription, getAvailablePlans, getCurrentUsage, Obţineţi facturi, obţineţiCreditBalance, obţineţiMetode de plată Configurat astfel încât fiecare secțiune se degradează independent pe eroare. Încărcătoare MUI Skeleton per secțiune în timp ce aduce.
· kamo-internal
Alegeți un flux de plan de la un capăt la altul
- Wire PlanCalculator in Dialog PlansBillingTab (replaces placeholder) - Adu planuri disponibile de facturare API pe pagina de încărcare - Manipulați depunerea planului: creează noi abonamente sau actualizări existente - Necesită metoda de plată înainte de subscriere (redirecte pentru a adăuga plata) - Arată starea de încărcare cu mesajul de procesare dungi în timpul depunerii - Contextul planului de trecere (plan curent, ciclu, scaune, panouri) la calculator - Fixează metoda de platăForm pentru a accepta clientulSecret ca prop în loc de accesarea elementelor de dungi interne
· kamo-internal
Ascunde fila de facturare pentru radacina KamoCRM org
Proprietarii de org KamoCRM au tot ce le este permis cu nici un cost. Nu văd niciodată nota de plată. Fila este acum doar condiţionat pentru organizațiile de copii (unde organizația.hasParent este adevărat). Copil Proprietarii org văd facturarea org lor; membrii văd facturarea pe baza Configurarea delegaţiei.
· SecurityService
Adăugați serviciul de facturare la changelog proiecte publice
· kamo-internal
Sistem integrat de facturare pe platformă
- Client noi de facturareApi.ts cu tipuri complete de TypeScript pentru toate facturile obiective (subscripții, metode de plată, facturi, credite, utilizare; config, admin) - componente noi Stripe Elements: StripeProvider, PaymentMetodaForm, PlanCalculator cu defalcare completă a costurilor, reduceri de volum, și pachete - Rescrie planurileBillingTab cu integrarea reală a benzilor: management de plan, Stripe Elemente metode de plată, istoricul facturii, soldul creditului, contorizarea utilizării, configurarea delegaţiei de facturare, statutul de membru al echipei de facturare - Actualizare CaracteristiciManager cu gating bazat pe plan: iconițe de blocare și actualizare CTA pentru caracteristici care nu sunt incluse în planul curent de subscriere - Înlăturați fila de facturare din setările contului (transferat la pagina de membru) - Instalați @stripe/stripe-js și @stripe/react-stripe-js
· BillingService
Initial BillingService — Stripe-integrated billing for KamoCRM
Complete Spring Boot service for managing KamoCRM billing via Stripe: - Stripe Customer, Subscription, PaymentMethod, Invoice lifecycle management - Credit system with ledger auditing (Stripe Customer Balance) - Usage metering for KamoMail and DocManager (daily cron sync to Stripe) - Billing delegation (ORG_PAYS_ALL / MEMBERS_PAY_OWN modes) - Configurable delinquency enforcement (SOFT_LOCK, HARD_LOCK, OWNER_FALLBACK) - Stripe webhook processing for real-time state sync - Stripe Price/Product auto-creation from subscription catalog - Full REST API: customers, subscriptions, payment methods, invoices, credits, usage, config, admin endpoints - K8s deployment manifests + Forgejo CI/CD pipeline - Internal-only service (no IngressRoute), accessed via APIService gateway
· APIService
Add Stripe webhook forwarding and billing API gateway routing
- POST /api/billing/webhooks/stripe receives Stripe webhooks and forwards to BillingService with Stripe-Signature header preserved - /api/billing/** gateway routes proxy authenticated billing API calls to BillingService through the existing forward() mechanism - Adds billing.service.url and stripe.webhook.secret configuration - Adds stripe-webhook-secret k8s secret reference
· InitializerService
Add billing config initialization to KamoCRMPricingLoader
Seeds a default BillingConfig (ORG_PAYS_ALL, SOFT_LOCK, 7-day grace) for the KamoCRM organization during pricing loader startup. Supports the new Stripe billing system.
· kamo-shared-library
Adaugă entități de facturare și depozite pentru integrarea dungi
Noul pachet ***************** cu 9 entităţi (BillingClient, BillingSubscription, BillingPayment Metoda Factură, BillingCredit, BillingCreditLedger, BillingConfig, BillingUsageSnapshot, BillingStripePreţMapping) şi 9 corespunzătoare JPA depozite. Aceste entităţi oglindesc Strange stat local pentru noul sistem de facturare KamoCRM.
· kamo-marketing
Adăugaţi /calculator şi /preţ / offer la toate sitemaps; i18n HTML sitemap etichete
- app/sitemap.ts: adaugati /preturi/oferta si/calculator cu locatii alternative - app/api/sitemap/route.ts: adăugaţi Calculator de preţuri şi înscrieri Oferte Speciale - SitemapClient.tsx: mutaţi secţiuni statice în interiorul componentei cu t() pentru toate etichetele/descripţiile; adăugați link-ul Calculator sub secțiunea Produs - mesaje/ro.json: adauga 38 noi sitemap link taste etichetă/descriere
· kamo-marketing
Extrage complet restul siruri de caractere corpului de la produs, blog, tarifare, demo, contact, calculator
· kamo-marketing
Extrage complet siruri de caractere de corp de la caracteristici, despre, acasă

Universul tău te așteaptă.
Începeți gratuit în câteva minute.Adăugați produse oricând sunteți pregătit — fără migrare, fără autentificări noi.
Gratuit pentru totdeauna — nu este necesar un card de credit