Add salesSubType field to LeadMarketDTO for mortgage field detection
- Added salesSubType field to distinguish between parent SaleType and sub-types - When SaleType has a parent (e.g., RESIDENTIAL_MORTGAGE), salesType becomes the...
Add complete Kamo logo SVG with all 14 paths
Embed full SVG content directly instead of partial paths
Use CSS-only approach for Kamo logo
Removed broken SVG file mount, using CSS background-image to load external logo directly on #logo element
Fix logo.svg to reference external Kamo logo URL
Use SVG image element to embed external logo instead of complex paths with broken transforms
Replace Roundcube logo.svg with Kamo logo SVG
Mount custom logo.svg to **************** to replace the Roundcube watermark/background logo
Add custom CSS file to override Roundcube watermark logo
- Created custom.css with watermark override - Mount CSS file to /var/www/html/custom.css - Configure Roundcube to load additional_stylesheets
Replace all Roundcube logos with Kamo logo including watermark
Updated skin_logo config to array format to cover: - Main header logo - Small collapsed header logo - Inbox watermark/background logo
Add mail subdomain to auto-cert SUBDOMAINS list
Enables automatic SSL certificate creation for mail.kamocrm.com
Merge pull request #3834 from ****************
Bump jws from 3.2.2 to 3.2.3
Expose Postfix ports 25 and 587 via hostPort for inbound mail
Required for receiving external SMTP connections on K1M1
Add missing Next.js API routes for leads endpoints
- Added /api/security/leads route for GET (all leads) and POST (create lead) - Added /api/security/leads/[id] route for GET, PUT, DELETE operations - Added ****...
Configure Roundcube to use Mailgun SMTP directly
Bypassing local Postfix for outgoing mail, connecting directly to smtp.mailgun.org with TLS on port 587
Switch Postfix to Alpine-based deployment with MySQL support
Similar to Dovecot, using Alpine 3.18 with postfix-mysql package installed at runtime for reliable MySQL virtual maps support
Fix postfix command to use apt-get instead of apk
boky/postfix is Debian-based, not Alpine
Add postfix-mysql support for MySQL virtual maps
Installed postfix-mysql package at container startup to enable MySQL dictionary lookups for virtual domains/users/aliases
Add auth debugging and ensure MySQL driver packages for Dovecot
- Enable auth_debug, auth_debug_passwords, auth_verbose - Add dovecot-mysql package for proper SQL support - Add mariadb-connector-c for MySQL protocol compatib...
Add MySQL auth fix job for MariaDB client compatibility
Changes kamo user from caching_sha2_password to mysql_native_password Required for Dovecot (Alpine/MariaDB) to connect to MySQL 8
Replace Roundcube logo with Kamo logo
Added skin_logo config pointing to **************** Updated deployment annotation to trigger pod restart
Fix MySQL auth: change kamo user to mysql_native_password
Alpine's MariaDB client doesn't support caching_sha2_password plugin This prevents Dovecot from connecting to MySQL for authentication
Force Roundcube pod restart to pick up ConfigMap change
Added annotation to trigger pod recreation since ConfigMap with subPath doesn't auto-update in running pods
Remove 'name' property reference in updateLead function
- Lead interface only has 'primaryContact', not 'name' - Removed fallback to patch.name in updateLead - Completes the fix for type safety
Remove non-existent 'name' property references in leadsApi
- Lead interface only has 'primaryContact', not 'name' - Removed fallback to leadData.name in createLead and updateLead - Ensures type safety and correct API be...
Fix Roundcube redirect loop - disable force_https
Traefik handles TLS termination, so internal traffic is HTTP Setting force_https=true caused Roundcube to redirect to HTTPS internally creating an infinite redi...
Reference kamocrm.com wildcard cert in mail IngressRoute
The certificate secret is in kamo namespace, copied to mail namespace tls.secretName explicitly references wildcard-kamocrm-com
Fix mail IngressRoute to use auto-cert service
Changed tls from certResolver: letsencrypt to tls: {} This allows the auto-cert service to automatically generate certs when mail.kamocrm.com is accessed
Fix Roundcube readiness probe - use TCP socket instead of HTTP
Roundcube redirects / to login page (302), failing HTTP readiness probe TCP socket check on port 80 works correctly
Replace remaining Grid closing tags with GridLegacy in CreateLeadClient
- Fixed all remaining </Grid> tags that should be </GridLegacy> - Ensures proper closing of GridLegacy item components - Resolves JSX syntax error
Switch to Alpine 3.18 with Dovecot 2.3.20 for stable SQL auth
Dovecot 2.4 has incompatible configuration changes without clear docs Alpine 3.18 has Dovecot 2.3.20 which uses traditional well-documented syntax - mail_locati...
Replace Grid with GridLegacy for item prop in CreateLeadClient
- MUI v7 moved 'item' prop to GridLegacy component - Updated all Grid item instances to GridLegacy - Required for compatibility with MUI v7
Add missing 'email' property to Lead interface
- leadsApi.createLead expects email as a separate property - Email is also available in primaryContact.email but API needs it at Lead level - Required for lead ...
Cast customFormData to correct type in CreateLeadClient
- TypeScript was complaining about type mismatch between Record<string, Record<string, unknown>> and Record<string, CustomFormData> - Added type assertion to ma...
Remove address setting from inet_listener - not valid in Dovecot 2.4.2
The listen = * at top level handles binding to all interfaces
Add missing 'vendorLeadID' property to Lead interface
- Property exists in Java Lead bean but was missing from TypeScript interface - Required for lead creation and import functionality
Fix Dovecot 2.4.2 config: mail_location renamed to mail_path
In Dovecot 2.4.2: - mail_location is now mail_path (top-level setting, no blocks) - Added dovecot_storage_version = 2.4.2 (required) - Updated SQL user_query to...
Add missing 'languages' property to primaryContact in CreateLeadClient
- Contact interface requires 'languages' property - Initialize with empty array to satisfy type requirements
Use GridLegacy for Grid component with item prop in MortgageFieldsComponent
- MUI v7 moved Grid with item prop to GridLegacy - Update import to use GridLegacy to fix TypeScript error
Fix Dovecot 2.4 config syntax - use mail{} and ssl{} blocks
- Put mail_location, uid, gid settings inside mail { } block (Dovecot 2.4 requirement) - Put ssl settings inside ssl { } block - Add initContainer to create mai...
Use GridLegacy for Grid component with item prop in CustomFormFieldsComponent
- MUI v7 moved Grid with item prop to GridLegacy - Update import to use GridLegacy to fix TypeScript error
Replace all 'any' types with proper TypeScript types
- Replace Record<string, any> with Record<string, unknown> - Replace any parameter types with unknown or specific types - Remove unused imports (authenticatedFe...
Remove heredoc whitespace issue - use echo commands and ConfigMap
The heredocs had leading whitespace from YAML indentation causing parse errors - Use echo commands to create dovecot.conf without leading whitespace - Mount aut...
Go back to args with external SQL config file - mysql blocks don't work
The mysql { } block syntax causes 'Unknown section name: mysql' error Use passdb sql { driver = sql; args = **************** } External file has correct format:...
Use Dovecot 2.4.2 format: mysql connection block + named sections with query
Found in actual examples: - sql_driver = mysql - mysql hostname { user, password, dbname } connection block - passdb sql { query = ... } with named sections - u...
Resolve compilation errors in CustomFormFieldsComponent and LeadManager
- Remove stray fragment closing tag (</>) in CustomFormFieldsComponent.tsx - Remove duplicate leadId declaration in LeadManager.tsx IdRenderer
Remove named sections - try passdb/userdb without names, use args
Error said 'Unknown section name: mysql' - the mysql block was wrong Try passdb/userdb WITHOUT names (just passdb { and userdb {) Use args = **************** Ex...
Add backend validation for required fields in lead imports
- Add validateRequiredFields method to check required fields before import - Validate email, firstName, and lastName are present - Validate mortgage-specific fi...
Add validation for required fields in lead imports
- Mark email, firstName, and lastName as required fields in leadFields.ts - Add validation in handleStartImport to check all required fields are mapped - Add va...
Try sql_host, sql_user, sql_password, sql_db instead of connect or args
Based on error suggesting passdb_sql_args - maybe SQL settings use sql_ prefix - Named sections: passdb sql { and userdb sql { - driver = sql with sql_driver = ...
Use args parameter with named sections - external SQL config file
Based on examples found: Dovecot 2.4 allows args with named sections - Named sections: passdb sql { and userdb sql { - driver = sql - args = **************** (r...
Refactor LeadImportController to use LeadService.createLead
- Replace manual field mapping with LeadService.createLead for consistency - Add mapRowDataToCreateLeadRequest to convert import mappings to CreateLeadRequest -...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.