Write ContactSyncLog on calendar/contact mutations for bidirectional sync
Add Google, Microsoft, and GenericDav provider stubs with token refreshers
Add IntegrationSettingsController, IntegrationSettingsService, SyncTriggerPublisher stub
Extract resolveUserId helper, add ETag comment in KamoGroupwareProvider
Add GroupwareProvider interface, ProviderContext, and model classes
- GroupwareProvider interface defines calendar and contact book operations - ProviderContext carries runtime context for provider invocations - Model classes: P...
Add CardDavController and ContactService DAV methods for CardDAV support
Add CalDavController and CalendarService DAV methods
Adds findEventByUid, getChangedEventsSince, getDeletedEventsSince to CalendarService. Adds CalDavController handling PROPFIND, REPORT, MKCALENDAR, PROPPATCH, GE...
Add *** secret to deployment envFrom
Provides GOOGLE_OAUTH_CLIENT_ID/SECRET, **************** and ZOHO_OAUTH_CLIENT_ID/SECRET env vars needed for OAuth provider flows.
Remove duplicate JPA repo scan — use parent package only
com.kamo.z.shared.email covers metadata.repos, scanning both caused BeanDefinitionOverrideException on messageLabelRepository.
Add rspamd config to K8s ConfigMap and set ddl-auto to none
The rspamd.base-url property was missing from the production ConfigMap, causing CrashLoopBackOff on deploy. Also corrects dev ddl-auto to none.
Add email signature template CRUD endpoints
REST controller at /api/email/signature-templates with: - GET /{scope} — retrieve template by org+scope - PUT /{scope} — create or update template (upsert) - DE...
Remove hardcoded WebSocket headers from email middleware
Traefik v3 handles WebSocket Upgrade/Connection headers natively. Hardcoding them broke SockJS fallback transports (xhr-streaming, xhr-polling). Now matches med...
Use @Value for RspamdConfig and make training non-blocking
RspamdConfig now uses @Value to match existing project patterns. Rspamd training failures no longer prevent the message from being moved.
Save copy to Sent folder after sending email
Transport.send() only sends via SMTP without saving to IMAP. Added saveToSent() to append the message to the Sent folder with the SEEN flag set. Applies to send...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.