Best friends
The two people you talk to about everything.
- Holds
- 2
- Cadence
- Every few days
A Speedshift project
A personal relationship manager for iOS and Android. Orbit Rings organises the people in your life into concentric circles of friendship, then nudges you when you’ve gone too long without reaching out to someone in a given circle.
Native iOS and Android apps are being built against a shared spec, with a Flutter prototype as the reference implementation. No store listing yet — watch the repository for the beta.
Anthropologist Robin Dunbar found that human social networks settle into layers of roughly 5, 15, 50 and 150 people, each held together by a different frequency of contact. Orbit Rings makes that structure explicit — and enforces it. When a circle is full, someone has to move outward before someone else can move in. That constraint is the point: it forces honest prioritisation instead of a contact list that quietly grows until none of it means anything.
The two people you talk to about everything.
Your trusted circle — the group chat that never dies.
People you’re genuinely happy to run into.
The wider network you want to stay on the map with.
A map of your people, a feed of who needs a nudge, and an honest read on how you’re doing.
The home screen is the rings themselves — a radial view where every person is an avatar on their circle, tinted by how warm the relationship is. Tap a ring to browse its people, most-overdue first.
When someone passes their circle’s cadence they surface in the Nudges feed and as a notification: “It’s been three weeks since you talked to Sam. Say hi?” Humanised periods, never a day count with a scolding attached. Say hi, or push it out three days.
People come from the device contacts — the iOS Contacts framework and Android’s ContactsContract — not retyped by hand. Orbit Rings keeps a link to the source contact so names, photos and numbers stay in sync.
A read-only tab that answers “how am I actually doing?” — people reached this month, how each circle is trending, and which relationships have been cold the longest.
Call, text, in person or other — logging an interaction is a single tap from the person card, or straight from the notification. iOS and Android both forbid reading your call and message history, so logging is deliberate by design, which also keeps the app compliant on both stores.
Firebase Auth and Firestore with offline persistence back both apps, so your circles follow you across devices and keep working with no signal. Sign in with Google, Apple, or email.
Every person carries a last-contacted date. Measured against their circle’s cadence, that gives one of three states — which is all the colour on the map means.
In touch. Well inside the circle’s cadence.
Drifting a little — past halfway to overdue.
Needs a nudge. Past the cadence for their circle.
SwiftUI on iOS 17+, Kotlin and Jetpack Compose on Android. The hardest parts — contacts integration and reliable background reminders — are platform-specific anyway, so a cross-platform layer would have cost more than it saved.
One hue per circle at matched lightness and chroma, an airy daylight palette and a deep violet night mode, and a token set both apps render from. The rings glow rather than shout.
Capacity enforcement runs inside a Firestore transaction so two devices can’t both fill the last seat. Cadence maths, warmth thresholds and the notification planner are pure functions with unit tests on both platforms.