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