UpStart Productions
LaunchYourVibe

Launch your accessible vibe.

AI doesn't catch everything. Reference cards for vibe coders who want to ship secure, accessible apps with great UX. Click a card to flip for more info.

Spacing & Typography
Spacing & Typography T-01
Type Scale:
Mobile ≠ Desktop
Mobile
28px
H1
18px
H2
15px
Body
12px
Caption
Desktop
40px
H1
28px
H2
16px
Body
13px
Caption
LaunchYourVibe T-01
The gap is real. Mobile H1s feel enormous on desktop. Don't just scale down: rethink the whole stack per context.
Spacing & Typography T-02
The 8pt Grid:
Your Spacing Foundation
4pxMicro: icon gaps, badge offsets
8pxTight: within components
16pxDefault: padding, row gaps
24pxComfortable: section gaps
32pxLoose: page sections
48pxOpen: major layout gaps
LaunchYourVibe T-02
Arbitrary spacing makes screens feel unsteady. When everything snaps to the grid, the spacing becomes invisible, which is the goal.
Spacing & Typography T-03
Line Length:
45–75 Characters
Too Wide
~120 chars
Just Right
~60 chars
LaunchYourVibe T-03
Long lines force the eye to hunt for the next line. Short columns increase jumps per paragraph. 45–75 chars is where reading becomes effortless.
Spacing & Typography T-04
Weight Does the
Hierarchy Work
Page Title
Section heading
Body text reads here at regular weight. The eye moves through hierarchy without friction.
Caption · secondary info
LaunchYourVibe T-04
Color and size aren't the only tools. Weight creates hierarchy even in a single color. Use 400 for body, 600 for labels, 700 for headings: avoid everything in between.
Spacing & Typography T-05
Line Height by
Text Role
Headings1.1–1.2
Subheadings1.2–1.3
Body text1.5–1.7
Captions / labels1.3–1.4
UI button text1.0–1.1
LaunchYourVibe T-05
Tight headings look intentional. Tight body text looks like a bug. Body needs room to breathe; headings are short enough that tight spacing reads as designed.
Spacing & Typography T-06
Padding vs Margin:
Inside vs Outside
MARGIN (outside)
PADDING (inside)
Content
LaunchYourVibe T-06
Padding changes the element's feel; margin changes its relationship to neighbors. Use padding to make a button feel spacious. Use margin to create breathing room in a layout.
Spacing & Typography T-07
Visual Hierarchy:
3 Levels Maximum
5 Levels
3 Levels
LaunchYourVibe T-07
Every level you add competes with the others. Primary, secondary, and body. That's the hierarchy. Adding a fourth level usually means the third was doing too much.
Spacing & Typography T-08
Whitespace Is
a Design Element
Cramped
Breathes
LaunchYourVibe T-08
Space is not empty: it's structure. Generous spacing reduces cognitive load. The gaps between elements tell users which things belong together and what's a separate thought.
Spacing & Typography T-09
Left-Align Body Text.
Center Sparingly.
LEFT: body text, labels, lists
CENTER: short headlines, CTAs
CENTER: multi-line body copy
LaunchYourVibe T-09
Centered multi-line text is the hallmark of amateur design. The ragged left edge forces the eye to hunt for the start of each new line. Left-align everything longer than a headline.
Spacing & Typography T-10
Two Typefaces.
That's the Budget.
TWO FACES, ONE JOB EACH
Serif or Sans: headlines
Mono or different weight: UI labels, code
FONT COLLECTION
Georgia Futura Garamond Helvetica Courier
LaunchYourVibe T-10
Each typeface carries a personality: mixing them creates noise. Two typefaces in clear roles feel like a system. Three or more feel like you couldn't decide.
Spacing & Typography T-11
Fluid Type:
Scale with the Viewport
Small
24px
Medium
32px
Large
48px
clamp(1.5rem, 4vw, 3rem)
LaunchYourVibe T-11
Static type forces awkward breakpoints. Fluid type scales continuously: no sudden size jumps as the window resizes. Set a min, max, and a viewport-relative middle value with clamp().
Spacing & Typography T-12
Letter Spacing:
Where It Helps
LABELS & TAGS+0.08–0.15em
Large Headlines−0.01–0.02em
Body paragraph text0 (default)
Code / mono+0.03–0.05em
LaunchYourVibe T-12
Tight letter spacing on big type is a design move. Tight spacing on small type is illegible. The smaller the text, the more spacing it needs: not less. Never tighten body text.
Spacing & Typography T-13
Proximity Creates
Visual Grouping
Equal gaps
Label
Label
Labels close
Label
Label
LaunchYourVibe T-13
A label 8px from its field looks owned. A label 16px away looks like a heading. The gap between things signals their relationship: closer means "these belong together."
Spacing & Typography T-14
Safe Zones:
Respect the Hardware
env(safe-area-
inset-top)
env(safe-area-
inset-bottom)
LaunchYourVibe T-14
UI placed in the notch or behind the home indicator isn't just ugly: it's unusable. Use CSS env() safe-area variables so your layout always respects the device's hardware edges.
Spacing & Typography T-15
Color + Type:
Two Signals Are Enough
Success: color + icon confirm it
Error: color + icon signal failure
Warning: color + icon shows caution
Info: color + icon for context
LaunchYourVibe T-15
Color alone fails for colorblind users. Pair every color-coded state with a second signal: an icon, label, or shape. This isn't accessibility extra credit; it's baseline UX.
Interaction
Interaction I-01
Every Button Needs
4 States. Minimum.
Default
Save
Hover
Save
Active
Save
Disabled
Save
LaunchYourVibe I-01
Missing a state isn't neutral. No disabled state feels broken when nothing happens. Each state signals what's possible right now.
Interaction I-02
Error Messages:
Say What + Why + Fix
"An error occurred."
...no help at all
"Couldn't save changes."
Your session timed out after 30 min of inactivity.
Sign in again to continue →
LaunchYourVibe I-02
What happened. Why. What to do. Three sentences max. Plain language. No stack traces. Never blame the user.
Interaction I-03
Loading: Match the
Wait to the Pattern
Skeleton: page/card load
Progress: known duration
65%
Spinner: quick actions
LaunchYourVibe I-03
Blank screens feel broken; spinners feel slow. Use skeleton loaders for content-heavy loads. Spinners for <2s actions. Progress bars when the user needs to know how long.
Interaction I-04
Destructive Actions
Need Friction:
On Purpose
Delete "Project Alpha"?
This will permanently remove all files and comments. This cannot be undone.
Cancel
Delete Forever
LaunchYourVibe I-04
Make the danger legible. Red button, explicit label, and a cost statement. "Are you sure?" without consequences doesn't create real friction: specifics do.
Interaction I-05
Success Is a
Moment. Mark It.
Payment Sent
$240.00 to Sarah Johnson
arrives in 1–2 business days
View Receipt →
LaunchYourVibe I-05
Silence after a successful action breeds doubt. Confirm what happened, to whom, and what comes next. The user's mental model needs closure.
Interaction I-06
Toast = Info.
Dialog = Decision.
Toast: ephemeral, non-blocking
File saved · Undo
Dialog: requires a choice
Unsaved Changes
Save before closing?
Discard
Save
LaunchYourVibe I-06
Dialogs steal focus because they have to. If the user can ignore it, use a toast. If they must choose, use a dialog. Never use a dialog to say something they don't need to act on.
Interaction I-07
Validate on Blur,
Not on Keystroke
Email address
sarah@company.com
Looks good
Password
••••••
Must be 8+ chars with a number
Phone
Still typing...
LaunchYourVibe I-07
Showing errors while someone is mid-thought is hostile. Wait for blur (field exit) to validate. Only re-validate on keystroke after the first error appears. Never on every character.
Interaction I-08
Optimistic UI:
Show Success First
Pessimistic
User waits for server confirmation
Optimistic
UI updates instantly
Server syncs in background
Rollback only if server fails
LaunchYourVibe I-08
Most requests succeed. Assume success, update the UI immediately, sync in the background. Roll back only on actual failure. The app feels instant even when it isn't.
Interaction I-09
Undo Beats
Confirm Dialogs
Interrupt with confirm
Delete this message?
[Cancel] [Delete]
Act, then offer undo
Message deleted ·Undo (5s)
LaunchYourVibe I-09
Confirms interrupt flow. Undo restores agency. Let users act immediately, then give them a short window to reverse it. They feel more in control, not less.
Interaction I-10
Every Tap Needs
Immediate Feedback
Feedback Types
Visual: color shift, scale, ripple
Haptic: light tap on iOS/Android
Audio: subtle chime (optional)
No feedback → broken?
< 100ms → feels instant
LaunchYourVibe I-10
Without feedback, users tap twice. Response within 100ms feels instantaneous. 100–300ms feels fast. Beyond 300ms, users start to doubt. Give visual feedback first, everything else second.
Interaction I-11
Progress: Show
Where They Are
Steps: clear location
1
2
3
4
Upload: % with estimate
42%~18s left
LaunchYourVibe I-11
Progress without context is just anxiety. Show step number, percentage, or time estimate. Giving users a frame of reference reduces perceived wait time by 40%.
Interaction I-12
Hover Actions
Don't Exist on Mobile
Desktop pattern on mobile
"Hover to see options": oops
Mobile-first patterns
Long press reveals context menu
Swipe gesture shows actions
Always-visible action icons
LaunchYourVibe I-12
Touch has no cursor. Any interaction hidden behind hover is invisible on mobile. If your content needs additional actions, make them visible, not discoverable via pointer proximity.
Interaction I-13
Disabled Means
"Not Yet": Explain Why
Silent disabled
Submit
...why can't I click?
Contextual disabled
Submit
Complete all required fields to continue
LaunchYourVibe I-13
A grayed button with no explanation creates confusion. Tell users what they're missing. The block becomes a guide, and prevents them from abandoning the form in frustration.
Interaction I-14
Swipe Actions Need
Visual Teaching
Message from Sarah
← swipe left / swipe right →
Show hint on first load
Reveal partially, then snap
Use consistent direction
LaunchYourVibe I-14
Gestures are invisible until taught. On first use, animate a partial swipe. Use destructive actions only on one side: left for danger is a convention users already know.
Interaction I-15
Right Keyboard
for Every Input
Phone numbertel
Email addressemail
URL / web addressurl
Whole numbersnumeric
Decimals / pricesdecimal
Search fieldsearch
LaunchYourVibe I-15
The wrong keyboard is a tiny betrayal of trust. A number pad for phone numbers, @ key for emails: set inputmode or type correctly and the keyboard is already optimized.
Components
Components C-01
Modal → Desktop
Bottom Sheet → Mobile
Desktop
Mobile
LaunchYourVibe C-01
Modals trap thumbs. On mobile, a centered dialog requires two-handed use. A bottom sheet rises from where thumbs already live. Same intent. Opposite ergonomics.
Components C-02
Tab Bar → Mobile
Sidebar → Desktop
Mobile
Home
Search
Profile
Desktop
LaunchYourVibe C-02
Thumb reach dictates nav placement. Bottom tabs stay in the natural grip zone on mobile. Sidebars use the screen width that desktop has to spare. Never swap them.
Components C-03
Forms Are Always
Single Column on Mobile
Two Column
cramped on small screen
Single Column
LaunchYourVibe C-03
Two columns on mobile means two columns of tiny inputs. Users skip fields accidentally and make more errors. Single column, full width. One field, one decision at a time.
Components C-04
Toggle = Immediate.
Checkbox = On Submit.
Toggle: takes effect now
Dark Mode
Checkbox: applied when saved
Marketing emails
Security alerts
LaunchYourVibe C-04
Toggles are instant actions. Checkboxes are selection within a form. If the setting takes effect the moment you flip it (like dark mode), use a toggle. If it's part of a group submitted together, use checkboxes.
Components C-05
Cards for Browse.
Lists for Scan.
Cards
Lists
LaunchYourVibe C-05
Cards invite exploration; lists support comparison. Use cards when each item has rich media or requires its own visual weight. Use lists when users are scanning for a specific item quickly.
Components C-06
Dropdowns on Mobile:
Use Native or Bottom Sheet
Tiny custom dropdown
Native select / action sheet
Native <select> for short lists
Bottom sheet for long/visual lists
LaunchYourVibe C-06
Custom dropdowns fight the OS. Native selects trigger the platform's built-in scroll picker: optimized for touch. Only build custom when the native control genuinely fails the need.
Components C-07
FAB = One Primary
Action. One.
+
One action, unmistakably primary
FAB Abuse
+
now nothing is primary
LaunchYourVibe C-07
The FAB is the most prominent tap target on screen. It implies "this is the thing you do most." If you can't name that one action, the FAB isn't the right pattern.
Components C-08
Chips: Filter or Select,
Not Both at Once
Filter chips: current filters
Design
Remote
+ Engineering
+ Product
Input chips: entered values
sarah@co.com
mike@co.com
Add...
LaunchYourVibe C-08
Chips have two distinct jobs: filtering and input. Don't mix them on the same surface. Filter chips are toggles. Input chips represent values the user has added. Styling should signal the difference.
Components C-09
Accordions Hide Content.
Use Them Intentionally.
Shipping information
Arrives in 3–5 business days. Free on orders over $50.
Returns policy
Size guide
Use for: secondary info, long FAQ, optional detail
Avoid for: primary content, critical steps, comparisons
LaunchYourVibe C-09
Accordions create extra work for the user. Every collapsed section is a barrier. Use them when the content is genuinely optional: not to make a page feel shorter while hiding required reading.
Components C-10
Date Pickers:
Match the Date Type
BirthdayMonth/Year scroll
Appointment timeCalendar + time
Date rangeTwo-cal inline
Relative date"In 3 days" chip
Year onlyYear scroll / input
LaunchYourVibe C-10
There is no universal date picker. Picking a birthday is a different task than scheduling a meeting. The interface should match the cognitive model: not force a calendar view on every date type.
Components C-11
4 Alert Levels.
Don't Cry Wolf.
Info: context, not urgent
Success: action completed
Warning: may need attention
Error: action failed or blocked
LaunchYourVibe C-11
Every alert in red trains users to ignore red. Reserve error alerts for actual errors. Info banners for context. If everything is urgent, nothing is. Overused alerts become wallpaper.
Components C-12
Search Placement
Signals Its Importance
Primary use case → top of page
Search products...
Secondary use → header icon / tab
(nav bar icon)
LaunchYourVibe C-12
If search is how most users navigate, it belongs at the top: always visible. If it's a power-user feature, tuck it in nav. Never make it a modal activation or a tiny corner icon on search-first apps.
Components C-13
Steppers for Small Ranges.
Input for Large.
Stepper: range of 1–10
3
+
Stepper: quantity of 500
... 497, 498, 499, 500 ← painful
→ Use a text input instead
LaunchYourVibe C-13
Steppers work for small, bounded quantities. If someone might want 500 of something, don't make them tap 499 times. Offer a direct input. Steppers should cover ranges users reach in under 10 taps.
Components C-14
Tooltips Are for
Desktop Power Users
Good tooltip use
K Search
Keyboard shortcut hints
Tooltip as documentation
Required to understand the UI
Critical info hidden in hover
Only touch-accessible on long press
LaunchYourVibe C-14
If users need a tooltip to use a feature, the feature needs better labeling. Tooltips are bonus context for experienced users: not a substitute for clear UI copy. And they don't exist on touch screens.
Components C-15
Infinite Scroll for Browse.
Pagination for Find.
Infinite scroll
Social feeds
Photo galleries
Content discovery
News streams
Pagination
Search results
Data tables
E-commerce lists
Audit logs
LaunchYourVibe C-15
Infinite scroll removes the user's sense of location. If they need to return to a specific item or share a result, pagination gives them an address. Endless scroll is for consuming, not finding.
Accessibility
Accessibility A-01
Contrast Ratios:
AA vs AAA
Body Text
4.5:1 minimum
Large Text
3:1 minimum
Enhanced
7:1 AAA
This fails
2.9:1
Large text = 18pt normal or 14pt bold
LaunchYourVibe A-01
AA is the legal baseline; AAA is the gold standard. Body text needs 4.5:1. Large text (18pt+ or 14pt+ bold) needs 3:1. UI components and icons need 3:1 against adjacent colors. Test with a real contrast checker: eyeballing fails.
Accessibility A-02
Touch Target
Minimum Sizes
22px
Too small
~
36px
Marginal
44pt iOS
48dp Android
LaunchYourVibe A-02
A visually small element can still have a large hit area. iOS requires 44×44pt, Android recommends 48×48dp. Use padding to expand the tap zone without changing visual size. Crowded targets need 8pt spacing between them.
Accessibility A-03
Focus Indicators Must
Be Visible
Button
outline: none
Button
2px solid
Button
offset ring
LaunchYourVibe A-03
Keyboard users navigate entirely by focus ring. Never suppress it with outline: none without a custom replacement. Focus must meet 3:1 contrast against adjacent colors. Use :focus-visible to show it only for keyboard, not mouse.
Accessibility A-04
Every Interactive Element
Needs a Label
Screen reader hears: "Button"
×
Screen reader hears: "Delete item"
×
aria-label="Delete item"
LaunchYourVibe A-04
Icon buttons are invisible to screen readers without labels. Add aria-label to every icon-only button. Use aria-labelledby when a visible label exists nearby. The label should describe the action, not the icon.
Accessibility A-05
Semantic HTML:
Structure Is Meaning
Div soup
<div class="hd">
<div class="nav">
<div class="btn">
Semantic
<header>
<nav>
<button>
h1 → h2 → h3. Never skip levels.
LaunchYourVibe A-05
HTML elements carry meaning that assistive tech relies on. Use <button> for actions, <a> for navigation, and heading tags in sequential order. Screen readers use landmark elements (main, nav, aside) to let users jump between page sections.
Accessibility A-06
Color Alone Is Not
Enough
Color only
!
Color + icon
1 in 12 men have color vision deficiency
LaunchYourVibe A-06
Red/green distinctions are invisible to 8% of users. Always pair color with a second signal: an icon, a label, a pattern, or a shape. This applies to charts, status indicators, form errors, and any state communicated purely through hue.
Accessibility A-07
Support Text Resize
Up to 200%
100%
The quick brown fox jumps.
200%
The quick…
No horizontal scroll. No clipped content.
LaunchYourVibe A-07
Low-vision users regularly set system font size to 150–200%. Use relative units (rem, em): never px for font sizes. Test by bumping browser font size to 200% and checking for content loss, overflow, or broken layouts. Mobile: respect system dynamic type settings.
Accessibility A-08
Respect Reduced
Motion Preferences
@media (prefers-reduced-motion: reduce) {
* { animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important; }
}
Vestibular disorders affect 35% of adults 40+
LaunchYourVibe A-08
Parallax, auto-playing carousels, and screen-wide transitions can trigger vestibular disorders. Check prefers-reduced-motion and remove or minimize non-essential animation. Keep functional transitions (loading, focus)...eliminate decorative ones.
Accessibility A-09
Labels Always Visible:
Never Placeholder-Only
Placeholder label
Email address
Disappears on type
Persistent label
Email address
user@example.com
LaunchYourVibe A-09
Placeholders vanish when users start typing. This breaks cognitive load for anyone who forgets what a field was, and breaks screen readers entirely. Use a persistent <label> element for every input. Placeholder text is fine for examples: not for labels.
Accessibility A-10
Link Errors to Their
Fields Programmatically
Visually associated only
Email
badmail
Invalid email address
aria-describedby linked
<input aria-describedby="err1">
<span id="err1" role="alert">
LaunchYourVibe A-10
Screen readers don't infer visual proximity. Use aria-describedby to link the error message to its input, and role="alert" so it's announced immediately when it appears. aria-invalid="true" also signals the field state.
Accessibility A-11
Skip Navigation Links
Save Keyboard Users
Visible on :focus-visible only
Hidden from sighted users
First element in DOM
Without skip link: Tab × 40+ to reach content
LaunchYourVibe A-11
Keyboard users Tab through every nav item on every page load. A skip link lets them jump directly to main content. Place it as the very first focusable element. Visually hide it until focused: don't remove it from the DOM or tab order.
Accessibility A-12
Alt Text: Describe
the Purpose, Not the Pixels
Describes pixels
"Image of a person smiling at a laptop with plants in the background"
Describes purpose
"Customer using the dashboard to track weekly goals"
Decorative images
alt="": intentionally empty
LaunchYourVibe A-12
Alt text should convey what the image communicates in context. If the image is pure decoration, use an empty alt attribute (alt="") so screen readers skip it. If it's a chart, describe the key insight: not the visual style.
Accessibility A-13
DOM Order = Reading
Order
CSS-reordered
DOM: Footer
DOM: Main
DOM: Header

CSS order: 3 1 2
Logical DOM
DOM: Header
DOM: Main
DOM: Footer

Matches visual order
LaunchYourVibe A-13
Screen readers follow the DOM: not what's visible on screen. Using CSS order, float, or absolute positioning to rearrange visuals without reordering HTML creates a disjointed reading experience for keyboard and screen reader users.
Accessibility A-14
Icon Buttons Need
Accessible Names
Three ways to name an icon button
aria-label="Search"
aria-labelledby="visible-text-id"
<span class="sr-only">Search</span>
title="" alone doesn't count: it's not announced reliably
LaunchYourVibe A-14
The accessible name is what screen readers announce. For icon-only buttons the visual label is the icon: which is meaningless to AT. Pick the strategy that fits: aria-label for standalone icons, visually-hidden text when you need translatable strings, aria-labelledby when a visible label exists nearby.
Accessibility A-15
WCAG Levels: A, AA,
and AAA in Practice
Level A
Minimum. Alt text, keyboard access, no seizure-inducing content.
Level AA
Legal standard. 4.5:1 contrast, captions, visible focus, consistent nav.
Level AAA
Gold standard. 7:1 contrast, sign language, extended audio desc.
LaunchYourVibe A-15
AA is the target for most products, and what most accessibility laws require. AAA is aspirational and not required for entire sites. Start with AA conformance, document your approach, and layer in AAA where it meaningfully serves your users.
Data
Data D-01
Bar = Compare.
Line = Change Over Time.
BAR: Compare
LINE: Trend
Scatter: correlation · Area: volume over time
LaunchYourVibe D-01
The wrong chart type doesn't just look off: it misleads. Use bars when comparing discrete values across categories. Use lines when showing how a single value changes continuously over time. Connecting discrete categories with a line implies continuity that doesn't exist.
Data D-02
Pie Charts: Part-to-Whole
Only. Max 5 Slices.
Desktop 45%
Mobile 35%
Tablet 20%
Never compare across pies
LaunchYourVibe D-02
Pie charts only answer one question: what share of the whole? They require slices to sum to 100%. Beyond 5 slices, human perception breaks down: angles are harder to compare than lengths. Use a bar chart if you want comparison; a pie if you want composition.
Data D-03
Empty Chart States
Are Not Optional
Broken empty state
undefined
Helpful empty state
No data yet for this period.
Start tracking to see trends here.
LaunchYourVibe D-03
An empty chart with no explanation looks broken. Design the zero state: explain why there's no data, tell users what action produces data, and consider showing a ghost/preview of what the chart will look like. Every chart needs a zero state, a loading state, and an error state.
Data D-04
Axis Labels and Units
Must Always Be Visible
No context
Month
Values 0–? Unknown
Labeled
$K Month
LaunchYourVibe D-04
A chart without axis labels is a Rorschach test. Every axis needs a label and a unit. "Revenue" without "$" or "K" forces users to guess the scale. Never rely on tooltips alone: they're invisible on mobile and require interaction to reveal basic context.
Data D-05
Small Multiples Beat
One Crowded Chart
Overloaded
Small multiples
LaunchYourVibe D-05
When one chart gets more than 4–5 series, everything competes. Small multiples repeat the same chart structure for each category, letting users see patterns across dimensions at a glance. Same scale, same axes: shape differences become immediately readable.
Data D-06
Use Accessible Palettes
in Data Visualization
Red/green only
Indistinct to 8% of users
Colorblind-safe
Also vary shape + pattern for print
LaunchYourVibe D-06
Never rely on red vs. green to distinguish data series. Use palettes designed for colorblind users (IBM Carbon, ColorBrewer, Tableau colorblind). Pair color differences with shape, texture, or direct labeling so the chart works without color at all.
Data D-07
Tables for Lookup.
Charts for Patterns.
Use TABLE when…
Exact values matter
Users scan rows
Multiple attributes per item
Use CHART when…
Shape / trend matters
Comparing categories
Relative size is the point
LaunchYourVibe D-07
Charts reveal patterns; tables reveal values. If a user needs to look up a specific number, a table serves them better than a chart. If they need to understand a trend, distribution, or comparison across categories, a chart does what a table can't.
Data D-08
Sparklines: Trend
at a Glance
Revenue
$48.2K
Users
1,204
Churn
3.1%
LaunchYourVibe D-08
Sparklines pack trend context into a single row. They're not for precise reading: they're for direction and shape at a glance. Pair them with a KPI value. Omit axis labels; the shape is the message. Perfect for dashboards with many metrics in limited space.
Data D-09
Reduce Data Density
on Mobile
Desktop: full
J F M A M J
Mobile: simplified
Q1 Q2 Q3
LaunchYourVibe D-09
Mobile screens are too narrow for complex chart layouts. Reduce the number of data points, consolidate time periods (months → quarters), increase label size, and favor horizontal bar charts over vertical ones where space is constrained. Link to a fuller view if detail matters.
Data D-10
Chart Tooltips: Detail
on Demand
Apr 2024 $24,100
Hover/tap → precise value
Tooltips don't exist on mobile without tap
LaunchYourVibe D-10
Tooltips layer precise values onto a chart without cluttering it. Don't rely on them as the only access to important data: mobile users must tap to trigger them, and they're invisible until interaction. Design for the chart to communicate its core message without tooltip dependency.
Data D-11
Bar Charts Start
at Zero. Always.
Truncated y-axis
102 98 Looks dramatic
Zero baseline
102 0 Honest scale
LaunchYourVibe D-11
Truncating a bar chart's y-axis turns minor differences into apparent crises. Bar height encodes quantity: cutting the baseline misrepresents proportions. Line charts can use non-zero baselines to show variance; bar charts cannot. If differences are small, consider a line chart instead.
Data D-12
Donut Charts: Add a
Summary KPI in the Center
58% Complete
Done 58%
Remaining 42%
Center = the whole story at a glance
LaunchYourVibe D-12
The donut chart's hole is prime real estate. Use it for the single most important number: total, percentage complete, or a key KPI. Without a center value, a donut chart is just a pie with a hole: the center makes it meaningfully different.
Data D-13
Stacked Bars Mislead
Middle Segments
Q1 Q2 Q3 Top Mid Bot
Middle segments float: hard to compare across bars
LaunchYourVibe D-13
Stacked bars only allow accurate comparison of the bottom segment and the total. Middle segments float on different baselines, making comparison nearly impossible. If comparing sub-categories matters, use grouped bars. Use stacked bars only when total and bottom segment are the story.
Data D-14
Layer Data: Summary
First, Detail on Demand
$48K
Monthly Revenue
↑ 12% vs last month
Tap → breakdown by product / region / channel
Product A
$22K
Product B
$18K
Other
$8K
LaunchYourVibe D-14
Most users want the headline; a few want the footnotes. Lead with the single most important number and its trend. Let users drill into breakdown views only if they choose. Showing everything at once creates dashboards that exhaust instead of inform.
Data D-15
Chart Titles State the
Insight, Not the Subject
Subject title: reader works harder
Monthly Revenue by Region
What am I supposed to see here?
Insight title: reader gets it instantly
West Region Outpaced All Others Q3
Revenue by region, Jan–Sep 2024
LaunchYourVibe D-15
A subject title labels the chart. An insight title does the analysis for the reader. Move the descriptive label to a subtitle. The title should complete the sentence: "The main thing this chart shows is ___." Users shouldn't have to read and interpret: they should arrive at the conclusion immediately.