# 新增项目详细指南 本指南说明如何在 SoftwareWorkspace 网站中新增一个完整的项目条目。 --- ## 涉及文件总览 | 步骤 | 文件 | 是否必须 | |------|------|---------| | 1 | `src/data/projects/<项目id>.yaml` | **必须** | | 2 | `src/utils/iconRegistry.ts` | 仅当使用新图标时 | | 3 | `src/data/categories.yaml` | 仅当新增分类时 | | 4 | `src/data/statuses.yaml` | 仅当新增状态时 | | 5 | `public/logos/` | 仅当有项目 Logo 时 | | 6 | `public/screenshots/` | 仅当有截图时 | **核心原则:** 只需创建一个 YAML 文件,项目就会自动出现在网站上。`loader.ts` 使用 `import.meta.glob('./projects/*.yaml')` 自动扫描该目录,无需手动注册。 --- ## 步骤一:创建项目 YAML 文件 在 `src/data/projects/` 下新建文件,文件名即项目 ID(小写,用连字符分隔)。 例如:`src/data/projects/my-new-app.yaml` ### 完整字段模板 ```yaml # ========== 基础信息 ========== # 项目唯一标识(与文件名一致,用于 URL 路由 /projects/:id) id: 'my-new-app' # 项目内部名称(英文,小写) name: 'my-new-app' # 显示名称(双语,通常首字母大写) displayName: zh: '我的新应用' en: 'My New App' # 一句话简介(显示在卡片和详情页标题下方) slogan: zh: '一句话中文描述' en: 'A one-line English description' # 详细描述(显示在详情页"概览"区域) description: zh: '详细的中文介绍,说明项目功能、技术特点和适用场景。' en: 'Detailed English introduction explaining features, technical highlights and use cases.' # ========== 分类与状态 ========== # 项目分类,可选多个(对应 categories.yaml 中的 id) # 可用值:desktop / mobile / devtool / library / backend / selfhosted / ai type: - 'desktop' # 开发状态(对应 statuses.yaml 中的 key) # 可用值:active / maintained / beta / experimental / archived status: 'active' # ========== 技术信息 ========== # 支持平台(对应 platforms.yaml 中的 key) # 可用值:windows / macos / linux / android / ios / web / docker / npm / cli platforms: - 'windows' - 'macos' - 'linux' # 技术栈标签(自由填写,会出现在筛选下拉和项目卡片上) techStack: - 'Rust' - 'TypeScript' - 'React' # 核心功能列表(双语,显示在详情页"核心功能"区域) features: zh: - '功能一' - '功能二' - '功能三' en: - 'Feature one' - 'Feature two' - 'Feature three' # 搜索标签(用于搜索框模糊匹配,界面上不直接展示) tags: - 'Keyword1' - 'Keyword2' - 'Keyword3' # ========== 图标与链接 ========== # 项目图标(lucide-react 图标名称) # 已注册的图标:NotebookPen / Terminal / MapPin / SmartPhone / BookOpen / # Monitor / Brain / KeyRound / Wrench / Package / Cloud / Server / FlaskConical # 如果需要新图标,见"步骤二" icon: 'Terminal' # 项目 Logo 图片(可选,支持 SVG/PNG/JPG) # 图片放在 public/logos/ 目录下,路径相对于 public 目录 # 若设置了 logo,卡片和详情页会优先展示 Logo 图片,否则回退到上面的 lucide 图标 # logo: '/logos/my-new-app.png' # GitHub 仓库地址(必须) repoUrl: 'https://github.com/shenjianZ/my-new-app' # 在线文档地址(可选,不填则不显示文档按钮) docsUrl: 'https://github.com/shenjianZ/my-new-app#readme' # npm 包地址(可选,仅 NPM 包类项目填写) # npmUrl: 'https://www.npmjs.com/package/my-new-app' # ========== 版本信息 ========== latestVersion: 'v1.0.0' releaseDate: '2026-05-22' license: 'MIT' language: 'TypeScript' lastUpdated: '2026-05-22' # ========== 首页展示控制 ========== # 是否在首页"重点项目"区域展示(true/false) recommended: false # 是否在首页"Featured"大卡片展示(true/false,通常只给 1-2 个项目) featured: false # 排序权重(数字越小越靠前) order: 9 # 卡片主题色(十六进制色值) color: '#3B82F6' # ========== 下载信息(可选) ========== # 如果没有下载功能,设为空数组 [] downloads: - platform: 'Windows' arch: 'x64' url: 'https://github.com/shenjianZ/my-new-app/releases/download/v1.0.0/my-new-app-setup.exe' size: '15 MB' sha256: '' - platform: 'macOS' arch: 'universal' url: 'https://github.com/shenjianZ/my-new-app/releases/download/v1.0.0/my-new-app.dmg' size: '18 MB' sha256: '' - platform: 'Linux' arch: 'x64' url: 'https://github.com/shenjianZ/my-new-app/releases/download/v1.0.0/my-new-app.AppImage' size: '14 MB' sha256: '' # ========== 路线图(可选) ========== roadmap: done: - '已完成的功能' doing: - '正在开发的功能' planned: - '计划中的功能' # ========== 更新日志(可选) ========== changelog: - version: 'v1.0.0' date: '2026-05-22' changes: zh: - '初始发布' - '核心功能上线' en: - 'Initial release' - 'Core features launched' # ========== 架构说明(可选) ========== architecture: zh: '前端 (React) → API 层 → 后端 (Rust)' en: 'Frontend (React) → API Layer → Backend (Rust)' # ========== 截图(可选) ========== # 截图文件放在 public/screenshots/<项目id>/ 目录下 # screenshots: # - '/screenshots/my-new-app/main.png' # - '/screenshots/my-new-app/settings.png' # ========== 安装指南(可选) ========== # 每个项目生产的安装包不同,按实际包格式填写即可 # 会以紧凑的单行提示展示在"下载安装"区域内 # 不填写则使用默认的通用安装说明 installGuide: zh: - platform: 'Windows' icon: '🪟' format: '.exe' tip: 'SmartScreen 拦截?点击"更多信息" → "仍要运行"' - platform: 'macOS' icon: '🍎' format: '.dmg' tip: '提示已损坏?终端运行: xattr -dr com.apple.quarantine /Applications/MyApp.app' - platform: 'Linux' icon: '🐧' format: '.AppImage' tip: 'chmod +x MyApp-*.AppImage && ./MyApp-*.AppImage' en: - platform: 'Windows' icon: '🪟' format: '.exe' tip: 'SmartScreen blocked? Click "More info" → "Run anyway"' - platform: 'macOS' icon: '🍎' format: '.dmg' tip: '"Damaged" error? Run: xattr -dr com.apple.quarantine /Applications/MyApp.app' - platform: 'Linux' icon: '🐧' format: '.AppImage' tip: 'chmod +x MyApp-*.AppImage && ./MyApp-*.AppImage' ``` --- ## 步骤二(仅在需要新图标时):注册图标 如果 `icon` 字段需要使用一个尚未注册的 lucide-react 图标,编辑 `src/utils/iconRegistry.ts`: ```ts // 1. 在 import 中添加新图标 import { // ... 已有图标 Zap, // 新增 } from 'lucide-react'; // 2. 在 iconRegistry 对象中注册 const iconRegistry: Record> = { // ... 已有图标 Zap, // 新增 }; ``` 然后在 YAML 中 `icon: 'Zap'` 即可。 --- ## 步骤三(仅在需要新分类时):添加分类 编辑 `src/data/categories.yaml`,追加新分类: ```yaml - id: 'new-category-id' label: zh: '新分类中文名' en: 'New Category Name' icon: 'IconName' # 需要在 iconRegistry 中已注册 ``` 然后在项目的 `type` 字段中使用该 `id`。 --- ## 步骤四(仅在需要新状态时):添加状态 编辑 `src/data/statuses.yaml`,追加新状态: ```yaml new-status: label: zh: '中文状态名' en: 'English Status Name' color: '#HEXCOLOR' ``` --- ## 步骤五(仅在有截图时):添加截图 1. 在 `public/` 下创建目录:`public/screenshots/<项目id>/` 2. 放入截图文件(推荐 PNG 格式) 3. 在 YAML 中引用: ```yaml screenshots: - '/screenshots/my-new-app/main.png' - '/screenshots/my-new-app/feature.png' ``` --- ## 步骤六:验证 1. 启动开发服务器:`pnpm dev` 2. 检查以下页面: - **首页**:项目出现在"最新发布"区域;若 `featured: true` 则出现在 Featured 大卡片 - **项目列表页**:项目出现在列表中,技术栈/平台/状态筛选均生效 - **项目详情页**:访问 `/projects/<项目id>`,所有信息正确展示 - **搜索**:在搜索框输入 tags 中的关键词,能搜索到该项目 3. 运行测试:`pnpm test`(siteData 测试会验证数据结构完整性) --- ## 可用值速查 ### type(分类) | id | 中文 | 英文 | |----|------|------| | desktop | 桌面软件 | Desktop Apps | | mobile | 移动应用 | Mobile Apps | | devtool | 开发者工具 | Dev Tools | | library | NPM / 组件库 | NPM / Libraries | | backend | 后端服务 | Backend | | selfhosted | 自托管 | Self-hosted | | ai | AI / 实验项目 | AI / Experiments | ### status(状态) | key | 中文 | 英文 | 颜色 | |-----|------|------|------| | active | 活跃开发 | Active | #22C55E | | maintained | 维护中 | Maintained | #3B82F6 | | beta | 测试版 | Beta | #F59E0B | | experimental | 实验性 | Experimental | #A855F7 | | archived | 已归档 | Archived | #6B7280 | ### platforms(平台) `windows` / `macos` / `linux` / `android` / `ios` / `web` / `docker` / `npm` / `cli` ### 已注册图标 `NotebookPen` / `Terminal` / `MapPin` / `SmartPhone` / `BookOpen` / `Monitor` / `Brain` / `KeyRound` / `Wrench` / `Package` / `Cloud` / `Server` / `FlaskConical` --- ## 数据流示意 ``` src/data/projects/.yaml ↓ import.meta.glob 自动扫描 src/data/loader.ts(解析为 Project 对象,按 order 排序) ↓ 导出 siteData src/pages/HomePage.tsx → 首页卡片、Featured、最新发布 src/pages/ProjectsPage.tsx → 项目列表 + 筛选 src/pages/ProjectDetailPage.tsx → 详情页(/projects/:id) ``` **只需创建 YAML 文件,无需修改任何 TypeScript 代码,项目即自动上线。**