| Check | Result | Evidence |
|---|---|---|
| Daily signups reconcile with a direct head-count | PASS | table sums to 311 · direct count 311 (14d) |
| Setup funnel is monotonic | PASS | durable 382 >= started 346 >= completed 243 |
| Retention is a subset of activation | PASS | ever logged 55 >= logged 2+ days 25 |
| Snapshot agrees with live durable count | PASS | snapshot 372 <= live 382 |
| Counter steps never exceed their parent step | FAIL | google_return(15) > google_start(0) [30d] · setup_step_4(8) > setup_step_3(6) [today] · setup_step_5(10) > setup_step_4(8) [today] |
| All platform labels are known to this page | PASS | 18 labels mapped |
| New durable signups all carry a signup_platform | FAIL | since 2026-08-27: 100 / 243 stamped |
| Signups today: how many completed setup | PASS | 15 signups today, 13 finished setup (86.7%) |
| Rendered counter totals equal the table | PASS | table 172833 · rendered 172833 (30d) |
| Dim lenses never exceed their canonical step | PASS | 7 families within canonical rows (7d) |
| Verify-fail reasons are a subset of verify_fail | PASS | reasons 0 <= generic 0 (7d) |
| v2.60.0 counter pairs never exceed their parent | PASS | 5 new pairs hold (7d) |
| All dim values are known buckets | FAIL | unmapped: fam:sleep, fam:fasting, fam:steps |
| Every rendered dim cell meets the k≥5 floor | PASS | 77 dim cells folded to k≥5 (7d) |
tempolife with an independent query or asserts a funnel invariant. A FAIL means the
number above it is wrong — investigate before acting on this page.| Stage | Count | Share of max | % of parent |
|---|---|---|---|
| Landing page seen | 2862 | · | |
| Tapped a landing CTA | 10 | 0.3% | |
| Saw the sign-in screen | 2703 | — | |
| Email signup submitted | 28 | 1.0% | |
| Verification code sent | 11 | 39.3% | |
| Email verified — account OK | 6 | 54.5% | |
| Google sign-in started | 0 | 0.0% | |
| Google sign-in OK | 2 | — | |
| Setup screen seen | 170 | — | |
| Setup completed | 21 | 12.4% | |
| First meal logged | 5 | 23.8% |
| Drop | Count | Loss | What the reason counters say (7d) |
|---|---|---|---|
| Landing → CTA tap | 10 / 2862 | −2852 | bounced within 5s: 82 · scrolled past 25%: 139 |
| Auth → email submitted | 28 / 2703 | −2675 | login tab shown (returning users): 437 · switched to login: 7 |
| Setup seen → completed | 21 / 170 | −149 | validation errors: 182 · slow steps (30s+): 86 · went back a step: 40 |
| Submitted → code sent | 11 / 28 | −17 | email taken (returning user!): 8 · invalid fields: 8 |
| Code sent → verified | 6 / 11 | −5 | resends requested: 5 |
| Why codes fail | Count | Time from send to verify | Count | Deliverability | Count |
|---|---|---|---|---|---|
| Wrong code | 0 | < 30 s | 3 | Resends requested | 5 |
| Expired / no code | 0 | 30 s – 2 min | 3 | Retries after fail | 14 |
| Too many attempts | 0 | 2 – 10 min | 0 | ||
| any failure | 0 | 10 min + (spam rescue?) | 0 |
other (k-anonymity floor).| Provider class | Code sent | Verified | Sent → verified |
|---|---|---|---|
| Gmail | 7 | 6 | 85.7% |
| other | 4 | 0 | 0.0% |
| Which tab greeted them | Count | Tab switches | Count | First field focused | Count | Dwell before leaving | Count |
|---|---|---|---|---|---|---|---|
| Register tab | 20 | → login (the returning-user signal) | 7 | Email (register) | 1 | 0 – 5 s (bounce) | 53 |
| Login tab | 437 | → register | 43 | Name | 16 | 5 – 30 s | 91 |
| Password | 1 | 30 s + | 117 | ||||
| Login form | 72 |
auth_tab_switch_login share means people arrive believing they already have
an account — a login/register clarity problem, not an acquisition problem.| Scroll depth | Count | CTA decision speed | Count | Referrer class | Count |
|---|---|---|---|---|---|
| 25% | 139 | Tapped within 3 s | 0 | Direct | 2368 |
| 50% | 115 | 3 – 10 s | 7 | Google search | 59 |
| 75% | 106 | 10 s + (readers) | 10 | Google Ads click | 4 |
| 100% (bottom) | 96 | Left within 5 s (bounce) | 82 | Social | 0 |
| Other | 431 |
| Language | Landing views | Auth screens | Landing → auth |
|---|---|---|---|
| English | 2687 | 112 | 4.2% |
| Estonian | 81 | 3 | 3.7% |
| Finnish | 49 | 18 | 36.7% |
| Russian | 45 | 8 | 17.8% |
| Hour (Europe/Tallinn) | Landing views | Auth screens | Activity |
|---|---|---|---|
| 03:00 | 70 | 33 | |
| 04:00 | 84 | 23 | |
| 05:00 | 68 | 27 | |
| 06:00 | 69 | 31 | |
| 07:00 | 64 | 53 | |
| 08:00 | 67 | 14 | |
| 09:00 | 99 | 70 | |
| 10:00 | 84 | 48 | |
| 11:00 | 128 | 66 | |
| 12:00 | 179 | 817 | |
| 13:00 | 159 | 116 | |
| 14:00 | 165 | 120 | |
| 15:00 | 126 | 170 | |
| 16:00 | 143 | 120 | |
| 17:00 | 138 | 92 | |
| 18:00 | 141 | 117 | |
| 19:00 | 72 | 56 | |
| 20:00 | 95 | 62 | |
| 21:00 | 148 | 138 | |
| 22:00 | 121 | 109 | |
| 23:00 | 170 | 190 | |
| 00:00 | 133 | 124 | |
| 01:00 | 106 | 68 | |
| 02:00 | 233 | 39 |
auth_view is
non-zero, people are seeing the screen and not tapping the button — a different problem from the OAuth wall.google_return is the decisive counter:
it can only increment when the browser survives the round trip to accounts.google.com.android_app + android_wv. The largest drop between two
numbers is the thing to fix next.android_app, and
app_boot_anon only fires via auth_check.php/index.php, so an app that
opens straight onto auth.php is never counted as a boot. Trust this ratio from
2026-08-26 onward only.| Platform group | Events | Share | % | Raw labels |
|---|---|---|---|---|
| Android — our app | 389 | 1.1% | android_app 389 | |
| Android — WebView (?) | 17 | 0.0% | android_wv 17 | |
| Android — browser | 586 | 1.7% | android_web 582 · android_tablet 4 | |
| iOS | 52 | 0.2% | ios_web 40 · ios_pwa 10 · ios_inapp 2 | |
| Desktop | 3233 | 9.5% | desktop_web 3233 | |
| Bots | 29814 | 87.5% | bot 29814 |
| Platform group | Events | Share | % | Raw labels |
|---|---|---|---|---|
| Android — our app | 3920 | 2.4% | android_app 3920 | |
| Android — WebView (?) | 201 | 0.1% | android_wv 201 | |
| Android — PWA | 1 | 0.0% | android_pwa 1 | |
| Android — browser | 7400 | 4.5% | android_web 7289 · android_tablet 111 | |
| Android — in-app | 5 | 0.0% | android_inapp 5 | |
| iOS | 753 | 0.5% | ios_web 547 · ios_pwa 180 · ios_inapp 21 · ipad_web 5 | |
| Desktop | 24924 | 15.1% | desktop_web 24911 · desktop_pwa 13 | |
| Bots | 127985 | 77.5% | bot 127985 | |
| Unclassified | 23 | 0.0% | other 23 |
| Platform group | Events | Share | % | Raw labels |
|---|---|---|---|---|
| Android — our app | 8305 | 4.8% | android_app 8305 | |
| Android — WebView (?) | 424 | 0.2% | android_wv 424 | |
| Android — PWA | 37 | 0.0% | android_pwa 37 | |
| Android — browser | 8173 | 4.7% | android_web 8044 · android_tablet 129 | |
| Android — in-app | 19 | 0.0% | android_inapp 19 | |
| iOS | 1344 | 0.8% | ios_web 1044 · ios_pwa 180 · ios_inapp 112 · ipad_web 8 | |
| Desktop | 25980 | 15.0% | desktop_web 25967 · desktop_pwa 13 | |
| In-app (other) | 2 | 0.0% | inapp 2 | |
| Legacy “web” | 137 | 0.1% | web 137 | |
| Bots | 128386 | 74.3% | bot 128386 | |
| Unclassified | 26 | 0.0% | other 26 |
android_app is our shell positively identified by its
package name. android_wv is an Android WebView we could not attribute — before v2.58.0 every WebView,
including Facebook's and Instagram's, was reported as our app, so any history above is an upper bound rather
than an install count. web and inapp are the old coarse labels and only appear on rows
counted before v2.58.0.| CTA | Taps (7d) | Share | % |
|---|---|---|---|
| Play Store | 10 | 100.0% | |
| Continue with Google | 0 | 0.0% | |
| Sign up (generic) | 0 | 0.0% | |
| Email link | 0 | 0.0% |
| Step | Arrivals | Retention from prev | % |
|---|---|---|---|
| Step 1 | 170 | · | |
| Step 2 (gender) | 218 | — | |
| Step 2b (body) | 193 | 88.5% | |
| Step 3 | 120 | 62.2% | |
| Step 4 | 83 | 69.2% | |
| Step 5 | 69 | 83.1% | |
| Step 6 | 65 | 94.2% |
| Step friction (7d) | 1 | 2 | 2b | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| Validation errors shown | 157 | 3 | 22 | · | · | · | · |
| 30 s+ dwell before advancing | 77 | · | 5 | 2 | 2 | · | · |
| Reason | Count | Share of submits | % |
|---|---|---|---|
| Email already registered (returning user!) | 8 | 28.6% | |
| Password too short | 0 | 0.0% | |
| Invalid name / email / country / alias | 8 | 28.6% |
| Step | All | android_app | android_tablet | android_web | android_wv | bot | desktop_web | ios_inapp | ios_pwa | ios_web |
|---|---|---|---|---|---|---|---|---|---|---|
| Landing page seen | 214 | · | · | 4 | 1 | 36 | 150 | 1 | · | 22 |
| APP opened — no session | 505 | 43 | 2 | 2 | 7 | 27 | 419 | · | · | 5 |
| Sign-in / register screen seen | 926 | 43 | 2 | 2 | 9 | 55 | 806 | · | · | 9 |
| Email registration submitted | 1 | 1 | · | · | · | · | · | · | · | · |
| Verification code sent | 1 | 1 | · | · | · | · | · | · | · | · |
| VERIFIED — account usable | 1 | 1 | · | · | · | · | · | · | · | · |
| Existing user tried to log in | 14 | 14 | · | · | · | · | · | · | · | · |
| …wrong credentials | 7 | 7 | · | · | · | · | · | · | · | · |
| APP opened — signed in | 67 | 57 | · | · | · | · | · | · | 10 | · |
| Setup screen seen (step 1 arrival) | 16 | 16 | · | · | · | · | · | · | · | · |
| Reached setup step 2 (gender) | 21 | 21 | · | · | · | · | · | · | · | · |
| Reached step 2b (body measurements) | 18 | 18 | · | · | · | · | · | · | · | · |
| Reached setup step 3 | 6 | 6 | · | · | · | · | · | · | · | · |
| Reached setup step 4 | 8 | 8 | · | · | · | · | · | · | · | · |
| Reached setup step 5 | 10 | 10 | · | · | · | · | · | · | · | · |
| Reached setup step 6 | 8 | 8 | · | · | · | · | · | · | · | · |
| FIRST MEAL LOGGED | 2 | 2 | · | · | · | · | · | · | · | · |
| Step | All | android_app | android_inapp | android_pwa | android_tablet | android_web | android_wv | bot | desktop_pwa | desktop_web | ios_inapp | ios_pwa | ios_web | ipad_web | other |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Landing page seen | 2862 | 2 | · | · | 4 | 114 | 7 | 962 | 1 | 1467 | 6 | 3 | 293 | 2 | 1 |
| APP opened — no session | 2053 | 326 | 1 | · | 53 | 414 | 82 | 213 | · | 890 | 4 | 7 | 52 | 1 | 10 |
| Sign-in / register screen seen | 2703 | 329 | 1 | · | 53 | 432 | 87 | 379 | · | 1317 | 4 | 11 | 79 | 1 | 10 |
| Browser came BACK from Google | 10 | · | · | · | · | · | · | · | · | 3 | · | 6 | 1 | · | · |
| Google sign-in succeeded | 2 | · | · | · | · | · | · | · | · | · | · | 2 | · | · | · |
| Email registration submitted | 28 | 25 | · | · | · | 1 | · | · | · | 2 | · | · | · | · | · |
| Verification code sent | 11 | 8 | · | · | · | 1 | · | · | · | 2 | · | · | · | · | · |
| VERIFIED — account usable | 6 | 6 | · | · | · | · | · | · | · | · | · | · | · | · | · |
| Existing user tried to log in | 94 | 76 | · | · | · | 13 | · | · | · | 5 | · | · | · | · | · |
| …wrong credentials | 23 | 21 | · | · | · | · | · | · | · | 2 | · | · | · | · | · |
| …logged in | 15 | · | · | · | · | 13 | · | · | · | 2 | · | · | · | · | · |
| APP opened — signed in | 1169 | 964 | · | 1 | · | 41 | · | · | · | 9 | · | 117 | 37 | · | · |
| Setup screen seen (step 1 arrival) | 170 | 139 | · | · | · | 2 | 20 | · | · | 6 | · | 1 | 2 | · | · |
| Reached setup step 2 (gender) | 218 | 217 | · | · | · | · | · | · | · | · | · | 1 | · | · | · |
| Reached step 2b (body measurements) | 193 | 192 | · | · | · | · | · | · | · | · | · | 1 | · | · | · |
| Reached setup step 3 | 120 | 120 | · | · | · | · | · | · | · | · | · | · | · | · | · |
| Reached setup step 4 | 83 | 83 | · | · | · | · | · | · | · | · | · | · | · | · | · |
| Reached setup step 5 | 69 | 69 | · | · | · | · | · | · | · | · | · | · | · | · | · |
| Reached setup step 6 | 65 | 65 | · | · | · | · | · | · | · | · | · | · | · | · | · |
| Setup completed | 21 | 20 | · | · | · | · | · | · | · | · | · | 1 | · | · | · |
| FIRST MEAL LOGGED | 5 | 5 | · | · | · | · | · | · | · | · | · | · | · | · | · |
| Step | All | android_app | android_inapp | android_pwa | android_tablet | android_web | android_wv | bot | desktop_pwa | desktop_web | inapp | ios_inapp | ios_pwa | ios_web | ipad_web | other | web |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Landing page seen | 3668 | 36 | 7 | · | 12 | 195 | 25 | 1103 | 1 | 1876 | · | 6 | 3 | 396 | 3 | 2 | 3 |
| APP opened — no session | 3368 | 955 | 1 | · | 58 | 583 | 180 | 285 | · | 1112 | · | 28 | 7 | 135 | 2 | 11 | 11 |
| Sign-in / register screen seen | 4261 | 983 | 2 | 1 | 58 | 626 | 188 | 487 | · | 1586 | · | 29 | 11 | 174 | 2 | 11 | 103 |
| Browser came BACK from Google | 15 | · | · | · | · | 3 | · | · | · | 3 | · | · | 6 | 3 | · | · | · |
| Google sign-in succeeded | 5 | · | · | · | · | 2 | · | · | · | · | · | · | 2 | 1 | · | · | · |
| Email registration submitted | 70 | 55 | · | · | · | 4 | · | · | · | 8 | · | 1 | · | 1 | · | · | 1 |
| Verification code sent | 37 | 25 | · | · | · | 4 | · | · | · | 5 | · | 1 | · | 1 | · | · | 1 |
| …wrong code | 8 | 8 | · | · | · | · | · | · | · | · | · | · | · | · | · | · | · |
| VERIFIED — account usable | 23 | 18 | · | · | · | 1 | · | · | · | 2 | · | 1 | · | 1 | · | · | · |
| Existing user tried to log in | 261 | 197 | · | · | · | 31 | · | 16 | · | 6 | · | · | · | 11 | · | · | · |
| …wrong credentials | 91 | 76 | · | · | · | 1 | · | · | · | 3 | · | · | · | 11 | · | · | · |
| …logged in | 49 | 1 | · | · | · | 30 | · | 16 | · | 2 | · | · | · | · | · | · | · |
| APP opened — signed in | 1876 | 1414 | · | 36 | · | 101 | 6 | 20 | · | 76 | 2 | 2 | 117 | 84 | · | · | 18 |
| Setup screen seen (step 1 arrival) | 318 | 271 | · | · | · | 5 | 20 | 6 | · | 6 | · | 1 | 1 | 8 | · | · | · |
| Reached setup step 2 (gender) | 344 | 333 | · | · | · | 3 | · | · | · | 1 | · | 1 | 1 | 5 | · | · | · |
| Reached step 2b (body measurements) | 318 | 309 | · | · | · | 3 | · | · | · | · | · | 1 | 1 | 4 | · | · | · |
| Reached setup step 3 | 209 | 200 | · | · | · | 2 | · | · | · | 1 | · | 1 | · | 5 | · | · | · |
| Reached setup step 4 | 167 | 160 | · | · | · | 2 | · | · | · | 1 | · | 1 | · | 3 | · | · | · |
| Reached setup step 5 | 148 | 142 | · | · | · | 2 | · | · | · | 1 | · | 1 | · | 2 | · | · | · |
| Reached setup step 6 | 139 | 133 | · | · | · | 2 | · | · | · | 1 | · | 1 | · | 2 | · | · | · |
| Setup completed | 100 | 94 | · | · | · | 2 | · | · | · | · | · | 1 | 1 | 2 | · | · | · |
| FIRST MEAL LOGGED | 5 | 5 | · | · | · | · | · | · | · | · | · | · | · | · | · | · | · |
| Day | Signups | Setup done | Logged a meal | Activation |
|---|---|---|---|---|
| 2026-09-05 | 15 | 13 | 2 | 15.4% |
| 2026-09-04 | 26 | 23 | 2 | 8.7% |
| 2026-09-03 | 17 | 13 | 1 | 7.7% |
| 2026-09-02 | 7 | 5 | 0 | 0.0% |
| 2026-09-01 | 18 | 13 | 1 | 7.7% |
| 2026-08-31 | 21 | 16 | 3 | 18.8% |
| 2026-08-30 | 22 | 16 | 2 | 12.5% |
| 2026-08-29 | 61 | 50 | 8 | 16.0% |
| 2026-08-28 | 27 | 21 | 13 | 61.9% |
| 2026-08-27 | 29 | 9 | 1 | 11.1% |
| 2026-08-26 | 3 | 2 | 1 | 50.0% |
| 2026-08-25 | 19 | 7 | 2 | 28.6% |
| 2026-08-24 | 28 | 16 | 5 | 31.2% |
| 2026-08-23 | 18 | 8 | 5 | 62.5% |
| Date | Durable | Δ |
|---|---|---|
| 2026-09-05 | 372 | · |
| 2026-09-04 | 351 | +21 |
| 2026-09-03 | 330 | +21 |
| 2026-09-02 | 320 | +10 |
| 2026-09-01 | 310 | +10 |
| 2026-08-31 | 263 | +47 |
| 2026-08-30 | 245 | +18 |
| 2026-08-29 | 214 | +31 |
| 2026-08-28 | 186 | +28 |
| 2026-08-27 | 145 | +41 |
| 2026-08-26 | 142 | +3 |
| 2026-08-25 | 133 | +9 |
| 2026-08-24 | 103 | +30 |
| 2026-08-23 | 75 | +28 |