Architecture#
Platform#
iOS-first.
- Target audience skews bimodal on platform; iOS-first is more uniform in device capability and matches the product’s privacy posture.
- Apple’s privacy framing aligns with the “no data controller” stance.
- Cross-platform is a later concern. Android, when it comes, can use the same architecture with graceful degradation on cheaper devices.
Backend#
Free tier: pure client. No backend at all.
- App uses Gmail’s API directly via OAuth, with tokens stored in the iOS Keychain.
- No user account in the developer’s system — the user’s identity is their Gmail account.
- Periodic checks for new mail use
BGAppRefreshTask(BGTaskScheduler). iOS opportunistically grants CPU time; the app polls Gmail and raises local notifications itself. - No server, no data controller status for email content, no infrastructure cost.
Limitation of the free tier: iOS background refresh is opportunistic. For users who rarely open the app, refresh frequency drops, potentially to near-zero. Force-quitting the app from the switcher disables it entirely. Low Power Mode disables it. This is an accepted limitation, not a bug.
Pro tier: a dumb-relay backend, used only for push notifications.
- Backend receives Gmail Pub/Sub webhooks (“user X has new mail” — no content).
- Backend forwards a silent APNs push to the device.
- Device wakes, fetches the new mail from Gmail directly, raises a local notification.
- Backend never sees email subjects, bodies, or contents. It stores only
userID → APNs device tokenmappings.
The architecture is deliberately small so that the privacy story stays defensible: the developer is a data controller only for routing metadata, never for email content.
Summarisation / intelligence#
v1 has no AI. Cards show sender, subject, received time — the “dumb version.”
Future intelligence (see enhancements.md) is intended to run on-device, to avoid both per-user cloud cost and data-controller status. Graceful degradation by device capability.
Cloud-based AI was explicitly ruled out: it introduces per-user costs that this audience won’t pay, and it forces the developer into data-controller territory for email content.