--- name: design-decisions description: Forces documentation of the reasoning behind every significant design decision. Creates a decision log that explains WHY choices were made, alternatives considered, and trade-offs accepted. Prevents unjustified "default" choices. --- # Design Decision Logger Skill You are operating with design decision logging capabilities. This skill ensures that every significant design choice has documented reasoning — transforming unconscious defaults into conscious decisions. ## Core Philosophy > "Great design isn't about creating features; it's about intentionality." AI design fails not because it picks the "wrong" options, but because it picks options without reasons. A design where every choice has documented justification will always be better than one with "good defaults." ## Why Log Decisions? **For the current design:** - Forces examination of unconscious defaults - Reveals unjustified choices that need reconsideration - Creates accountability for design quality **For future iteration:** - Explains WHY something is the way it is - Enables informed changes (not breaking things accidentally) - Teaches newcomers the design rationale **For collaboration:** - Makes critique more productive ("I understand why, but...") - Enables delegation without loss of context - Creates institutional memory ## What Counts as a "Significant Decision"? Log decisions that: - Affect multiple components or screens - Establish a pattern that will be repeated - Required choosing between viable alternatives - Override a common convention or expectation - Will be questioned by someone reviewing the design Don't log: - Individual pixel values within an established system - Obvious choices with no real alternatives - Temporary implementations meant to be revisited ## Decision Categories ### 1. Typography Decisions **Font Family:** ```xml Geist Sans Our users are developers. Geist is designed specifically for developer tools, embodying "simplicity, minimalism, and speed" which aligns with our principle of "professional precision." Rejected: Overused in our competitive space (Linear, Vercel, Notion all use it). We need differentiation. Rejected: Platform-specific. We need cross-platform consistency. Considered: Good option, but Geist's mono variant is better integrated. Would reconsider if Geist unavailable. - Less personality than a distinctive display font - Requires hosting (not a system font) + Excellent readability at all sizes + Consistent with developer tool expectations Medium — would require full rebrand to change ``` **Type Scale:** ```xml 1.25 ratio (Major Third): 12, 15, 19, 24, 30, 37 Moderate ratio provides clear hierarchy without dramatic jumps. Appropriate for information-dense interfaces where many levels of hierarchy are needed. Rejected: Too dramatic for our dense UI. Would require too much scrolling to accommodate large headings. Rejected: Too subtle. Hierarchy becomes unclear, especially when combined with weight variations. ``` ### 2. Color Decisions **Primary Color:** ```xml #0066FF (Vibrant blue) Blue conveys trust and professionalism (aligned with "professional precision" principle). This specific shade is: - Distinct from competitor blues (Stripe's is lighter, Linear's is different hue) - Accessible against both white and dark backgrounds - Energetic enough to serve as CTA color Rejected: Too associated with AI/generic SaaS. Would blend in rather than differentiate. Rejected: Green implies success/completion. Wrong semantic for primary actions. - White text on this blue: 4.8:1 (AA pass) - This blue on white: 4.8:1 (AA pass) - Tested with Coblis for color blindness visibility ``` **Color Palette Philosophy:** ```xml Monochromatic base + single accent Our UI is information-dense. Multiple colors would create visual chaos. Single accent creates clear affordances (blue = interactive). Grayscale hierarchy for content. - "Professional precision" — not playful multicolor - "Focus on content" — color doesn't distract ``` ### 3. Spacing Decisions **Base Unit:** ```xml 4px base unit 4px allows fine-grained control while maintaining consistency. 8px would be too coarse for our dense UI. Scale: 4, 8, 12, 16, 24, 32, 48, 64. Rejected: Jumps between 8 and 16 too large for subtle adjustments in dense layouts. CSS custom properties: --space-1 through --space-8 Tailwind: Extended spacing scale ``` **Component Density:** ```xml Compact density (less padding than typical) Power users (our target) prefer information density. They're scanning, not reading. Reference: Linear, GitHub, VS Code all use compact density for professional tools. - Harder for beginners - Requires careful touch target sizing + More visible at once + Feels professional/powerful ``` ### 4. Layout Decisions **Page Structure:** ```xml Fixed sidebar + fluid content area Sidebar provides consistent navigation anchor. Fluid content allows adaptation to data needs. Reference: Linear, Notion, VS Code all use this pattern for tool-based products. Rejected: Loses vertical space. Our users have wide screens; horizontal space is abundant. Accepted as option: Sidebar can collapse for full-focus mode. ``` **Grid System:** ```xml 12-column grid with 24px gutters 12 divides evenly by 2, 3, 4, 6 — maximum flexibility. 24px gutters balance density with breathing room. - Desktop: 12 columns - Tablet: 8 columns - Mobile: 4 columns ``` ### 5. Component Decisions **Button Styles:** ```xml Primary: Filled blue, white text Secondary: Outlined, blue border, blue text Tertiary: Text only, blue text Destructive: Filled red for dangerous actions Visual hierarchy matches importance hierarchy. Fill = most important, outline = alternative option, text = least prominent. Color coding (blue vs red) adds semantic meaning. Default: 36px height (comfortable click target) Small: 28px (for dense contexts) Large: 44px (for primary page actions) ``` **Form Inputs:** ```xml Bottom border only (not full border) Reduces visual noise in forms with many fields. Lighter appearance aligns with "professional precision" — not chunky or heavy. Available as variant: For isolated inputs or emphasis. Border color meets 3:1 contrast for UI components. Focus state adds left border + background shift. ``` ### 6. Motion Decisions **Animation Philosophy:** ```xml Functional motion only — no decorative animation Our users are power users doing focused work. Animation should communicate state changes, not entertain. Every animation must answer: "What information does this convey?" - Page transitions (context: what changed) - Loading states (progress: something is happening) - Feedback (confirmation: action succeeded/failed) - Reveals (hierarchy: new content appearing) - Hover effects (too noisy at high interaction rates) - Idle states (distracting) - "Personality" animations (off-brand) ``` **Timing:** ```xml Micro-interactions: 150ms Component transitions: 200ms Page transitions: 300ms Easing: cubic-bezier(0.4, 0, 0.2, 1) (Material "standard") Fast enough to feel instant, slow enough to be perceived. Consistent easing creates unified feel. Material easing is well-tested and feels natural. ``` ## Decision Log Template ```xml Project name Date Date Who made/documented these decisions Principle name Principle name What was decided The decision made Why this choice serves our users/principles What we gave up What we gained 1, 2 easy/medium/hard DES-000 (if dependent on another decision) What needs to be decided Possible choices What this blocks ``` ## Validation Questions For each logged decision, verify: 1. **"Why this?"** — Can you explain the choice without saying "it looks good"? 2. **"Why not that?"** — Can you explain why alternatives were rejected? 3. **"For whom?"** — Does this serve the specific users defined in the brief? 4. **"According to what?"** — Which design principle does this support? 5. **"What if wrong?"** — How hard is this to change later? ## Red Flags Decisions that need reconsideration: - **"It's the default"** — Not a reason. Why is the default right for us? - **"Everyone does it"** — Not a reason. Why is convention right here? - **"It looks good"** — Not a reason. Good for whom? In what context? - **"I like it"** — Not a reason. User preference trumps designer preference. - **No alternatives listed** — Did you actually consider options? - **Principle not referenced** — How does this serve the design goals? ## Output Summary ```xml N N with complete reasoning N missing justification N N N N N N N What's problematic How to fix Score 1-10 with explanation of how well decisions are justified ``` ## Key Principle > "It feels like a person looked at it and said, 'This is it.'" — On Linear's design Every decision in a great design system should feel like someone cared about it specifically. The decision log is proof of that care.