Privacy Policy
This policy describes how the Oops I'm Late! mobile application (the "App") collects, uses, and shares information.
The App is published by Alex Reich ("we", "us"). Contact: [email protected].
1. Summary in plain English
- We don't sell your data. We don't run third-party ads.
- Calendar, location, contacts, microphone, and SMS happen on your device. We only send data off-device for the specific purposes listed below (traffic ETA lookups, optional crash reports, optional ML telemetry — each opt-in and minimised).
- You can export and delete all your local data from the Settings screen.
2. Categories of data we touch, and where each goes
| Category | Source | Stored where | Sent off-device? |
|---|---|---|---|
| Calendar events (title, start, location text, attendee emails) | iOS calendar | Device only (RAM + local storage) | No |
| GPS coordinates (lat, lon, accuracy, heading, speed) | Device GPS | Device only — used for live ETA computation | Only with traffic-aware ETA enabled (Pro tier): coarse rounded coordinates + appointment endpoint, sent to our routing proxy |
| Contacts (name, phone, email) | Device contacts (you pick which to import) | Device only | No |
| Microphone (during hands-free confirmation) | Device microphone | Not retained — streamed to platform STT only while the confirmation prompt is active | Depends on platform speech recognition (Apple on iOS, Google on Android); see their policies |
| SMS / email message text | You compose / we template | Device only — handed to system SMS or email composer | No (we don't send messages directly) |
| Diagnostic telemetry (anonymized) | App generates | Device by default; included in crash report only if you enable Crash Reporting | Only if Crash Reporting toggle is ON |
| ML trip telemetry (predicted vs actual ETA pairs) | App generates during trips | Device only by default | Only if you opt in under Settings → ML Telemetry |
| Subscription / entitlement state | App Store / Google Play purchase receipts | Device + RevenueCat | Yes — to validate purchase status |
3. Permissions and how to revoke
- Calendar: required to read your upcoming appointments. Revoke in Settings → Privacy & Security → Calendars.
- Location (Always): required for background lateness detection. The App will fall back to "While In Use" with reduced functionality.
- Notifications: required to alert you and to fire reminders.
- Contacts: optional — only if you import contacts to attach to appointments.
- Microphone & Speech Recognition: optional — only when you enable hands-free mode.
- Physical activity / motion (Android: Activity Recognition; iOS: Motion & Fitness): optional — used only on your device to detect that you are driving so the App can stay hands-free. Motion data is not stored or sent off-device.
Android: revoke any permission in Settings → Apps → Oops I'm Late! → Permissions. Background location is requested separately and only to detect that you are running late while the App is closed; you can choose "Allow only while using the app" instead.
We do not request permissions speculatively. If a permission is denied the App degrades gracefully rather than re-prompting.
4. Off-device transmissions in detail
Traffic ETA proxy (api.oopsimlate.com): when you enable Traffic
Boost (Pro tier) the App sends each ETA refresh as: rounded current coordinate, destination
coordinate, travel mode. We do not transmit appointment titles, attendee identities, or
message content. Requests are authenticated with an anonymous installation identifier — no
account or email is required.
Crash reports (Sentry, optional): tagged with anonymized install ID, app version, OS version, and stack traces. Personally identifying fields are scrubbed before send. Disable any time in Settings → Privacy → Crash reporting.
ML trip telemetry (optional, Basic+): aggregated GPS-derived features (speed, accuracy, distance remaining, time-of-day) and predicted vs actual ETA. No raw trace, no destination, no contact. Disable any time.
App store receipts: relayed via RevenueCat purely to validate Basic / Pro subscription status. No usage data.
5. Data retention
| Data | Retention |
|---|---|
| Calendar events | Held in RAM only; never persisted |
| GPS history (Free) | Up to 5-minute rolling buffer in RAM; never persisted |
| GPS history (Basic / Pro, on-device) | Encrypted at-rest on device; cleared after appointment ends or on user delete |
| Contacts you've imported | Until you remove them in Settings |
| Crash reports | 90 days at Sentry, then deleted |
| ML trip telemetry | 365 days at our backend, then aggregated and the raw rows deleted |
| Subscription receipts | For the life of the subscription per RevenueCat policy |
6. Your rights
- Export: Settings → Data → Export Backup gives you a JSON dump of everything stored on-device.
- Delete: Settings → Data → Delete All Local Data wipes locations, contacts, settings, and any cached telemetry.
- GDPR / UK GDPR: EU and UK residents have rights of access, rectification, erasure, restriction, portability, and objection. Email [email protected]; we'll respond within 30 days.
- CCPA / CPRA: California residents have rights of access, deletion, correction, and to limit use of sensitive personal information. We do not sell or share personal information for cross-context behavioural advertising. Same email address.
7. Children
The App is not directed at children under 13 (or under 16 in the EEA). We do not knowingly collect data from children. If you believe a child has provided data, email [email protected] and we will delete it.
8. Changes to this policy
We will update the "Effective date" at the top when this policy changes in any material way. We will surface material changes in-app on next launch.
9. Apple App Privacy nutrition labels
| Apple category | Linked to user? | Used for tracking? |
|---|---|---|
| Contact Info — Email Address (attendees only, on-device) | No | No |
| User Content — Other (calendar / contacts / messages, on-device) | No | No |
| Identifiers — Device ID (anonymous install ID for proxy) | No | No |
| Diagnostics — Crash Data (optional) | No | No |
| Diagnostics — Performance Data (ML telemetry, optional) | No | No |
| Location — Coarse Location (proxy ETA, optional) | No | No |