Privacy Policy
Last updated: 2026-09-29
This policy explains what information MyLibra handles, where it goes, how long it is kept, and the choices you have. MyLibra is operated by Fahad Khan LLC, an Illinois limited liability company ("MyLibra," "we," "us").
The short version
- Your stories live on your device and in your private iCloud account. We don't keep a copy and can't read them.
- To write a story, MyLibra sends your request and the story so far to Google's Gemini API, and sends story details to OpenAI to draw a cover. Neither company uses this content to train its models.
- Usage analytics are off unless you turn them on, and they never include your story text.
- MyLibra has no account to sign up for, no ads, and no tracking. We don't sell or share your personal information.
- Settings → Data & privacy → "Delete all my data" removes your data from this device and your iCloud account and asks our servers to delete what they hold about this installation, apart from the few records described below.
On your device and in iCloud
MyLibra stores your library: stories and chapters, the setup conversation behind each story, the choices you made, lore, covers, bookmarks, highlights, collections, reading position, reading sessions and statistics, and your reading and story preferences.
If you're signed in to iCloud, your library syncs to your other devices signed in to the same Apple Account through Apple's CloudKit private database. That copy is kept in your iCloud account under Apple's terms, and MyLibra's servers can't access it. Without iCloud, MyLibra keeps everything on this device only.
Some things never leave this device:
- The last three story proposals you were shown, kept for up to seven days so you can come back to one.
- Work-in-progress records that let an interrupted chapter resume.
- Random identifiers in the device Keychain that the app uses with our servers (described below). They are not your name, email address, or Apple Account.
What the AI services receive
MyLibra writes stories with third-party AI. When you accept this policy in the app, you allow MyLibra to send the following to these services:
- Google (Gemini API), for text. When you set up, create, continue, or edit a story, MyLibra sends what you typed, the story's settings (such as genre, length, point of view, reading level, and mode), its proposal and summary, relevant earlier text and story notes, and the choice you picked or the words you entered. Google returns the story text.
- OpenAI (image API), for covers. When MyLibra draws a cover, it sends the story's title, genre, summary, and visual direction. OpenAI returns the image.
MyLibra uses both as paid API services. According to their current terms:
- Google does not use paid-API prompts or responses to improve its products. It keeps prompts and responses for up to 55 days to detect and prevent abuse, and may store or cache data in any country where it operates. MyLibra also asks Google to hold parts of a story's context in a temporary cache, for up to 24 hours, so later chapters generate faster.
- OpenAI does not use API data to train its models unless the customer opts in, and MyLibra does not opt in. OpenAI keeps abuse-monitoring logs for up to 30 days unless the law requires longer.
Don't put anything in a story request that you wouldn't want these services to process, such as private details about real people. Generation is how MyLibra works and can't be turned off. If you don't want your story content processed by Google and OpenAI, please don't use MyLibra.
Our servers
MyLibra runs two small services on Cloudflare.
Generation gateway. Every AI request from the app passes through our gateway. It checks that the request comes from a genuine copy of MyLibra, applies usage limits, adds our credentials, and forwards the request to Google or OpenAI. The gateway does not store prompts, story text, or images. It keeps:
- A pseudonymous service ID for your installation. The app creates a random ID and keeps it in your Keychain; the gateway stores only a value derived from it, plus a hash of a secret the app uses to prove a deletion request is genuine.
- Apple App Attest records. Apple checks that the app on your device is genuine and issues it a key. The gateway stores the key identifier, the public key, Apple's attestation receipt and environment, the app version, a usage counter, timestamps, and an identifier and hash from the most recent check. One-time challenges expire within two minutes.
- Usage records: daily usage counts; allowances for each story in progress (a random story ID, the kind of work, and time limits), kept for about eight days after they expire; retry records made of random IDs, kept for 90 days; and a one-way hash of each request that makes retries safe, deleted after the day's limits reset.
- Service-health records for each request: its outcome, model, processing stage, status code, response time, and the app's content version. These contain no identifier or content, and Cloudflare keeps them for about three months. Failures also write a short log without identifiers or content, which Cloudflare keeps for up to a week.
Metrics server. It receives usage analytics if you turn them on (see the next section). Each time the app launches, it also downloads feature settings and writing-style data from this server. Those downloads carry no identifiers and no content.
Network data. Whenever the app contacts our servers, Cloudflare processes your IP address and basic connection details to route the request, limit abuse, and protect the service. We don't keep IP addresses in our records or analytics.
Optional usage analytics
Usage analytics are off by default. If you turn on "Share pseudonymous usage analytics," the app sends event records to our metrics server:
- What happened (for example, a chapter finished or a choice was picked) with bounded details such as genre and length category, story mode, where a story was started, whether a proposal was accepted, counts, durations, token counts, error codes, and processing stage.
- When the app was opened and how long reading sessions lasted, but not what you read.
- Crash, hang, and performance counts from Apple's MetricKit. Crash logs and stack traces stay on your device unless you share them yourself with "Share diagnostics."
- One topic label for each story you create, picked from a fixed list of about 25 (for example, "found family"). To choose it, the app sends the story's summary to Google one more time; only the label reaches our server.
- A random analytics ID stored in your Keychain, and one-way hashes of story and setup-session IDs made with a key that never leaves your device.
- The app version and build, content version, platform, and time.
Analytics never include your story text, summaries, setup messages, the wording of choices, character or place names, or your name, email address, or Apple Account.
Raw analytics events are kept for up to 90 days. Daily totals that aren't linked to any ID are kept for up to 13 months.
Turning analytics off stops sending, deletes events still waiting on your device, deletes the analytics ID from your device, and asks our server to delete the events stored under that ID. Daily totals are not affected. Cloudflare's analytics store can't delete individual rows, so copies there expire on their own within about three months. If you turn analytics on again later, you get a new ID.
Support and reports
"Report this story" in the reader sends a report from the app. It includes the reason you pick, your note if you write one, a random reference number for the story, the chapter number, and the app version. It includes the chapter's text only if you turn on "Include this chapter's text," and the app shows you that text before you send. It doesn't include your email address, the story's title, or your analytics ID. We keep in-app reports for 90 days. If the app can't send the report, it opens a prefilled email instead.
If you email support@fahadstudios.com, including a report sent by email, we receive your email address and whatever you write or attach. We can't see your stories, so include the passage you're reporting if you're comfortable doing so. We use reports and emails only to respond to you, fix problems, and handle abuse or legal matters, and we keep emails only as long as those purposes require.
How we use information
- To write your stories and draw their covers.
- To run and secure the service, apply usage limits, and prevent abuse.
- To understand and improve MyLibra, using analytics only if you turned them on.
- To respond to you.
- To comply with the law.
We don't sell or share personal information, show ads, or track you across other companies' apps and websites. Because we don't track you, we don't change anything in response to "Do Not Track" signals.
Who else receives data
- Google: story text generation.
- OpenAI: cover images.
- Cloudflare: hosting for our gateway and metrics server.
- Apple: iCloud sync, App Attest checks, and app distribution.
These providers process data for us under their own data-processing terms, which protect user data at least as well as this policy does. We may also disclose information if the law requires it, to protect someone's safety or our legal rights, or to a buyer or successor if MyLibra is sold or reorganized. In that case this policy continues to apply to information collected under it.
Security
Connections to our servers and to the AI services are encrypted. Identifiers are kept in the device Keychain, and our gateway accepts requests only from genuine copies of the app. No system is perfectly secure, and we can't guarantee that information will never be accessed without permission.
Your choices
- Usage analytics: Settings → Data & privacy → "Share pseudonymous usage analytics."
- Story preferences: Settings → Story preferences → "Reset story preferences" clears your favorite genres, interests, and writing style. It doesn't delete stories or reading statistics.
- iCloud: turn off iCloud for MyLibra in iOS Settings → [your name] → iCloud. MyLibra then keeps your library on this device only.
- Export: you can export any story as a PDF, or your whole library as a backup file (see below).
- Delete all my data: Settings → Data & privacy → "Delete all my data."
"Delete all my data" deletes your library on this device, queues its deletion from iCloud, clears your preferences, turns off analytics, and removes the app's identifiers from your Keychain. It also asks our gateway to retire your service ID and our metrics server to delete your analytics events. If you're offline, the app keeps those requests and retries them, and it tells you if any step is unfinished. Other devices may show your stories until iCloud finishes syncing. The gateway keeps a small record (the derived service ID, the proof hash, and timestamps) so the retired ID can't be used again. Copies you exported, saved, or shared outside MyLibra stay where you put them.
Deleting the app by itself doesn't remove your iCloud copy or the Keychain identifiers. Use "Delete all my data" first, or remove the iCloud copy in iOS Settings → [your name] → iCloud → Manage Account Storage → MyLibra.
Backups and recovery files
Library backup. Settings → Data & privacy → "Export library backup (JSON)" creates a file containing your stories, covers, choices, reading data, notes, and preferences. It leaves out the app's internal generation records, credentials, and analytics data. You choose where the file is saved. "Restore library backup (JSON)" works only on an empty library that isn't syncing with iCloud. That installation then stays on-device only, and restored stories can be read but not continued.
Recovery package. If your library can't be opened, the recovery screen can export a complete raw copy of the app's local database, including everything listed above and internal story records. Keep it somewhere safe, and don't send it to us; our support doesn't accept these files. The app keeps its three newest recovery packages on the device, excludes them from device backups, and deletes them when you use "Delete all my data." A copy you exported elsewhere stays there until you delete it.
How long we keep information
- Your library: on your device and in iCloud until you delete it. We don't have a copy.
- Gateway records: usage counts until the next day, story allowances about eight days after they expire, retry records 90 days, and service and App Attest records until you use "Delete all my data" (a small record then remains so the retired ID can't be reused).
- Service health: about three months, without identifiers.
- Analytics (if on): raw events up to 90 days; daily totals up to 13 months.
- Support email: as long as needed to resolve your message and meet legal obligations.
- Google and OpenAI: up to 55 days and 30 days respectively, under their own terms.
Your rights
Wherever you live, you can ask us to access, correct, or delete your personal information, or object to how we use it, by emailing support@fahadstudios.com. You can already view, export, and delete your stories yourself in the app. Because MyLibra has no accounts and our records use random IDs, we may be unable to find records that relate to you without information from you, and some records may not be identifiable at all. We won't treat you differently for exercising your rights.
European Economic Area, Switzerland, and the UK. Fahad Khan LLC is the controller of the personal data described here. We rely on our contract with you to generate your stories; on our legitimate interests to secure the service, apply usage limits, and prevent abuse; and on your consent for analytics, which you can withdraw at any time in Settings. Your data is processed in the United States and in other countries where our providers operate, under their contractual safeguards. You may also complain to your local data protection authority.
California and other US states. We don't sell or share personal information for cross-context behavioral advertising, and we don't use sensitive personal information to infer characteristics about you.
Children
MyLibra is only for adults aged 18 or older. It isn't directed to children, and we don't knowingly collect personal information from anyone under 18. If you believe a child has used MyLibra, contact us and we'll help delete the information.
Changes to this policy
When we change this policy, we update the date above. If a change is material, the app asks you to review and accept the new version before you continue. If we expand what analytics collect, the app turns analytics off until you choose to turn them on again.
Contact
Fahad Khan LLC · support@fahadstudios.com