这是一个项目专用技能(Skill)的示例。请将其用作你自己项目的模板。 基于实际的生产环境应用程序:[Zenith](https://zenith.chat) - AI 驱动的客户发现平台。 ---
Scanned 9/8/2026
Install to Claude Code
npx -y skills add xu-xiang/everything-claude-code-zh --skill project-guidelines-example --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Project Guidelines Example?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/xu-xiang-project-guidelines-example-everything-claude-code-zh)More formats (shields.io, HTML) on the badges page.
# 项目指南技能(示例)
这是一个项目专用技能(Skill)的示例。请将其用作你自己项目的模板。
基于实际的生产环境应用程序:[Zenith](https://zenith.chat) - AI 驱动的客户发现平台。
---
## 使用场景
在处理为此技能设计的特定项目时请参考此文档。项目技能(Project Skills)包括:
- 架构概览
- 文件结构
- 代码模式
- 测试要求
- 部署工作流
---
## 架构概览
**技术栈:**
- **前端**: Next.js 15 (App Router), TypeScript, React
- **后端**: FastAPI (Python), Pydantic 模型
- **数据库**: Supabase (PostgreSQL)
- **AI**: Claude API(带工具调用与结构化输出)
- **部署**: Google Cloud Run
- **测试**: Playwright (E2E), pytest (后端), React Testing Library
**服务架构:**
```
┌─────────────────────────────────────────────────────────────┐
│ Frontend │
│ Next.js 15 + TypeScript + TailwindCSS │
│ Deployed: Vercel / Cloud Run │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Backend │
│ FastAPI + Python 3.11 + Pydantic │
│ Deployed: Cloud Run │
└─────────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Supabase │ │ Claude │ │ Redis │
│ Database │ │ API │ │ Cache │
└──────────┘ └──────────┘ └──────────┘
```
---
## 文件结构
```
project/
├── frontend/
│ └── src/
│ ├── app/ # Next.js app router 页面
│ │ ├── api/ # API 路由
│ │ ├── (auth)/ # 受认证保护的路由
│ │ └── workspace/ # 主应用工作区
│ ├── components/ # React 组件
│ │ ├── ui/ # 基础 UI 组件
│ │ ├── forms/ # 表单组件
│ │ └── layouts/ # 布局组件
│ ├── hooks/ # 自定义 React Hook
│ ├── lib/ # 工具库
│ ├── types/ # TypeScript 定义
│ └── config/ # 配置
│
├── backend/
│ ├── routers/ # FastAPI 路由处理器
│ ├── models.py # Pydantic 模型
│ ├── main.py # FastAPI 应用入口
│ ├── auth_system.py # 认证系统
│ ├── database.py # 数据库操作
│ ├── services/ # 业务逻辑
│ └── tests/ # pytest 测试
│
├── deploy/ # 部署配置
├── docs/ # 文档
└── scripts/ # 辅助脚本
```
---
## 代码模式
### API 响应格式 (FastAPI)
```python
from pydantic import BaseModel
from typing import Generic, TypeVar, Optional
T = TypeVar('T')
class ApiResponse(BaseModel, Generic[T]):
success: bool
data: Optional[T] = None
error: Optional[str] = None
@classmethod
def ok(cls, data: T) -> "ApiResponse[T]":
return cls(success=True, data=data)
@classmethod
def fail(cls, error: str) -> "ApiResponse[T]":
return cls(success=False, error=error)
```
### 前端 API 调用 (TypeScript)
```typescript
interface ApiResponse<T> {
success: boolean
data?: T
error?: string
}
async function fetchApi<T>(
endpoint: string,
options?: RequestInit
): Promise<ApiResponse<T>> {
try {
const response = await fetch(`/api${endpoint}`, {
...options,
headers: {
'Content-Type': 'application/json',
...options?.headers,
},
})
if (!response.ok) {
return { success: false, error: `HTTP ${response.status}` }
}
return await response.json()
} catch (error) {
return { success: false, error: String(error) }
}
}
```
### Claude AI 集成(结构化输出)
```python
from anthropic import Anthropic
from pydantic import BaseModel
class AnalysisResult(BaseModel):
summary: str
key_points: list[str]
confidence: float
async def analyze_with_claude(content: str) -> AnalysisResult:
client = Anthropic()
response = client.messages.create(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": content}],
tools=[{
"name": "provide_analysis",
"description": "Provide structured analysis",
"input_schema": AnalysisResult.model_json_schema()
}],
tool_choice={"type": "tool", "name": "provide_analysis"}
)
# 提取工具调用结果
tool_use = next(
block for block in response.content
if block.type == "tool_use"
)
return AnalysisResult(**tool_use.input)
```
### 自定义 Hook (React)
```typescript
import { useState, useCallback } from 'react'
interface UseApiState<T> {
data: T | null
loading: boolean
error: string | null
}
export function useApi<T>(
fetchFn: () => Promise<ApiResponse<T>>
) {
const [state, setState] = useState<UseApiState<T>>({
data: null,
loading: false,
error: null,
})
const execute = useCallback(async () => {
setState(prev => ({ ...prev, loading: true, error: null }))
const result = await fetchFn()
if (result.success) {
setState({ data: result.data!, loading: false, error: null })
} else {
setState({ data: null, loading: false, error: result.error! })
}
}, [fetchFn])
return { ...state, execute }
}
```
---
## 测试要求
### 后端 (pytest)
```bash
# 运行所有测试
poetry run pytest tests/
# 运行并生成覆盖率报告
poetry run pytest tests/ --cov=. --cov-report=html
# 运行特定的测试文件
poetry run pytest tests/test_auth.py -v
```
**测试结构:**
```python
import pytest
from httpx import AsyncClient
from main import app
@pytest.fixture
async def client():
async with AsyncClient(app=app, base_url="http://test") as ac:
yield ac
@pytest.mark.asyncio
async def test_health_check(client: AsyncClient):
response = await client.get("/health")
assert response.status_code == 200
assert response.json()["status"] == "healthy"
```
### 前端 (React Testing Library)
```bash
# 运行测试
npm run test
# 运行并生成覆盖率报告
npm run test -- --coverage
# 运行 E2E 测试
npm run test:e2e
```
**测试结构:**
```typescript
import { render, screen, fireEvent } from '@testing-library/react'
import { WorkspacePanel } from './WorkspacePanel'
describe('WorkspacePanel', () => {
it('renders workspace correctly', () => {
render(<WorkspacePanel />)
expect(screen.getByRole('main')).toBeInTheDocument()
})
it('handles session creation', async () => {
render(<WorkspacePanel />)
fireEvent.click(screen.getByText('New Session'))
expect(await screen.findByText('Session created')).toBeInTheDocument()
})
})
```
---
## 部署工作流
### 部署前自检清单
- [ ] 所有本地测试均已通过
- [ ] `npm run build` 成功(前端)
- [ ] `poetry run pytest` 成功(后端)
- [ ] 无硬编码的密钥(Secrets)
- [ ] 环境变量已记录在文档中
- [ ] 数据库迁移已就绪
### 部署命令
```bash
# 前端构建与部署
cd frontend && npm run build
gcloud run deploy frontend --source .
# 后端构建与部署
cd backend
gcloud run deploy backend --source .
```
### 环境变量
```bash
# 前端 (.env.local)
NEXT_PUBLIC_API_URL=https://api.example.com
NEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
# 后端 (.env)
DATABASE_URL=postgresql://...
ANTHROPIC_API_KEY=sk-ant-...
SUPABASE_URL=https://xxx.supabase.co
SUPABASE_KEY=eyJ...
```
---
## 重要规则
1. **禁止使用表情符号** - 不要在代码、注释或文档中使用 Emoji
2. **不可变性** - 不要直接修改对象或数组
3. **TDD** - 在实现功能之前编写测试
4. **80% 覆盖率** - 最低标准
5. **拆分小文件** - 通常 200-400 行,最大 800 行
6. **禁止 console.log** - 不要出现在生产代码中
7. **完善的错误处理** - 使用 try/catch
8. **输入校验** - 使用 Pydantic/Zod
---
## 相关技能
- `coding-standards.md` - 通用编码最佳实践
- `backend-patterns.md` - API 与数据库模式
- `frontend-patterns.md` - React 与 Next.js 模式
- `tdd-workflow/` - 测试驱动开发(TDD)方法论
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!