product-design
Product Design Best Practices
Professional design methodology. Don't guess — make intentional, justified decisions.
Always ask: "If I showed this to 10 users tomorrow, what would they remember?"
Before You Design: Discovery
Never design blind. Answer these first:
1. WHAT are we building? → Screen type, platform, scope
2. WHO is this for? → Audience, technical level
3. WHAT should users do? → Primary action, success metric
4. WHAT feeling to evoke? → Tone, energy
5. WHAT JOB does this do? → "Help me decide" / "Convince me" / "Get me started"
6. WHAT objections exist? → "Is it worth it?" / "Is it legit?" / "Will it work?"
7. WHAT should they remember? → The hook, the differentiator
8. ANY constraints? → Brand, tech requirements, inspirations
Design Brief: "I'm designing a [WHAT] for [WHO] that helps them [GOAL] and should feel [TONE]."
Design Workflow
0. DISCOVER → Design Brief
↓
1. RESEARCH → Study real products, competitors, best-in-class examples
↓
2. ANALYZE → Extract patterns, compare approaches, make decisions
↓
3. DESIGN → Apply craft: typography, color, spacing, copy, soul
↓
4. IMPLEMENT → Build, validate against quality gates
Research & Analysis
Research ≠ Copying the Average
Research is about understanding WHY choices work, not copying WHAT everyone does.
- Best practices = starting point, not destination
- "Safe" often = "forgettable"
- Document reasoning: "Most use X, but we chose Y because..."
Three Lenses (Use All)
Lens A: Structure — Layout, components, information hierarchy. Common solutions to common problems.
Lens B: Visual Craft — For each strong reference, notice:
- Typography — fonts, sizes, weights, letter-spacing
- Color — warm or cool? Accent? Hierarchy?
- Spacing — tight or airy? What's the rhythm?
- Details — shadows, borders, radii, gradients
- Icons/illustrations — style? Consistent?
- Overall vibe — premium? Playful? Technical?
Lens C: Conversion & Soul — What makes this one WORK?
- What's the HOOK in the first 3 seconds?
- How do they handle OBJECTIONS?
- Where's the TRUST (social proof, guarantees)?
- What's UNIQUE?
- What MICROCOPY has personality?
- What would a user REMEMBER tomorrow?
Steal List (Minimum 5 Items)
| Source | What | Why It Works | How I'll Use It |
|---|---|---|---|
| ... | Specific tactic with exact copy/numbers | Psychology behind it | Adaptation plan |
Be specific, not vague:
- "Linear — 13px/20px body, -0.01em tracking, 48px section gaps, #5E6AD2 accent at 8% opacity for hover"
- NOT "Linear — clean design"
Typography
Scale: Ratio 1.2 (minor third). Max 6–8 sizes: Display (48–64px), H1 (36–48px), H2 (24–32px), Body (16–18px), Small (13–14px), Caption (11–12px).
Leading: Large text = tight (1.0–1.2). Body = loose (1.5–1.6).
Letter-spacing — DO NOT SKIP:
| Text Type | Letter-spacing |
|---|---|
| Body (14–18px) | 0 |
| Small text (11–13px) | 0.01–0.02em — required |
| UI labels/buttons | 0.02em — required |
| ALL CAPS | 0.06–0.1em — always required |
| Large headings (32px+) | -0.01 to -0.02em |
| Display (48px+) | -0.02 to -0.03em |
Line length: 50–75 chars (max-width: 65ch). Pairing: Max 2 fonts.
Full guide: references/typography.md
Color
Palette: 4 layers — Neutrals (70–90%), Primary accent (5–10%), Semantic (success/warning/danger), Effects (rare).
Primary: One brand color with scale (50–950). 600 default, 700 hover, 800 active.
Contrast: 4.5:1 body text, 3:1 large text.
Dark theme: Not inverted. Background #0f0f0f, not #000. Text #f0f0f0, not #fff. Separate neutral scale.
Tokens: Name by purpose (--primary), not color (--blue).
Full guide: references/color.md
Spacing
Base unit: 4px or 8px. Everything multiplies from this.
4px: 4, 8, 12, 16, 24, 32, 48, 64, 96
8px: 8, 16, 24, 32, 48, 64, 96, 128
Proximity = relationship. Closer = connected, farther = separate.
Density: Match spacing to context — dense for dashboards (8-12px padding), default for product UI (16-24px), spacious for marketing (24-32px).
Responsive: Structural spacing (sections, containers) scales down 0.5-0.75x on mobile. Internal component spacing (icon-to-text, button padding) stays fixed.
Full guide: references/spacing.md
Avoiding AI Slop
NO INDIGO/VIOLET — Unless explicitly requested. Every LLM defaults to indigo (#6366f1). It's the biggest tell of AI-generated design. Choose brand-appropriate colors from research.
Generic (bad): default fonts, safe blue gradients, perfect symmetry, blob backgrounds, stock illustrations.
Professional (good): brand-appropriate color, intentional font pairing, visual tension/asymmetry, purposeful whitespace, custom imagery, social proof present.
Generic structure trap: Don't default to Hero → Features → Pricing → FAQ → CTA. Ask: "What can I add, remove, or reorder for THIS product?"
Full guide: references/anti-ai-slop.md
Motion
Motion serves: Feedback (it worked), Continuity (where it went), Hierarchy (look here). If it doesn't do one — remove it.
| Category | Duration |
|---|---|
| Instant (hover, press, toggle) | 90–150ms |
| State change (accordion, tabs) | 160–240ms |
| Large transition (modal, drawer) | 240–360ms |
Easing: Enter = ease-out, Exit = ease-in, Change = ease-in-out.
Required: prefers-reduced-motion support. No animation > 500ms in product UI. Never transition: all.
Full guide: references/motion.md
Icons
One style per product (outline OR solid). No mixing libraries.
Optical corrections: Geometric center ≠ visual center. Arrows/chevrons need 0.5–1px shift.
Color: currentColor by default. Semantic colors only for status.
Accessibility: Action icons need aria-label. Hit area 44×44px minimum.
Libraries: Lucide (SaaS default), Heroicons (Tailwind), Material Symbols, SF Symbols (Apple).
Full guide: references/icons.md
The Persuasion Layer
Fill this table before writing code:
| Element | Your Answer |
|---|---|
| Hook (first 3 sec) | Hero headline + visual |
| Story arc | Problem → Solution → Proof → Action |
| Objection killers | 1. ___ 2. ___ 3. ___ |
| Trust signals | Social proof / Guarantee / Security / Specifics (pick 2+) |
| Urgency/Scarcity | ___ or "N/A" |
| The memorable thing | What will they screenshot? |
If you can't fill this table, you're designing decoration, not persuasion.
The Soul
~80% proven patterns + ~20% unique choices.
- One bold visual choice (color, type treatment, illustration style)
- Voice and personality in copy
- Micro-interactions that surprise
- One detail users will remember
Test: "If someone screenshots this, would they know it's from THIS product?"
Implementation Quality Gate
| Category | Check |
|---|---|
| Functional | Primary action obvious? Error states? Works on mobile? |
| Visual | Squint test passes? Spacing rhythm? Typography intentional? |
| Persuasion | Hook in 3 sec? 2+ trust signals? Objections addressed? |
| Polish | No orphaned words? Icons aligned? Buttons consistent? |
Implementation details (focus states, forms, images, touch, performance, accessibility): references/craft-details.md
Reference Files
| Guide | What's Inside |
|---|---|
| typography.md | Scale, pairing, weight, line-height, letter-spacing, responsive type, tokens |
| color.md | Palette structure, neutrals, primary/semantic colors, dark theme, OKLCH, tokens |
| spacing.md | Spacing scale, component patterns, density, proximity, responsive adjustments |
| motion.md | Micro-interactions, timing, easing, reduced motion, animation tokens |
| icons.md | Grid system, optical corrections, accessibility, icon+text pairing, libraries |
| craft-details.md | Focus states, forms, images, touch, performance, accessibility, navigation |
| anti-ai-slop.md | What makes designs look generic and how to avoid it |
More from bbssppllvv/essential-skills
polar-integration
Integrate Polar payments, subscriptions, and checkout into web projects. Use when asked to add payments via Polar, set up Polar checkout, configure Polar webhooks, create Polar products, integrate Polar SDK, set up customer portal, add subscription billing with Polar, or any task involving polar.sh payment platform. Triggers on mentions of Polar payments, Polar checkout, Polar webhooks, Polar subscriptions, @polar-sh/sdk, @polar-sh/nextjs, @polar-sh/checkout.
26soniox
Integrate Soniox speech-to-text API for real-time and async transcription. Use when working with Soniox WebSocket streaming, Soniox REST transcription, Soniox SDKs (Python, Node, Web), or implementing voice/speech features using Soniox. Triggers on mentions of Soniox API, soniox package, @soniox/node, @soniox/speech-to-text-web, real-time transcription via Soniox, speech-to-text integration, or audio transcription with Soniox.
12openrouter
>
6fluidaudio
>
4sayless
>
1