Daylit — Privacy

Daylit 2.0 · last updated 14 October 2026 · made by Erek Studio

This page says what Daylit 2.0 does with what you put into it. It was written from the app's code and the code of the gateway it talks to, and each statement carries a number that the table at the end ties to a file. Where something could not be checked in code, it is listed under "Not verified" instead of being claimed.

In short

What stays on the phone

What leaves the phone, and when

Every AI request goes out through one door in the app, to Daylit's gateway, over HTTPS. The door asks for consent first and writes a row in the log on your phone afterwards. [12]

Each request also carries the task's name, a random id made for that one request (so a retry is not counted twice), the app's version, and a device token (see "What identifies an install"). [13]

Plan (plan)

Sent when you ask for a plan. It carries:

Day question (day_answer)

Sent when you type a question about a day. It carries the question, the date, the language, and what that day holds, because the answer has to cite it:

Long items are shortened to fit. Phone-calendar events are not part of a day question. A question about a day that holds nothing is answered on the phone and sends nothing. [15]

Spending observation (spending_insight)

Sent when you ask for the observation on a month. It carries totals, never entries:

No single expense, no amount of a single expense, no note and no date of an entry is in it. The gateway also rebuilds the request from these fields alone before passing it on, so a field that is not on this list does not reach the processor. [16]

File Read (document_analyse)

Sent when you press Read on a file. It carries the text of the pages that are read — the pages you chose, or as many from the start as fit — with the file's name, the date the file is attached to, the language, and a line saying which pages are covered. The text was extracted on the phone; the file itself is not uploaded. [17]

Requests that are not AI

These go to the gateway without the consent question, because they carry nothing you wrote:

Who processes it

The gateway is a Cloudflare Worker run by Erek Studio. For an AI request it adds the instructions for the task and passes the text on to one processor. The request it makes to the processor is built by the gateway: it holds the instructions and the text, and neither the install identifier nor any header your phone sent. [21]

<!-- processors:start (test/privacy/privacy_text_test.dart compares this list with the consent sheet's) -->

  1. DeepInfra (deepinfra) — runs the DeepSeek model that writes the answer. Every AI request goes here first.
  2. OpenAI (openai) — only when DeepInfra cannot be reached.
  3. Anthropic (anthropic) — only when neither DeepInfra nor OpenAI can be reached.

<!-- processors:end -->

The reply says which of the three wrote it, and the log on your phone shows that name for every request. [22]

Others that take part, and what reaches them:

What the gateway keeps, and for how long

The gateway does not write the text of a request or of a reply to storage or to its logs. A reply is passed to your phone as it arrives. (For one case — a free day question — the reply is also held in memory until it ends, to see whether it found nothing so that the answer is not counted, and is dropped with the request.) [26]

What it does keep:

WhatTied toKept for
The count of free answers usedinstall identifierno expiry
For each free request that reached the count: its random id, how often it was tried, whether it was counted, and a keyed fingerprint (HMAC-SHA256) of the requestinstall identifierno expiry
While such a request is in flight: a hold with the time it was placedinstall identifieruntil the reply ends, at most 2 minutes
A mark that this install has used Daylit 2install identifierno expiry
The pairing of an attested device id with the install identifierattested device idno expiry
Whether a subscription was confirmed, whether it is a trial, and a marker of the billing periodinstall identifier13 hours
Counters of AI requests (per minute, per day) and of the model usage they caused (per day)attested device id2 minutes, about 25 hours
A request counter per month (Pro only)install identifierabout 37 days
Counters of device-token requestsIP address2 minutes, about 25 hours
A one-time challenge for the attestationnothing5 minutes
One log line per AI request: app, free or Pro, task name, whether an answer was counted, which processor and model served it, app versionnothingsee "Not verified"

About the fingerprint: it lets the gateway tell that a retry is the same request and not a new question. The text cannot be read back from it. Someone holding the gateway's secret key could use it to confirm an exact guess of a whole request, and nothing more. [27]

The exchange-rate route keeps nothing about who asked. [28]

There is no route that deletes the rows with "no expiry". See "Deleting".

What identifies an install

These are not your name or your e-mail address, and Daylit has neither. They are persistent identifiers of this install: requests from it can be counted as coming from the same install. They are not sent to the AI processors. [21]

Daylit does not read the advertising identifier. [6]

Consent, and withdrawing it

The log on your phone

You → What left your phone lists every AI request that reached a processor: when, which of the four tasks, what kinds of item it carried and how many of each, how many characters, and the processor that served it. The log holds counts, not text. It can be cleared; clearing it recalls nothing. [34]

Reminders, calendar, files, backup

No ads, no analytics, no account

The app contains no advertising kit, no analytics or crash-reporting kit, and no sign-in. The app itself connects to one host: Daylit's gateway. Two links on the Pro screen — this page and the store's terms — open in your browser. [6] Subscriptions are bought through the App Store or Google Play. [24]

Deleting

Children

Daylit is a general-audience app and is not directed at children.

Contact

Questions and requests: mustafasalimerek@gmail.com

If you are still using a version before 2.0

Versions before 2.0 showed rewarded video ads through Google AdMob. On iPhone they asked for permission to track first (App Tracking Transparency), and in the European Economic Area and the United Kingdom a consent form came first. AdMob received the device's advertising identifier where that was allowed, an approximate location derived from the IP address, and ad-interaction data. Version 2.0 contains no advertising and none of that software; updating the app ends it. This section will be removed once versions before 2.0 are no longer offered. [42]

Changes

When this text changes, the date at the top changes with it. If the list of processors changes, the app asks for consent again.

Not verified

These could not be checked in the app's or the gateway's code, so nothing above relies on them:

  1. What DeepInfra, OpenAI and Anthropic keep. How long a processor holds a request, whether it reviews requests for abuse, and whether it uses them to train models are set by its own terms and by Erek Studio's agreement with it, not by code. The earlier version of this page said processors do not train on the content; that sentence has been removed until it is confirmed against the current terms of all three.
  2. How long the gateway's log lines are kept. The code turns on Cloudflare's log storage and turns off its per-request records (address, URL, headers). The retention period is Cloudflare's setting for the account.
  3. That no error message can carry a fragment of text into a log line. Every log statement in the gateway was read and none prints request or reply text; error messages raised by the runtime itself were not traced exhaustively.
  4. What Cloudflare records at its own network edge, outside the gateway's code, and whether any network-level detail of your connection is visible to a processor. (The gateway's code forwards none.)
  5. That the deployed gateway is this code. The gateway was read on its branch v2 (commit a6f0e16); its contract file says it was not yet deployed on 11 October 2026. Deployment settings that are not in the repository — notably DEEPSEEK_BASE_URL, which could point the first processor at another host — cannot be seen from code. If that were ever set, the log on your phone would show the other host's name.
  6. iOS backup and Keychain behaviour are stated from what the code does not do (it sets no backup exclusion) and from the platform's documented behaviour; they were not tested on a device for this text.
  7. Apple's and Google's handling of attestation requests and purchases.

Statement → source

Paths without a prefix are in the app's repository. gateway: is erek-ai-backend on branch v2.

#StatementSource
1No account, no name or contact fieldpubspec.yaml (no sign-in package); lib/data/gateway/token_store.dart
2Logged items live in one database and one file store on the phone; projects are not part of any AI requestlib/data/db/database.dart; lib/data/db/tables.dart; lib/data/files/file_store.dart; lib/data/repositories/projects_repository.dart; lib/domain/ask/day_sources.dart (no project source)
3Four AI tasks, one doorlib/data/gateway/chat_request.dart; lib/data/gateway/ai_door.dart
4Consent is asked before the first send; Not now sends nothing and is not storedlib/data/gateway/ai_door.dart; lib/features/consent/consent_controller.dart; lib/features/consent/consent_sheet.dart
5The gateway stores no request or reply textgateway:src/routes/v2/chat.ts; gateway:src/lib/settle.ts; gateway:src/durable/units.ts
6No ad, analytics or crash kit; no advertising identifier; one host and two linkspubspec.yaml; pubspec.lock; lib/core/env.dart; lib/data/gateway/gateway_dio.dart; lib/features/paywall/paywall_screen.dart; android/app/src/main/AndroidManifest.xml; ios/Runner/PrivacyInfo.xcprivacy
7Answers are stored on the phonelib/data/db/tables.dart; lib/data/repositories/asks_repository.dart; lib/data/repositories/observations_repository.dart
8Search, totals, conversion and the empty-day reply are locallib/data/repositories/search_repository.dart; lib/domain/month_spend.dart; lib/data/rates_service.dart; lib/features/ask/ask_service.dart
9The profile is a local filelib/features/profile/profile_controller.dart; lib/domain/models/profile.dart
10Android backup and transfer excludedandroid/app/src/main/AndroidManifest.xml; android/app/src/main/res/xml/data_extraction_rules.xml
11iOS: no backup exclusion is setlib/data/db/database.dart; ios/Runner/AppDelegate.swift (not verified on a device)
12One door, HTTPS, consent first, log row afterlib/data/gateway/ai_door.dart; lib/core/env.dart
13Task, request id, version, token on each requestlib/data/gateway/chat_request.dart; lib/data/gateway/gateway_dio.dart; lib/data/gateway/gateway_client.dart
14What a plan request carrieslib/domain/prompt_builder.dart; lib/domain/models/profile.dart; lib/domain/agenda.dart; lib/domain/system_events.dart; lib/providers.dart
15What a day question carrieslib/domain/ask/day_request.dart; lib/domain/ask/day_sources.dart; lib/data/repositories/ask_day_repository.dart; lib/features/ask/ask_service.dart
16A spending observation carries totals only; the gateway rebuilds itlib/domain/spending_insight.dart; gateway:src/lib/spending.ts; gateway:src/routes/v2/chat.ts
17What a file Read carrieslib/domain/file_read.dart; lib/data/files/file_read_service.dart; lib/data/files/file_extractor.dart
18Device token: attestation, install id, receipt; 12 hours; at startlib/data/gateway/token_store.dart; lib/data/gateway/attestor.dart; lib/main.dart; gateway:src/routes/token.ts
19Balance requestlib/features/paywall/units_controller.dart; lib/main.dart; gateway:src/routes/v2/units.ts
20Rates request carries a date onlylib/data/gateway/rates_api.dart; lib/data/rates_service.dart
21The processor gets the task instructions and the text, no identifiergateway:src/providers/openai.ts; gateway:src/providers/anthropic.ts
22Routing order; the reply names who served itgateway:src/config.ts (APP_CONFIG.planner); gateway:src/providers/index.ts; lib/features/consent/consent_store.dart
23Cloudflare runs the gatewaygateway:wrangler.toml
24Attestation and receipt checks; store purchasesgateway:src/auth/appattest.ts; gateway:src/auth/playintegrity.ts; gateway:src/middleware/receipt.ts; lib/features/paywall/iap_service.dart
25Rate feed is fetched by the gatewaygateway:src/routes/v2/rates.ts
26Replies are streamed; a free day answer is held in memory to be judgedgateway:src/lib/settle.ts; gateway:src/lib/dayanswer.ts
27What is kept and for how longgateway:src/durable/units.ts; gateway:src/middleware/units.ts; gateway:src/middleware/migration.ts; gateway:src/routes/token.ts; gateway:src/middleware/ratelimit.ts; gateway:src/routes/challenge.ts; gateway:src/routes/v2/chat.ts
28The rates route keeps nothing about the callergateway:src/routes/v2/rates.ts
29The install identifier on each platformlib/data/gateway/token_store.dart
30The attested device idgateway:src/auth/appattest.ts; gateway:src/auth/playintegrity.ts; gateway:src/auth/gate.ts
31The token's contents and lifegateway:src/routes/token.ts; gateway:src/lib/jwt.ts
32Consent is stored with its processor listlib/features/consent/consent_store.dart
33Withdrawallib/features/consent/consent_controller.dart; lib/features/you/you_screen.dart
34The log: columns, when a row is written, clearinglib/data/db/tables.dart; lib/data/gateway/ai_door.dart; lib/features/ask/outbox_screen.dart
35Reminders are locallib/features/reminders/local_notifications_gateway.dart; lib/features/reminders/reminder_permission.dart
36Calendar: only read, asked on switch-on, not copied into events; kept inside a plan made from them (lib/features/history/history_controller.dart, the plan is stored whole)lib/data/syscal/calendar_source.dart; lib/data/syscal/plugin_calendar_source.dart; android/app/src/main/AndroidManifest.xml; ios/Runner/Info.plist; lib/domain/system_events.dart
37Files: picker, local copy, local textlib/data/files/file_picker_port.dart; lib/data/files/file_store.dart; lib/data/files/file_extractor.dart
38Backup: one unencrypted zip through the share sheetlib/data/backup/backup_format.dart; lib/data/backup/backup_codec.dart; lib/data/backup/backup_service.dart; lib/features/backup/backup_screen.dart
39What can be deleted in the applib/data/repositories/agenda_repository.dart; lib/data/repositories/expenses_repository.dart; lib/data/repositories/dates_repository.dart; lib/data/repositories/documents_repository.dart; lib/data/repositories/asks_repository.dart; lib/data/repositories/ask_day_repository.dart
40What removing the app removes, and what the Keychain keepslib/data/db/database.dart; lib/features/consent/consent_store.dart; lib/data/gateway/token_store.dart; lib/features/paywall/units_controller.dart; lib/features/paywall/iap_service.dart (Keychain behaviour not verified on a device)
41No deletion route; the install identifier is not showngateway:src/index.ts; lib/features/you/you_screen.dart
42Versions before 2.0: rewarded AdMob ads, the tracking prompt on iPhone, the consent formmain:pubspec.yaml (google_mobile_ads 9.0.0, version 1.0.4); main:lib/monetize/ads_service.dart; main:lib/monetize/ad_consent.dart; main:ios/Runner/Info.plist (NSUserTrackingUsageDescription)
43The rating prompt: two dates on the phone, the store's own sheet, at most once in 120 dayslib/features/rating/rating_moment.dart; lib/features/rating/rating_record.dart; lib/features/rating/review_prompt.dart