Dashboard / Home Screen Pattern Audit (Mobbin)
Date: 2026-08-10
Source: Mobbin design database via MCP search_screens (deep relevance-ranked search)
Purpose: Quantified original research on how top apps structure the home screen / dashboard users see every day. Feeds a research-driven YouTube video.
Methodology
- 5-6 natural-language queries across distinct domains (fitness, finance, habit tracking, health, language learning) on iOS, plus 1 web query for SaaS analytics dashboards, limit 12-15 each.
- Every screen image was visually examined; tallies come from what is visible in the screenshot, not metadata.
- Screen IDs tracked across queries to avoid double counting; duplicates excluded from tallies.
- Target sample: ~60 unique screens.
Tally dimensions (per screen)
- Above-the-fold structure: single hero metric/score | 2-4 stat-card grid | list/feed | chart-first
- Composite score (0-100-style readiness/sleep/credit score number)? y/n
- Goal-progress UI (rings, bars, "X of Y")? y/n
- Streak displayed? none | hero | badge/secondary
- Primary chart type: line | bar | ring | donut | area | none
- Default time frame: today/now | historical
- Personalized greeting/name? y/n
- Single clear CTA above the fold ("Start workout")? y/n
- Empty-state handling (if visible): placeholder prompt | blank | n/a
- Negative framing visible (red/down indicators)? y/n
- Data density: distinct numbers above the fold, bucketed 1-3 | 4-8 | 9+
Caveats
- Mobbin curates top/design-forward apps; sample is biased toward polished market leaders, not average apps.
- Search results are relevance-ranked against the query wording, which can over-select screens matching the described pattern.
- "Above the fold" judged from full-screen captures (iPhone-height / desktop viewport approximations).
Per-screen observations
Query 1 — "fitness app home dashboard with activity stats" (iOS, 13 screens, 13 new)
| # | App | Category | Structure | Composite score | Goal progress | Streak | Chart | Timeframe | Greeting | CTA | Empty state | Neg. framing | Density | URL |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Withings Health Mate | health/fitness | list of stat cards | no | no | none | line sparklines | latest/today | no | no | n/a | no (neutral "High HR" text flag) | 4-8 | https://mobbin.com/screens/3e0d9ab3-1658-4490-8738-6c7f90940729 |
| 2 | Cal AI | nutrition | 2-4 stat-card grid | no | yes (0/10,000 steps ring) | none | ring | today | no | yes (FAB + "add first meal") | placeholder prompt ("Tap + to add your first meal") | no | 4-8 | https://mobbin.com/screens/38c76d56-fed8-426d-8929-c58bae82edfd |
| 3 | Bevel | health | grid (3 score rings) | yes (Strain 38 / Recovery 77 / Sleep 67) | rings (score-style) | none | ring | today | no (date header) | no | n/a | no | 9+ | https://mobbin.com/screens/2d3e8d5f-f3f1-4370-8b34-f914c8eb31ed |
| 4 | Any Distance | running | 2-4+ stat-card grid | no | yes (4/5km goal ring) | none | none above fold | historical (This Year) | no | no | n/a | no | 4-8 | https://mobbin.com/screens/47e2e83b-6b36-420d-8ec8-b3682c555b2e |
| 5 | Google Fit | fitness | single hero metric (dual ring 240 / 22,931) | no (Heart Pts = points, not 0-100) | yes (ring + "3/7 achieved") | none | ring | today | no | no | n/a | no | 4-8 | https://mobbin.com/screens/7e924261-2c27-4453-b9ca-43ff67a60c4e |
| 6 | adidas Running | running (Progress tab) | grid (8 stat cells) | no | no | none | none above fold | historical (Month) | no | no | n/a | no | 9+ | https://mobbin.com/screens/35e7634c-c6b5-42ff-a931-9e027bcc2262 |
| 7 | Apple Health | health | list of stat cards | Sleep Score card present (No Data) | no | none | mini bar | latest/today | no | no | "No Data" blank card | no | 1-3 | https://mobbin.com/screens/37402325-0dcd-4f27-b55c-122ac857d2ac |
| 8 | Ultrahuman | health/wearable | list of cards | yes (indices, locked) | no | none | none | today | no | no | placeholder prompts (how to unlock each index) | no | 1-3 | https://mobbin.com/screens/7d3e9291-99d5-4fcc-8b7e-6607c636952e |
| 9 | timespent | activity | single hero metric (ring "5.0 mi") | no | ring | none | ring | today | no | no | n/a | no | 1-3 | https://mobbin.com/screens/f3038419-0196-4fe3-b003-3c11a7e1d7f5 |
| 10 | Peloton | fitness | stat-card row + greeting | no | yes (weekly dots) | HERO ("You have a 1 week streak going") | none | 7-day default | yes ("Welcome back, JudySmithh") | yes (JOIN CLASS) | n/a | no (green up-arrows, positive) | 4-8 | https://mobbin.com/screens/0cd621cb-59a9-46b3-ad46-86d7a5886474 |
| 11 | Fitbit | fitness | list of stat cards | no | yes ("1 of 6" exercise days) | none | mini bar | today | no | no | zeros + "No target" (weak) | no | 1-3 | https://mobbin.com/screens/10d034c3-883a-4e3f-aa84-6821c56ff632 |
| 12 | pushr | fitness micro | single hero metric ("3 push-ups today") | no | no | none | none | today | no | no | n/a | no | 4-8 | https://mobbin.com/screens/a5c74235-e040-49f2-8fb9-b9211e04c157 |
| 13 | Runbuds | running | small stat row (3) | no | no | none | route line | historical (1W) | no | no | n/a | no | 4-8 | https://mobbin.com/screens/aef57c53-f2e9-4739-b108-e95cbd9dda32 |
Query 2 — "finance app home screen with account balance and spending overview" (iOS, 13 screens, 13 new; running unique n=26)
| # | App | Category | Structure | Composite score | Goal progress | Streak | Chart | Timeframe | Greeting | CTA | Empty state | Neg. framing | Density | URL |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 14 | Ubank Money App | banking | list of cards | no | no | none | none | this week | yes ("Hey [name]") | yes ("Get started" bill planner) | placeholder prompt (Bill Planner illustration + copy) | no | 1-3 | https://mobbin.com/screens/9bbc33b2-7e59-49b5-8c8b-fb3da8f1918b |
| 15 | Copilot Money | PFM | list of stat cards | no | no | none | horizontal allocation bars | current month | no | "Review in detail" links | italic "No recurring payments being tracked" | no | 4-8 | https://mobbin.com/screens/b1befa2f-2fc7-4be6-ab4a-c7bb0d8651f0 |
| 16 | Origin | PFM | chart-first (Spent This Month line chart card) | no | no | none | line (month-vs-month comparison) | this month | no | promo "Get $50" + "Ask Sidekick" | n/a | no | 1-3 | https://mobbin.com/screens/1d636ff5-01c1-4d6f-9f12-accb3c61868c |
| 17 | Crypto.com | crypto | single hero metric ($0.00 Total Balance) | no | no | none | none (chart area empty) | 24H default | no | "Open" (cash) | "No balance history yet" pill | % change indicator present (0.00%) | 4-8 | https://mobbin.com/screens/82434aa8-3646-47f3-8c93-8e7400515a3c |
| 18 | Quicken | budgeting | single hero metric (donut + "-$320.00 Available") | no | yes (budget donut) | none | donut | month | no | no | n/a | YES (negative $, "Over spent" in warning color) | 4-8 | https://mobbin.com/screens/2486b1b1-13a5-4424-82c9-6dd4ce0ee371 |
| 19 | Kakao Pay | securities | single hero metric (981,188 won) + allocation list | no | no | none | horizontal bar (allocation) | current | no | multiple action buttons (충전/출금/환전) | n/a | no | 4-8 | https://mobbin.com/screens/60addae9-8585-41ab-8cd2-64f85d6e1536 |
| 20 | Cleo | budgeting | 2-4 stat grid ($1,274.87 until $1,463 / $115.90 per day) | no | yes (budget "until $1,463", "$0 of $16") | none | none | current period/today | no | no | "Add a bill" tile | no | 9+ | https://mobbin.com/screens/d1d13fc6-5d1c-4250-8b9a-f9b668d06428 |
| 21 | Wealthsimple | investing | single hero metric ($85.00) + area chart | no | no | none | area | historical (ALL) | no | no | n/a | neutral $0 (0%) change row | 4-8 | https://mobbin.com/screens/667bf371-6e73-42f5-b179-574e62d9b64b |
| 22 | Vivid | banking | single hero metric (€5.00 spent today) + donut | no | no | none | donut | today (1D default) | no | no | n/a | no | 1-3 | https://mobbin.com/screens/bbe54734-fd09-421d-a4f8-ee947d03ddb0 |
| 23 | Toss | PFM | single hero metric (spend total) + breakdown list | no | no | none | none | month | no | no | n/a | YES (red "spending 480K won more than last month") | 9+ | https://mobbin.com/screens/88fec282-2dc9-4f3d-9a49-7fa304b8fea5 |
| 24 | Wise | banking | single hero metric (30.00 SGD total balance) | no | no | none | none | current | no | "Learn more" chips | "Learn more" prompts for unopened products | no | 4-8 | https://mobbin.com/screens/60cb8ffa-dad5-4e2f-b3d6-bd965d2bb92a |
| 25 | bunq | banking | chart-first (line chart) + 4 account tiles | no | no | none | line/area | recent history | no | Pay/Request/Add (multiple) | n/a | no | 4-8 | https://mobbin.com/screens/44be00d7-cd84-4285-a095-66c44089f0da |
| 26 | Monarch | PFM | single hero metric ($0.00 net worth) + chart | no | no | none | area (empty) | 1M historical | no | no | dashed "+ Add an account" | neutral 0% | 1-3 | https://mobbin.com/screens/561df1a2-d4e6-4733-9471-f43b18c1b330 |
Query 3 — "habit tracker home screen with streaks and progress" (iOS, 13 screens, 13 new; running unique n=39)
Note: this query pulled several streak-centric surfaces that are not classic dashboards (Duolingo + pushr widget galleries, Bloom celebration modal, QUITTR streak-explainer overlay). Kept with type flags; streak stats for this batch are query-biased and are reported per-category in the summary.
| # | App | Category | Structure | Composite score | Goal progress | Streak | Chart | Timeframe | Greeting | CTA | Empty state | Neg. framing | Density | URL |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 27 | Duolingo (widgets) | language | single hero metric ("846 days") | no | no | HERO (flame + day count + week checks) | none | today | no ("Don't forget me!" mascot nudge) | no | n/a | no | 1-3 | https://mobbin.com/screens/3ed7f990-7eea-4cfa-bc35-af1ee8ecee40 |
| 28 | QUITTR (overlay) | habit/recovery | single hero metric ("5 Day Streak") | yes-adjacent ("Brain Rewiring 6%" bar behind) | yes (rewiring bar) | HERO | none | today | no | Panic Button (dimmed) | n/a | no | 1-3 | https://mobbin.com/screens/62e93e5d-41f4-42ba-b556-af0bfce9f536 |
| 29 | Atoms | habits | list/feed (habit rows) | no | no | badge per habit ("1 day in a row!") | none | today | no | no | "You haven't tracked any feelings yet" | no | 1-3 | https://mobbin.com/screens/9f9332f0-59c7-436f-be2c-b01837ed35d8 |
| 30 | pushr (widgets) | fitness micro | single hero metric (streak "3 days") | no | no | HERO (flame + week checks) | none | this week | no | no | n/a | no | 1-3 | https://mobbin.com/screens/bd1913f9-cb73-4126-9c41-fb92dfe61b97 |
| 31 | Liven (widgets) | mental wellness | single hero metric ("3 day" streak card) | no | ring | HERO ("Look at you go!") | ring | today | no | yes (+ "Pause, notice, name it") | n/a | no | 1-3 | https://mobbin.com/screens/30e09a65-4b59-4fea-a70b-82f2f6e04545 |
| 32 | Gymshark Training (66 challenge) | fitness/habits | checklist with progress header ("DAY 3/66") | no | yes (3 of 66 day dots) | day-counter as hero | none | today | no | yes (SEE MY PROGRESS) | n/a | no | 1-3 | https://mobbin.com/screens/7f0eef36-d323-49a3-a7b0-ae3be548cc16 |
| 33 | Alma | habits | single hero metric (streak "3") | no | yes ("Track one item to keep your streak" bar) | HERO | none | today | no | yes (Record) | prompt to track today | no | 4-8 | https://mobbin.com/screens/ea9f1fd5-652e-4cb3-afb6-7a6a30e53d78 |
| 34 | timespent (Arcs) | habits | list (habit arcs + week dots) | no | no | badge ("3 days Days Active") | calendar dots | this week | no | no | n/a | no | 4-8 | https://mobbin.com/screens/c49184d7-4dc7-4f49-b7df-cce7563bc829 |
| 35 | MacroFactor (Habits) | nutrition | single hero metric (60% ring) | no (rate, not composite) | yes (ring) | badge ("13 days" longest/current) | ring + yearly heatmap | historical (month/year) | no | no | n/a | no | 1-3 | https://mobbin.com/screens/ee7446c3-51b7-49c8-ac12-ce4a878af742 |
| 36 | Yazio | nutrition | single hero metric ("0 Day Streak") | no | yes (milestone Day 0/3 bar) | HERO | none | today | no | yes ("I'm Committed" + "Track food") | placeholder prompt ("Track a food to kick off your streak!") | greyed flame for 0 | 4-8 | https://mobbin.com/screens/a1866274-9fc1-4c95-89b1-db0d40ff68af |
| 37 | Anything | habits | list (checklist) | no | yes ("0/5 completed" bar) | badges ("0 day streak" per habit) | none | today | no | + Add Habit | zeros + Add Habit | no | 4-8 | https://mobbin.com/screens/5d0e3b4b-a4a5-4e4d-b969-7577157db613 |
| 38 | pliability | fitness/recovery | grid of stat cards (Trophy Case 0/2/2) | no | no | secondary (current/best streak labels low) | calendar heatmap | historical (monthly) | no | no | empty trophy slots | no | 4-8 | https://mobbin.com/screens/e51f880b-c434-4beb-9fd8-8deb9306f769 |
| 39 | Bloom (celebration) | wellness | single hero metric (ring "1 DAY") | no | week circles | HERO ("You're on a roll!") | ring | today | no | yes (Continue) | n/a | no | 1-3 | https://mobbin.com/screens/177c6522-6829-49a3-8ede-fddd53c7f2df |
Query 4 — "health app dashboard with daily metrics like sleep and heart rate" (iOS, 13 screens, 13 new; running unique n=52)
Note: several apps repeat from Query 1 (Ultrahuman, Bevel, Fitbit, Google Fit, Withings, Cal AI, MacroFactor) but with different screens; screen IDs are unique. App-level duplication is noted in the summary caveats.
| # | App | Category | Structure | Composite score | Goal progress | Streak | Chart | Timeframe | Greeting | CTA | Empty state | Neg. framing | Density | URL |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 40 | WHOOP | health/wearable | grid of stat cards (sleep planner + health monitor row) | no (on this tab) | no | none | none | today/tomorrow | no | no | "Data not found" + locked assessment cards | no | 1-3 | https://mobbin.com/screens/13f61703-ee24-4062-b70b-e0dae30d3a0f |
| 41 | Ultrahuman (sleep) | health/wearable | single hero metric ("84 Sleep Index") + charts | YES (Sleep Index 84) | no | none | bar + line | day view (latest) | no | no | n/a | no | 4-8 | https://mobbin.com/screens/e2b0a4ea-2c6d-4319-8f6d-96feab329e02 |
| 42 | Bevel (strain) | health | list of stat cards (HR zones + trends) | YES (Strain Score 72%) | no | none | line sparklines | today + trend | no | no | n/a | "Above normal" flags (blue, neutral) | 9+ | https://mobbin.com/screens/4398dbfe-241b-4880-b6ef-9eafaab69861 |
| 43 | Fitbit (sleep day) | health | single hero metric (ring "1h 47m Sleep") + 3 mini rings | no | yes (rings, "0 of 6 Mindful days") | none | ring | today | no | no | zero rings | no | 4-8 | https://mobbin.com/screens/718d303d-1979-4a8b-bffe-7557f4756643 |
| 44 | Google Fit (trends) | health | list of stat cards | no | no | none | 7-day mini bars | historical (last 7 days) | no | no | "No recent data" (bedtime card) | no | 4-8 | https://mobbin.com/screens/f057b93f-92b9-45e6-b867-51042d40ff1a |
| 45 | Pillow | sleep | list of stat cards (each with chart) | no | no | none | bar | historical (week) | no | no | placeholder prompt ("Record sleep for at least 5 days...") | "Mixed" mood neutral | 4-8 | https://mobbin.com/screens/cae1ceff-9e9c-4999-bee6-3e7cbd646d93 |
| 46 | Eight Sleep | sleep | list of stat cards + bar chart | no | in-range targets (±30m) | none | bar | today + week | no | no | n/a | YES (red "Out of range" dots) | 9+ | https://mobbin.com/screens/2424533e-d3a6-43fd-846c-b360ce3272dc |
| 47 | TIDE | sleep/wellness | list of stat cards | YES (Sleep Efficiency 95% rated "Excellent") | bar as % | none | bar | today default + 7/30d rows | no | no | "Unrated" regularity | green positive rating | 4-8 | https://mobbin.com/screens/ed035943-bea9-40eb-84c2-4cacd4e85caa |
| 48 | Withings Health Mate (2) | health | list of stat cards | no | yes ("17 % Goal" steps) | none | mini bar | latest/today | no | no | n/a | no ("Normal" tag) | 4-8 | https://mobbin.com/screens/72f11245-eb96-405a-be2a-91b05ce7b01c |
| 49 | The Outsiders | training | single hero metric (Training Load Ratio 0.83 "OPTIMAL") | YES (ratio with rating badge) | no | none | line sparkline | today | no | no | prominent "No Data" cards (3 of 5 metrics + sleep) | green OPTIMAL (positive) | 4-8 | https://mobbin.com/screens/1500b341-0f28-455d-8571-b9eb6af8d26c |
| 50 | Cal AI (progress) | nutrition | chart-first (weekly stacked calories bar) | yes-adjacent (BMI 22.8 rated "Healthy") | no | none | stacked bar | this week | no (motivational banner) | no | n/a | green Healthy (positive) | 4-8 | https://mobbin.com/screens/e1299a34-2bd7-4819-a90f-f29e4094fd7b |
| 51 | MacroFactor (dashboard) | nutrition | 2-4 stat-card grid | no | yes (Calories/Protein 54% bars) | none | line + stacked bar | today/recent | no | Explore All | n/a | no | 9+ | https://mobbin.com/screens/3057b127-006f-4b0e-9a88-9cc272f992be |
| 52 | Opal | screen time | list of stat cards (metric + rating meter each) | no (Opal Score referenced above fold, cut off) | meter bars vs AVG | none | meter/bar | today | no | no | n/a | YES (red "Short"/"Early"/"Late" ratings) | 4-8 | https://mobbin.com/screens/b662feae-1b4c-4bf1-84bf-65c660f8dcf4 |
Query 5 — "language learning app home screen with lesson path and progress" (iOS, 12 screens, 12 new; running unique n=64)
Note: learning apps use a distinct home-structure: the vertical lesson path/map. Coded as structure "lesson path" (subtype of list/feed). "Timeframe" is mostly n/a for these — the unit of progress is the curriculum, not the calendar.
| # | App | Category | Structure | Composite score | Goal progress | Streak | Chart | Timeframe | Greeting | CTA | Empty state | Neg. framing | Density | URL |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 53 | Duolingo | language | lesson path | score-based ("Your French Score is 11") | yes (score bar 11 -> 12) | badge (flame 8, top bar) | progress bar | n/a (curriculum) | no | current node = implicit CTA | greyed locked path | no | 4-8 | https://mobbin.com/screens/96eb27fc-8ee5-44e1-91a0-d39d70415767 |
| 54 | Mimo | coding | lesson path | no | yes (course ring 58%) | badge (flame 2, top bar) | ring | n/a | no | highlighted current node | locked nodes | no | 1-3 | https://mobbin.com/screens/e466340b-80ce-4a91-b557-14d55afcf4c9 |
| 55 | Liven (journey) | mental wellness | lesson path | no | implicit (done vs locked nodes) | no (lightning counter) | none | n/a | no | current node | locked nodes | no | 1-3 | https://mobbin.com/screens/d98bf80c-9d46-45c6-833d-d0baef1b2e1d |
| 56 | Brilliant | STEM learning | lesson path | no | node rings | banner ("Streak extended!") | ring nodes | n/a | no | YES (bottom-sheet "Start") | greyed nodes | no | 1-3 | https://mobbin.com/screens/ec3fe703-fe07-489e-92a5-45eb5b3d4720 |
| 57 | Life Reset | habits/learning | lesson path | no | yes (completed nodes + bar) | none | none | n/a | no | no | n/a | no | 1-3 | https://mobbin.com/screens/0d8849b9-6253-472b-9067-2b5f40c648b8 |
| 58 | Duolingo ABC | kids literacy | lesson path | no | implicit | none | none | n/a | no | current node | locked nodes | no | 1-3 | https://mobbin.com/screens/7599d3b5-26c2-466e-98a3-2687ac207c95 |
| 59 | Ahead | emotional skills | lesson path (journey map) | no | yes (13% course bar) | badge (flame 1) | progress bar | n/a | no | numbered next step | greyed future steps | no | 1-3 | https://mobbin.com/screens/2f0ce7b1-a8cd-4839-bd45-37d505e08e3e |
| 60 | Kit | kids finance ed | lesson path (game map) | no | implicit (checked stops) | none | none | n/a | no | current node | n/a | no | 1-3 | https://mobbin.com/screens/ccfc2094-3ae7-4d12-a8a6-1dc25dfcaa32 |
| 61 | Speak | language | lesson path (bubbles) | no | "Check your progress" node | badge (flame 0, top bar) | none | n/a | no | current node ("Welcome!") | greyed future bubbles | no | 1-3 | https://mobbin.com/screens/a7b59b62-1a06-49b9-b386-5508bbfe97af |
| 62 | GoHenry | kids finance ed | grid of content cards (levels + missions) | no | mission counts per topic | none | none | n/a | no | "Motivate [child] to learn" prompt | n/a | no | 1-3 | https://mobbin.com/screens/9bcd500f-f446-492e-8af1-1a50702b6db5 |
| 63 | Alan | anti-stress learning | lesson path | no | implicit (checked tasks) | none | none | n/a | no | yes ("See task" buttons) | n/a | no | 1-3 | https://mobbin.com/screens/d872b883-aa94-45b5-aa60-3c57bd22bb6b |
| 64 | Uxcel Go | design learning | lesson list/path | no | implicit (checks + locked test) | no (lightning 1) | none | n/a | no | YES ("Start" tooltip on current lesson) | locked level test | no | 1-3 | https://mobbin.com/screens/dba87d9e-9955-49be-be73-686477e601ee |
Query 6 — "analytics dashboard with charts and key metrics overview" (web, 12 screens, 12 new; final unique n=76)
| # | App | Category | Structure | Composite score | Goal progress | Streak | Chart | Timeframe | Greeting | CTA | Empty state | Neg. framing | Density | URL |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 65 | Contra | freelance SaaS | stat-card grid + lists | no | no | none | area sparklines | last 30 days | no | Share profile / Share services | skeleton rows + coaching copy | no | 4-8 | https://mobbin.com/screens/dca29be6-a238-4493-abfa-e34071e4eee1 |
| 66 | Dub | link analytics | chart-first (stat row + large area chart) | no | no | none | area/line | last 24 hours | no | no | flat-line zeros | no | 1-3 | https://mobbin.com/screens/0f402d92-dce8-492d-b795-9f428b7fd16b |
| 67 | Google Analytics | web analytics | 2-4 KPI row + line chart | no | no | none | line + realtime bar | last 7 days + realtime module | no | no | n/a | comparison dashes (neutral) | 4-8 | https://mobbin.com/screens/70fbd62f-42ba-42a6-ac3b-e2c297b0c080 |
| 68 | Fresha | booking SaaS | list of stat+chart cards | no | no | none | bar + line w/ comparison series | historical range vs comp period | no | View report links | n/a | 0% change chips (neutral), up/down arrows | 9+ | https://mobbin.com/screens/0882a9ac-c0b5-4649-ba28-f94bfafbc680 |
| 69 | Mixpanel | product analytics | grid of chart cards | no | no | none | number + funnel bars + sankey | Today default (range toggles) | no | no | n/a | YES (red -25% badge, red drop-off %) | 9+ | https://mobbin.com/screens/5e11ed1d-ede3-4aab-bb71-6a9a379679a5 |
| 70 | Wix | site analytics | KPI stat row + charts + map | no | no | none | line sparklines + map | last 30 days vs previous | no | Ask Analytics AI | "No visitors at the moment" realtime card | no | 4-8 | https://mobbin.com/screens/ddb749b0-c243-4272-91bb-1e0ceb702123 |
| 71 | Hashnode | docs SaaS | 2-4 stat row + bar chart | no | no | none | bar | last 7 days | no | no | n/a | no | 4-8 | https://mobbin.com/screens/731d15b9-2f2d-4f89-82fe-b36dac0a66e8 |
| 72 | Lovable | site builder | 5-KPI row + line chart + tables | side panel has 7.5/9.5 site score (AI review, not analytics) | no | none | line + bar rows | last 7 days | no | no | n/a | no | 9+ | https://mobbin.com/screens/cd428f5f-6760-4e0d-803a-bc4fd150ffc2 |
| 73 | Ghost | publishing | chart-first (hero stat + large line chart) | no | no | none | line + donut | 30 days | no | no | n/a | green +100% (positive) | 4-8 | https://mobbin.com/screens/58585b72-748a-47b2-90c3-179e92a963d4 |
| 74 | Glide | internal tools | 2-4 stat row + charts | no | no | none | stacked bar + multi-line | year (historical) | no | no | n/a | no | 4-8 | https://mobbin.com/screens/9b9c8d31-6c35-4c38-94d8-49c42d1577f5 |
| 75 | Better Stack | monitoring | chart-first (response-time chart + availability table) | no | no | none | multi-line | today + 7/30/365d table rows | no | no | "none" incident cells | no (all healthy) | 9+ | https://mobbin.com/screens/a6fefc36-f40b-4a53-9bd9-f1199becd668 |
| 76 | Navattic | demo analytics | grid of 6 KPI cards w/ sparklines | no | no | none | area sparklines | date range vs previous period | no | Try a demo (upsell) | 0-baseline sparklines | 0% chips (neutral) | 9+ | https://mobbin.com/screens/5b908c10-a485-4dad-9030-37608f9b0c35 |
Summary
Final sample: n=76 unique screens (64 iOS consumer, 12 web SaaS) across fitness/running (13), finance (13), habit/streak surfaces (13), health/sleep/nutrition (13), learning (12), web SaaS analytics (12). Zero duplicate screen IDs; 7 apps contribute 2 screens each (different surfaces).
Counts table
| Dimension | iOS (n=64) | Web SaaS (n=12) | Overall (n=76) |
|---|---|---|---|
| Above-the-fold structure | |||
| — single hero metric | 22 (34%) | 0 | 22 (29%) |
| — 2-4 stat-card grid/row | 11 (17%) | 7 (58%) | 18 (24%) |
| — list/feed of stat cards | 17 (27%) | 2 (17%) | 19 (25%) |
| — chart-first | 3 (5%) | 3 (25%) | 6 (8%) |
| — lesson path (learning-specific) | 11 (17%) | 0 | 11 (14%) |
| Composite 0-100-style score visible | 5 clear + 4 borderline (8-14%) | 0 (Lovable's 7.5/10 is an AI side panel) | ~9 (12%) |
| Goal-progress UI (rings/bars/X of Y) | ~36 (56%; 22 explicit numeric, rest rings/meters/path) | 0 (0%) | ~36 (47%) |
| Streak visible — any | 18 (28%) [6/51 = 12% excl. streak-query batch] | 0 | 18 (24%) |
| — hero position | 9 | 0 | 9 |
| — badge/secondary | 9 | 0 | 9 |
| Primary chart above fold | ring 14 / bar 12 / line-sparkline 9 / donut 2 / none ~27 | line-area 9 / bar 2 / donut 1 / none 0 | — |
| Default timeframe = today/now | ~30 of 53 with a timeframe (57%) | 2 of 12 (17%: Mixpanel today card, Wix realtime) | ~42% |
| Personalized greeting/name | 2 (3%) | 0 (0%) | 2 (3%) |
| Clear single CTA above fold | 12 explicit (19%); +6 path current-node = 28% | 0 core-task CTAs (only share/upsell links) | ~18 (24%) |
| Empty state seen: placeholder prompt vs blank | prompt 13 / blank-zeros 8 | prompt 2 / blank 3 | prompts win ~60/40 |
| Negative/red framing visible | 4 (6%) | 1 (8%) | 5 (7%) |
| Density 1-3 numbers | 27 (42%) | 1 (8%) | 28 (37%) |
| Density 4-8 | 30 (47%) | 6 (50%) | 36 (47%) |
| Density 9+ | 7 (11%) | 5 (42%) | 12 (16%) |
Findings (prose)
- The "single hero metric" is a consumer-mobile pattern, not a dashboard universal. 34% of iOS home screens lead with one dominant number (streak, balance, ring); not one of the 12 web SaaS dashboards does. SaaS leads with a KPI row (58%) or a chart (25%) — the web default is "4-6 equal cards + time series," the mobile default is "one number you feel."
- Goal-progress UI is near-universal in consumer, absent in SaaS. ~56% of iOS screens show rings, bars, or "X of Y" — and if you include lesson-path completion it approaches 70% — versus 0% of SaaS analytics dashboards. Consumer apps frame data as progress toward a target; SaaS frames it as observation over time. This is the single sharpest divide in the sample.
- Streaks are a category strategy, not a general one. Streaks appeared on 0 of 13 finance screens and 0 of 13 health/sleep screens, but on 5 of 12 learning screens (flame counters in the top bar) and dominated habit apps (hero placement: Duolingo's 846-day flame, Yazio, Alma, Bloom, Peloton's "1 week streak" greeting). When present, hero-vs-badge split exactly 50/50 — habit apps make the streak the product; learning apps wear it as jewelry.
- "Today" is the consumer default; "last 7/30 days" is the SaaS default. 57% of iOS screens with a timeframe open on today/now (fitness/health especially), while 10 of 12 SaaS dashboards open on a historical window with a comparison period. Only finance splits internally: balances are "now," spending reviews are monthly.
- The personalized greeting is nearly extinct. Despite being a staple of dashboard tutorials and UI kits, only 2 of 76 screens (3%) show "Hey [name]"-style greetings (Peloton, Ubank). Top apps spend that pixel row on data, not pleasantries.
- Nobody wants to show you red. Only 5 of 76 screens (7%) use negative/red framing (Quicken's "-$320 Over spent," Toss's red "spending more than last month," Eight Sleep's out-of-range dots, Opal's "Short/Early/Late," Mixpanel's -25%). Even zero-data states get neutral gray, and SaaS change-chips at 0% stay neutral. Positive-only framing (green arrows, "Excellent," "OPTIMAL") outnumbers negative roughly 3:1.
- Above-the-fold number count clusters at 4-8, and SaaS overloads. 47% of all screens show 4-8 distinct numbers; iOS is bimodal (42% show just 1-3) while 42% of SaaS dashboards show 9+ numbers before scrolling. The composite score (readiness/sleep-index style) exists almost exclusively in wearable-adjacent health apps (~30% of that category), where it acts as compression for 9+ underlying metrics.
- Learning apps solved "what do I do next" better than anyone. The lesson path (11 of 12 learning screens) makes the primary CTA structural — the next node — while only 19% of other iOS home screens and 0% of SaaS dashboards surface a clear next action. SaaS "CTAs" above the fold were exclusively share/upsell links, never the user's core task.
Exemplars
Strong: 1. Google Fit — https://mobbin.com/screens/7e924261-2c27-4453-b9ca-43ff67a60c4e — one dual-value ring (Heart Points + steps) compresses the whole day, goal progress inherent in the ring, today-default, 4-8 numbers with clear hierarchy: hero, then three secondary stats, then cards. 2. Fitbit (Today, sleep hero) — https://mobbin.com/screens/718d303d-1979-4a8b-bffe-7557f4756643 — textbook hierarchy: one large hero ring, three mini rings beneath ("0 of 6" goal framing), everything today-scoped; density stays readable even in a near-empty data state. 3. Mimo — https://mobbin.com/screens/e466340b-80ce-4a91-b557-14d55afcf4c9 — course ring (58%) + highlighted current node = progress and next action in one glance; total above-fold numbers: 3.
Weak/overloaded: 1. Cleo (Budget) — https://mobbin.com/screens/d1d13fc6-5d1c-4250-8b9a-f9b668d06428 — 9+ competing numbers ($326 in / $188 out / $1,274.87 / $1,463 / $115.90/day / $18.63 / $169.50 / 52% / $0 of $16) with no single anchor metric; three different mental models (cashflow, budget-remaining, category spend) stacked above the fold. 2. Fresha (Sales dashboard) — https://mobbin.com/screens/0882a9ac-c0b5-4649-ba28-f94bfafbc680 — every stat repeated with a "0%" comparison chip (11+ chips visible), channel breakdown rows of $0.00 values not collapsed, so real signal ($1,285, 26 appointments) drowns in zero-noise. Good before/after candidate: collapse zero rows, keep one comparison per card.
Methodology note (honest limits)
- Curated, design-forward sample: Mobbin indexes top/polished apps; percentages describe what leading products do, not the app-store average.
- Relevance-ranked retrieval: each query surfaces screens matching its wording, so batch-level stats inherit query bias (e.g., the streak query guarantees streak UI; streak prevalence is therefore reported per-category and with that batch excluded). Structure/density/greeting/framing dimensions are less query-correlated and travel better.
- Screen-level, not app-level sampling: 7 apps contribute 2 different screens; a few captures are widgets galleries, overlays, or celebration modals rather than strict home tabs (flagged inline). Several captures show demo/zero-data accounts, which made empty-state auditing possible but slightly deflates density counts.
- Judgment calls: "above the fold" estimated from full-screen captures; composite-score vs plain-percentage and hero-vs-grid boundaries involve coder judgment (borderline cases noted inline).
- n=76 unique screen IDs; web subsample (n=12) is small — treat iOS-vs-web contrasts as directional.