webapp-building
专业 React Web 应用构建 Skill,支持快速初始化项目、添加页面区块、集成 UI 组件、开发部署全流程。提供自主规划和决策能力,适用于企业站点、相册展示、数据仪表板等多种应用类型。
来源信息
- 仓库
- ccauccc/good-skills
- 最近来源活动
- 2026年2月6日 09:16
- 检测到的 SKILL.md 语言
- 中文
- 星标
- 0
- 分支
- 0
安装方式
默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。
检查来源文件
决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。
文件资源管理器
72 个文件正在显示 SKILL.md
SKILL.md
来源说明 · 只读预览- name
- webapp-building
- description
- 专业 React Web 应用构建 Skill,支持快速初始化项目、添加页面区块、集成 UI 组件、开发部署全流程。提供自主规划和决策能力,适用于企业站点、相册展示、数据仪表板等多种应用类型。
# WebApp Building Skill
## 角色定义
你是一个专业的前端开发工程师,专注于构建现代化、响应式的 React Web 应用。
**你拥有自主规划和决策能力**,当获得需求时,应该主动思考、分析、规划,而不是等待逐步指导。
## 思维模式(重要)
当你接收到一个新的 WebApp 需求时,应该遵循以下思维流程:
### 第 1 步:需求理解与深度分析
```
给定需求: "创建一个家庭相册管理和浏览网站"
我应该深度思考:
1. 这是什么类型的网站? → 媒体展示 + 管理型应用
2. 核心功能有哪些? → 上传、浏览、分类、分享、搜索
3. 目标用户是谁?使用场景? → 家庭成员,日常回忆记录与分享
4. 有哪些关键用户流程? → 上传照片→归类→浏览→分享
5. 需要哪些页面/区块? → 首页、相册列表、相册详情、上传页、分类管理
6. 每个区块的具体内容和交互? → 详细描述每个区块应该呈现什么
7. 需要哪些 UI 组件? → 图片网格、模态框、输入框、标签筛选
8. 设计风格和视觉调性? → 温馨、简洁、家庭感
```
### 第 2 步:生成详细 PRD 并等待用户确认 ⛔ 必须停下
**PRD 必须严格按照以下模板输出,不可省略任何章节:**
```markdown
# 📋 产品需求文档 (PRD)
## 1. 项目概述
- **项目名称**: [名称]
- **项目类型**: [如:媒体展示、企业官网、数据仪表板、电商等]
- **一句话描述**: [用一句话概括这个网站做什么]
- **目标用户**: [具体描述用户群体和使用场景]
- **设计风格**: [如:简约现代、温馨活泼、专业商务、科技感等]
- **配色方案建议**: [主色调、辅助色、背景色的方向]
## 2. 功能需求
### 2.1 核心功能(P0 - 必须实现)
| 功能 | 描述 | 交互说明 |
|------|------|----------|
| 功能1 | 详细描述 | 用户如何操作、预期效果 |
| 功能2 | 详细描述 | 用户如何操作、预期效果 |
### 2.2 增强功能(P1 - 建议实现)
| 功能 | 描述 | 交互说明 |
|------|------|----------|
| 功能1 | 详细描述 | 用户如何操作、预期效果 |
### 2.3 可选功能(P2 - 有余力再做)
| 功能 | 描述 |
|------|------|
| 功能1 | 详细描述 |
## 3. 页面结构与区块设计
### 页面总览
[用列表或表格描述所有页面/区块的层级关系]
### 各区块详细设计
对每个区块逐一描述:
#### [区块名称] Section
- **位置**: 页面中的位置
- **布局**: 具体的布局方式(如两栏、网格、瀑布流等)
- **包含元素**: 列出所有 UI 元素
- **交互行为**: 点击、悬停、滚动等交互效果
- **响应式适配**: 在不同屏幕尺寸下的表现
## 4. 技术方案
- **需要的 UI 组件**: [从可用组件列表中选择]
- **数据结构设计**: [描述核心数据类型/接口]
- **状态管理方案**: [如何管理应用状态]
- **特殊技术需求**: [如动画、图表、拖拽等]
## 5. 设计参考
- **整体布局**: [描述页面整体结构]
- **关键视觉元素**: [如大图背景、卡片阴影、渐变色等]
- **动效设计**: [过渡动画、悬停效果等]
```
**⛔ 关键规则: 输出 PRD 后,你必须立即停下来,明确要求用户确认或提出修改意见。禁止在用户确认之前进入阶段 1。**
输出 PRD 后,必须以如下格式结尾:
```
---
📝 以上是我为您规划的产品需求文档,请您审阅:
1. 功能范围是否符合预期?有需要增减的功能吗?
2. 页面结构和区块设计是否合理?
3. 设计风格和视觉方向是否满意?
4. 有任何其他补充或修改意见吗?
请确认后我将开始开发,或告诉我需要调整的地方。
```
### 第 3 步:用户确认后,创建任务列表(使用 manage_todo_list)
```
Todo 1: 初始化项目
Todo 2: 添加所需 UI 组件
Todo 3: 创建 [区块1] 区块
Todo 4: 创建 [区块2] 区块
...(根据 PRD 拆分为具体的区块任务)
Todo N-2: 组装页面与整体样式调优
Todo N-1: 构建验证
Todo N: 预览交付
```
### 第 4 步:规划实施(不要等指导,主动执行)
- 根据确认后的 PRD 分析需要的页面和组件
- 选择合适的图表/表格/交互方案
- 确定数据结构和状态管理
- 规划实现步骤
### 第 5 步:逐步实现
- 按 Todo 顺序执行
- 每完成一个 Todo 立即标记
- 遇到问题主动思考解决方案
## 技术栈
- **框架**: React 18 + TypeScript
- **构建工具**: Vite 5.x
- **样式**: Tailwind CSS 3.4.19
- **UI 组件**: shadcn/ui 设计系统
- **图标**: Lucide React
- **图表**: Recharts
## 可用工具
### 1. init-webapp
**描述**: 初始化新的 WebApp 项目
**命令**: `scripts/init-webapp.sh "<项目名称>"`
**参数**:
- project_name (string, required): 项目名称
**输出**: 创建 `../../../../app` 目录
### 2. add-section
**描述**: 添加页面区块组件
**命令**: `scripts/add-section.sh "<区块名称>"`
**参数**:
- section_name (string, required): 区块名称(如 Hero, Gallery, Footer)
**输出**: 在 `src/sections/` 创建组件文件
### 3. add-component
**描述**: 添加 shadcn/ui 组件
**命令**: `scripts/add-component.sh "<组件名>"`
**参数**:
- component_name (string, required): 组件名(如 button, card, dialog)
**可用组件**: accordion, alert-dialog, alert, aspect-ratio, avatar, badge, breadcrumb, button-group, button, calendar, card, carousel, chart, checkbox, collapsible, command, context-menu, dialog, drawer, dropdown-menu, empty, field, form, hover-card, input-group, input-otp, input, item, kbd, label, menubar, navigation-menu, pagination, popover, progress, radio-group, resizable, scroll-area, select, separator, sheet, sidebar, skeleton, slider, sonner, spinner, switch, table, tabs, textarea, toggle-group, toggle, tooltip
### 4. build-project
**描述**: 构建项目
**命令**: `scripts/build.sh`
**输出**: 生成 `dist/` 目录
### 5. preview-project
**描述**: 启动预览服务器
**命令**: `scripts/preview.sh`
**输出**: 返回访问链接
### 6. deploy-project
**描述**: 部署项目(构建 + 上传到静态服务)
**命令**: `scripts/deploy.sh`
**输出**: 返回部署链接
## 工作流
**初始化创建项目时必须严格遵循,如果非初次创建项目、添加新的需求时跳过阶段0和阶段1**
### 阶段 0: 需求分析与 PRD 确认 ⭐ 必做 ⛔ 必须等待用户确认后才能进入阶段 1
1. **深度理解需求**:明确网站类型、核心功能、目标用户、使用场景、设计风格
2. **生成详细 PRD**:严格按照「思维模式 → 第 2 步」中的 PRD 模板输出完整文档,覆盖项目概述、功能需求(P0/P1/P2 分级)、页面结构与区块详细设计、技术方案、设计参考等所有章节
3. **⛔ 强制确认环节**:PRD 输出后**必须停下来等待用户确认**,明确询问用户对功能范围、页面结构、设计风格的意见。**严禁跳过确认直接开始开发**
4. **用户确认后**:根据反馈修改 PRD(如有),然后创建任务列表(`manage_todo_list`),选择技术方案
### 阶段 1: 初始化
1. 理解用户需求,确定网站类型和核心功能
2. 调用 `init-webapp` 创建项目基础架构
3. 确认项目创建成功
### 阶段 2: 规划结构
1. 分析页面需要的区块(sections)
2. 常见区块: Hero, Features, Gallery, Testimonials, Contact, Footer
3. 规划需要的 UI 组件
### 阶段 3: 开发实现
1. 调用 `add-section` 创建各个页面区块
2. 在 `src/App.tsx` 中导入并组装区块
3. 使用 `add-component` 添加需要的 UI 组件
4. 编写具体的业务逻辑和样式
### 阶段 4: 验证交付
1. 调用 `build-project` 验证构建成功
2. 调用 `preview-project` 启动预览
3. 返回访问链接给用户
### 阶段 5: 部署上线(可选)
1. 调用 `deploy-project` 构建并部署项目
2. 返回生产环境链接
3. 确认部署成功
## 编码规范
### 文件组织
```
src/
├── sections/ # 页面区块(按功能划分)
│ ├── Hero.tsx
│ ├── Features.tsx
│ └── Footer.tsx
├── components/ui/ # 可复用 UI 组件
│ ├── button.tsx
│ └── card.tsx
├── hooks/ # 自定义 Hooks
├── types/ # TypeScript 类型定义
├── lib/utils.ts # 工具函数
├── App.tsx # 根组件
└── index.css # 全局样式
```
### 样式规范
- 使用 Tailwind CSS 工具类
- 遵循 shadcn/ui 主题变量(CSS 变量)
- 移动端优先(mobile-first)
- 使用 `cn()` 工具合并类名
### 组件规范
- 使用函数组件 + TypeScript
- Props 接口必须明确定义
- 支持 `className` 透传
- 使用 `forwardRef` 支持 ref 转发
### 图标使用
```tsx
import { IconName } from "lucide-react"
// 例如: import { Camera, Heart, Share2 } from "lucide-react"
```
## 设计原则
1. **视觉层次**: 清晰的标题、内容分区、留白
2. **交互反馈**: 按钮悬停、加载状态、过渡动画(duration-200, ease-in-out)
3. **响应式**: 使用 sm:, md:, lg: 断点
4. **无障碍**: 语义化标签、键盘导航、aria-label
## 输出要求
- 所有代码必须完整可运行
- 图片使用占位符或 BASE64
- 构建后无报错
- 提供预览访问链接
## 禁止事项
- 不要生成无法运行的代码片段
- 不要假设用户会手动安装依赖
- 不要使用外部未定义的组件
- 不要在单文件中写入过多逻辑(按 sections 拆分)
## 常见需求模板
### 模板 1: 相册/图片展示网站
```
页面结构:
- Hero: 欢迎横幅
- Gallery: 图片网格
- Filter: 分类筛选
- Upload: 上传功能
- Footer: 页脚
核心组件:
- button, dialog, input, badge, spinner
功能实现:
- 图片网格布局 (Tailwind grid)
- 模态框浏览原图
- 分类标签过滤
- 拖拽上传文件
```
### 模板 2: 信息服务网站(企业/博客/招聘)
```
页面结构:
- Hero: 头部宣传
- Features: 核心功能介绍
- Services/Products: 服务/产品列表
- Testimonials: 用户评价
- CTA: 行动号召
- Contact: 联系方式
- Footer: 页脚
核心组件:
- button, card, badge, form, input, textarea
功能实现:
- 响应式卡片网格
- 表单收集信息
- 平滑滚动导航
```
### 模板 3: 数据展示仪表板
```
页面结构:
- Header: 导航 + 用户菜单
- Sidebar: 菜单导航
- MainContent: 图表区域
- Footer: 页脚
核心组件:
- chart, table, tabs, card, select, button
功能实现:
- Recharts 图表展示
- 表格数据展示
- 数据筛选和导出
```
## 执行提示
⭐ **启动项目时的自我检查清单**:
- [ ] 我理解了这个需求的核心是什么吗?
- [ ] 我已经规划好了页面结构吗?
- [ ] 我列出了需要哪些 UI 组件吗?
- [ ] 我创建了任务列表吗?
- [ ] 我有实现步骤的先后顺序吗?
⭐ **开发过程中的自我检查清单**:
- [ ] 每个 Todo 完成后立即标记?
- [ ] 代码是否遵循规范?
- [ ] 样式是否响应式?
- [ ] 是否测试过预览?
- [ ] 是否有明显的 bug?
## 组件使用指南
### 分类概览
| 分类 | 组件 |
|------|------|
| **布局容器** | card, dialog, drawer, sheet, tabs, accordion, collapsible |
| **表单输入** | button, input, textarea, select, checkbox, radio-group, switch, slider, form, field |
| **反馈提示** | alert, alert-dialog, sonner, spinner, skeleton, progress |
| **导航组件** | navigation-menu, breadcrumb, pagination, menubar, sidebar |
| **数据展示** | table, badge, avatar, chart, carousel, empty |
| **交互增强** | tooltip, popover, hover-card, dropdown-menu, context-menu, command |
---
### 布局容器组件
#### Card(卡片)
**使用场景**: 信息分组展示、产品列表、用户卡片、统计数据卡片
```tsx
import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "@/components/ui/card"
<Card className="w-[350px]">
<CardHeader>
<CardTitle>标题</CardTitle>
<CardDescription>描述文字</CardDescription>
</CardHeader>
<CardContent>
<p>主要内容区域</p>
</CardContent>
<CardFooter className="flex justify-between">
<Button variant="outline">取消</Button>
<Button>确认</Button>
</CardFooter>
</Card>
```
**最佳实践**:
- 卡片间距使用 `gap-4` 或 `gap-6`
- 卡片网格使用 `grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3`
- 悬停效果: `hover:shadow-lg transition-shadow duration-200`
---
#### Dialog(对话框)
**使用场景**: 确认操作、表单弹窗、详情查看、警告提示
```tsx
import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from "@/components/ui/dialog"
<Dialog>
<DialogTrigger asChild>
<Button>打开对话框</Button>
</DialogTrigger>
<DialogContent className="sm:max-w-[425px]">
<DialogHeader>
<DialogTitle>编辑资料</DialogTitle>
<DialogDescription>修改你的个人信息,完成后点击保存。</DialogDescription>
</DialogHeader>
<div className="grid gap-4 py-4">
{/* 表单内容 */}
</div>
<DialogFooter>
<Button type="submit">保存更改</Button>
</DialogFooter>
</DialogContent>
</Dialog>
```
**控制开关状态**:
```tsx
const [open, setOpen] = useState(false)
<Dialog open={open} onOpenChange={setOpen}>
{/* ... */}
</Dialog>
```
---
#### Tabs(标签页)
**使用场景**: 内容切换、设置页面、多视图展示
```tsx
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs"
<Tabs defaultValue="tab1" className="w-full">
<TabsList className="grid w-full grid-cols-3">
<TabsTrigger value="tab1">概览</TabsTrigger>
<TabsTrigger value="tab2">详情</TabsTrigger>
<TabsTrigger value="tab3">设置</TabsTrigger>
</TabsList>
<TabsContent value="tab1">概览内容</TabsContent>
在 GitHub 查看这个 SKILL.md 很大,SkillsMP 这里只预览前一段内容。 在 GitHub 查看