Add EmailTemplate entity + repository
Stores one SYSTEM row per template_key (org_id NULL, is_system TRUE) plus one clone per org per template_key. Soft-reference org_id/category_id. DB- driven time...
Add EmailTemplateCategory entity + repository
Org-scoped categories for email templates. Soft BIGINT org_id (no FK) matches existing patterns. Case-insensitive name uniqueness per-org is enforced via a part...
Add TemplateStatus enum + TemplateKeys constants for transactional templates
Declares the REQUIRED/CUSTOM/ARCHIVED lifecycle states and the three required template keys (WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION). Variable contracts fo...
Seed KamoCRM with ALL_WORK_ELIGIBLE on fresh installs
The createOrg() helper applies this single argument to both ageReqTypeMember and ageReqTypeTeamMember; consistent with platform convention. Pairs with KamoCRMAg...
Tighten KamoCRMAgeReqUpdateRunner per review
- Restore Javadoc paragraph explaining @Order(10) rationale. - Test now references the UPDATE_SQL constant directly instead of duplicating the SQL string, so ...
Add one-time runner to migrate KamoCRM agereq to ALL_WORK_ELIGIBLE
Conditional idempotent UPDATE runs on service startup; WHERE clause checks the expected old value so re-runs are no-ops. Errors are logged and swallowed — start...
Replace all CSS-filter logo instances with white SVG
Navigation, SubNavigation, Footer, SubFooter, and Preloader all used the same broken filter brightness-0 invert pattern. Replaced with logo-full-white.svg acros...
Use white SVG logo in footer instead of CSS filter
Same fix as the nav — CSS filter on img inside backdrop-filter is unreliable on iOS Safari.
Guard color-scheme with !important against theme CSS override
DynamicMetaLoader can inject remote CSS that wins the cascade. Adding !important ensures color-scheme: dark can never be overridden by theme stylesheets.
Exclude footer and nav links from TouchOptimized min-height enforcement
TouchOptimized was setting minHeight:44px on all <a> elements shorter than 44px, including footer nav links (~20px tall). This ran during hydration on hard refr...
Use pre-rendered white SVG logo instead of CSS filter
CSS filter on img inside backdrop-filter is unreliable on iOS Safari. Generate logo-full-white.svg with all fills set to #ffffff and load it directly — no filte...
Lock Tailwind dark mode variant to class-based, never OS media query
Tailwind v4 defaults dark: utilities to respond to prefers-color-scheme (OS preference). The @variant override ensures dark: classes only activate when a .dark ...
Use inline filter style on logo link for reliable white rendering
Tailwind filter classes on img elements are inconsistent across mobile browsers. Inline style on the anchor element guarantees brightness(0) invert(1) applies e...
Force dark color-scheme so browser never applies light mode rendering
Changing from 'light only' to 'dark' in globals.css, generateViewport, and the html element style — this stops the browser from rendering SVGs and native UI in ...
Prevent logo from rendering behind nav row on mobile
The div wrapper with CSS filter created a new stacking context that conflicted with the header's backdrop-filter on mobile browsers, causing the logo to paint b...
Resolve scrollbar and mobile clipping on JumpToBar and PreviewBanner
- Add overflowY: hidden to JumpToBar inner container to prevent vertical scrollbar - Allow PreviewBanner content to wrap on mobile so text isn't clipped on port...
Replace space-y-4 with inline flex gap on footer link lists
Tailwind space-y-4 uses :where() (specificity 0) which races with CSS loading on hard refresh causing inconsistent vertical spacing. Inline styles are embedded ...
Add Powered by KamoCRM backlink to /welcome landing page
The actual meet.{domain} landing page is welcome/index.html — a static HTML page served directly by nginx that handles the pre-auth flow (capture display name /...
Make PoweredByKamo match kamo-login — white on brand color
The KamoMeet welcome page already had the PoweredByKamo backlink wired up, but its styling was still the original low-opacity currentColor treatment that was vi...
Remove geo debug logging (root cause was Traefik externalTrafficPolicy)
Set Traefik externalTrafficPolicy=Local to preserve client IP
With the default "Cluster" policy, kube-proxy SNATs external traffic to the node IP before forwarding to Traefik. That caused Traefik to see the node IP as the ...
Add missing requestIntegration i18n key across all locales
The "Submit a request" button under the "Need a custom integration?" CTA on /integrations was falling back to the raw key **************** because the key wasn'...
Integration logos + accurate /integrations metadata
Integration pages and hub now display vendor logos (reusing the existing **************** assets that the homepage TechStackBanner already uses). Removed stale ...
Expand /integrations to all homepage-listed providers
Aligns the /integrations page with the actual integrations exposed by the homepage (TechStackBanner). Adds 28 new integration pages matching what the product ac...
Add Home Mortgage Brokers industry page
New industry solution page at /solutions/mortgage-brokers for mortgage brokerages and loan originators. Follows the honest platform framing: core CRM + comms + ...
Honest marketing — align pages to actual platform capabilities
Full review of marketing pages against actual KamoCRM product capabilities. Removed fabricated claims about features not built today, and repositioned industry-...
Add 92 SEO pages — industries, integrations, glossary
Implements Tier 1 of the SEO content expansion plan: three new content subsystems with a total of 92 new crawlable URLs plus 3 hub pages. 1. /solutions — 36 in...
Use pg Pool options instead of connection string for geo DB
CockroachDB rejects insecure connections and node-pg can't verify self-signed certs via connection string alone. Parse the URL into Pool options and pass ssl:{r...
Add geo-database-url to analytics-secret for CockroachDB geolite lookup
Kamo Analytics uses this URL to look up visitor IP→country/region/city from the **************** tables. Uses kamo user with password auth and sslmode=require (...
Add kamo-nowww redirect middleware (apex/unknown→www, ACME pass-through, 308)
Add public known-aliases endpoint for kamo-nowww build-time bake-in
Allow pipeline to proceed when k2m1 is intentionally down
Add continue-on-error to k2m1 deploy jobs and an if condition on translate_and_rebuild so it runs as long as k1m1 deployed successfully, regardless of k2m1 stat...
Make PoweredByKamo legible with WCAG-grade contrast
Mirrors the kamo-login change. Text switched to solid white; background at rest is var(--color-secondary), background on hover/focus is var(--color-primary). Su...
Make PoweredByKamo legible with WCAG-grade contrast
The previous styling (low-opacity currentColor on a near-transparent background) was effectively invisible against most client backgrounds — which also puts the...
Je, unaona nini kuhusu usafiri?
Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.