Last updated:

Privacy Policy

This policy explains how the Calorie AI app (iOS and Android) and this website, calorie-ai.app, handle personal data, with the information the EU General Data Protection Regulation (GDPR) asks for.

1. Who is responsible

The controller for the app and the website is:

Josef Wilhelm
Wolfgang-Schmälzl-Gasse 12/20
1020 Wien
Austria
Email: me@josefwilhelm.com

For any question about your data or to use your rights, write to this address.

2. The short version

  • The app has no sign-up. It creates an anonymous account for you; we never ask for your name, email or phone number.
  • We store your daily calorie goal and the meals you log, so you can see them in the app.
  • To estimate a meal, what you said, typed or photographed is sent to OpenAI. Our server does not store your photos or voice recordings.
  • The app has no ads, no tracking and no analytics.
  • The website counts visits with Umami and Vercel Web Analytics, both without cookies.
  • You can delete everything at any time in the app under Settings → “Delete my data”.

3. The website

Hosting

The website is hosted by Vercel. When you open a page, your browser sends technical data that every web server receives: your IP address, the page requested, date and time, the referring page, and your browser and operating system. Vercel processes this data to deliver the website and to keep it secure.

Legal basis: Art. 6(1)(f) GDPR, our legitimate interest in running a secure and working website.

The fonts on this site are served from our own domain. Your browser does not load them from Google or any other font service.

Umami (website statistics)

We count visits with Umami, an open-source statistics tool that we run ourselves on our own server at Hostinger in Frankfurt, Germany. Its script and the data it sends go through this website’s domain to that server. Umami sets no cookies and stores nothing on your device. For each visit it records the page, the referring site, your browser, operating system, device type, screen size and language, and an approximate location derived from your IP address, under a pseudonymous session ID. It uses your IP address only briefly for this and does not store it. We look at this data only as aggregated statistics and do not use it to identify anyone.

Legal basis: Art. 6(1)(f) GDPR, our legitimate interest in understanding which pages are useful. You can object at any time (see section 10).

Vercel Web Analytics

We also use Vercel Web Analytics, which records page views and aggregated information such as the referring page, country, browser, operating system and device type. It sets no cookies.

Legal basis: Art. 6(1)(f) GDPR, our legitimate interest in understanding how the website is used. You can object at any time (see section 10).

Links to other sites

The website links to the App Store, Google Play, X, LinkedIn and josefwilhelm.com. Nothing is sent to these services until you click a link. Once you are on their sites, their own privacy policies apply.

The website has no contact form, newsletter or user accounts.

4. The app

Your account

When you first open the app, it creates an anonymous account with Supabase. The account consists of a random user ID and a login session stored on your phone. We do not ask for your name, email address, phone number or any login with Apple or Google.

Legal basis: Art. 6(1)(b) GDPR, to provide the app you chose to use.

Your goal and settings

We store the goal you choose (lose, maintain or build), your daily calorie target, the tone Bao uses with you (cheeky or gentle) and when you finished onboarding. The app does not ask for your weight, height, age or sex.

Legal basis: Art. 6(1)(b) GDPR.

Your meal log

For every meal you log, we store: the date and time, the meal (breakfast, lunch, snack, dinner or late snack), whether you logged it by voice, text or photo, the text of what you said or typed, a note you added, Bao’s comment, and each food with its quantity, calories, protein, carbohydrates and fat. You can edit or delete single meals and foods in the app at any time.

Legal basis: Art. 6(1)(b) GDPR. Please also read section 5 on health data.

How a meal gets estimated

When you log a meal, the app sends what you said (as text), what you typed, or your photo to our server at Supabase. The server passes it to OpenAI, which estimates the foods, calories and macros and writes Bao’s comment. Together with it, the server sends your app language, Bao’s tone and which meal you are logging. It does not send your user ID, your goal or your earlier meals to OpenAI.

Your meal is not saved while the estimate is made. You see the result first, and only the meal you confirm with “Log” is stored. Our server does not store your photos or voice recordings: they are used for the estimate and then discarded by our server. OpenAI processes the data on our behalf and may keep it for a limited time under its own API data terms.

Our server keeps technical logs of these requests: the time, your user ID, the type of input, its size, how long it took and any error. The logs do not record what you said, typed or photographed. If the AI service returns an error, its error message is logged and can in rare cases quote part of the request or of the AI’s answer.

Legal basis: Art. 6(1)(b) GDPR for the estimate; Art. 6(1)(f) GDPR, our legitimate interest in running the service securely and fixing errors, for the logs.

Camera, microphone, photos and speech recognition

The app asks for your permission before it uses the camera, the microphone or speech recognition. It uses them only while you take a meal photo or hold the button to speak. You can withdraw a permission at any time in your phone’s settings; the other ways of logging keep working. To pick an existing photo, the app opens your phone’s photo picker, which hands the app only the photo you choose.

Voice logging uses your phone’s built-in speech recognition (Apple’s on iOS; on Android the speech service of Google or your device maker). Depending on your device and its settings, the audio is processed on the phone or sent to Apple or Google to be recognised, under their own privacy terms. The app receives only the text. If speech recognition is not available or fails, the app records what you say instead and sends the recording to our server, which has OpenAI transcribe it.

Legal basis: Art. 6(1)(a) GDPR, your consent given in the permission prompt, for access to the camera, microphone and speech recognition; Art. 6(1)(b) GDPR for processing what you record or pick.

Usage limits

To keep the free tier fair and the costs under control, we count how often you use the AI estimate: for each use we store your user ID, the date and the time. We also note on which days you logged a meal, and cache whether you have Calorie AI Pro.

Legal basis: Art. 6(1)(b) GDPR (the limits are part of the free and Pro plans) and Art. 6(1)(f) GDPR, our legitimate interest in preventing abuse.

Calorie AI Pro

Subscriptions are bought and paid through the App Store or Google Play. Apple or Google handle the payment; we never see your payment details. We use RevenueCat to manage subscriptions. The app identifies you to RevenueCat with your anonymous user ID, and RevenueCat receives the purchase and subscription information from Apple or Google. Our server asks RevenueCat whether your user ID has an active subscription.

Legal basis: Art. 6(1)(b) GDPR.

Data stored on your phone

The app stores your login session and a note that you finished onboarding on your phone. When you take or pick a meal photo, the app keeps a resized copy in its temporary folder on your phone; your phone’s system clears that folder over time. If the app has to record your voice (see above), the recording also sits in the temporary folder. The app deletes it once the meal is estimated or you cancel; if an estimate fails, it keeps the recording so you can retry, and if the app is closed before that, your phone’s system clears it later.

What the app does not do

The app has no advertising, no analytics or tracking tools, no crash reporting service and no push notifications. It does not track you across other apps or websites.

5. Health data

Your meal log and your goal can reveal information about your health and eating habits. Such information can count as health data under Art. 9 GDPR, which the law protects specially. We use it only to show you your log and your progress in the app. We do not use it for advertising, we do not sell it, and we share it only with the service providers named in this policy, as far as they need it to provide the app.

Where your meal log counts as health data, Art. 9(2)(a) GDPR requires your explicit consent to process it.

6. Service providers and recipients

We use these providers. They process data on our behalf and only on our instructions, except Apple and Google as app stores and speech recognition services, where their own privacy terms also apply.

ProviderWhat forLocation
SupabaseApp backend: account, database and the server functions that estimate meals and delete accountsLocation: Data stored in Frankfurt, Germany (EU); Supabase is a US company
OpenAITranscribes voice recordings and estimates calories and macros from your text, transcript or photoLocation: USA
RevenueCatManages Calorie AI Pro subscriptionsLocation: USA
VercelHosts the website; Vercel Web AnalyticsLocation: USA
HostingerHosts our own server that runs Umami (website statistics)Location: Frankfurt, Germany (EU)

In addition, Apple and Google receive data as operators of the App Store and Google Play (downloads, purchases, payments) and, on your device, of the speech recognition described above.

7. Transfers outside the EU

Some providers above are based in the USA, and data can reach them there. For providers certified under the EU-US Data Privacy Framework, the transfer relies on the European Commission’s adequacy decision for it. For the others, it relies on the European Commission’s Standard Contractual Clauses (Art. 46(2)(c) GDPR). Our app database itself is stored in the EU, in Frankfurt, Germany.

8. How long we keep your data

  • Account, goal, settings and meal log: until you delete them in the app or delete your account. If you uninstall the app without deleting your data first, your anonymous account stays on our server, and you can no longer reach it from a new installation. Please use “Delete my data” before you uninstall if you want it gone.
  • Photos and voice recordings: not stored on our server. Temporary copies on your phone are described in section 4.
  • Usage counts for the AI estimate: entries older than three days are deleted the next time you use the estimate, and all of them when you delete your account. The days on which you logged a meal and the cached Pro status are kept until you delete your account.
  • Server logs: kept by our providers for a limited period for operation and security, then deleted.
  • Subscription records: kept by RevenueCat, Apple and Google as long as needed for the subscription and as required by law, for example tax law.
  • Website statistics: the Umami records described in section 3 are kept on our own server; they contain no IP addresses. Vercel keeps its Web Analytics data under its own retention rules.

9. Deleting your data

In the app, open Settings (from the Bao tab) and tap “Delete my data”. This deletes your account and, with it, your goal, your settings, every meal you logged and your usage counts from our database, permanently and right away. Copies can remain in our provider’s backups for a short time until they are overwritten. The app then starts over with a new, empty anonymous account.

Deleting your data in the app does not cancel a subscription. Cancel it in your App Store or Google Play account. The purchase records RevenueCat holds for your user ID are not deleted automatically; write to me@josefwilhelm.com if you want them deleted.

10. Your rights

Under the GDPR you have the right to:

  • access the data we hold about you (Art. 15);
  • have incorrect data corrected (Art. 16);
  • have your data deleted (Art. 17);
  • restrict how we process it (Art. 18);
  • receive your data in a common, machine-readable format (Art. 20);
  • object to processing based on our legitimate interest (Art. 21);
  • withdraw a consent at any time, without affecting the processing that took place before (Art. 7(3)).

Write to me@josefwilhelm.com. Because the app has no login with your name or email, an email alone does not tell us which data is yours. We will work out with you how to identify your account. You can always delete everything yourself with “Delete my data”.

You also have the right to lodge a complaint with a data protection supervisory authority. In Austria this is the Österreichische Datenschutzbehörde, Barichgasse 40–42, 1030 Wien, www.dsb.gv.at. You can also contact the authority in the EU country where you live or work.

11. Children

Calorie AI is not directed at children under 16, and we do not knowingly process their data. If you believe a child has used the app, write to me@josefwilhelm.com and we will delete the data.

12. Changes to this policy

We update this policy when the app or the website changes how it handles data. The date at the top shows when it was last changed.