Status: π§ In development!
This project is not production-ready. Features, structure, and documentation are subject to rapid change.
I started this project because I was frustrated with how messy and inaccurate my contact lists had become. I couldnβt find a simple, secure way to share MY OWN contact info and keep it up to date. So I built a tool that makes exchanging these details safe, automatic, and effortless.
- Your contacts are broken π€―
- You have 200 contacts. When you change your number, 200 people then might have the wrong one.
- What if YOUR contact card updated itself in everyone's phone?
- That's what we built β¨
- Never text the wrong number again.
- Try β it here
A secure, modular contact management system with:
- End-to-end encrypted storage on Userbase
- Real-time sharing and sync
- Using RFC9553 for storage
- Distribution lists for group sharing
- Cross-device support (web application)
- Create, edit, and organize contacts
- Share contacts with users or groups (distribution lists)
- Archive, delete, and manage received/shared contacts
- Import/export contacts (vCard 3.0
and 4.0) - QR code generation - Scan to easely import contacts
- Real-time updates and cross-device sync
- π Baical CardDAV Integration - Sync with any CardDAV server
src/ # Core business logic and UI components
lib/ # Third-party SDKs (e.g., userbase.js)
index.html # Main entry point
style.css # Styles
mobile.css
- Contributions and feedback are welcome!
# Install development dependencies (testing framework, dev server)
npm install
# Start development server with live reload
npm run serve
# π Baical CardDAV integration setup
cd ../contact-carddav-bridge && npm start # Start bridge server (port 3001)
npm run serve # Start contact manager (port 8080)# For development (after CSS/JS changes)
./dev-cache-bust.sh
# For production deployment
./production_zip.sh
# Restore original files
./restore-dev.sh- QR code generation (for easy contact sharing with iOS/Android compatibility)
- Share your profile
- Revoke sharing per recipient (Individual Databases)
- Improve phone menu UI
- Add some missing export functionality
- Improved import duplicate and merge functionality
- Sharing-lists (for better control and bulk sharing)
- Baical CardDAV Integration (sync with any CardDAV server)
- Group list features (Rename, edit, copy, etc)
- Create e-mail distrubution list
- Bulk operations (Delete)
- Multi-language support (i18n)
- Advanced sharing permissions (cross edit contacts)
- Stay logged in feature
- Change password
- Set passwords rules
- Dark mode
- Pictures as avatars
- Complete disaster recovery system via vCards
- A Progressive Web App (PWA)
- An Electron or Tauri App
- [(x)] Better integration on phones, CardDAV support
- Improve decentralization using userbase
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Shared Userbase Application β
β AppID: "contact-manager" β
β β
β ββββββββββββββββ ββββββββββββββββ β
β β Instance A β β Instance B β β
β β domain-a.comβ β domain-b.comβ β
β β β β β β
β β User: alice βββββββββββββΊβ User: bob β β
β β Contacts DB β Native β Contacts DB β β
β β β Userbase β β β
β ββββββββββββββββ Sharing ββββββββββββββββ β
β β
β Same AppID = Native Sharing Works! β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββ βββββββββββββββββββββββ
β Instance A β β Instance B β
β (Userbase App 1) β β (Userbase App 2) β
β β β β
β User: alice@A β β User: bob@B β
β Contact DB β β Contact DB β
ββββββββββββ¬βββββββββββ ββββββββββββ¬βββββββββββ
β β
β Encrypted Export β
βββββββββββββ βββββββββββββββ
βΌ βΌ
ββββββββββββββββββββ
β Bridge Service β
β (Server) β
β β
β β’ User mapping β
β β’ Data relay β
β β’ Permissions β
ββββββββββββββββββββ
βββββββββββββββββββββββ βββββββββββββββββββββββ
β Browser A β β Browser B β
β (Alice) ββββββββββΊβ (Bob) β
β β WebRTC β β
β Userbase: app-a β P2P β Userbase: app-b β
β β Channel β β
βββββββββββββββββββββββ βββββββββββββββββββββββ
β β
βββββββββββββ βββββββββββββββ
βΌ βΌ
ββββββββββββββββββββ
β Signaling β
β Server β
β (WebSocket) β
ββββββββββββββββββββ
βββββββββββββββββββββββ βββββββββββββββββββββββ
β Instance A β β Instance B β
β AppID: "app-a" β β AppID: "app-b" β
β domain-a.com ββββββββββΊβ domain-b.com β
β βWebFingerβ β
β alice@domain-a.com β + β bob@domain-b.com β
β β Signed β β
β β vCards β β
βββββββββββββββββββββββ βββββββββββββββββββββββ
Push (Contact Manager β BaΓ―cal)
- User updates contact in web app
- Bridge uploads vCard via CardDAV PUT
- BaΓ―cal stores and serves to other devices
Pull (BaΓ―cal β Contact Manager)
- Other devices update contact via CardDAV
- Bridge polls BaΓ―cal for changes (PROPFIND)
- Contact Manager updates local storage
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β User's Contact Manager Account β
β β
β βββββββββββββββββββββ ββββββββββββββββββββ β
β β Userbase Storage β β User's Bridge β β
β β (E2E Encrypted) βββββββββΊβ Component β β
β β β β (Per-User) β β
β β - My Contacts β β β β
β β - Shared Contacts β β User Config: β β
β βββββββββββββββββββββ β β’ BaΓ―cal URL β β
β β β’ Username β β
β β β’ Password β β
β β β’ Sync Settings β β
β ββββββββββ¬ββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββ
β
β CardDAV Protocol
β (Bidirectional Sync)
ββββββββββββββββββββββββ
β BaΓ―cal Server β
β (CardDAV Endpoint) β
β β
β /dav.php/ β
β addressbooks/ β
β username/contacts/ β
ββββββββββββββββββββββββ
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Client Apps β β Contact Manager β β Userbase.com β
β (iOS, Android, βββββΊβ βββββΊβ (E2E Encryptedβ
β Thunderbird) β β β β Storage) β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β β
β β
βββββββββββββββββββββββββΌ
βββββββββββββββββββββββββββββββββββββββ
β BaΓ―cal Server β
β (CardDAV/CalDAV Server) β
β β
β βββββββββββββββββββββββββββββββ β
β β Bridge Component β β
β β (Sync Userbase β BaΓ―cal) β β
β βββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββ
β Contact Manager β β Real-time sharing, E2E encryption
β (Userbase.com storage) β β Advanced features: distribution lists,
β β individual sharing, revocation
βββββββββββββββ¬ββββββββββββββββ
β Bridge Component
βΌ
βββββββββββββββββββββββββββββββ
β BaΓ―cal Server β β Standard CardDAV server
β (CardDAV endpoint) β β Compatible with ALL devices
βββββββββββββββ¬ββββββββββββββββ
β Standard CardDAV Protocol
βΌ
βββββββββββββββββββββββββββββββ
β Native Device Apps β
β β’ iPhone Contacts β
β β’ Android Contacts β
β β’ Thunderbird Address Book β
β β’ macOS Contacts β
β β’ Any CardDAV client β
βββββββββββββββββββββββββββββββ
The contact manager now supports synchronization with any CardDAV server (Baical, Nextcloud, etc.). This enables:
- Universal Device Sync: Access contacts on iPhone, Android, Thunderbird, etc.
- Standard Protocol: Uses industry-standard CardDAV for maximum compatibility
- Bidirectional Sync: Changes sync both ways between contact manager and CardDAV server
- Self-Service Setup: No admin required - users configure their own connections
# Start CardDAV bridge server (separate project)
cd ../contact-carddav-bridge && npm start # Port 3001
# Start contact manager
npm run serve # Port 8080
# Open http://localhost:8080, click "Baical" buttonSee BAICAL_INTEGRATION.md for complete setup and configuration guide.
This project has been developed with assistance from GitHub Copilot.