Every event Cal 3D records
All 39 of them, what travels with each one, and what never leaves your phone. This page is generated from the app’s own source — it cannot drift from what the app actually does.
On this page
The short version
Cal 3D records 39 things, and this page lists every single one of them. Each is a short name plus, at most, a handful of labels. There is no number from your diary in any of them, no food name, no photo, no weight, no email address, no payment detail.
Nothing on this page is transmitted unless you agreed the first time the app opened. You can take that back at any time under Profile → Manage Personalization Preferences, and on that same screen What you share switches off individual groups. Both take effect immediately — not at the next app start.
The five switches
Every event belongs to exactly one of 5 groups, and every group has its own switch in the app. Turning one off stops those events and leaves the rest running. One event sits outside the five, and the reason is at the bottom of this page.
Why groups at all: recital 32 GDPR speaks of consent “for specific purposes”. A single switch for six different purposes is exactly what that does not mean.
Every event, in full
Getting started
What steps of the setup you finish, and where you stop.
| Event | What happened | What travels with it | Why it is measured |
|---|---|---|---|
home_reached | What happenedThe home screen opened for the first time | What travels with itnothing beyond the name | Why it is measuredThe last step of the funnel — everything before it can be fixed |
onboarding_completed | What happenedThe setup finished | What travels with itnothing beyond the name | Why it is measuredThe share of people who make it into the app |
onboarding_step | What happenedYou reached a step of the setup | What travels with itbeat — which step of the setup (a number, not an answer) | Why it is measuredShows where people stop before they ever see the app |
sign_up | What happenedAn account was created | What travels with itmethod — which way it was done (camera, barcode, voice, search, manual, saved meal) | Why it is measuredWhich sign-in method people pick |
tutorial_begin | What happenedThe walkthrough started | What travels with itnothing beyond the name | Why it is measuredTells us the walkthrough is reached at all |
tutorial_complete | What happenedThe walkthrough finished | What travels with itnothing beyond the name | Why it is measuredHow many people get through it |
Logging food
Which way a meal gets logged, and whether it worked.
| Event | What happened | What travels with it | Why it is measured |
|---|---|---|---|
barcode_not_found | What happenedA barcode was not in the database | What travels with itnothing beyond the name | Why it is measuredWhich gaps the food database has |
barcode_scanned | What happenedA barcode was scanned | What travels with itnothing beyond the name | Why it is measuredHow much the barcode path carries |
first_meal_logged | What happenedThe first meal ever was logged | What travels with itnothing beyond the name | Why it is measuredThe moment the app becomes useful; counted once per install |
food_search_empty | What happenedA food search found nothing | What travels with itnothing beyond the name | Why it is measuredWhere the database is thin |
food_search_performed | What happenedA food search ran | What travels with itnothing beyond the name | Why it is measuredHow heavily the search is used |
manual_food_created | What happenedA food was entered by hand | What travels with itnothing beyond the name | Why it is measuredHow often the other five ways fall short |
meal_created | What happenedA meal was saved for reuse | What travels with itnothing beyond the name | Why it is measuredWhether saved meals are worth keeping |
meal_logged | What happenedA meal was logged | What travels with itmethod — which way it was done (camera, barcode, voice, search, manual, saved meal) | Why it is measuredWhich of the six ways people actually use |
scan_failed | What happenedA 3D scan failed | What travels with itreason — why the scan failed (no plate found, too dark, timed out) | Why it is measuredThe most important quality number in the app |
scan_started | What happenedA 3D scan started | What travels with itnothing beyond the name | Why it is measuredHow often the scanner is reached for |
scan_succeeded | What happenedA 3D scan worked | What travels with itnothing beyond the name | Why it is measuredThe success rate of the feature the app is built on |
voice_log_started | What happenedVoice logging started | What travels with itnothing beyond the name | Why it is measuredWhether the voice path is found |
voice_log_succeeded | What happenedVoice logging worked | What travels with itnothing beyond the name | Why it is measuredThe success rate of the voice path |
Using the app
Which screens and features get opened.
| Event | What happened | What travels with it | Why it is measured |
|---|---|---|---|
day_completed | What happenedA day was completed | What travels with itnothing beyond the name | Why it is measuredWhether people finish days or drop out mid-day |
progress_photo_taken | What happenedA progress photo was taken | What travels with itnothing beyond the name | Why it is measuredWhether the feature is used — never the photo |
referral_redeemed | What happenedA referral code was redeemed | What travels with itnothing beyond the name | Why it is measuredWhether the referral programme works at all |
reminder_enabled | What happenedA reminder was switched on | What travels with itnothing beyond the name | Why it is measuredWhether reminders are wanted |
review_prompted | What happenedThe review prompt was shown | What travels with itmoment — when the review was asked for; outcome — whether the prompt was shown or suppressed by the system | Why it is measuredWhether it is asked at a decent moment |
share | What happenedSomething was shared | What travels with itmethod — which way it was done (camera, barcode, voice, search, manual, saved meal); content_type — what kind of thing was shared | Why it is measuredWhat people find worth showing |
streak_gained | What happenedA streak grew | What travels with itnothing beyond the name | Why it is measuredWhether streaks carry people through |
streak_lost | What happenedA streak broke | What travels with itnothing beyond the name | Why it is measuredWhen people fall off, and after how long |
unlock_achievement | What happenedAn award was unlocked | What travels with itachievement_id — which award | Why it is measuredWhich awards are reachable and which are not |
weight_logged | What happenedA weight was entered | What travels with itnothing beyond the name | Why it is measuredHow regularly weight gets logged — never the number |
widget_added | What happenedA home-screen widget was added | What travels with itnothing beyond the name | Why it is measuredCounted once per install |
Subscription
Which plan screens you see and whether a purchase went through.
| Event | What happened | What travels with it | Why it is measured |
|---|---|---|---|
offer_shown | What happenedAn offer was shown | What travels with itnothing beyond the name | Why it is measuredWhether offers reach anyone |
paywall_dismissed | What happenedA subscription screen was closed | What travels with itplacement — which screen the subscription page was opened from | Why it is measuredWhere people turn back |
paywall_viewed | What happenedA subscription screen was shown | What travels with itplacement — which screen the subscription page was opened from | Why it is measuredWhich entry points lead there |
purchase_completed | What happenedA purchase went through | What travels with itproduct_id — which plan (monthly, yearly) — never a price, never a payment detail | Why it is measuredWhether the payment path holds |
purchase_initiated | What happenedA purchase was started | What travels with itproduct_id — which plan (monthly, yearly) — never a price, never a payment detail | Why it is measuredHow many starts end in a purchase |
purchase_restored | What happenedA purchase was restored | What travels with itnothing beyond the name | Why it is measuredWhether restoring works after a device change |
Errors
When something in the app fails, so it can be fixed.
| Event | What happened | What travels with it | Why it is measured |
|---|---|---|---|
ai_failed | What happenedAn AI service failed | What travels with itservice — which AI service failed | Why it is measuredWhich service fails, and how often |
sync_failed | What happenedSyncing failed | What travels with itstage — which step of the sync broke | Why it is measuredWhere the sync breaks, so it can be fixed |
Outside the five switches
One event, and it is the denominator: every rate on this page divides by the number of app opens. It is tied to the main consent switch alone, never to one of the five.
| Event | What happened | What travels with it | Why it is measured |
|---|---|---|---|
app_opened | What happenedThe app was opened, once per day | What travels with itnothing beyond the name | Why it is measuredThe denominator of every rate on this page — see the note below |
What is never measured
This list is the point of the page. Everything below stays on your phone, or goes only where you send it yourself — none of it is ever attached to an event:
- What you ate. No food name, no meal, no recipe, no portion.
- Your numbers. No calories, no macros, no weight, no goal, no streak length.
- Your photos. Neither the meal photos nor the progress photos.
- Who you are. No name, no email address, no date of birth, no height.
- What you pay. No card, no price, no billing address.
- Where you are. Cal 3D asks for no location permission at all.
- Your address book, your calendar, your other apps.
The complete picture of what leaves your phone, and when, is in the privacy policy.
The one event outside the five switches
app_opened fires at most once per calendar day and belongs to no group. That is deliberate, and it is worth explaining rather than hiding.
It is the denominator. “How many people come back in week two”, “how many finish the setup”, “how often does a scan fail” — every one of those divides by the number of app opens. If a single switch could remove it, that switch would not just remove you from one statistic; it would quietly break every other rate as well, and nobody would notice, because “no events” looks exactly like “nobody uses the app”.
It still depends entirely on the main consent switch. Turn that off andapp_opened stops with everything else.
Where it goes and how long it stays
Events go to Google Firebase Analytics. They are collected on servers in the EU and then processed on Google’s Analytics infrastructure, which includes the United States; the legal basis for that transfer, and the retention period, are set out in the privacy policy.
Crash reports are a separate thing with a separate switch, and they carry a stack trace rather than any of the events on this page.