What it does
You land in São Paulo. Let's Get Coffee already knows, because your calendar said so. Before you've even cleared passport control, it's surfacing the three people in your contacts who live within 25 km — and offering a one-tap email with a "hey, I'm in town" template pre-filled with your dates and neighborhood.
It's the feature every traveler eventually wishes their phone had. Built with a strict rule: your contacts never leave your device.
Highlights
- Universal city search. Type a city name, a full address, or an IATA airport code (
GRU,JFK,FCO). Adjustable radius, map view, airport code resolution from an embedded 6,000-airport database. - Multi-source contact import. Apple Contacts natively. LinkedIn via a Chrome extension that talks to the macOS app through native messaging — no scraping, no ToS violations.
- On-device trip detection. Apple FoundationModels scans your calendar for flight/hotel/conference events, groups them into named itineraries, and lets the app know when you're traveling.
- Arrival notifications. Opt-in low-power city-level detection wakes the app when you land and surfaces nearby contacts.
- Smart outreach. Travel-aware templates for email, text, and phone. "Starred," "Suggest," and "Don't Suggest" flags keep the noise down.
- Dual-platform, single codebase. iOS and macOS share a unified SwiftUI
Shared/target.
Stack
| Layer | Tech |
|---|---|
| App | Swift 6, SwiftUI, @Observable models |
| Persistence | SwiftData, optional CloudKit sync |
| Platform APIs | EventKit, CoreLocation, Contacts |
| ML | Apple FoundationModels (on-device) |
| Auth | Sign in with Apple via Supabase (RLS-secured, optional) |
| Integration | Chrome extension (Manifest V3) ↔ Swift native messaging host |
| Testing | Swift Testing, 890+ tests across 41 files |
| Platforms | iOS 26+ and macOS 26+ |
Privacy, as a design constraint
- No analytics. No third-party tracking. No server-side copy of your contacts or calendar.
- All data persists locally in SwiftData. iCloud sync, if you turn it on, moves it only between your own devices.
- The Chrome integration uses native messaging specifically to avoid web scraping and keep everything on the local machine.
Status
Production-ready, App Store-bound. 890+ tests passing, accessibility (VoiceOver) wired, onboarding complete, network-resilience patterns in place, version 1.0.0 tagged. Next up: Google/Outlook calendar integration.
Why the source is private
This repo is a public-facing description of a working app. Implementation details — particularly around contact deduplication, calendar classification, and the native-messaging bridge — live in a private repository. Reach out below for a deeper look.
Contact
Mark Porter — @marklovestech · mark@marklovestech.com