lofi

Native iOS player · privacy

Quiet about your data.

This notice explains the native Lofi iOS music player, its public station catalog, and the network services it uses. The Islands & Create tab also opens the full Lofi website inside the app.

Lofi · Cozy Music Radio Bundle ID: ai.lofi.ios Effective October 20, 2026

At a glance

The Radio tab needs no sign-in and has no native analytics SDK, advertising, IDFA access, or in-app purchases. It plays a public catalog and remote audio, and keeps a local copy of the last successfully downloaded catalog to support an offline fallback.

What the app sends

When the app refreshes stations, it makes a public GET request to https://lofi.ai/api/feed. When it loads artwork or audio, it requests the remote media URL supplied by that catalog. These requests necessarily include ordinary network metadata, such as an IP address and user-agent, as they pass through Cloudflare-hosted services. Cloudflare hosts the public feed service and serves the audio and artwork through its media/CDN path. The app does not add a name, email address, account ID, advertising ID, or device identifier to those requests.

When you choose a station, the app makes a bodyless POST to that station’s /play endpoint. This increments an aggregate play counter for the station. The request is not a login or a user profile, and the iOS app does not submit an identity with it.

How the public service protects the counter

The station-play endpoint uses a fixed one-hour rate-limit window for each IP and station combination. To avoid placing a raw IP address in the rate-limit table, the service stores a deterministic SHA-256-derived hash of the IP and station key in Cloudflare D1. The counter resets when its window rolls. The stored rate-limit rows are not immediately purged when a window rolls, so this page does not promise immediate deletion of those rows.

Aggregate means aggregate. The station play count is a station metric. It is not presented as a personal listening history in the iOS app.

Optional server-side diagnostics

If the service’s optional PostHog configuration is enabled, the backend may send server-side error reports and station-level events to PostHog. Station events use the station ID as their event identity and include the station ID as an event property; they do not use a user ID. The native iOS binary does not load the PostHog SDK. The optional Islands & Create tab loads the same website and analytics behavior as lofi.ai.

What stays on your device

After a successful catalog request, the app stores the catalog in its iOS caches directory as lofi-stations.json. This lets the player show the last downloaded stations when a later refresh is unavailable. It is local app cache data, not an account, and iOS may clear it when it needs space. Artwork and audio are fetched from their remote URLs for playback; the app does not upload your personal files.

Optional Islands & Create experience

  • This tab loads lofi.ai in an in-app browser. Signing in opens your system browser and securely returns the session to the app; the session is kept in the iOS website cookie store.
  • Account information, profile/island content, chat and generation prompts you submit use the same Lofi services as the website. Generation may send your prompt to the configured AI providers. See the Lofi privacy policy for the website experience.
  • Files you choose to download are kept temporarily on the device and can be saved or shared using the system share sheet.
  • No native advertising or cross-app tracking.
  • No IDFA access, native analytics SDK, or in-app purchase flow.
  • The Radio tab does not request your contacts, location, photos or microphone. Using an optional website feature may ask you to choose a file or enter account/profile information.

Questions and support

For privacy questions or playback support, contact jeremy@coralsourcing.com. Please include only the app version, device, iOS version, station, and relevant error text; do not send passwords or financial information.