§ 01 Clients — people, not pipelines
A client in Orbit is a person — or a project, or an account, however you think about it. Each one has a name, a color, a free-form notes field, and the tasks and credentials that belong to them. There are no stages, no scoring, no deal sizes, no Kanban. Orbit is for the people you already know you're working with.
Browse them in the sidebar. Archive the ones you're done with. Or pick a color and find them across the app by glance.
§ 02 Tasks — today, with context
Every task lives under a client. That sounds restrictive; it's not. It means every reminder in your list shows up with the person it's for, which is the bit you actually need to act.
- Quick-add from anywhere: ⌘N on Mac, swipe on iOS.
- Priorities you'll actually use — low, normal, high.
- An "All Tasks" view that collapses by client, filters by priority, and hides the noise.
§ 03 Vault — credentials, sealed
The vault holds the small, important things you don't want loose. Each entry has a title and a type, and a body that's encrypted on your device before it leaves it. Supported types:
- Login
- Username, password, optional URL, optional notes.
- API key
- The key itself, with service name and optional environment.
- Card
- Number, expiration, CVC, holder name. Useful for the cards you actually use for business.
- Secure note
- Any free-form text you'd rather not leave unencrypted.
§ 04 Encryption — the math, briefly
Orbit's vault uses an industry-standard wrap-key design — the same shape used by password managers like 1Password and Bitwarden.
- On signup, a 256-bit vault key is generated on your device with a cryptographically secure RNG. It never leaves the device in clear form.
- A random 16-byte salt is generated alongside.
- A key-encryption-key (KEK) is derived from your password via
PBKDF2-HMAC-SHA-256at 600 000 iterations. - The vault key is sealed with
AES-GCM-256under the KEK. Only the sealed bytes, the salt, and the IV travel to the server. - Each vault entry's body is sealed under the vault key with a fresh AES-GCM nonce per entry.
On a new device, you sign in with your email and password. The server hands back the sealed bytes; your device runs PBKDF2 against your password and the salt, derives the KEK, and unseals the vault key locally. The server is never in possession of a key it can decrypt with.
§ 05 Sync — courier, not leash
Orbit is offline-first. Your local SwiftData store is the source of truth on each device; the server is a courier between them. Sync runs on every save, every app launch, and on demand. Conflicts resolve by last-write-wins with timestamp arbitration; conflicts on the vault are vanishingly rare because each entry has its own ID.
Connection lost? Keep working. Everything queues. When you're back, it sends.
§ 06 Authentication — one gate, two factors of convenience
One password unlocks the whole app. On top of that, you can opt in to:
- Touch ID (Mac with a fingerprint sensor) — caches your vault key in the local Keychain with biometry-current-set protection.
- Face ID (iPhone / iPad) — same mechanism.
Biometric unlock is per-device. The password remains the source of truth across devices.
§ 07 Native, on both platforms
Orbit is real SwiftUI on both macOS and iOS. No Electron, no React Native, no web view. That means:
- Keyboard shortcuts on Mac — ⌘N, ⌘F, ⇧⌘L to lock from anywhere.
- Real iOS gestures, real iOS context menus, real haptic feedback.
- Memory footprints measured in tens of megabytes, not hundreds.
- Universal binary on Apple Silicon and Intel.
§ 08 Threat model
Honesty about what the design protects against and what it doesn't:
Protected against:
- Database breach — vault ciphertext is useless without the password; brute force requires 600 000 SHA-256 rounds per guess.
- TLS termination by an intermediary — payloads are already encrypted before they enter the TLS layer.
- Stolen or lost device — without your password, the vault key on a recovered disk is still wrapped.
- Subpoena targeting our infrastructure — we don't have the plaintext to hand over.
Not protected against:
- A compromised, unlocked device. While Orbit is open, the vault key is in memory.
- A keylogger or screen-grabber on your device.
- A user picking
passwordas their password. PBKDF2 raises the cost; it doesn't eliminate it. - A coerced unlock — you, typing your own password under duress.