# BusyMirror BusyMirror mirrors meetings between your calendars so your availability stays consistent across accounts/devices. ## What it does (current) - Route-driven mirroring (multi-source): define Source β†’ Targets routes and run them in one go. - Manual selection mirroring: pick a source and targets in the UI and run. - Two privacy modes: - Private (hide details): mirrors placeholders with prefix + placeholder title (e.g., "πŸͺž Busy"). - Mark Private: mirrors prefix + real title, but marks events Private on supported servers (best-effort). - DRY-RUN mode: see what would be created/updated/deleted without writing. - Overlap modes: `allow`, `skipCovered`, `fillGaps`. - Merge adjacent events with a configurable gap. - Time window controls (days back/forward) and Work Hours filter. - Accepted-only filter (mirror your accepted meetings only). - Cleanup of placeholders, including auto-delete of mirrors whose source disappeared. - Prefix-based tagging and loop guards to prevent re-mirroring mirrors. - Settings: autosave/restore, Import/Export JSON. ## Why Use one calendar’s confirmed meetings to block time in other calendars (e.g., corporate iPad vs. personal devices). ## Build (macOS) Option A β€” Xcode 1. Open `BusyMirror.xcodeproj` in Xcode. 2. Select the BusyMirror scheme β†’ My Mac. 3. Product β†’ Build. 4. Product β†’ Archive β†’ Distribute App β†’ Copy App (no notarization) to export a `.app` (or ZIP it for sharing). Option B β€” Makefile (reproducible) - Build Release: `make build-release` - Package ZIP: `make package` (creates `BusyMirror--macOS.zip` + `.sha256`) - Built app: `build/DerivedData/Build/Products/Release/BusyMirror.app` See `CHANGELOG.md` for notable changes. ## CLI (optional) - Run from Terminal with `--routes` to mirror without the UI. Example: - `BusyMirror.app/Contents/MacOS/BusyMirror --routes "1->2,3; 4->5" --write 1 --days-forward 7 --mode allow --exit` - Flags exist for privacy, all-day, merge gap, days window, overlap mode, and cleanup. ## Roadmap See [ROADMAP.md](ROADMAP.md) ## License MIT β€” see [LICENSE](LICENSE).