Mobile ui
Use when building or polishing mobile app UI visuals (Flutter, SwiftUI, Jetpack Compose) — before choosing spacing, typography, color, corner radius, elevation, or motion duration; when a screen "looks off", feels cluttered, cheap, or inconsistent; when reviewing touch targets, contrast ratio, Dynamic Type, text overflow, or dark mode; also when hard-coded colors/paddings spread across widgets, or every new screen re-invents its own styling.From its SKILL.md
npx -y skills add tienenwu/fables --skill mobile-uiAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.7 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it
🌐 繁體中文(canonical) · English mirror
Mobile UI Aesthetics Judgment Handbook
"Looks good" is not mystical taste — it is the byproduct of four things: consistency, hierarchy, density, and contrast. This handbook turns them into adjudicable numbers and criteria.
Core principles
- Beauty is a byproduct of consistency: tokens (spacing/type/color/radius) come before screens — screens only consume tokens, never invent values; every "tweak it locally just this once" is borrowing at loan-shark rates.
- A green light under light mode + default font size + big screen + short data counts for nothing: dark mode, enlarged text, small physical screens, and long strings / real data are four independent verification axes — any one of them alone can break your UI.
- Hierarchy is expressed through size, weight, lightness difference, and position — not decoration: shadows, gradients, and dividers are the last 10% of polish, not a remedy for unclear hierarchy.
- Anything tappable must be big enough and look tappable: touch targets ≥44×44pt (iOS) / 48×48dp (Android); interactive elements must be visibly distinguishable from plain text.
- Motion is the narration of state change: appearing/disappearing/moving elements need transitions (small components 100–200ms, screen transitions 250–350ms); beyond 500ms users feel "laggy", not "fancy".
Task triage
| Situation | Path | Read first |
|---|---|---|
| Starting a new screen | Confirm spacing/color/type tokens exist, then lay out | references/design-tokens.md |
| Choosing font size, weight, line height | Follow the type scale criteria; ≤4 sizes per screen | references/design-tokens.md §Type |
| Picking colors, building dark mode | Semantic color roles only, never raw hex | references/design-tokens.md §Color |
| Screen "looks off" but can't say why | Run the five-step diagnosis: alignment→spacing→hierarchy→color→density | references/layout-hierarchy.md §Diagnosis |
| Layout, alignment, information density | Single leading edge + 4/8 grid | references/layout-hierarchy.md |
| Adding motion/transitions | Duration and easing ranges | references/layout-hierarchy.md §Motion |
| UI done, ready to ship | Verify all four axes + extreme data, item by item | references/release-checklist.md |
Red lines (absolutely forbidden)
- Never hard-code color values, font sizes, or spacing numbers inside widgets/views — dark mode and redesigns collapse everything; all values go through theme/tokens.
- Never ship touch targets smaller than 44×44pt / 48×48dp — mis-taps and missed taps are the most direct source of "this app feels cheap"; visuals may shrink, hit areas may not.
- Never ship body text below 4.5:1 contrast (3:1 for large text, WCAG AA) — low contrast is simply unreadable in outdoor sunlight; "that's the gray in the mockup" is not a reason.
- Never build dark mode by inverting the light theme color-by-color — dark mode is a re-mapping of semantic roles (surfaces lighten to express elevation, colors desaturate), not an invert.
- Never hard-position with fixed widths/heights copied off the mockup — one long username, one German label, or 130% text scaling will break it; always flexible layout + extreme-data verification.
- Never introduce a 3rd accent color or a 4th corner-radius step on one screen — when tempted, adjudicate at the token layer; no inventing values on the spot.
- Never declare UI done after verifying only light mode + default font size + a big simulator screen — the four axes are independent failure domains with zero evidential overlap.
Failure signals (turn back, don't retry)
| Symptom | Usually means | Fall back to |
|---|---|---|
| Every new screen re-decides its padding numbers | Missing spacing token scale | Define the 4/8 scale at the token layer, snap everything |
| Dark mode full of unreadable or glaring elements | Hard-coded colors, no semantic roles | Rebuild the color layer, don't patch spot by spot |
| Layout breaks on language switch or real data | Fixed-size thinking | Flexible layout + re-verify with extreme data |
| "Just a bit more shadow will fix it" for the 3rd time | A hierarchy-structure problem, not missing decoration | Size/weight/spacing hierarchy design |
| Spacing micro-tweaks oscillating back and forth | No grid baseline, aligning by feel | Snap everything to the 4/8 grid first |
| Fix this screen, that screen drifts again | Styles scattered, no single source of truth | theme/token single source |
References index
references/design-tokens.md— spacing scale, type scale, semantic color, dark mode, radius/elevation step counts, machine-enforcing tokens. Read before laying anything out.references/layout-hierarchy.md— alignment, visual hierarchy, density, touch targets, motion durations, the five-step "looks off" diagnosis. Read when a screen feels wrong.references/release-checklist.md— pre-ship UI checks: four-axis verification, extreme data, contrast and touch-target audits. Tick through before shipping.references/test-scenarios.md— judgment quiz set to verify a successor model follows the criteria. Not for the model currently executing tasks.
What ships with it: 4 files
21.6 KB alongside SKILL.md
references/
- design-tokens.md5.8 KB
- layout-hierarchy.md5.8 KB
- release-checklist.md5.0 KB
- test-scenarios.md5.1 KB