
web-design
by pentaxis93
AI and I - a blog about human-AI collaboration
SKILL.md
name: web-design description: "Create distinctive, production-grade layouts for aiandi.dev. Bold aesthetic vision + semantic token system. Use when designing pages, components, or visual treatments."
Web Design Skill
Purpose: Create distinctive, production-grade interfaces for aiandi.dev that avoid generic "AI slop" aesthetics while leveraging our semantic token architecture.
Related skills: Use design-loop for iterative fine-tuning (or nuclear redesign) with visual verification. Use screenshot for one-off captures.
Part I: Design Vision
Design Thinking
Before touching code, understand context and commit to a BOLD aesthetic direction:
The Questions:
- Purpose: What problem does this interface solve? Who uses it?
- Tone: What's the emotional register? (See palette below)
- Differentiation: What makes this UNFORGETTABLE? What's the one thing someone will remember?
- Constraints: Accessibility, performance, our token system
⚠️ WARNING: If you're about to make "incremental improvements" to an existing design, STOP. Consider whether this needs a radical departure instead. Safe fine-tuning creates forgettable design when the vision itself is wrong.
Aesthetic Palette (pick one, execute with conviction):
| Direction | Character |
|---|---|
| Brutally minimal | Nothing unnecessary. Every pixel justified. |
| Editorial/magazine | Typographic hierarchy as art. Generous space. |
| Retro-futuristic | Yesterday's tomorrow. CRT glow meets clean lines. |
| Organic/natural | Soft edges. Breathing rhythm. Warmth. |
| Luxury/refined | Restraint as statement. Precision obsession. |
| Industrial/utilitarian | Function forward. Honest materials. |
| Art deco/geometric | Pattern. Symmetry. Gilded edges. |
| Brutalist/raw | Exposed structure. Aggressive honesty. |
CRITICAL: Bold maximalism and refined minimalism both work. The key is intentionality, not intensity. Pick a direction and execute it with conviction.
Creative Departure Prompts
When you need to break free from derivative thinking, ask:
Inversion Questions:
- What if the most important thing was SMALL instead of large?
- What if we used NO color except one?
- What if there was NO hero section, just immediate content?
- What if typography was PLAYFUL instead of serious?
Constraint Forcing:
- Design with only 2 font sizes
- Use only vertical or only horizontal rhythm (not both)
- Make ONE element absurdly oversized
- Ban all rounded corners OR ban all sharp corners
Medium Shifts:
- What if this was a printed zine?
- What if this was a terminal interface?
- What if this was handwritten notes?
- What if this was a museum placard?
Unexpected References:
- Scientific journals (data-dense, precise)
- Art gallery walls (space, curation, labels)
- Punk zines (raw, urgent, collage)
- Old programming books (monospace, diagrams)
- Brutalist architecture (exposed structure, no decoration)
The test: If your first idea is what everyone else would do, throw it away and force yourself to come up with 3 more alternatives before implementing.
Aesthetic Guidelines
Typography: The Soul of the Design
Choose fonts that have character. The current Workbench theme uses system fonts for speed and clarity, but when evolving the design:
| Avoid | Consider Instead |
|---|---|
| Inter, Roboto, Arial | Fonts with personality for display |
| Generic sans-serif | Pair distinctive display + refined body |
| One font for everything | Intentional contrast between heading/body |
Typography creates hierarchy through:
- Size contrast (dramatic jumps, not timid steps)
- Weight contrast (light body, bold heads - or vice versa)
- Tracking (tight headlines, comfortable body)
- Leading (generous for reading, tight for impact)
Color: Commit to a Position
Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
The current Workbench theme demonstrates this: deep charcoal dominates, amber accent punctuates. The ratio matters more than the hues.
When evolving themes:
- 60-30-10 rule: dominant, secondary, accent
- Let backgrounds breathe (most of the canvas)
- Accents should feel earned, not scattered
Motion: Choreography, Not Chaos
One well-orchestrated moment creates more delight than scattered micro-interactions.
Focus on:
- Page load: staggered reveals via
animation-delay - Scroll-triggered moments that reward attention
- Hover states that surprise without distracting
- Transitions that feel physical (ease-out for exits, ease-in-out for state changes)
Spatial Composition: Break the Expected
Consider:
- Asymmetry over centered everything
- Generous negative space OR controlled density (not medium)
- Grid-breaking moments for emphasis
- Overlap and layering for depth
- Diagonal flow for energy
Atmosphere: Beyond Flat Colors
Create depth through:
- Subtle gradients (not the cliched purple-to-pink)
- Noise textures for tactile quality
- Layered transparencies
- Dramatic shadows that define space
- Border treatments that add character
Anti-Patterns: The AI Slop Checklist
NEVER default to:
| Generic Choice | The Problem |
|---|---|
| Purple gradients on white | Every AI demo ever made |
| Inter/Roboto/Space Grotesk | The "modern" that isn't |
| Centered everything | Safe is forgettable |
| Even spacing everywhere | No rhythm, no hierarchy |
| Rounded corners + soft shadows | The 2020 SaaS look |
| Teal + coral accent colors | Startup template vibes |
The test: Would this design be immediately recognizable as AI-generated? If yes, start over.
Part II: Technical Execution
Our Design System: Schema vs. Theme
We separate structure (what decisions exist) from values (how they resolve):
| Layer | Contains | Location |
|---|---|---|
| Schema | Token names, semantic purposes | design-system/tokens.css |
| Theme | Values assigned to tokens | design-system/all-themes.css |
Never hardcode values. Always use tokens. This enables theme-switching without code changes.
Token Quick Reference
Colors
| Purpose | Token | Tailwind |
|---|---|---|
| Page background | --color-background | bg-background |
| Cards/elevated | --color-surface | bg-surface |
| Code blocks | --color-surface-alt | bg-surface-alt |
| Borders | --color-border | border-border |
| Body text | --color-text-primary | text-text-primary |
| Secondary text | --color-text-secondary | text-text-secondary |
| Muted text | --color-text-muted | text-text-muted |
| Links/accent | --color-accent | text-accent |
| Accent hover | --color-accent-hover | hover:text-accent-hover |
| Accent subtle | --color-accent-subtle | bg-accent-subtle |
Typography
| Purpose | Token | Tailwind |
|---|---|---|
| Body font | --font-body | font-body |
| Headings | --font-heading | font-heading |
| Code | --font-mono | font-mono |
Spacing
| Size | Token | Usage |
|---|---|---|
| xs | --space-xs | Tight gaps, inline |
| sm | --space-sm | Component padding |
| md | --space-md | Default padding |
| lg | --space-lg | Section padding |
| xl | --space-xl | Major breaks |
| 2xl | --space-2xl | Hero/dramatic |
Container Widths
| Purpose | Token | Value |
|---|---|---|
| Prose | --container-prose | 65ch |
| Narrow | --container-narrow | 42rem |
| Normal | --container-normal | 52rem |
| Wide | --container-wide | 64rem |
| Full | --container-full | 80rem |
Effects
| Purpose | Token |
|---|---|
| Subtle shadow | --shadow-sm |
| Standard shadow | --shadow-md |
| Prominent shadow | --shadow-lg |
| Subtle radius | --radius-sm |
| Standard radius | --radius-md |
| Prominent radius | --radius-lg |
| Fast transition | --duration-fast |
| Normal transition | --duration-normal |
| Slow transition | --duration-slow |
| Blur (xs-3xl) | --blur-xs through --blur-3xl |
Layout Patterns
Page Structure
<body class="min-h-screen flex flex-col bg-background text-text-primary font-body antialiased">
<Header />
<main class="flex-1 w-full">
<!-- Content -->
</main>
<Footer />
</body>
Prose Container (Blog Posts)
<div class="max-w-[68ch] mx-auto px-6">
<div class="prose">
<slot />
</div>
</div>
Wide Container (Grids, Cards)
<div class="max-w-6xl mx-auto px-6">
<!-- Grid layouts -->
</div>
Hero Section
<section class="py-section">
<h1 class="font-heading text-5xl md:text-6xl leading-tight tracking-tight balance-text">
Main Heading
<span class="text-accent">Accent Part</span>
</h1>
<p class="text-text-secondary text-lg mt-6">
Subheading
</p>
</section>
Card Pattern
<article class="bg-surface border-l-3 border-accent p-lg rounded-md">
<h3 class="font-heading text-2xl text-accent mb-2">
<a href={url} class="hover:text-accent-hover transition-colors duration-normal">
{title}
</a>
</h3>
<p class="text-text-secondary leading-relaxed">{description}</p>
<time class="font-mono text-xs text-text-muted uppercase tracking-wide">{date}</time>
</article>
Interactive States
Every interactive element needs three states:
.interactive {
color: var(--color-accent);
transition: color var(--duration-fast) var(--easing);
}
.interactive:hover {
color: var(--color-accent-hover);
}
.interactive:focus-visible {
outline: 2px solid var(--color-accent);
outline-offset: 2px;
}
Responsive Design
Breakpoints
| Prefix | Min Width |
|---|---|
sm: | 640px |
md: | 768px |
lg: | 1024px |
xl: | 1280px |
Mobile-First Pattern
<h1 class="text-3xl md:text-5xl lg:text-6xl">
Responsive Heading
</h1>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<!-- Cards -->
</div>
Accessibility Requirements
| Requirement | Standard |
|---|---|
text-primary on background | 7:1 (WCAG AAA) |
text-secondary on background | 4.5:1 (WCAG AA) |
accent on background | 4.5:1 for text |
| Focus indicators | Visible on all interactive elements |
| Semantic HTML | Proper heading hierarchy, landmarks |
File Locations
| Purpose | Path |
|---|---|
| Token definitions | design-system/tokens.css |
| Theme values | design-system/all-themes.css |
| Schema docs | design-system/SCHEMA.md |
| Global styles | src/styles/global.css |
| Layouts | src/layouts/*.astro |
| Components | src/components/*.astro |
| Design philosophy | DESIGN.md |
Part III: Process
Creating New Components
- Define the vision - What's the aesthetic direction?
- Identify tokens - Map design decisions to semantic tokens
- Check existing patterns - Reuse before creating
- Implement with precision - Execute the vision completely
- Include all states - Default, hover, focus, disabled
- Verify visually - Use design-loop skill for iterative fine-tuning
Component Template
---
interface Props {
variant?: 'default' | 'accent';
class?: string;
}
const { variant = 'default', class: className } = Astro.props;
const variants = {
default: 'bg-surface text-text-primary border-border',
accent: 'bg-accent-subtle text-accent border-accent',
};
---
<div class:list={[
'rounded-md border p-md transition-colors duration-normal',
variants[variant],
className
]}>
<slot />
</div>
The Standard
Match implementation complexity to aesthetic vision:
- Maximalist designs need elaborate code, extensive animations, rich effects
- Minimalist designs need restraint, precision, obsessive attention to spacing and typography
- Elegance comes from executing the vision completely, not from the vision itself
The question to ask: Is this design distinctive? Would someone remember it? Does it have a clear point of view?
Generic is the enemy. Safe is forgettable. Commit to a direction and execute with conviction.
Related Skills
| Skill | When to Use |
|---|---|
| design-loop | Iterative fine-tuning or nuclear redesign with visual verification |
| screenshot | One-off captures for verification or documentation |
Claude is capable of extraordinary creative work. Don't hold back.
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon