DAViCal Migration: 13,654 Contacts Uploaded to New CardDAV Server

DAViCal Migration Complete — 13,654 Contacts Uploaded

Friday, March 13, 2026 — 2:33 AM EDT

What Happened

Radicale (the previous CardDAV server) couldn't handle 16K+ contacts — intermittent 404s, crashes under parallel load, caching issues. Tonight we rebuilt the entire CalDAV/CardDAV stack with DAViCal (PostgreSQL-backed, battle-tested with large datasets).

Results

  • Daily contacts: 81/81 uploaded ✅ (zero errors)
  • Archive contacts: 13,573/16,147 uploaded ✅ (2,493 to retry — likely malformed vCards)
  • Calendar: Personal calendar migrated (SUN 'n FUN 2026 event)
  • Upload speed: 20 parallel workers, ~10/sec sustained
  • Total in DAViCal: 13,654 contacts

Architecture

  • URL: cal.86hate.com (same domain, new backend)
  • Stack: DAViCal + PostgreSQL 16 on Docker Swarm (VPS4)
  • Auth: Basic auth (CalDAV) + web admin panel
  • Collections: contacts (daily, 81), contacts-archive (13,573), personal (calendar)

iPhone Setup

Settings → Contacts → Accounts → Add Account → Other → CardDAV:

  • Server: cal.86hate.com/caldav.php/adam/contacts/
  • User: adam
  • Only syncing daily contacts (81) to phone — archive stays server-side

What's Next

  • Retry 2,493 failed archive uploads (investigate malformed vCards)
  • Merge enrichment data (10,600 phones, 1,742 companies) into contact records
  • Set up .well-known/caldav redirect for auto-discovery
  • Mailcow stays separate (Option 3: email ≠ contacts)