Skip to content

Commit f17193a

Browse files
feat: VibeSkill docs site with i18n support (zh-CN + EN)
0 parents  commit f17193a

524 files changed

Lines changed: 140512 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/deploy.yml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
name: Deploy VitePress site to Pages
2+
3+
on:
4+
push:
5+
branches: [main]
6+
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: read
11+
pages: write
12+
id-token: write
13+
14+
concurrency:
15+
group: pages
16+
cancel-in-progress: false
17+
18+
jobs:
19+
build:
20+
runs-on: ubuntu-latest
21+
steps:
22+
- name: Checkout
23+
uses: actions/checkout@v4
24+
with:
25+
fetch-depth: 0
26+
27+
- name: Setup Node
28+
uses: actions/setup-node@v4
29+
with:
30+
node-version: 20
31+
cache: npm
32+
33+
- name: Setup Pages
34+
uses: actions/configure-pages@v4
35+
36+
- name: Install dependencies
37+
run: npm ci
38+
39+
- name: Build with VitePress
40+
run: npm run docs:build
41+
42+
- name: Upload artifact
43+
uses: actions/upload-pages-artifact@v3
44+
with:
45+
path: docs/.vitepress/dist
46+
47+
deploy:
48+
environment:
49+
name: github-pages
50+
url: ${{ steps.deployment.outputs.page_url }}
51+
needs: build
52+
runs-on: ubuntu-latest
53+
name: Deploy
54+
steps:
55+
- name: Deploy to GitHub Pages
56+
id: deployment
57+
uses: actions/deploy-pages@v4

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
node_modules/
2+
.vitepress/cache/
3+
.vitepress/dist/
4+
.DS_Store
5+
*.log
6+
.trae/

DESIGN.md

Lines changed: 327 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,327 @@
1+
# Design System
2+
3+
## Overview
4+
5+
VibeSkill 是一个方法论驱动的 Vibe Coding 学习门户。设计系统围绕"清晰、温暖、有结构"的品牌人格构建,采用浅色系米白底色 + 珊瑚橙强调色的配色策略,传递友好开放的学习氛围。
6+
7+
## Theme
8+
9+
**Scene sentence**: 一个产品经理在明亮的咖啡厅里,用笔记本电脑浏览 VibeSkill,寻找如何用 AI 做对产品的系统化方法——页面应该像一本精心编排的教材,既有知识的厚重感,又有探索的愉悦感。
10+
11+
**Theme decision**: Light mode only (for now). The learning context is daytime, focused reading, and the warm cream palette creates an inviting atmosphere that reduces cognitive load.
12+
13+
## Color Strategy
14+
15+
**Full palette** — 3 named roles, each used deliberately:
16+
17+
### Primary (Coral Orange — 活力与行动)
18+
19+
| Token | Value | Usage |
20+
|-------|-------|-------|
21+
| `--color-primary-50` | `#FFF7ED` | 最浅背景 tint |
22+
| `--color-primary-100` | `#FFEDD5` | 悬停/高亮背景 |
23+
| `--color-primary-200` | `#FED7AA` | 边框、分隔线 |
24+
| `--color-primary-300` | `#FDBA74` | 次要强调 |
25+
| `--color-primary-400` | `#FB923C` | 图标、标签 |
26+
| `--color-primary-500` | `#F97316` | 主按钮、核心强调 |
27+
| `--color-primary-600` | `#EA580C` | 主按钮悬停、链接 |
28+
| `--color-primary-700` | `#C2410C` | 深色强调 |
29+
| `--color-primary-800` | `#9A3412` | 文字强调 |
30+
| `--color-primary-900` | `#7C2D12` | 最深色 |
31+
32+
### Neutral (Warm Gray — 结构与层次)
33+
34+
| Token | Value | Usage |
35+
|-------|-------|-------|
36+
| `--color-neutral-50` | `#FFFBF5` | 页面背景(米白) |
37+
| `--color-neutral-100` | `#F5F0E8` | 卡片背景、交替行 |
38+
| `--color-neutral-200` | `#E8E0D4` | 边框、分隔线 |
39+
| `--color-neutral-300` | `#D4C8B8` | 禁用状态边框 |
40+
| `--color-neutral-400` | `#A89B8C` | 占位符文字 |
41+
| `--color-neutral-500` | `#8C7F6E` | 次要文字 |
42+
| `--color-neutral-600` | `#6B5F4F` | 正文文字 |
43+
| `--color-neutral-700` | `#4A4238` | 标题文字 |
44+
| `--color-neutral-800` | `#2D2924` | 最深文字 |
45+
| `--color-neutral-900` | `#1A1814` | 几乎黑色 |
46+
47+
### Accent (Teal — 平衡与信任)
48+
49+
| Token | Value | Usage |
50+
|-------|-------|-------|
51+
| `--color-accent-50` | `#F0FDFA` | 浅背景 tint |
52+
| `--color-accent-100` | `#CCFBF1` | 信息提示背景 |
53+
| `--color-accent-200` | `#99F6E4` | 成功状态 |
54+
| `--color-accent-500` | `#14B8A6` | 成功图标、完成标记 |
55+
| `--color-accent-600` | `#0D9488` | 链接悬停 |
56+
| `--color-accent-700` | `#0F766E` | 深色强调 |
57+
58+
### Domain Colors (for Skill Constellation)
59+
60+
| Domain | Color | Token |
61+
|--------|-------|-------|
62+
| PM (产品) | `#3B82F6` (Blue) | `--color-domain-pm` |
63+
| UI (设计与前端) | `#8B5CF6` (Purple) | `--color-domain-ui` |
64+
| Backend (后端) | `#10B981` (Green) | `--color-domain-backend` |
65+
| Cross (跨领域) | `#F59E0B` (Amber) | `--color-domain-cross` |
66+
67+
### Semantic Colors
68+
69+
| Token | Value | Usage |
70+
|-------|-------|-------|
71+
| `--color-success` | `#10B981` | 成功状态 |
72+
| `--color-warning` | `#F59E0B` | 警告状态 |
73+
| `--color-error` | `#EF4444` | 错误状态 |
74+
| `--color-info` | `#3B82F6` | 信息提示 |
75+
76+
## Typography
77+
78+
### Font Families
79+
80+
| Token | Value | Usage |
81+
|-------|-------|-------|
82+
| `--font-display` | `"Manrope", system-ui, sans-serif` | 标题、Hero 文字 |
83+
| `--font-body` | `"Inter", system-ui, sans-serif` | 正文、UI 元素 |
84+
| `--font-mono` | `"JetBrains Mono", "Fira Code", monospace` | 代码、Skill 名称、数据 |
85+
86+
### Type Scale
87+
88+
Fluid scale using `clamp()` for headings:
89+
90+
| Token | Size | Line Height | Weight | Letter Spacing |
91+
|-------|------|-------------|--------|----------------|
92+
| `--text-hero` | `clamp(2.5rem, 5vw, 4rem)` | 1.1 | 800 | -0.02em |
93+
| `--text-h1` | `clamp(2rem, 4vw, 3rem)` | 1.2 | 700 | -0.01em |
94+
| `--text-h2` | `clamp(1.5rem, 3vw, 2.25rem)` | 1.3 | 700 | -0.01em |
95+
| `--text-h3` | `clamp(1.25rem, 2vw, 1.75rem)` | 1.4 | 600 | 0 |
96+
| `--text-h4` | `1.125rem` | 1.5 | 600 | 0 |
97+
| `--text-body` | `1rem` | 1.7 | 400 | 0 |
98+
| `--text-body-sm` | `0.875rem` | 1.6 | 400 | 0 |
99+
| `--text-caption` | `0.75rem` | 1.5 | 500 | 0.02em |
100+
| `--text-code` | `0.875rem` | 1.6 | 400 | 0 |
101+
102+
## Spacing
103+
104+
### Base Unit
105+
106+
`--space-unit: 0.25rem` (4px)
107+
108+
### Scale
109+
110+
| Token | Value |
111+
|-------|-------|
112+
| `--space-1` | `0.25rem` (4px) |
113+
| `--space-2` | `0.5rem` (8px) |
114+
| `--space-3` | `0.75rem` (12px) |
115+
| `--space-4` | `1rem` (16px) |
116+
| `--space-5` | `1.25rem` (20px) |
117+
| `--space-6` | `1.5rem` (24px) |
118+
| `--space-8` | `2rem` (32px) |
119+
| `--space-10` | `2.5rem` (40px) |
120+
| `--space-12` | `3rem` (48px) |
121+
| `--space-16` | `4rem` (64px) |
122+
| `--space-20` | `5rem` (80px) |
123+
| `--space-24` | `6rem` (96px) |
124+
| `--space-32` | `8rem` (128px) |
125+
126+
### Section Spacing
127+
128+
| Token | Value |
129+
|-------|-------|
130+
| `--section-padding-y` | `clamp(3rem, 8vw, 6rem)` |
131+
| `--section-padding-x` | `clamp(1rem, 5vw, 3rem)` |
132+
| `--content-max-width` | `1200px` |
133+
| `--content-narrow` | `720px` |
134+
135+
## Elevation
136+
137+
| Token | Value | Usage |
138+
|-------|-------|-------|
139+
| `--shadow-sm` | `0 1px 2px 0 rgb(0 0 0 / 0.05)` | 轻微提升 |
140+
| `--shadow-md` | `0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)` | 卡片 |
141+
| `--shadow-lg` | `0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)` | 下拉、弹窗 |
142+
| `--shadow-xl` | `0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)` | 模态框 |
143+
| `--shadow-glow` | `0 0 20px rgb(234 88 12 / 0.15)` | 主按钮悬停光晕 |
144+
145+
## Border Radius
146+
147+
| Token | Value | Usage |
148+
|-------|-------|-------|
149+
| `--radius-sm` | `0.375rem` (6px) | 小元素、标签 |
150+
| `--radius-md` | `0.5rem` (8px) | 按钮、输入框 |
151+
| `--radius-lg` | `0.75rem` (12px) | 卡片 |
152+
| `--radius-xl` | `1rem` (16px) | 大卡片、模态框 |
153+
| `--radius-2xl` | `1.5rem` (24px) | Hero 区域 |
154+
| `--radius-full` | `9999px` | 胶囊按钮、头像 |
155+
156+
## Components
157+
158+
### Button
159+
160+
**Primary Button**
161+
- Background: `--color-primary-500`
162+
- Text: white
163+
- Padding: `0.75rem 1.5rem`
164+
- Border radius: `--radius-full`
165+
- Font: `--font-body`, weight 600
166+
- Hover: Background `--color-primary-600`, shadow `--shadow-glow`
167+
- Active: Scale 0.98
168+
169+
**Secondary Button**
170+
- Background: transparent
171+
- Border: 1.5px solid `--color-neutral-200`
172+
- Text: `--color-neutral-700`
173+
- Hover: Background `--color-neutral-100`, border `--color-neutral-300`
174+
175+
**Ghost Button**
176+
- Background: transparent
177+
- Text: `--color-primary-600`
178+
- Hover: Background `--color-primary-50`
179+
180+
### Card
181+
182+
**Standard Card**
183+
- Background: white
184+
- Border: 1px solid `--color-neutral-200`
185+
- Border radius: `--radius-lg`
186+
- Padding: `--space-6`
187+
- Shadow: `--shadow-sm`
188+
- Hover: Shadow `--shadow-md`, border `--color-neutral-300`
189+
- Transition: all 200ms ease-out
190+
191+
**Feature Card** (for Skill cards, stage cards)
192+
- Background: white
193+
- Border: 1px solid `--color-neutral-200`
194+
- Border radius: `--radius-xl`
195+
- Padding: `--space-8`
196+
- Shadow: none (flat)
197+
- Hover: Shadow `--shadow-md`, translateY -2px, border `--color-primary-200`
198+
- Transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1)
199+
200+
### Tag / Badge
201+
202+
**Domain Tag**
203+
- Padding: `0.25rem 0.75rem`
204+
- Border radius: `--radius-full`
205+
- Font: `--font-mono`, `--text-caption`
206+
- Background: domain color at 10% opacity
207+
- Text: domain color
208+
209+
**Stage Badge**
210+
- Background: `--color-primary-50`
211+
- Text: `--color-primary-700`
212+
- Border: 1px solid `--color-primary-200`
213+
214+
### Navigation
215+
216+
**Top Nav**
217+
- Background: white with 80% opacity + backdrop blur
218+
- Border bottom: 1px solid `--color-neutral-200`
219+
- Height: 64px
220+
- Position: sticky top
221+
222+
**Nav Link**
223+
- Text: `--color-neutral-600`
224+
- Hover: `--color-primary-600`
225+
- Active: `--color-primary-700`, font-weight 600
226+
- Underline on active: 2px solid `--color-primary-500`
227+
228+
## Layout Patterns
229+
230+
### Container
231+
232+
```css
233+
.container {
234+
max-width: var(--content-max-width);
235+
margin: 0 auto;
236+
padding: 0 var(--section-padding-x);
237+
}
238+
239+
.container-narrow {
240+
max-width: var(--content-narrow);
241+
margin: 0 auto;
242+
padding: 0 var(--section-padding-x);
243+
}
244+
```
245+
246+
### Section
247+
248+
```css
249+
.section {
250+
padding: var(--section-padding-y) 0;
251+
}
252+
253+
.section-alt {
254+
background: var(--color-neutral-100);
255+
}
256+
```
257+
258+
### Grid
259+
260+
```css
261+
.grid-skills {
262+
display: grid;
263+
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
264+
gap: var(--space-6);
265+
}
266+
267+
.grid-stages {
268+
display: grid;
269+
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
270+
gap: var(--space-8);
271+
}
272+
```
273+
274+
## Animation
275+
276+
### Timing
277+
278+
| Token | Value |
279+
|-------|-------|
280+
| `--duration-fast` | `150ms` |
281+
| `--duration-normal` | `250ms` |
282+
| `--duration-slow` | `400ms` |
283+
| `--ease-out` | `cubic-bezier(0.4, 0, 0.2, 1)` |
284+
| `--ease-out-expo` | `cubic-bezier(0.16, 1, 0.3, 1)` |
285+
| `--ease-spring` | `cubic-bezier(0.34, 1.56, 0.64, 1)` |
286+
287+
### Common Patterns
288+
289+
**Fade Up**
290+
```css
291+
@keyframes fadeUp {
292+
from { opacity: 0; transform: translateY(20px); }
293+
to { opacity: 1; transform: translateY(0); }
294+
}
295+
```
296+
297+
**Scale In**
298+
```css
299+
@keyframes scaleIn {
300+
from { opacity: 0; transform: scale(0.95); }
301+
to { opacity: 1; transform: scale(1); }
302+
}
303+
```
304+
305+
**Stagger Children**
306+
- Delay increment: 50ms
307+
- Max stagger: 500ms (cap at 10 items)
308+
309+
## Responsive Breakpoints
310+
311+
| Token | Value |
312+
|-------|-------|
313+
| `--breakpoint-sm` | `640px` |
314+
| `--breakpoint-md` | `768px` |
315+
| `--breakpoint-lg` | `1024px` |
316+
| `--breakpoint-xl` | `1280px` |
317+
318+
## Z-Index Scale
319+
320+
| Token | Value | Usage |
321+
|-------|-------|-------|
322+
| `--z-base` | `0` | 默认 |
323+
| `--z-dropdown` | `100` | 下拉菜单 |
324+
| `--z-sticky` | `200` | 粘性导航 |
325+
| `--z-modal` | `300` | 模态框 |
326+
| `--z-toast` | `400` | 通知 |
327+
| `--z-tooltip` | `500` | 工具提示 |

0 commit comments

Comments
 (0)