So I built what was the missing piece in my setup : Natel, a lightweight self-hosted contacts editor for a CardDAV server. The goal is to edit your contacts on the web, be robust enough to not make you lose anything when there's an edit conflict with the server, and be super light in resources on the server. I came up with building a docker image of just a proxy caddy server and a go process that stores your credentials only in-memory, for a compressed image of less than 30MB and it uses less than 20MB of RAM when idle.
Tested against four CardDAV servers : Nextcloud, Radicale, Baïkal and Xandikos. I already use it myself and it syncs with my server and DAVx5 back-and-forth, but I consider it still in beta and want to add more testing to prove compatibility for features I don't (yet ?) use. Note that any field that isn't displayed is never lost, it's just written back as-is.
Demo: https://demo.natel.app/contacts Website: https://natel.app
I wouldn't have done this side-project if I couldn't delegate writing the code to agents. We iterate on architectural decisions together, and once I'm satisfied with the direction, they write the result in a file (find it in docs/DECISIONS.md in the repo), then write the code to meet the expectations and independently review each other's iterations. I drive the project's direction and decisions, but I don't review the code myself. I keep an eye on the tests to know what's covered, and will read and review code when an agent draws my attention to it. The e2e tests were able to find a bug in SoGO, a CardDAV server : https://bugs.sogo.nu/view.php?id=6269 (and I didn't add that server in the compatilibity list yet because that bug breaks one the promises of the app, which is to be warned if we're trying to delete a contact that is modified elsewhere ; the server doesn't correctly enfore the If-Match instruction)
As I don't have that many users yet, I welcome feedback on any part of the project but especially the parts that I have not yet tested like Contacts on a Mac !