Generated Sat 24 Oct 2026 13:28:02 EEST · refreshes every minute · aggregate counts only, no identifiers
durable = active + verified + non-guest + signup stamped
Reading the two "signups" cards: a signup = a durable account exists;
finishing setup = the person made it through the onboarding wizard. The gap
between them is the §7 waterfall drop — and the reason your admin panel
and this dashboard can honestly disagree.
1048
Durable users
98,952 to goal
6
Signups today
4 finished setup · 2 stuck
50
Signups last 7d
44 finished setup · 88.0% completion
2
Email-verified 7d
40.0% of submits
· 12 via Google
819
Completed setup
78.1% of durable
192
Ever logged a meal
23.4% of completers
70
Logged 2+ days
6.7% of durable
0
Active guests
guest mode off · 7d fuse
Guest pipeline (idea 54 — created · converted · swept per day)
A guest = a real row, 7-day fuse, convertable in place (data kept). Created*
counts rows minted that day that are STILL guests (converted/swept rows leave
this count); converted counts rows flipped durable that day (guest_converted_at);
swept counts rows hard-deleted by the sweep cron — no sweeps logged yet.
Day
Created*
Converted
Swept
Conversion
2026-10-24 00:00:00+02
0
0
0
—
2026-10-23 00:00:00+02
0
0
0
—
2026-10-22 00:00:00+02
0
0
0
—
2026-10-21 00:00:00+02
0
0
0
—
2026-10-20 00:00:00+02
0
0
0
—
2026-10-19 00:00:00+02
0
0
0
—
2026-10-18 00:00:00+02
0
0
0
—
2026-10-17 00:00:00+02
0
0
0
—
2026-10-16 00:00:00+02
0
0
0
—
2026-10-15 00:00:00+02
0
0
0
—
2026-10-14 00:00:00+02
0
0
0
—
2026-10-13 00:00:00+02
0
0
0
—
2026-10-12 00:00:00+02
0
0
0
—
2026-10-11 00:00:00+02
0
0
0
—
Totals: 0 guest rows still active ·
14 converted ever.
Age of ACTIVE guests: 0 ≤1d ·
0 1–3d ·
0 3–5d ·
0 5–7d ·
0 >7d (fuse overdue — sweep cron should catch these).
Each row re-derives a displayed number from
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.
Signup journey — where they get stuck, in one table
Stage
Count
Share of max
% of parent
Landing page seen
19837
·
Tapped a landing CTA
33
0.2%
Saw the sign-in screen
11837
—
Email signup submitted
5
0.0%
Verification code sent
3
60.0%
Email verified — account OK
2
66.7%
Google sign-in started
0
0.0%
Google sign-in OK
12
—
Setup screen seen
55
—
Setup completed
0
0.0%
First meal logged
12
—
7-day window. The email and Google branches
split after the auth screen; setup is fed by both. A >100% ratio renders as — rather than a lie
(the parent and child were not instrumented over the same period).
Where do they get stuck — biggest drops, with reasons
Top 5 by absolute drop. Reason counters only exist
for the failure modes listed — a drop with no reasons is itself a finding (no failure instrumented
there yet).
Email registration & verification
5
submitted
→60.0%
3
code sent
→66.7%
2
verified
Why codes fail
Count
Time from send to verify
Count
Deliverability
Count
Wrong code
0
< 30 s
0
Resends requested
0
Expired / no code
0
30 s – 2 min
0
Retries after fail
1
Too many attempts
0
2 – 10 min
1
any failure
0
10 min + (spam rescue?)
1
By email-provider class — where codes are
sent vs where accounts get verified. Cells under 5 are folded into
other (k-anonymity floor).
Provider class
Code sent
Verified
Sent → verified
other
3
2
66.7%
Auth screen — tabs, dwell, first field
Which tab greeted them
Count
Tab switches
Count
First field focused
Count
Dwell before leaving
Count
Register tab
84
→ login (the returning-user signal)
2
Email (register)
0
0 – 5 s (bounce)
18
Login tab
15
→ register
3
Name
4
5 – 30 s
35
Password
0
30 s +
34
Login form
3
Client-side beacons on the auth page, 7d.
A high auth_tab_switch_login share means people arrive believing they already have
an account — a login/register clarity problem, not an acquisition problem.
Landing engagement — did the page work on them
Scroll depth
Count
CTA decision speed
Count
Referrer class
Count
25%
38
Tapped within 3 s
7
Direct
15636
50%
27
3 – 10 s
15
Google search
12
75%
22
10 s + (readers)
11
Google Ads click
1
100% (bottom)
17
Left within 5 s (bounce)
38
Social
0
Other
341
7d, of 19837 landing views. Scroll depth is
cumulative (each visitor counts once per threshold). Referrer classes are closed buckets — the raw
URL is never stored.
Password recovery — can locked-out users get back in
0
reset started
→—
0
password reset
Rejected reset codes (7d): 0.
Before v2.60.0 these users were indistinguishable from people who never signed up.
Language funnel — is the journey worse in some language
Language
Landing views
Auth screens
Landing → auth
English
14809
65
0.4%
Estonian
342
24
7.0%
Finnish
364
22
6.0%
Russian
364
25
6.9%
de
397
54
13.6%
fr
495
41
8.3%
pt
454
30
6.6%
pp
345
13
3.8%
es
483
36
7.5%
7d, k≥5 folding applied. Languages
without data are hidden by the fold.
Hour of day — when the funnel is awake
Hour (Europe/Tallinn)
Landing views
Auth screens
Activity
03:00
1080
744
04:00
1305
497
05:00
1203
589
06:00
1329
599
07:00
948
626
08:00
596
775
09:00
930
406
10:00
1036
449
11:00
609
493
12:00
386
487
13:00
297
496
14:00
125
323
15:00
140
314
16:00
127
374
17:00
118
374
18:00
126
350
19:00
146
377
20:00
160
326
21:00
638
705
22:00
2803
729
23:00
2111
585
00:00
1514
374
01:00
917
365
02:00
1193
480
7d. Hours are stored in server-local buckets
(UTC) and this axis is shifted by the current Tallinn offset (UTC+3),
so during a DST-change week one bucket can be ±1 h off. Hour is a closed
bucket — minute-level timing is never stored.
Google sign-in — does the browser ever come back?
67
tapped button
→0.0%
0
POST reached us
→—
32
came back
→37.5%
12
signed in
Taps outrun the server: 67 button taps never reached the
POST. Either the network dropped, or the JS on the auth page never dispatched — check for a client
error on the pages that host the button.
No Google sign-in has been started in this window. If auth_view is
non-zero, people are seeing the screen and not tapping the button — a different problem from the OAuth wall.
7-day window. google_return is the decisive counter:
it can only increment when the browser survives the round trip to accounts.google.com.
Android app — where installs give up
126
opened, no session
→100.0%
126
saw sign-in
→1.6%
2
got an account
Counts android_app + android_wv. The largest drop between two
numbers is the thing to fix next.
Reading the labels.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.
Landing-page CTAs — what actually gets tapped
CTA
Taps (7d)
Share
%
Play Store
32
97.0%
Continue with Google
0
0.0%
Sign up (generic)
1
3.0%
Email link
0
0.0%
Overall tap-through:
0.2% of 19837 landing views tapped something.
Back-navigation total (7d): 0
— going back means that step wasn't quite right.
Registration failures — split by reason
Reason
Count
Share of submits
%
Email already registered (returning user!)
1
20.0%
Password too short
0
0.0%
Invalid name / email / country / alias
0
0.0%
1 "email already registered" in 7d — these are RETURNING users
who thought they were signing up fresh. The right fix is a clearer login/register tab or a smarter
"email exists, sign in?" flow, not more acquisition spend.
Full funnel — step × platform
Step
All
android_app
android_inapp
android_tablet
android_web
android_wv
bot
desktop_web
ios_inapp
ios_web
ipad_web
Landing page seen
9412
·
2
9
355
10
1675
6362
5
986
8
APP opened — no session
1507
23
·
1
4
·
45
1426
·
8
·
Sign-in / register screen seen
1914
23
·
1
7
·
121
1747
·
15
·
Browser came BACK from Google
1
·
·
·
·
·
·
·
·
1
·
Existing user tried to log in
2
2
·
·
·
·
·
·
·
·
·
…wrong credentials
2
2
·
·
·
·
·
·
·
·
·
APP opened — signed in
266
243
·
5
·
·
18
·
·
·
·
Setup screen seen (step 1 arrival)
6
6
·
·
·
·
·
·
·
·
·
Step
All
android_app
android_inapp
android_pwa
android_tablet
android_web
android_wv
bot
desktop_web
ios_inapp
ios_pwa
ios_web
ipad_web
other
Landing page seen
19837
·
4
·
16
717
16
6142
11615
6
·
1305
9
7
APP opened — no session
7118
124
·
4
1
42
2
488
6386
·
2
65
1
3
Sign-in / register screen seen
11837
124
·
5
1
45
2
608
10920
·
2
126
1
3
Browser came BACK from Google
32
·
·
2
·
1
·
1
26
·
·
2
·
·
Google sign-in succeeded
12
·
·
1
·
9
·
·
2
·
·
·
·
·
Email registration submitted
5
5
·
·
·
·
·
·
·
·
·
·
·
·
Verification code sent
3
3
·
·
·
·
·
·
·
·
·
·
·
·
VERIFIED — account usable
2
2
·
·
·
·
·
·
·
·
·
·
·
·
Existing user tried to log in
6
3
·
·
·
3
·
·
·
·
·
·
·
·
…wrong credentials
5
2
·
·
·
3
·
·
·
·
·
·
·
·
APP opened — signed in
623
578
·
·
5
17
·
18
4
·
1
·
·
·
Setup screen seen (step 1 arrival)
55
43
·
1
·
10
·
·
1
·
·
·
·
·
FIRST MEAL LOGGED
12
11
·
1
·
·
·
·
·
·
·
·
·
·
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
32508
2
7
·
35
1007
70
12418
·
17182
9
·
1745
12
21
APP opened — no session
13858
845
·
4
88
1234
42
1530
3
9815
3
2
272
1
19
Sign-in / register screen seen
22840
845
·
5
88
1296
47
2462
3
17563
3
2
506
1
19
…refused to start
5
·
·
·
·
·
·
·
·
5
·
·
·
·
·
Browser came BACK from Google
45
·
·
2
·
5
·
1
·
31
·
1
5
·
·
Google sign-in succeeded
31
·
·
1
·
20
·
·
·
9
·
1
·
·
·
Email registration submitted
23
22
·
·
·
·
·
·
·
1
·
·
·
·
·
Verification code sent
12
11
·
·
·
·
·
·
·
1
·
·
·
·
·
…wrong code
3
3
·
·
·
·
·
·
·
·
·
·
·
·
·
VERIFIED — account usable
4
4
·
·
·
·
·
·
·
·
·
·
·
·
·
Existing user tried to log in
20
16
·
·
·
3
·
·
·
1
·
·
·
·
·
…wrong credentials
6
3
·
·
·
3
·
·
·
·
·
·
·
·
·
APP opened — signed in
2477
2035
·
·
5
268
15
23
·
74
·
51
4
2
·
Setup screen seen (step 1 arrival)
369
321
·
1
·
23
15
·
·
8
·
1
·
·
·
FIRST MEAL LOGGED
57
52
·
1
·
2
·
·
·
1
·
1
·
·
·
Counting began 2026-08-25. Steps added later
read zero for earlier days — that is missing instrumentation, not a missing user.
Durable signups — last 14 days
Day
Signups
Setup done
Logged a meal
Activation
2026-10-24
6
4
0
0.0%
2026-10-23
7
7
2
28.6%
2026-10-22
10
10
2
20.0%
2026-10-21
10
8
3
37.5%
2026-10-20
4
4
1
25.0%
2026-10-19
4
3
2
66.7%
2026-10-18
7
6
1
16.7%
2026-10-17
3
3
1
33.3%
2026-10-16
2
2
0
0.0%
2026-10-15
4
3
0
0.0%
2026-10-14
4
4
1
25.0%
2026-10-13
13
13
6
46.2%
2026-10-12
6
4
2
50.0%
2026-10-11
12
10
3
30.0%
Daily durable total (snapshot)
Date
Durable
Δ
2026-10-24
1048
·
2026-10-23
1037
+11
2026-10-22
1027
+10
2026-10-21
1018
+9
2026-10-20
1013
+5
2026-10-19
1007
+6
2026-10-18
1001
+6
2026-10-17
998
+3
2026-10-16
997
+1
2026-10-15
991
+6
2026-10-14
987
+4
2026-10-13
976
+11
2026-10-12
968
+8
2026-10-11
956
+12
scripts/funnel_dashboard.php v2.60.0 · funnel_counters (migrations 0095 + 0097) + durable-user truth ·
dim lenses with k≥5 floor · ads guard enabled · campaigns 24083302508,24066573735,24285806619,24285807339,24285807342,24291236813,24291236816,24291237797,24291238040,24297019408,24297020062,24297020545,24306626770