Repository navigation
BrainFish v1.2.0 - Reminders Sync Release
π Major New Feature: Apple Reminders Integration
Two-way sync between BrainFish tasks and Apple Reminders, allowing you to manage your ADHD tasks across all your Apple devices.
What's New?
BrainFish now optionally syncs with Apple Reminders, creating a dedicated "BrainFish" list that stays in sync with your swimming fish tasks.
β¨ Key Features
π± Two-Way Sync
- BrainFish β Reminders: Tasks created in BrainFish automatically appear in your Reminders app
- Reminders β BrainFish: Reminders added to the "BrainFish" list appear as swimming fish
- Real-time Updates: Changes sync automatically with smart debouncing (1.5s delay)
- Conflict Resolution: Timestamp-based conflict resolution ensures the latest changes win
π Intelligent Sync Behavior
- Dedicated List: Creates a "BrainFish" list in Reminders (doesn't clutter your other lists)
- Selective Sync: Only syncs incomplete tasks (completed tasks stay local)
- Deletion Tracking: Remembers when you delete a reminder so it doesn't recreate it
- Optional: Completely opt-in via Settings β Fish tab
π― Settings & Controls
- Enable/Disable Toggle: Turn sync on/off anytime in Settings
- Permission Request: Proper macOS permission dialog on first enable
- Status Indicators: Clear console logging for sync operations
π§ Technical Details
Architecture
- ReminderService: Handles all EventKit (Reminders) operations
- SyncEngine: Two-way sync with debouncing and conflict resolution
- Sandboxed: Proper app sandboxing with calendar entitlements
Smart Features
- Debounced Sync: 1.5-second delay to batch multiple changes
- Change Detection: Listens to EventKit database changes for instant updates
- UUID Linking: Each reminder stores task UUID for reliable matching
- Deletion Memory: Tracks deleted reminders to prevent recreation
Sync Behavior Details
- New Tasks: Automatically create reminders when created in BrainFish
- Task Updates: Changes to title, notes, or due date sync both ways
- Task Completion: Marking complete in either app syncs to the other
- Reminder Deletion: Deleting from Reminders removes the link but keeps the fish task
- Task Deletion: Deleting a fish task also deletes its reminder
π Changes from v1.1.0
Added
- Complete Apple Reminders integration with EventKit
- Two-way sync engine with conflict resolution
- "Sync with Apple Reminders" toggle in Fish settings
- Dedicated "BrainFish" reminder list creation
- Calendar entitlement for sandboxed Reminders access
- Deletion tracking to prevent unwanted reminder recreation
- Permission request flow with Info.plist usage description
Technical Changes
- Extended Task model with EventKit properties:
notes: String?- Task notes/descriptiondueDate: Date?- Task due dateisCompleted: Bool- Completion statusreminderID: String?- Link to EKReminderlastModified: Date- For conflict resolutionreminderDeleted: Bool- Deletion tracking
- New files:
ReminderService.swift- EventKit operations wrapperSyncEngine.swift- Two-way sync logic
- Updated
BrainFish.entitlementswith calendar access - Updated
Info.plistwith NSRemindersFullAccessUsageDescription
Fixed
- Sync only targets BrainFish list (not all reminder lists)
- Deleted reminders no longer recreate automatically
- Proper main actor isolation for EventKit operations
π Getting Started
- Update to v1.2.0
- Enable Sync:
- Open Settings β Fish tab
- Toggle "Sync with Apple Reminders" ON
- Grant permission when prompted
- Check Reminders App: You'll see a new "BrainFish" list
- Start Syncing: Your fish tasks and reminders stay in sync!
π‘ Tips
- Sync is completely optional - turn it on only if you want it
- The "BrainFish" list is dedicated - your other reminder lists aren't affected
- Delete reminders from the BrainFish list to unlink them from fish tasks
- Deleted reminders won't recreate automatically
- Turn off sync to pause synchronization (doesn't delete anything)
π Known Issues
None currently reported for this release.
π Credits
Developed with assistance from Claude Code (Anthropic)
Full Changelog: v1.1.0...v1.2.0