Case study
Ahvaan
A cross-platform RSVP app that routes invitations through push, WhatsApp, or SMS without handing anyone your contact list.

- 600+users
- iOS + Androidfrom one codebase
What it is
Ahvaan is an invitation and RSVP app. You create an event, invite people, and they respond — on iOS, on Android, and through whichever channel they actually read.
It is the project on this page with the least architectural drama and the most users, which is a useful thing for a portfolio to admit.
The interesting constraint
Invitation apps have a well-worn shortcut: ask for the address book, upload it, and let the server figure out who is already a user. It works, it is fast to build, and it means a host’s entire contact list — including people who never agreed to anything — now lives on someone else’s infrastructure.
I did not want to build that, so the invitation flow had to work without it.
Invitation delivery
01Host selects recipients on-devicedeterministic
Contact selection happens entirely on the phone. The address book is never uploaded.
02Only the chosen numbers reach the backenddeterministic
The server receives the specific recipients for this event and nothing else — no bulk sync, no shadow social graph accumulating.
03Route per recipient
Existing users get a push notification. Everyone else gets a WhatsApp or SMS link that opens the invitation without requiring an account first.
04RSVP and calendar sync
Responses update the event in real time, and accepting adds it to the guest’s native calendar.
Engineering notes
System
- Client
- React Native with TypeScript, shipped to both the App Store and Play Store from one codebase. Redux holds event and RSVP state so the UI stays consistent across the several screens that can mutate it.
- Authentication
- Phone-number auth. For an app whose entire premise is inviting people you already have a number for, an email-and-password flow would have been friction with no purpose.
- Backend
- A Node.js REST service over Firebase, handling invitation routing, RSVP state, and delivery through push, WhatsApp, and SMS.
- Calendar
- Native calendar integration on both platforms, so an accepted invitation exists somewhere the guest will actually see it again.
Redux earned its place here, which is not always true. An event’s RSVP list can be changed by the host, by a guest responding, and by a push notification arriving while a different screen is open. Centralising that state removed a category of bug where two screens disagreed about who was coming.
Two platforms, one codebase, several exceptions. Most of the app is genuinely shared. Notification permissions, calendar access, and deep-link handling are not, and pretending otherwise produced more bugs than accepting a small amount of platform-specific code.
Why it is on this page
Six hundred people used this to organise real events, which means it had to survive things the other projects on this page have not: a guest on an old Android phone, a WhatsApp link opened three days late, someone tapping RSVP twice on a bad connection.
It is a useful counterweight to the infrastructure work. Distributed systems fail in ways you can read in a trace. Consumer apps fail in ways a person tells you about, in a message, at eleven at night.