My Tiny CalDAV Server: how I stopped losing meeting links when I changed jobs

I ran a small CalDAV/CardDAV server on a ₹300 VPS so my calendar and contacts don't disappear when company accounts get revoked—what worked, what failed.

Written by: Arjun Malhotra

Open laptop on a wooden table with a notebook, phone, and a cup of coffee
Photo by Scott Webb on Unsplash

I missed a client demo three weeks into my notice period because my company disabled my Google Workspace account faster than I expected. The meeting link I’d created, the calendar of follow-ups, and a dozen shared contacts vanished in one sweep. I fumbled through chat logs and old emails for half an hour and then explained, awkwardly, why I’d disappeared.

That was the exact friction that pushed me to stop renting my calendar to other people’s infra. I now run a tiny CalDAV/CardDAV server on a cheap VPS and sync it with my phone and laptop. It’s not glamorous. It costs me about ₹300/month plus a domain renewal. But the week I handed in my resignation, it paid for itself in peace of mind.

Why self-host a calendar (and contacts)

How I set it up (the practical bits) I wanted something lean, reliable, and easy to recover. I tried a couple of stacks and settled on Radicale (CalDAV/CardDAV) running in Docker on a ₹300/month VPS (DigitalOcean/Synapse-like cheap tier). Total setup time: two afternoons.

What I did, step by step

Tradeoffs and the one time it blew up This is not zero-maintenance. You now own small ops work: cert renewals, server updates, backups, and occasional sync weirdness. I learned that the hard way.

First failure: my initial Radicale config allowed unauthenticated writes from a misconfigured client. Overnight someone’s phone (mine, misconfigured) and an automated script flooded the calendar with duplicate recurring events. I spent a Sunday deduplicating entries and restoring from backups. The root cause was timezone misconfig + client re-creating events on sync conflicts. Lesson: enforce auth, set sane ACLs, and pick a client that handles conflicts predictably. After that I flipped Radicale to strict ACLs, enabled write-rate limiting in nginx, and added a small “last-write-wins” preflight script that rejects obviously-bad bulk writes.

What I actually gained

Why this fits India work life

When I’d still choose a cloud calendar I’m not evangelical. If you:

Final constraint worth stating: sync is only as reliable as the clients. I saw odd duplicates when I mixed a flaky Android client with macOS and iOS. If you don’t want to babysit, skip this. If you can tolerate ~1–2 hours setup and the occasional weekend incident, it’s worth it.

Takeaway If you’ve ever lost a meeting because an employer disabled your account, consider a tiny, self-hosted CalDAV server as insurance: small monthly cost, a couple of hours to set up, and you keep the thing that actually matters—your schedule. Would I recommend everyone do it? No. But if you value ownership over convenience, it’s one of the simplest, lowest-cost ways to avoid a very specific, infuriating failure mode.