- SignalDesk3小时前
Original Summary
The problem: I have a personal Google calendar and work calendars in Microsoft 365, and they don’t talk to each other. Colleagues would book me over a dentist appointment; friends would plan over a client call. Existing tools were either pricey, Google-only, or wanted to copy all my event details everywhere. What I built: BusyTwin connects your calendars and creates a private “Busy” twin of every event in the others, both ways. Move or cancel the original and the twins follow. By default nothing but “Busy” crosses over; you can choose to copy titles, locations or meeting links per calendar and per direction. It grew a few related features along the way: Booking page (Calendly-style) that only offers times that are free across all your calendars, with optional approval, buffers and daily limits Automatic Google Meet, Teams or Zoom links for each booking, or guests can bring their own link, address or phone number Combined ICS feed: one subscription link that merges any of your calendars, with details or just “Busy” Stack: Python + FastAPI, Jinja templates, plain CSS and a little vanilla JS (no frontend framework) SQLite, with OAuth tokens encrypted at rest Google Calendar API and Microsoft Graph, with push notifications so changes sync in seconds instead of polling Docker Compose plus a Cloudflare Tunnel, running on a $12/month DigitalOcean Droplet with no open ports About 190 automated tests Things I learned the hard way: Google only gives you a refresh token the first time. Refreshing returns a new access token but no refresh token, and I was overwriting the old one with nothing. Everything worked for an hour, then every Google calendar broke. Microsoft personal accounts are their own world. “Account does not exist in tenant” errors took a while to untangle. Real-time sync is mostly bookkeeping. Google watch channels expire after about a week and Microsoft subscriptions after about 7 days, so you’re constantly renewing them. Keep slower polling as a safety net in case a notification goes missing. Mirroring is easy; not mirroring your own mirrors is the hard part. Every block BusyTwin creates is tagged invisibly, so it never gets copied back and starts an infinite loop. DigitalOcean blocks outgoing email ports. I moved email to an HTTP API (Resend’s free tier covers the beta). Process one user at a time and you won’t scale. The first scheduler synced users in sequence; at a few hundred users, real-time updates would have waited in line behind routine polling. Parallel workers with real-time priority fixed it. Where it is now: private beta users free for life. Letting people in a few at a time so I can help with setup. If you juggle more than one calendar, you can request an invite at busytwin.com . Feedback I’d love: Is the landing page clear about what it does within 10 seconds? Would you pay for this, and roughly how much? What would make you trust a tool with your calendars?   submitted by   /u/fizchap [link]   [comments]
- 情报分类:技术学习与提效
- 分类依据:内容涉及技术、AI、软件工具或工程实践
- 信息来源:Reddit · SideProject
- 发布时间:2026/10/15 20:26:36
- 暂无回复