Drift notices when you've stopped texting people you used to be close with, and nudges you to reach back out — with real things to talk about.
- Mac script reads your iMessage history from
~/Library/Messages/chat.db - Filters candidates: must have 50+ messages exchanged, silent for 30–1500 days, saved in your contacts
- Gemini reads the last 100 messages per candidate and decides if the relationship is worth rekindling
- Gemini generates 3 talking points per contact (one current/news-based, one inferred from the conversation, one shared experience idea) + a ready-to-send message for each, written in your own tone
- Firestore syncs the results to your iPhone in real time
- iOS app shows nudge cards with talking points, lets you keep or dismiss them, and sends push notifications
- Backend: Python 3, Google Gemini 2.5 Flash (with Search grounding), Firebase Firestore
- Frontend: SwiftUI, Firebase iOS SDK
cd backend/
python3 -m venv venv && source venv/bin/activate
pip install google-genai firebase-admin python-dotenvCreate backend/.env:
GEMINI_API_KEY=your_key_here
Add backend/serviceAccountKey.json (Firebase service account from the Firebase console).
Grant Terminal Full Disk Access in System Settings → Privacy & Security (required to read chat.db).
Run:
python3 main.pyOpen frontend/ in Xcode, add your GoogleService-Info.plist, and run on a device or simulator.
- macOS with iMessage history
- Python 3.10+
- Xcode 15+
- A Firebase project with Firestore enabled
- Gemini API key




