Initial commit with translated description
This commit is contained in:
99
SKILL.md
Normal file
99
SKILL.md
Normal file
@@ -0,0 +1,99 @@
|
||||
---
|
||||
name: Frontend Design
|
||||
slug: frontend
|
||||
version: "1.0.2"
|
||||
homepage: https://clawic.com/skills/frontend
|
||||
description: "使用React、Next.js、Tailwind CSS进行前端开发。"
|
||||
changelog: "Renamed to better reflect design-focused capabilities and guidance."
|
||||
metadata: {"clawdbot":{"emoji":"🖥️","requires":{"bins":[]},"os":["linux","darwin","win32"]}}
|
||||
---
|
||||
|
||||
## When to Use
|
||||
|
||||
User needs web UI built. Agent handles landing pages, dashboards, forms, component libraries, and any frontend requiring production polish.
|
||||
|
||||
## Quick Reference
|
||||
|
||||
| Topic | File |
|
||||
|-------|------|
|
||||
| Stack & tooling | `stack.md` |
|
||||
| Typography rules | `typography.md` |
|
||||
| Color systems | `colors.md` |
|
||||
| Mobile patterns | `mobile.md` |
|
||||
| Animation | `animation.md` |
|
||||
| Examples | `examples.md` |
|
||||
|
||||
## Core Rules
|
||||
|
||||
### 1. Mobile-First Always
|
||||
- Start with mobile layout, enhance upward
|
||||
- Every grid must collapse to single column
|
||||
- Touch targets minimum 44x44px
|
||||
- Test on real devices, not just simulators
|
||||
|
||||
### 2. Typography Matters
|
||||
- Avoid generic fonts (Inter, Roboto, Arial)
|
||||
- Use dramatic size jumps (2x+), not timid increments
|
||||
- Body text 16-18px minimum
|
||||
- See `typography.md` for specific recommendations
|
||||
|
||||
### 3. Color with Purpose
|
||||
- 70-20-10 rule: primary, secondary, accent
|
||||
- Commit to light OR dark — no muddy mid-grays
|
||||
- Never solid white backgrounds — add depth
|
||||
- See `colors.md` for CSS variables and patterns
|
||||
|
||||
### 4. Feedback on Every Interaction
|
||||
- Acknowledge taps within 100ms
|
||||
- Optimistic updates for instant feel
|
||||
- Loading states for operations >1s
|
||||
- Preserve user input on errors
|
||||
|
||||
### 5. Accessibility Non-Negotiable
|
||||
- Color contrast 4.5:1 (text), 3:1 (UI)
|
||||
- Focus states on all interactive elements
|
||||
- Semantic HTML (nav, main, section, article)
|
||||
- Keyboard navigation works for everything
|
||||
|
||||
### 6. Performance from Start
|
||||
- Lazy load below-fold content
|
||||
- Image placeholders prevent layout shift
|
||||
- Code split heavy components
|
||||
- Target LCP <2.5s, CLS <0.1
|
||||
|
||||
### 7. One Memorable Element
|
||||
- Every page needs one unforgettable design choice
|
||||
- Typography treatment, hero animation, unusual layout
|
||||
- Timid designs fail — commit to an aesthetic
|
||||
|
||||
## Frontend Traps
|
||||
|
||||
| Trap | Consequence | Fix |
|
||||
|------|-------------|-----|
|
||||
| Generic fonts | Looks like every other site | Use distinctive fonts |
|
||||
| Solid white backgrounds | Flat, lifeless | Add gradients, grain, depth |
|
||||
| Mobile as afterthought | Broken for 60% of users | Mobile-first always |
|
||||
| Form error clears input | User rage | Preserve input, highlight error |
|
||||
| No loading states | User thinks broken | Show progress immediately |
|
||||
| Timid type scale | No visual hierarchy | Use 2x+ jumps for headlines |
|
||||
|
||||
## Scope
|
||||
|
||||
This skill ONLY:
|
||||
- Provides frontend patterns and guidelines
|
||||
- Recommends stack and tooling choices
|
||||
- Guides responsive implementation
|
||||
|
||||
This skill NEVER:
|
||||
- Makes network requests
|
||||
- Accesses user data
|
||||
- Stores any information
|
||||
|
||||
## Security & Privacy
|
||||
|
||||
This skill is read-only guidance. No data is collected, sent, or stored.
|
||||
|
||||
## Feedback
|
||||
|
||||
- If useful: `clawhub star frontend`
|
||||
- Stay updated: `clawhub sync`
|
||||
6
_meta.json
Normal file
6
_meta.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"ownerId": "kn73vp5rarc3b14rc7wjcw8f8580t5d1",
|
||||
"slug": "frontend",
|
||||
"version": "1.0.2",
|
||||
"publishedAt": 1771458614727
|
||||
}
|
||||
51
animation.md
Normal file
51
animation.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# Animation — Frontend
|
||||
|
||||
## Priority
|
||||
|
||||
One orchestrated page load > scattered micro-interactions.
|
||||
|
||||
## High-Impact Moments
|
||||
|
||||
1. **Staggered hero reveals** — content fades in sequence
|
||||
2. **Scroll-triggered sections** — elements enter on scroll
|
||||
3. **Hover state surprises** — scale, shadow, color shift
|
||||
4. **Page transitions** — smooth route changes
|
||||
|
||||
## Framer Motion Example
|
||||
|
||||
```tsx
|
||||
const container = {
|
||||
hidden: { opacity: 0 },
|
||||
show: {
|
||||
opacity: 1,
|
||||
transition: { staggerChildren: 0.1 }
|
||||
}
|
||||
}
|
||||
|
||||
const item = {
|
||||
hidden: { opacity: 0, y: 20 },
|
||||
show: { opacity: 1, y: 0 }
|
||||
}
|
||||
|
||||
<motion.div variants={container} initial="hidden" animate="show">
|
||||
{items.map(i => <motion.div key={i} variants={item} />)}
|
||||
</motion.div>
|
||||
```
|
||||
|
||||
## Timing Guidelines
|
||||
|
||||
| Type | Duration |
|
||||
|------|----------|
|
||||
| Interactions (hover, click) | 150-300ms |
|
||||
| Transitions (page, modal) | 300-500ms |
|
||||
| Complex sequences | 500-800ms total |
|
||||
|
||||
## Accessibility
|
||||
|
||||
Always respect `prefers-reduced-motion`:
|
||||
|
||||
```css
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
* { animation-duration: 0.01ms !important; }
|
||||
}
|
||||
```
|
||||
53
colors.md
Normal file
53
colors.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# Color & Theme — Frontend
|
||||
|
||||
## CSS Variables Setup
|
||||
|
||||
```css
|
||||
:root {
|
||||
--background: 0 0% 100%;
|
||||
--foreground: 222.2 84% 4.9%;
|
||||
--primary: 222.2 47.4% 11.2%;
|
||||
--primary-foreground: 210 40% 98%;
|
||||
--secondary: 210 40% 96%;
|
||||
--accent: 210 40% 96%;
|
||||
--destructive: 0 84% 60%;
|
||||
--border: 214.3 31.8% 91.4%;
|
||||
}
|
||||
|
||||
.dark {
|
||||
--background: 222.2 84% 4.9%;
|
||||
--foreground: 210 40% 98%;
|
||||
}
|
||||
```
|
||||
|
||||
## Color Rules
|
||||
|
||||
1. **70-20-10**: Primary 70%, secondary 20%, accent 10%
|
||||
2. **Commit to light OR dark** — no muddy mid-grays
|
||||
3. **High contrast CTAs** — buttons must pop
|
||||
4. **Semantic colors**: red=destructive, green=success, yellow=warning
|
||||
|
||||
## Backgrounds
|
||||
|
||||
**AVOID**: Solid white (#fff) or plain gray
|
||||
|
||||
**USE**:
|
||||
- Subtle gradients: `bg-gradient-to-br from-slate-50 to-slate-100`
|
||||
- Noise/grain texture overlay
|
||||
- Glassmorphism with backdrop-blur
|
||||
|
||||
```css
|
||||
/* Grain overlay */
|
||||
.grain::before {
|
||||
content: '';
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
background: url("data:image/svg+xml,...");
|
||||
opacity: 0.03;
|
||||
pointer-events: none;
|
||||
}
|
||||
```
|
||||
|
||||
## Dark Theme
|
||||
|
||||
Always define both themes. Use CSS variables so switching is automatic.
|
||||
60
examples.md
Normal file
60
examples.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# Examples — Frontend
|
||||
|
||||
## Landing Page
|
||||
|
||||
**Prompt:**
|
||||
```
|
||||
Build a SaaS landing page for an AI writing tool.
|
||||
Dark theme, editorial typography. Sections: hero
|
||||
with animated demo, features grid, pricing table,
|
||||
FAQ accordion, footer with newsletter signup.
|
||||
```
|
||||
|
||||
**Design choices:**
|
||||
- Tone: Editorial/Magazine
|
||||
- Font: Cabinet Grotesk (display) + Plus Jakarta Sans (body)
|
||||
- Color: Near-black bg (#0c0c0c), warm white text, accent copper
|
||||
- Memorable: Full-bleed hero with scroll-reveal text
|
||||
|
||||
## Dashboard
|
||||
|
||||
**Prompt:**
|
||||
```
|
||||
Create an analytics dashboard. Sidebar navigation,
|
||||
header with search and user menu. Main area: stats
|
||||
cards row, line chart, data table with pagination.
|
||||
Light theme, clean and professional.
|
||||
```
|
||||
|
||||
**Design choices:**
|
||||
- Tone: Utilitarian/Clean
|
||||
- Layout: 240px fixed sidebar, fluid main
|
||||
- Components: shadcn/ui cards, recharts for graphs
|
||||
- Data table: tanstack-table with sorting/filtering
|
||||
|
||||
## Checkout Form
|
||||
|
||||
**Prompt:**
|
||||
```
|
||||
Build a multi-step checkout form. Steps: cart review,
|
||||
shipping address, payment method, confirmation.
|
||||
Progress indicator, back/next navigation, form
|
||||
validation with inline errors.
|
||||
```
|
||||
|
||||
**Design choices:**
|
||||
- Stepped progress bar at top
|
||||
- React Hook Form + Zod for validation
|
||||
- Preserve all input on navigation
|
||||
- Optimistic feedback on submission
|
||||
|
||||
## Pre-Implementation Checklist
|
||||
|
||||
- [ ] Typography distinctive (not Inter/Roboto)
|
||||
- [ ] Color follows 70-20-10
|
||||
- [ ] Background has depth
|
||||
- [ ] One memorable element
|
||||
- [ ] Mobile-first responsive
|
||||
- [ ] Focus states visible
|
||||
- [ ] Loading states for async
|
||||
- [ ] Error recovery paths
|
||||
45
mobile.md
Normal file
45
mobile.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Mobile-First Patterns — Frontend
|
||||
|
||||
## Breakpoints
|
||||
|
||||
```css
|
||||
/* Mobile first — enhance upward */
|
||||
@media (min-width: 640px) { /* sm: tablet */ }
|
||||
@media (min-width: 768px) { /* md: landscape tablet */ }
|
||||
@media (min-width: 1024px) { /* lg: laptop */ }
|
||||
@media (min-width: 1280px) { /* xl: desktop */ }
|
||||
```
|
||||
|
||||
## Layout Transformations
|
||||
|
||||
| Pattern | Desktop | Mobile |
|
||||
|---------|---------|--------|
|
||||
| Hero with image | 2-column grid | Stack, image below |
|
||||
| Feature grid | 3-4 columns | Single column |
|
||||
| Sidebar + content | Side-by-side | Sheet/drawer |
|
||||
| Data tables | Full table | Card view |
|
||||
| Multi-column forms | Side-by-side | Stack vertically |
|
||||
|
||||
## Touch Targets
|
||||
|
||||
- Minimum **44x44px** for all interactive elements
|
||||
- **8px minimum** spacing between targets
|
||||
- Swipe actions need visual hints
|
||||
|
||||
## Font Scaling
|
||||
|
||||
```css
|
||||
@media (max-width: 768px) {
|
||||
.hero-title { font-size: 32px; }
|
||||
.section-title { font-size: 24px; }
|
||||
}
|
||||
```
|
||||
|
||||
## Common Fixes
|
||||
|
||||
| Issue | Fix |
|
||||
|-------|-----|
|
||||
| Hero grid breaks | Use flex instead of grid on mobile |
|
||||
| Horizontal scroll | Set `overflow-x: hidden` on body |
|
||||
| Tiny touch targets | Add padding, not just visual size |
|
||||
| Text overflow | Use `break-words` and fluid typography |
|
||||
55
stack.md
Normal file
55
stack.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# Stack & Tooling — Frontend
|
||||
|
||||
## Recommended Stack
|
||||
|
||||
| Layer | Choice | Why |
|
||||
|-------|--------|-----|
|
||||
| Framework | Next.js 14+ | RSC, file routing, Vercel deploy |
|
||||
| Language | TypeScript | Catch errors early, better DX |
|
||||
| Styling | Tailwind CSS | Utility-first, design tokens built-in |
|
||||
| Components | shadcn/ui | Accessible, customizable, not a dependency |
|
||||
| Animation | Framer Motion | Declarative, performant |
|
||||
| Forms | React Hook Form + Zod | Type-safe validation |
|
||||
| State | Zustand or Jotai | Simple, no boilerplate |
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
src/
|
||||
├── app/ # Next.js App Router
|
||||
│ ├── layout.tsx
|
||||
│ ├── page.tsx
|
||||
│ └── [feature]/
|
||||
├── components/
|
||||
│ ├── ui/ # shadcn/ui components
|
||||
│ └── [feature]/
|
||||
├── lib/
|
||||
│ ├── utils.ts # cn(), formatters
|
||||
│ └── api.ts
|
||||
├── hooks/
|
||||
├── styles/
|
||||
│ └── globals.css
|
||||
└── config/
|
||||
└── site.ts
|
||||
```
|
||||
|
||||
## Essential Utils
|
||||
|
||||
```typescript
|
||||
// lib/utils.ts
|
||||
import { clsx, type ClassValue } from "clsx"
|
||||
import { twMerge } from "tailwind-merge"
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs))
|
||||
}
|
||||
```
|
||||
|
||||
## shadcn/ui Setup
|
||||
|
||||
```bash
|
||||
npx shadcn@latest init
|
||||
npx shadcn@latest add button card dialog
|
||||
```
|
||||
|
||||
Most used: Button, Card, Dialog, Accordion, Tabs, Sheet, NavigationMenu.
|
||||
40
typography.md
Normal file
40
typography.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# Typography — Frontend
|
||||
|
||||
## Font Selection
|
||||
|
||||
**AVOID**: Inter, Roboto, Arial, Open Sans — overused, generic
|
||||
|
||||
**USE** distinctive fonts:
|
||||
|
||||
| Use Case | Recommendations |
|
||||
|----------|-----------------|
|
||||
| Display/Headlines | Clash Display, Cabinet Grotesk, Satoshi, Playfair Display |
|
||||
| Body Text | Plus Jakarta Sans, Instrument Sans, General Sans |
|
||||
| Monospace | JetBrains Mono, IBM Plex Mono, Fira Code |
|
||||
|
||||
## Size Scale
|
||||
|
||||
Use dramatic jumps, not timid increments:
|
||||
|
||||
```css
|
||||
fontSize: {
|
||||
'base': '1rem', /* 16px */
|
||||
'2xl': '1.5rem', /* 24px */
|
||||
'4xl': '2.5rem', /* 40px */
|
||||
'5xl': '3.5rem', /* 56px — hero */
|
||||
'6xl': '4.5rem', /* 72px — statement */
|
||||
}
|
||||
```
|
||||
|
||||
## Hierarchy Rules
|
||||
|
||||
1. **One hero size per page** — don't compete for attention
|
||||
2. **Body text 16-18px minimum** — readability
|
||||
3. **Line height 1.5-1.7 for body** — dense for headlines (1.1-1.2)
|
||||
4. **Max width 65-75 characters** — optimal reading measure
|
||||
|
||||
## Pairing Strategy
|
||||
|
||||
- Contrast weights: thin display + bold body
|
||||
- Contrast styles: serif headlines + geometric sans body
|
||||
- Never use more than 2 font families
|
||||
Reference in New Issue
Block a user