Legal
Privacy Policy
Aura · Solis Intel LLC · iOS bundle com.solisintel.aura.app
Last updated: March 2026
What we changed
We added an optional, account-free cloud snapshot of your in-app celebrations (display names, birthday and anniversary dates as stored in Aura, relationship category, optional phone for messaging, and the Apple Contacts identifier string the app already uses locally) stored under a random device key in Cloudflare D1, reachable only through our Cloudflare Worker over HTTPS. Backup may run after a successful contact sync from Horizon (including after paywall unlock paths), from Settings via "Back up to Cloudflare now," or after a successful background refresh path that pushes backup. Restore replaces your local celebration list with the latest server snapshot for that device key. You can also use Delete cloud backup in Settings to remove your snapshot from our servers without creating an Aura login.
Product
Aura is an iOS app that helps you remember birthdays and anniversaries for people in Contacts, shows them on a Horizon timeline, can draft short celebration messages, and can schedule local notifications (with your permission). Optional paid Aura Plus unlocks full contact sync beyond the free-tier cap, personalized AI-generated wish text through our Cloudflare Worker, and uses that same Worker for optional cloud backup of celebration snapshots. Core celebration data is stored on device with SwiftData; Apple iCloud device backup may also apply per your Apple account—outside Solis Intel's control.
There is no in-app user account, email login, or password. Access to optional cloud backup rows is keyed to a pseudonymous device identifier stored only on the device (see Optional cloud backup).
Data stored on your device
After sync from Contacts where you allow it, Aura keeps one row per person in SwiftData. Fields used in the app include:
- Contacts identifier — Apple's identifier string for that contact
- Display name — Name shown in Aura
- Birthday — Optional; from Contacts when present
- Anniversary — Optional; from anniversary-type labeled dates in Contacts when present
- Relationship category — Your chosen bucket (for example Friend / Family / Work)
- Primary phone — Optional; from Contacts for message drafting convenience
The app does not require Contacts access to install; without permission, sync features that read Contacts will not work as designed.
Contacts access
System permission text (Info.plist) shown by iOS:
Aura reads birthdays and anniversaries from your contacts so you never miss a special day.
Aura enumerates Contacts only to build celebration rows for people who have at least a birthday or an anniversary-type date. It does not upload the raw address book as a bulk export in a separate "upload all contacts" action; network payloads are limited to what is described under Optional cloud backup and Aura Plus — AI wishes.
Optional cloud backup
Purpose. Optional snapshot backup so celebration data derived in Aura can be restored on the same logical device or installation, without creating a user account.
Infrastructure. The app sends data over HTTPS to the Cloudflare Worker base URL configured in the app (Info.plist key CLOUDFLARE_WORKER_URL). The backup API supports snapshot upload, download (restore), and delete over TLS. The Worker stores rows in Cloudflare D1 in the celebration_backup table. For sensitive actions, use networks you trust; do not disable certificate trust on your device.
Identifier (no account). A UUID string used as device_id in D1 is generated once and stored in app preferences under the key aura.backup.device.uuid. It is not your Apple ID, email, or name. If you erase the app or move to a new device without restoring an Apple device backup that preserved that preference value, you may not recover the same cloud row without a future account-linking feature (not in v1). Restore requests pass this identifier as a query parameter where the app is implemented that way.
What each backed-up row contains. Each celebration row in D1 matches our backup schema (for example migration 0001_celebration_backup.sql):
device_id— Pseudonymous UUID abovecontact_id— Same Contacts identifier string Aura stores locallydisplay_namebirth_iso— Birthday as ISO 8601 when present (nullable)anniversary_iso— Anniversary as ISO 8601 when present (nullable)category— Relationship category stringprimary_phone— Optional phone string when presentupdated_at— Unix timestamp (seconds) when the row was written
What is not in this backup schema. Full vCard or full Contacts exports; photos; emails; postal addresses; notes; or other Contact fields not listed above.
When backup may run. After a successful contact sync from the Horizon flow (including post-paywall sync paths); when you tap "Back up to Cloudflare now" in Settings; and after BGAppRefresh-driven refresh when that path successfully pushes backup. Background work is best-effort and OS-scheduled.
Replace / retention. Each successful backup write removes existing D1 rows for that device_id and inserts the current snapshot. There is no separate per-user version history in this schema.
Restore. When you choose "Restore from Cloudflare backup," the app replaces all local celebration rows with the snapshot returned for your device_id — a clean slate for celebrations in Aura. Treat restore as destructive to your previous local celebration list from the app's perspective.
Delete cloud backup. From Settings you can run Delete cloud backup, which calls the Worker to remove D1 rows for your current device_id. That removes the remote snapshot on our side; it does not by itself erase local SwiftData celebrations on your phone unless you also clear or delete data in the app.
On-device only (not a D1 column). A timestamp of the last successful cloud backup push may be stored in preferences (for example to show "Last backed up …" in Settings). That metadata is not uploaded as its own backup-table column.
Aura Plus, subscriptions, free tier
- Payments. Aura Plus is sold through Apple. The app uses StoreKit 2 for product metadata and current entitlements. Solis Intel does not receive your card numbers through the app for those purchases. Apple is a separate processor for App Store checkout and receipts. In-app product identifiers for cross-reference:
com.solisintel.aura.app.auraplus.monthly,com.solisintel.aura.app.auraplus.annual. - Free tier. Without Aura Plus, Horizon includes a limited number of contacts (sorted by next celebration) as implemented in the app; Plus removes that cap for sync as described in the app and App Store listing.
Aura Plus — AI wishes
AI wish generation is available only when you have an active Aura Plus entitlement. The app sends a small JSON body to the Worker (wishes endpoint), including:
Privacy-by-design. For wishes, Aura minimizes what leaves the device: only a recipient first name is derived on-device from the celebration display name (as implemented) and sent to the Worker—not the full display name string.
- name — Recipient first name only (on-device derivation; JSON key name may still read
namein the API contract) - category — Relationship category (for example Friend / Family / Work)
- event —
birthdayoranniversary
The Worker returns JSON with up to three short wish strings. The app may fall back to offline templates if the network or response is unusable. Wish generation is on demand; the Worker implementation is oriented to stateless generation and D1 storage for backup—not to retaining prompts or outputs as a product feature. If we add server-side logging or retention of wish requests or outputs, we will update this policy before shipping that change.
Background processing & notifications
Aura declares background modes for remote notification, fetch, and processing. A permitted background task identifier (com.solisintel.aura.refresh) refreshes celebration data from Contacts when allowed, reschedules local celebration reminders, and may trigger cloud backup after a successful refresh path.
Local notifications use content derived from data already on your device; granting notification permission is your choice. Aura does not collect unrelated location background trails for advertising.
Review & demo builds
When Contacts yields no qualifying celebrations, some builds may inject a single local-only demo celebration (for example "Alex Aura (Demo)") so Horizon and wish flows are testable: on the iOS Simulator when the mapped contact list is empty, and on device or TestFlight when the Info.plist flag AURA_INJECT_REVIEW_DEMO is true (repository default is false). Demo data uses a synthetic contact identifier and is not a real Contacts record. Production App Store binaries are not expected to ship with demo injection enabled; if that ever changes, we will update this page.
Analytics, ads & tracking
In the codebase this policy is aligned with, there is no third-party analytics SDK, ad network SDK, or App Tracking Transparency-style tracking framework integrated in the provided app sources. If we add one, we will update this policy and App Store disclosures before shipping.
Children
Aura is not intended for children under 13 to use without meaningful parental involvement. Contacts data shown in Aura may include minors' names when a parent or guardian uses the app—use and disclosure should be understood in that household context. If you market to families, consider applicable children's privacy rules in your region.
International & sub-processors
Cloudflare, Inc. acts as a sub-processor for Workers (HTTPS API), D1 (backup storage), and Workers AI (Aura Plus wishes). Processing may occur in Cloudflare's global network unless we publish a region-specific deployment.
Apple processes App Store, In-App Purchase, and device-level data under its own policies, separately from Solis Intel.
No sale of data
We do not sell your personal information to third parties as a business practice. We do not broker your celebration backup or Contacts-derived fields to data brokers for money.
Your choices, rights & contact
Depending on where you live, privacy laws may give you rights to access, correct, delete, or object to certain processing. We do not currently offer an in-app export for portability; if we add one, we will update this page.
Deleting cloud backup. Use Settings → Delete cloud backup to remove your D1 snapshot for the current device key over HTTPS. For edge cases where you no longer have the app or device identifier (for example lost phone without restore), email admin@solisintel.com (same as Aura Support, which should match the support address shown on your App Store listing); we will handle what we can verify without an in-app account.
If you delete the app without first using Delete cloud backup, or revoke Contacts permission, local data and identifiers on the device are affected as expected; cloud backup rows may remain on our infrastructure until you delete them from an install that still has your backup device key, they are overwritten by a later backup from a device still holding the same key, or we remove them after a verified support request where feasible.
App Store privacy labels
Apple's in-console "App Privacy" labels must reflect what the app actually collects and transmits—including Contacts usage, network calls to the Worker for AI and backup, identifiers such as the backup device UUID, and any diagnostics you enable. Even without a traditional Solis Intel account, names and phone numbers are personal information when they leave the device for backup or messaging features; declare types and purposes truthfully (for example Contact Info used for app functionality).
Whether a data type is "linked to the user" in Apple's sense depends on Apple's definitions at the time you file and on how you map device-keyed celebration data. Use Apple's current App Privacy questionnaire guidance when you submit or update your listing.
For Aura app help, visit Aura Support. For general company inquiries: Solis Intel contact.
Changes. We will update this page when our practices change and adjust the "Last updated" date. Material changes to backup, AI, background behavior, or demo flags will be summarized in What we changed or an equivalent notice section.