Show me some LOVE at Product Hunt
Please vote at https://www.producthunt.com/posts/fluidcalendar?utm_source=twitter&utm_medium=social
Added
- Added rate limiting to email queue to limit processing to 2 emails per second
- Added additional logging to email processor to monitor rate limiting effectiveness
- Added ability to manually retry failed jobs from the admin jobs interface
- Added View Details button to jobs in the admin interface to inspect job data, results, and errors
- Added lifetime subscription interest tracking to waitlist system
- Implemented
interestedInLifetime
flag in Waitlist and PendingWaitlist models - Added admin notification emails when users express interest in lifetime subscription
- Updated waitlist API to handle lifetime subscription interest
- Implemented
- Added background task scheduling system with real-time notifications
- Implemented task scheduling queue with BullMQ for asynchronous processing
- Added debouncing mechanism to prevent duplicate scheduling jobs
- Created SSE (Server-Sent Events) endpoint with Redis-backed notifications
- Integrated with existing notification system for toast messages
- Added fallback to direct scheduling for open source version without Redis
- Docker image now available on GitHub Container Registry (ghcr.io)
- GitHub workflow for automatic Docker image publication
- Documentation for using the Docker image in README.md
- Added
scripts/sync-repos-reverse.sh
for syncing changes from open source repository back to SAAS repository - Added data retention and deletion information to privacy policy to comply with Google's app verification requirements
Changed
- Modified job retry functionality to update existing job records instead of creating new ones
- Updated email templates to use "FluidCalendar" instead of "Fluid Calendar" for consistent branding
- Refactored task scheduling logic into a common service to reduce code duplication
- Created
TaskSchedulingService
with shared scheduling functionality - Updated both API route and background job processor to use the common service
- Created
- Improved SAAS/open source code separation
- Moved SAAS-specific API routes to use
.saas.ts
extension - Renamed NotificationProvider to NotificationProvider.saas.tsx
- Relocated NotificationProvider to SAAS layout for better code organization
- Updated client-side code to use the correct endpoints based on version
- Moved SAAS-specific API routes to use
Fixed
- Fixed type errors in the job retry API by using the correct compound unique key (queueName + jobId)
- Fixed database connection exhaustion issue in task scheduling:
- Refactored SchedulingService to use the global Prisma instance instead of creating new connections
- Updated CalendarServiceImpl and TimeSlotManagerImpl to use the global Prisma instance
- Added proper cleanup of resources in task scheduling API route
- Resolved "Too many database connections" errors in production