Inspiration
Ever get frustrated when you accidentally send a personal message to 46-year-old Bob in Wyoming because your friend recently changed their phone number and you didn't update their contact? Or when the same person has 5 different contact cards on your phone? We do, and that's why we made DAVe Card - a lightweight CardDAV-backed server and social contacts manager.
What it does
DAVe allows users to use their preferred provider of Discord, Google, or GitHub to log-in to the application and get started. From here, users can configure a CardDAV client (like your phone contacts app!) using the server URL and credentials shown in the app's setup guide. Once their all set up, users can share and connect contacts with their friends. Once the friend request is accepted, the user is able to see whatever information that their friend listed on their contact card - whether that be their phone number, Instagram handle, and everything in between.
How we built it
For the frontend, we used Next.JS and TailwindCSS to organize the pages and customize our site, utilizing shadcn.io UI components for dialogs and layout. NextAuth was used to manage user sessions and handle user authentication with Google, GitHub, and Discord. For the backend, there was two main parts: the website's backend, and the CardDAV backend. For the CardDAV backend, we had to boil the actual RFC 6352 spec down to the essential endpoints, such as PROPINFO /api/addressbooks/users/[id]/contacts/, and return the data that you are actually authenticated to see. For the website's backend, we used Postgres through PrismaDB, and tRPC for the client-server RPC.
Challenges we ran into
We ran into quite a bit of challenges during this Hackathon. For starters, designing endpoints and auth that work across many device clients was difficult because each client expects slightly different behavior. Additionally, syncing clients in real-time and balancing UX with protocol constraints.
Accomplishments that we're proud of
Despite the challenges, developing a working end-to-end prototype combining CardDAV sync with a modern web UI and social contact exchange felt very rewarding. Also, the simple onboarding page that consists of a straightforward setup guide for users allows for clients to configure their accounts quickly and efficiently, which is cool to have.
What we learned
We found out that CardDAV client compatibility varies a lot between platforms, and that thorough testing on iOS, macOS, and third-party is crucial. We also learned that tRPC and Prisma speed up iteration but require careful caching strategies to maintain a responsive UI.
What's next for DAVe Card
We have already begun testing mobile-friendly contact sharing using DAVe Card, so improvements on that will be a key focus in the future, such as QR code exports being a valid method of obtaining contacts. Furthermore, we will enhance friend request flows and the notification menu.
Built With
- nextauth
- postgresql
- prisma
- tailwind
- typescript

Log in or sign up for Devpost to join the conversation.