Friend Roulette
A tiny iOS app that nudges you to reach out to the people you actually mean to keep up with — pick contacts, set a cadence, roll the dice. Everything stays on your phone.
One friend a day
A weighted-random draw surfaces one person from your circle each morning. The more overdue a contact, the heavier their card — but the roll keeps it feeling like a moment, not a chore list.
Weekly → yearly
Assign each person a rhythm that matches the relationship. Cadence is stored in days under the hood, so "every six weeks" is simply 42.
Native handoff
Send a text or place a call straight from the card. The app opens Messages or the phone dialer — no in-app inbox, no synthetic chat surface.
9am notification
A single local notification fires when someone is overdue. No push tokens, no backend, no engagement loop — just the prompt.
Not feeling it? Reroll.
Shake the phone to draw a different friend. The card you skipped goes back into the deck weighted for tomorrow.
Zero data collection
No accounts, no servers, no analytics, no trackers. Apple's privacy label reads "This app does not collect any data." That constraint is the whole product.
The problem
We mean to call back. We mean to check in. We mean to send the text. But the people who don't live in front of us drift away — not because we don't care, but because nothing prompts us. Your existing apps are optimized for engagement with strangers, not for the slow work of staying close to people you already love.
Friend Roulette is the prompt. Nothing more.
How it works
You pick contacts from your phone book and assign each one a cadence — weekly, monthly, quarterly, or yearly. Every day, the app rolls the dice and surfaces one person from your circle who's due. Tap to text or call; it opens your normal Messages or phone app. Log the conversation with an optional note when you're done. A 9am local notification nudges you on days when someone's overdue, and shaking the phone rerolls.
The picker is a weighted-random draw, not a queue: weight = overdueRatio², where overdueRatio = days since last contact ÷ frequency in days. People who are very overdue float to the top, but it's still a roll — so the app never feels like a chore list.


Privacy as the architecture
Everything lives on your phone. No servers, no accounts, no analytics, no third-party trackers. The Contacts permission is read-only and used entirely on-device. Notifications are local-only — no push tokens to leak, no backend to compromise.
Apple's privacy label for the app reads, truthfully, "This app does not collect any data." That constraint is the whole product. A relationship-CRM that uploaded your address book would defeat its own purpose.

The stack
Built on Expo SDK 54 with React Native and TypeScript. expo-sqlite for the local database (two tables: contacts and interactions, with cadence stored as days so "every 6 weeks" is just 42). expo-contacts for the address-book import. expo-notifications for the daily nudge. expo-sensors for shake-to-reroll. React Navigation for the native stack. EAS for TestFlight builds.
Roughly a thousand lines of product code. The whole thing is a deliberate exercise in shipping the smallest viable version of an idea I've wanted to exist for years.
Why it matters to me
I spend a lot of professional time thinking about how AI and software can manufacture connection. Friend Roulette is the personal version of that thesis. The most important relationships in my life aren't ones that any feed will surface or any agent will manage — they're with specific people who deserve a real check-in on a real cadence.
If founder communities are the IRL bet on high-trust gatherings, Friend Roulette is the daily, ambient counterpart: a quiet local prompt that helps you stay close to the people you've already chosen.
Six screens, one idea
The marketing screens that ship to the App Store — each one is also the answer to a real question someone asked me about the app.





