மாற்று பதிவேடு
என்ன புதிது.
அது கப்பல்கள் போல், தளத்தில் ஒவ்வொரு மேம்பாடு.
· kamo-internal
Show TXT domain ownership record in DNS setup UI
- DomainData/DnsStatus: add verificationToken, ownershipVerified, type fields - AliasStatusTable: show TxtOwnershipCard above CNAME table with copy button, indigo pending / green verified styling; filters TXT from CNAME verified count - ManualDnsGuide: accepts verificationToken prop; shows TXT record as Step 3a before CNAME records (Step 3b) with inline copy button - 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
Add domain ownership verification via DNS TXT record
- OrgDomain: add verificationToken and ownershipVerified fields - DomainService: add setVerificationToken() and setOwnershipVerified() - DomainDTO: expose verificationToken and ownershipVerified in API responses - DnsStatusDTO: add type field to distinguish TXT from CNAME statuses
· kamo-internal
Sticky header, updated aliases, always-visible plain-English DNS guide
· SecurityService
Update required aliases — add app, capcha, docs, sign; remove legacy
· kamo-internal
Always show DNS button for owners, add change domain flow
· kamo-internal
Pass orgId through setup/dns flow for cross-org domain management
· SecurityService
Allow cross-org domain management by verifying user ownership
· kamo-internal
Add /setup/dns page and domain setup flow to /network
- New /setup/dns page with two-phase flow: domain entry then DNS verification with 60-second auto-polling and SSL confirmation - ManualDnsGuide: collapsible step-by-step DNS instructions for all skill levels with copy buttons for record names and target value - AliasStatusTable: live per-alias CNAME verification status with Verified / Pending / Error chips and optional badge for www - DnsProgressView: phase indicator (DNS → SSL → Ready), progress bar, countdown timer, Check Now button, auto-advances to success state - DomainEntryForm: domain input with www toggle and plain-language UX - /network page: disable Enter button for orgs with unconfirmed custom domain; show Setup Domain button for owners needing configuration
· 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
Add sslConfirmed/sslConfirmedAt fields to OrgDomain and DomainDTO
Adds two new fields to OrgDomain entity and DomainDTO to track SSL certificate confirmation status after the auto-cert service issues a certificate. Also adds setSslConfirmed() helper to DomainService.
· kamo-marketing
Remove client-side changelog censoring — now handled by backend
Word replacement and secret redaction moved to ChangelogSanitizationService (SecurityService) so sanitization happens before DB storage and translation. The frontend no longer needs to touch the text.
· 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
Replace storage add-on toggle with quantity slider
Additional Storage is usage-based ($4/25GB block), not a simple on/off add-on. Replaced the toggle switch with a slider (0-1000GB in 25GB steps) plus a numeric input field. Cost breakdown now shows storage as a separate line item. PlanSelection includes additionalStorageGB for the backend to set up metered billing accordingly.
· kamo-internal
Wire BillingManager and RelationshipManager to real backends
BillingManager (account billing tab): - Replaced 100% local-state mock with real Stripe-backed payment method management via billingApi - Loads payment methods from GET /api/billing/payment-methods on mount - Add payment method flow uses createSetupIntent → StripeProvider + PaymentMethodForm → confirmCardSetup → attachPaymentMethod (identical flow to PlansBillingTab) - Set default via **************** with optimistic star icon and in-flight spinner per row - Delete via billingApi.deletePaymentMethod with ConfirmationDialog; default card delete is blocked with tooltip - Card brand icons (Visa/Mastercard/Amex/Discover) shown from existing SVG assets; generic CreditCard icon fallback for unknown brands - Skeleton loading, per-section error with retry, snackbar feedback RelationshipManager (account relationships tab): - Replaced empty local state with GET /api/security/org/my-networks - Classifies networks: isOwner=false → Parent Networks (orgs the user belongs to), isOwner=true → Child Networks (orgs the user manages) - Shows Avatar initials, org title, type/domain meta, and role chip - Profile action links to org domain when available - Access rights action disabled with tooltip (managed via org admin) - Summary chips show live parent/child counts - Add/remove is intentionally read-only; info alert directs to Network page for relationship management (no backend CRUD endpoint exists)
· 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
Replace mock stats page with live KamoCRM subscription dashboard
Rebuilt /settings/account?tab=stats into a fully wired, read-only insight dashboard. Replaces all mock data with parallel calls to BillingService via the existing billingApi client. Layout: - Top 2-col grid: Plan Overview card (plan name, status badge, seat count, billing cycle, period, cancel warning, feature list) + Billing Summary card (next bill amount, unit price, active add-ons, credit balance, payment method last 4) - Full-width Usage section: per-meter progress cards (emails sent, email storage, file storage, documents) with colour-coded progress bars derived from plan feature limits — green/warning/error at 70%/90% thresholds - Full-width Invoice History table: invoice number, period, status chip, subtotal/tax/total, PDF download link; up to 20 most recent invoices Data: getCurrentSubscription, getAvailablePlans, getCurrentUsage, getInvoices, getCreditBalance, getPaymentMethods — all via Promise.allSettled so each section degrades independently on error. MUI Skeleton loaders per section while fetching.
· kamo-internal
Complete Choose a Plan flow end-to-end
- Wire PlanCalculator into PlansBillingTab dialog (replaces placeholder) - Fetch available plans from billing API on page load - Handle plan submission: creates new subscription or updates existing - Require payment method before subscribing (redirects to add payment) - Show loading state with Stripe processing message during submit - Pass plan context (current plan, cycle, seats, addons) to calculator - Fix PaymentMethodForm to accept clientSecret as prop instead of accessing Stripe Elements internals
· kamo-internal
Hide Plans & Billing tab for root KamoCRM org
KamoCRM org owners have everything enabled at no cost — they should never see the billing tab. The tab is now conditionally rendered only for child organizations (where organization.hasParent is true). Child org owners see their org's billing; members see billing based on the delegation config.
· SecurityService
Add BillingService to changelog public-projects
· kamo-internal
Integrate Stripe billing system across the platform
- New billingApi.ts client with full TypeScript types for all billing endpoints (subscriptions, payment methods, invoices, credits, usage, config, admin) - New Stripe Elements components: StripeProvider, PaymentMethodForm, PlanCalculator with full cost breakdown, volume discounts, and bundles - Rewrite PlansBillingTab with real Stripe integration: plan management, Stripe Elements payment methods, invoice history, credit balance, usage metering, billing delegation config, team member billing status - Update FeaturesManager with plan-based gating: lock icons and upgrade CTAs for features not included in current subscription plan - Remove billing tab from account settings (moved to member page) - Install @stripe/stripe-js and @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
Add billing entities and repositories for Stripe integration
New package **************** with 9 entities (BillingCustomer, BillingSubscription, BillingPaymentMethod, BillingInvoice, BillingCredit, BillingCreditLedger, BillingConfig, BillingUsageSnapshot, BillingStripePriceMapping) and 9 corresponding JPA repositories. These entities mirror Stripe state locally for the new KamoCRM billing system.
· kamo-marketing
Add /calculator and /pricing/offer to all sitemaps; i18n HTML sitemap labels
- app/sitemap.ts: add /pricing/offer and /calculator entries with locale alternates - app/api/sitemap/route.ts: add Pricing Calculator and Special Offer entries - SitemapClient.tsx: move staticSections inside component with t() for all labels/descriptions; add Calculator link under Product section - messages/en.json: add 38 new sitemap link label/description keys
· kamo-marketing
Fully extract remaining body strings from product, blog, pricing, demo, contact, calculator
· kamo-marketing
Fully extract body strings from features, about, home

உங்கள் உலகம் காத்திருக்கிறது.
நிமிடங்களில் இலவசமாகத் தொடங்கவும். நீங்கள் தயாராக இருக்கும் போது பொருட்களை சேர்க்கவும் - எந்த மாற்றமும் இல்லை, புதிய உள்நுழைவுகள் இல்லை.
எப்பொழுதும் இலவசம் — கடன் அட்டை தேவையில்லை