Tab Metaphors (Mercury)
A real app's tab bar says "here are different kinds of information", not
"here are the same screen in different colors". The rookie mistake is building
four screens that each have a hero pill, a scroll list, and a color accent —
and wondering why it reads as a prototype instead of a product.
Cohesion comes from shared chrome (status bar, type scale, base
background). Identity comes from the structural spine: each tab picks a
layout metaphor that maps to its content.
Metaphor catalog
Pick one per tab. These are the patterns that ship in real apps:
- Hero number — one enormous stat with a delta and a context line. Use
for: today-view, dashboard landing, "what matters right now".
- Calendar heatmap — grid of day cells colored by intensity. Use for: log
history, contribution graphs, streak tracking.
- Timeline grid — vertical list of time-stamped events, each a card or
row. Use for: feeds, activity history, session logs.
- Stacked charts — one or two primary charts (bar, line, donut) with
small-multiple breakdowns below. Use for: insights, analytics, trends.
- Collection grid — 2- or 3-column grid of tiles (badges, achievements,
items). Use for: profile achievements, saved items, libraries.
- Detail/hero composition — large hero image or media block with meta
rows below. Use for: now-playing, article view, workout-of-the-day.
Typical 4-tab fitness/health mapping
| Tab |
Metaphor |
Why |
| Home |
Hero number |
"Did I hit my goal today?" is a single number |
| Log |
Calendar heatmap |
Shows the rhythm — streaks, gaps, consistency |
| Insights |
Stacked charts |
Trends only make sense over time, not in a number |
| Profile |
Collection grid |
Badges and achievements are visually heterogeneous |
Typical 4-tab productivity mapping
| Tab |
Metaphor |
| Today |
Timeline grid |
| Inbox |
Collection grid (list variant) |
| Focus |
Hero number (timer + session count) |
| Review |
Stacked charts (completion rate, etc.) |
What every tab must share
Keep these identical across all tabs — this is what makes the app feel like
one product:
- Status bar (time, signal, battery) — top 44pt
- Page title position and type size
- Body type scale (size, weight, color)
- Base background color (+ any ambient depth effect, applied once globally)
- Tab bar (icons + labels, active-state treatment, home indicator) — bottom
83pt on iPhone
- Spacing rhythm (16 / 24 / 32)
What each tab varies
- Layout spine (which metaphor above)
- Primary typography hierarchy — hero number tab uses a 72pt number;
charts tab uses chart labels; heatmap tab uses day-of-week headers
- Color accents — but only after the spine is distinct. Color is the
last 10%, not the first 90%.
- Icon treatment per content category — a food log icon is warm-hued,
a workout icon is cool-hued, an achievement icon is gold. Don't use one
accent color for every icon.
Workflow when building 4 screens
- Check the bridge (
ping).
- Build the shared chrome first as a component set: status bar, tab bar,
base background. One component set on a "Components" page.
- Decide the metaphor per tab before creating any frame. Write the
mapping explicitly ("Home=hero, Log=heatmap, ..."). Don't skip this —
picking metaphors inside the build loop is where you revert to "same
screen, different color".
- Create each tab's frame using
mcp__mercury__create kind:"frame",
390×844 iPhone size, place the shared chrome instances, then build the
metaphor-specific content.
- Verify visually between tabs. Export each frame with
mcp__mercury__export_node and look at them side-by-side. If any two
feel like siblings instead of cousins, the metaphor is leaking.
- Add ambient depth last (see the ambient-depth skill) — one or two
glows per tab, placed to complement the spine, not to hide it.
Anti-patterns
- Copy-paste the Home screen and recolor. Reads as fake.
- Every tab has a hero pill at top. Only one tab should — the one whose
metaphor is "hero number".
- Every icon is the brand accent color. Category-specific coloring is
what makes the app feel lived-in.
- Every tab is a vertical scroll list. At least one tab should break
vertical rhythm (grid, chart, heatmap).
1---2name: tab-metaphors3description: Design multi-tab app screens (fitness / analytics / productivity / social) so each tab uses a distinct structural layout instead of just rotating accent colors. Use when the designer asks to "design a tab bar app", "make 4 screens for a fitness app", "Home / Insights / Profile screens", or any multi-screen app where the screens share chrome but serve different content kinds. Prevents the "four templated screens that feel fake" trap.4---56# Tab Metaphors (Mercury)78A real app's tab bar says "here are different *kinds* of information", not9"here are the same screen in different colors". The rookie mistake is building10four screens that each have a hero pill, a scroll list, and a color accent —11and wondering why it reads as a prototype instead of a product.1213Cohesion comes from **shared chrome** (status bar, type scale, base14background). Identity comes from the **structural spine**: each tab picks a15layout metaphor that maps to its content.1617## Metaphor catalog1819Pick one per tab. These are the patterns that ship in real apps:2021- **Hero number** — one enormous stat with a delta and a context line. Use22 for: today-view, dashboard landing, "what matters right now".23- **Calendar heatmap** — grid of day cells colored by intensity. Use for: log24 history, contribution graphs, streak tracking.25- **Timeline grid** — vertical list of time-stamped events, each a card or26 row. Use for: feeds, activity history, session logs.27- **Stacked charts** — one or two primary charts (bar, line, donut) with28 small-multiple breakdowns below. Use for: insights, analytics, trends.29- **Collection grid** — 2- or 3-column grid of tiles (badges, achievements,30 items). Use for: profile achievements, saved items, libraries.31- **Detail/hero composition** — large hero image or media block with meta32 rows below. Use for: now-playing, article view, workout-of-the-day.3334## Typical 4-tab fitness/health mapping3536| Tab | Metaphor | Why |37|---------|-------------------|-------------------------------------------------------|38| Home | Hero number | "Did I hit my goal today?" is a single number |39| Log | Calendar heatmap | Shows the rhythm — streaks, gaps, consistency |40| Insights| Stacked charts | Trends only make sense over time, not in a number |41| Profile | Collection grid | Badges and achievements are visually heterogeneous |4243## Typical 4-tab productivity mapping4445| Tab | Metaphor |46|---------|-------------------|47| Today | Timeline grid |48| Inbox | Collection grid (list variant) |49| Focus | Hero number (timer + session count) |50| Review | Stacked charts (completion rate, etc.) |5152## What every tab must share5354Keep these identical across all tabs — this is what makes the app feel like55one product:5657- Status bar (time, signal, battery) — top 44pt58- Page title position and type size59- Body type scale (size, weight, color)60- Base background color (+ any ambient depth effect, applied once globally)61- Tab bar (icons + labels, active-state treatment, home indicator) — bottom62 83pt on iPhone63- Spacing rhythm (16 / 24 / 32)6465## What each tab varies6667- **Layout spine** (which metaphor above)68- **Primary typography hierarchy** — hero number tab uses a 72pt number;69 charts tab uses chart labels; heatmap tab uses day-of-week headers70- **Color accents** — but *only after* the spine is distinct. Color is the71 last 10%, not the first 90%.72- **Icon treatment per content category** — a food log icon is warm-hued,73 a workout icon is cool-hued, an achievement icon is gold. Don't use one74 accent color for every icon.7576## Workflow when building 4 screens77781. **Check the bridge** (`ping`).792. **Build the shared chrome first** as a component set: status bar, tab bar,80 base background. One component set on a "Components" page.813. **Decide the metaphor per tab** before creating any frame. Write the82 mapping explicitly ("Home=hero, Log=heatmap, ..."). Don't skip this —83 picking metaphors inside the build loop is where you revert to "same84 screen, different color".854. **Create each tab's frame** using `mcp__mercury__create kind:"frame"`,86 390×844 iPhone size, place the shared chrome instances, then build the87 metaphor-specific content.885. **Verify visually between tabs.** Export each frame with89 `mcp__mercury__export_node` and look at them side-by-side. If any two90 feel like siblings instead of cousins, the metaphor is leaking.916. **Add ambient depth last** (see the ambient-depth skill) — one or two92 glows per tab, placed to complement the spine, not to hide it.9394## Anti-patterns9596- **Copy-paste the Home screen and recolor.** Reads as fake.97- **Every tab has a hero pill at top.** Only one tab should — the one whose98 metaphor is "hero number".99- **Every icon is the brand accent color.** Category-specific coloring is100 what makes the app feel lived-in.101- **Every tab is a vertical scroll list.** At least one tab should break102 vertical rhythm (grid, chart, heatmap).