$ show dotnetfactory/fluid-calendar
FluidCalendar is an open-source full-stack calendar and task management application that serves as an intelligent auto-scheduling alternative to Motion. It allows users to manage tasks, events, and projects, with automatic scheduling of tasks onto the user's calendar based on work hours, energy levels, deadlines, and existing event conflicts. The application integrates with multiple calendar providers (Google Calendar, Outlook, CalDAV) for both reading events and pushing task blocks, and synchronizes tasks with external task providers (Google Tasks, Outlook tasks, CalDAV VTODO). The codebase is a Next.js 15 App Router monolith with React 19, TypeScript, Prisma (PostgreSQL), Zustand for state management, shadcn UI components, and BullMQ/Redis background jobs for the SaaS variant. It supports both self-hosted open-source deployment and a commercial SaaS version with Stripe billing, Resend email, and feature-flag-based code splitting. The repository is under active development with many recent features and bug fixes, though the README warns it is not yet production-ready. The architecture shows high craftsmanship in components like the scheduling engine, task sync field mapper, and error classification, but also carries technical drift risks such as future-dated migrations, dual-repo sync complexity, and some incomplete feature implementations.
The LLM identified 4 files worth highlighting for reuse:
Implements the core auto-scheduling algorithm that finds optimal time slots for tasks on the user's calendar. It considers work hours, energy levels, task priority, deadlines, and existing event conflicts. The service is well-abstracted with interfaces (SchedulingService, CalendarService) and a slot scoring system (SlotScorer) that weights multiple factors. Its clean separation of concerns makes it extractable for use in any scheduling application that needs to allocate tasks to time slots based on constraints.
Provides a declarative field mapping framework for transforming task data between internal and external provider schemas. Subclasses define mappings with transformers and conflict resolution rules (local-override vs external-override). This pattern is reusable for any data synchronization system that needs to map fields between different schemas with bidirectional sync logic, avoiding hardcoded transformers.
Contains the classifyCalDAVError function that distinguishes between connection errors, authentication failures, and path issues when interacting with CalDAV servers. This pattern of structured error classification is critical for providing meaningful user feedback and is reusable in any application that integrates with external APIs where differentiating auth vs connectivity issues is necessary.
Implements an extensible command palette registry with typed command definitions and group-based registration. Commands are organized by functional groups (navigation, calendar, tasks, system) and can be dynamically registered. This pattern can be extracted as a generic keyboard command system for any web application, providing a structured way to define, organize, and trigger commands with keyboard shortcuts.