Mushafak
A mushaf that knows its companion — runs on your device
Last updated: 12 October 2026 · Applies to the Android app “مصحفك | Mushafak” (com.mushafak.app)
Summary: Mushafak asks for no account, name, email or phone number. Reading, memorization and recitation recognition work on your device. You may send support messages. Release builds automatically report technical version information and a random device identifier for update reminders; there is currently no separate opt-out for this reporting when online. The mushaf and its recitations never show ads. Outside the mushaf, ads come from Google AdMob: optional “rewarded” ads you choose to watch to collect recitation minutes, native ads at the end of some lists, and an occasional full-screen ad after a long session. The “Mushafak+” subscription is handled entirely by Google Play, can be cancelled at any time, and removes all ads.
You can see all of it in “What does the app know about me?”, export it, or erase it at any time.
Never collected: name, email, phone number, contacts, location, installed apps, or anything outside the app.
| Destination | What is downloaded | When |
|---|---|---|
Cloudflare R2 (pub-…r2.dev) | Recitations, mushaf page images, timing indexes, tafsir shards, the recognition model | On request or “download all” |
| Firebase Storage (Google) | Backup mirror of the same files | Only if the first destination fails |
These are anonymous downloads: no account, no cookies, no identifier we add. As with any internet connection, the host sees your IP address at the time of the request in its ordinary operational logs. Reading and memorization work offline after downloading content. Offline recitation checking only accepts clear matches; unresolved results are not recorded as mistakes or mastery.
The server (mushafak-api on Cloudflare) uses a random device identifier, not an advertising ID or IMEI. It can link requests from the same app installation, so we do not describe it as fully anonymous. It is created when a cloud function is needed, including automatic version reporting. Cloud verification runs automatically during recitation when enabled. Other features are initiated as listed below:
| Feature | What is sent | Why | Retention |
|---|---|---|---|
| Cloud recitation verification | m4a recording and random device identifier | Transcription when the local result is insufficient | The worker does not store audio or transcripts; a daily abuse-prevention counter is retained. Provider processing follows the Workers AI policy |
| “Help improve recitation checking” (optional, explicit in-app consent) | Your recitation recording (m4a; in “Recite with me”: short clips around the spots the app flagged or you disputed, up to 12 per session, sent after the session ends) with the app's verdict on each word, riwaya, ayah and word numbers (an index, not the full Quran text), the transcribed text, your corrections, app version and a random device identifier — no name or email | To improve recitation error detection (training and measuring the judge); not shared with third parties | Until you delete it with “Delete my uploaded recordings” or erase your cloud data; reviewed every 24 months. Uploaded over any connection, or Wi-Fi only if you choose so; can be turned off in verification options |
| “Explain my mistakes” (optional, starts when you press the button; works only when enabled remotely) | Only the text of the recitation result: the words of the recited ayahs, the error types, what the engine heard as text, the interface language, the riwaya and the random device identifier — no audio | To generate an explanation of why mistakes happened. The AI model provider processes it on our behalf — Anthropic, and Google Gemini as a fallback only if the first provider’s balance runs out; Anthropic does not use it to train its models, and what is sent to Google is subject to the Gemini API terms; the model never writes Qur’anic text and the server drops any reply that does | The worker does not store the text or the explanation; it keeps your explanation credit balance, daily counters and aggregate spend with no text. The balance is erased when you erase your cloud data |
| “Ask” (optional, starts when you press the button; works only when enabled on the server) | The text of the question you type (up to 500 characters), your last two questions and answers in the same conversation if any, where in the app you asked from (an ayah, a dhikr or a lesson), the interface language and the random device identifier, and, if you set up “Personalize”, the answer-style lines you wrote or asked for (up to four) and up to ten short lines of facts you asked it to remember or that came up in your conversation (such as your school of fiqh or a preference for short answers; the app tells you about every save and you can undo it) plus your interests derived from the kind of questions you ask — these are kept on your device only, are sent with the question to personalise the answer, and you can delete them or turn memory off at any time — no audio unless you dictate your question with the microphone: the recording is uploaded to be transcribed into text and is not stored (optional, starts when you press the microphone; a Whisper model on Cloudflare Workers AI transcribes it and the text is returned to your device; we store neither the audio nor its text; offline, your device’s speech recognizer transcribes it) | To answer from the app’s own sources (Tafsir al-Muyassar, Qur’anic glosses, reasons of revelation, adhkar, tajweed and the app’s lessons), citing a source for every sentence. The AI model provider processes it on our behalf — Anthropic, and Google Gemini as a fallback only if the first provider’s balance runs out; Anthropic does not use it to train its models, and what is sent to Google is subject to the Gemini API terms; for fiqh and hadith questions, short phrases from your question (without any device ID) may be searched in the public Shamela library service (mcp.shamela.ws) to source the answer; in “Deep research” mode the model provider searches the web with phrases from your question and reads public pages to cite them; the model never writes Qur’anic text and does not issue fatwas, and the server drops any part without a source | The worker does not store the question or the answer; it keeps your credit balance, daily counters and aggregate spend with no text. The balance is erased when you erase your cloud data |
| Update reminders — automatic reporting | Random device identifier, app and Android versions, package name, installer and debug status. The server stores the version, identifier, time and whether installation came from Play | To detect available versions and offer update reminders, not advertising | No automatic expiry applies; “Delete my cloud data” immediately erases these records with the rest of this device’s server data, with manual requests retained as a fallback |
| Retention measurement — daily presence (automatic) | At most once a day, at the first app open: the random device identifier, app version, today’s date on your device, the app’s interface language code (such as “ar” or “fr”, no country), and the names of the sections you used that day from a closed list of twenty-four (mushaf, recitation check, recite-with-me, memorization, wird, daily, adhkar, ask, tafsir, “recite-with-me quota reached” and “app review requested” as events with no amount or text, plus tap or entry events for optional cards and features: sharing a recitation result, the time-of-day adhkar card, “continue where you left off”, the suggested wird, tapping a suggestion in “Ask”, starting a quiz, opening Quran sciences, starting a memorization session, creating a memorization or wird plan, quizzing someone else, sharing a quiz result card, and starting a puzzle — names only). No location, text, audio or advertising ID, and nothing of what you read or say inside the sections | To learn how many people come back and which sections are used so we can improve the app; not for advertising and not shared with anyone | One row per device and day is kept with no automatic expiry; “Delete my cloud data” erases it with the rest of this device’s server data. If you are offline it is kept on your device and sent later (up to 7 days) |
| "Recite with me" measurement - aggregated daily counts (automatic; switched on from the server) | At most once a day when a "Recite with me" session starts: counts of session steps for completed days (start, permission denied, first text, pinning, result, retry, leave) and a median of timings in milliseconds, with the app version and the day. No device identifier, token, IP address, text or audio, so our server cannot link it to you | To learn where users struggle in "Recite with me" so we can improve it; not for ads and not shared with anyone | An aggregated table with no identity (day, version, key, count), so it is not tied to your device and cannot be erased by device; if offline it is sent later |
| “Share the app” and link referrals (sharing is optional; the install-referral step is automatic for someone who installed from a share link) | When you share the app, the server issues your device identifier a random referral code (8 characters) that goes into the share link. When someone installs from your link, their app reads the referral code from Google Play’s install referrer (Play Install Referrer) once and sends it to the server together with the install and click timestamps. The server stores irreversible SHA-256 fingerprints (not the identifier itself) so it can count your referral without counting an install twice, and it grants you the reward minutes. No names, contacts or message content | To count the referral reward, and to prevent duplicates and abuse (limit of 10 referrals per month) | The code and pending balance are erased when you erase your cloud data; the encrypted referral fingerprints (no identifier) remain up to 13 months so a referral is not counted twice after an erase and reinstall |
| “Review buddy” in Hifz (optional: nothing is sent until you invite a friend or join with their invite code) | Your random device identifier (not linked to your name), the invite code (8 characters), whether you reviewed your wird today (yes/no) and the time of your last “gentle nudge”, so your friend sees only “yes/no”. No name, ayahs, positions or audio; not available in children’s mode | To show whether your buddy reviewed their wird today and let you nudge them gently; not shared with third parties | The whole record is deleted with “End partnership” or “Delete my cloud data”; an unaccepted invite is forgotten after 14 days and an idle partnership after 120 days |
| Support | Your message, its type, app version, and your general settings if you choose to attach them | So you get a reply inside the app | Until you ask for deletion, or one year after the last message in the ticket |
| Stage certificate | Certificate code, stage number, ayah count and date — no name | So whoever you show the certificate can verify it by its code | Kept unless you ask for deletion |
| “Would you want this feature?” (optional) | Yes/no and your role (teacher/student) | To learn whether a feature is worth building | Aggregated without identifier after 30 days |
Mushafak does not sell or share any of this data with third parties for other purposes; hosting is on Cloudflare under a standard data-processing agreement. When you use “Explain my mistakes”, the text of the recitation result (not the audio) is sent to the AI model provider — Anthropic, and Google Gemini as a fallback only if the first provider’s balance runs out — as a processor on our behalf, to generate the explanation; and when you use “Ask”, the text of your question is sent to the same provider in the same way (as text; audio only if you dictate your question, in which case the recording is uploaded to be transcribed and is not stored) to answer from the app’s sources; Anthropic does not use either to train its models, and what is sent to Google is subject to the Gemini API terms. For fiqh and hadith questions, short phrases from your question (without any device ID) may be sent to the public Shamela library service (mcp.shamela.ws) to search it, and in “Deep research” mode the model provider searches the web with phrases from your question — only to source the answer. If you yourself attach a photo or a document to your “Ask” question, it is sent with the question for ephemeral processing by the provider and is not stored by us; the photo is downsized on your device and its EXIF data is dropped before sending.
The app contains no ad SDK other than the Google AdMob ads described above, no Google or Firebase Analytics, no crash reporter, no tracking pixel, and no data sharing with social networks. Our only first-party measurement is the “daily presence” described in the table (section 4): today’s date and section names from a closed list, with the random device identifier, sent to our own server only, never to a third party, and tracking no location or content.
The daily reminder, if you enable it, is scheduled and shown on your device by Android; no server sends notifications. “Do not disturb” in focus mode asks for a system permission and works locally only.
The data practices described above, including device identifiers and technical information, apply to app users. The app does not request names or ages. Ads are requested with the “G” rating suitable for all ages and appear only when the user taps.
Quran text is from the King Fahd Complex; classical tafsirs come from public-domain sources; recitations come from sources permitting use with attribution. Sources and licenses are shown inside the app and with every tafsir shard.
Any change is published on this page with an updated date, and any new feature that uploads data is described here before it is enabled.
Inside the app: “Support”. Or by email: oroekekdkdjjddjjdke@gmail.com