一键导入
ai-fullstack-dev
AI 辅助全栈开发工作流。用于从 0 到 1 搭建中等复杂度 Web 系统 MVP,覆盖选题分析、需求调研、技术设计、编码实现到部署交付的完整流程。当用户提到全栈开发、搭建系统、需求文档、MVP、从零开始建项目时触发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
AI 辅助全栈开发工作流。用于从 0 到 1 搭建中等复杂度 Web 系统 MVP,覆盖选题分析、需求调研、技术设计、编码实现到部署交付的完整流程。当用户提到全栈开发、搭建系统、需求文档、MVP、从零开始建项目时触发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | ai-fullstack-dev |
| description | AI 辅助全栈开发工作流。用于从 0 到 1 搭建中等复杂度 Web 系统 MVP,覆盖选题分析、需求调研、技术设计、编码实现到部署交付的完整流程。当用户提到全栈开发、搭建系统、需求文档、MVP、从零开始建项目时触发。 |
| metadata | v0.1.0.20260527 |
Phase 1: 调研 → Phase 2: 技术设计 → Phase 3: 编码实现 → Phase 4: 交付
及时更新根脚本转发,方便用户操作项目,如:
{
"scripts": {
"fe:dev": "cd ats-frontend && bun run dev",
"fe:typecheck": "cd ats-frontend && bun run typecheck",
"fe:lint": "cd ats-frontend && bun run lint",
"fe:check": "cd ats-frontend && bun run typecheck && bun run lint",
"be:dev": "cd ats-backend && mvn spring-boot:run",
"be:test": "cd ats-backend && mvn -B test",
"be:build": "cd ats-backend && mvn -B package -DskipTests"
}
}
输入:候选系统(如白板/文档)
输出:基于选定系统,完成以下内容并输出 HTML 文档:
按需扩充。
输出路径:docs/project-requirements.html
输出:
| 名称 | 路径 | 说明 |
|---|---|---|
| 数据库 DDL | docs/project-schema.sql | PostgreSQL 建表语句 |
| 技术设计文档 | docs/project-tech-design.html | 后端/前端结构可视化 HTML |
docs/project-schema.sql)用 SQL DDL 输出建表语句(PostgreSQL 语法)
包含:
CREATE TYPE)COMMENTupdated_at 自动更新触发器(统一用 set_updated_at() 函数)按需扩充。
docs/project-tech-design.html).env.example 内容)按需扩充。
Spring Boot 推荐分层:
controller/ → 接口层,参数校验(@Valid)
service/ → 业务逻辑,事务管理,状态机校验
repository/ → 数据访问(MyBatis-Plus 或 JPA)
model/entity/ → 数据库实体
model/dto/ → 请求入参(含校验注解)
model/vo/ → 响应出参(脱敏)
config/ → JWT、Security、Redis、CORS、文件上传配置
middleware/ → JWT 过滤器(注入 SecurityContext)
exception/ → 全局异常处理(@RestControllerAdvice)
Gin 推荐分层:
handler/ → 路由处理
service/ → 业务逻辑
repo/ → 数据库访问(sqlx 或 GORM)
model/ → 结构体(entity / dto / vo)
middleware/ → JWT、CORS、日志
按需扩充。
src/
views/ → 页面组件(与路由 1:1,HR 页面放 views/hr/ 子目录)
components/ → 通用组件(KanbanCard、StageTimeline、FunnelChart 等)
stores/ → Pinia 状态(useAuthStore 持久化 Token)
api/ → request.ts(Axios 实例+拦截器)+ 各模块请求函数
router/ → 路由配置(meta.roles 声明权限)+ 全局路由守卫
utils/ → token.ts / format.ts / stageMap.ts(枚举→标签/颜色)
types/ → api.d.ts(与后端 VO 对齐)+ enums.ts
styles/ → tokens.css(design tokens)+ global.css
按需扩充。
参考 awwwards 优秀作品。中等复杂度 Web 系统通常需要两种语言并存:
- 张扬轨(Stripe / Resend / Linear 营销页系)— 用于 Hero / Landing / 营销页:大渐变、巨型字号、aurora 漂移、噪点质感、强 accent 色、大胆微动画
- 克制轨(Linear app / Vercel Dashboard / Cron / Notion 系)— 用于应用内(列表、看板、表单、详情):极致可读性、信息密度、克制配色、微动画
统一 tokens,分场景配方:颜色不能 hardcode,全部走 CSS variables;张扬轨在克制 tokens 基础上追加(而非替换) accent / gradient / glow / noise token。
色彩:
gray-50 … gray-950),背景、边框、文字层级全靠它⚡ 色彩叙事原则:accent palette 的颜色顺序应能映射到项目的核心业务流(如招聘漏斗 stage、订单状态、用户成长等级)。这样列表 / 看板 / 状态徽章用到对应阶段时,颜色复用且语义自洽,不需要二次设计。
排版:
PingFang SC / Microsoft YaHei / Noto Sans SC;英文/数字:Inter / JetBrains Mono12 / 13 / 14 / 16 / 20 / 24;张扬巨字号 3 档:clamp(48,8vw,80) / (64,11vw,128) / (80,14vw,160)圆角 / 间距 / 阴影:
999px fullshadow-sm/md/lg),张扬场景额外加 glow-brand/magenta/violet 大模糊光晕shadow-lg/* mesh gradient(背景 / 文字 fill) */
--grad-aurora: radial-gradient(...) + 3 个 blob;
--grad-sunrise: linear-gradient(135deg, magenta, violet, cyan);
--grad-fire: linear-gradient(135deg, amber, magenta, violet);
/* 光晕(hero CTA / 焦点元素) */
--glow-brand / --glow-magenta / --glow-violet
/* 噪点 SVG overlay(叠在大色块上抗 banding,加质感) */
--noise-url: url("data:image/svg+xml;..." feTurbulence ...)
/* aurora 漂移动画 */
@keyframes aurora-drift { ... } /* 24s 缓慢有机感 */
/* 入场 reveal */
.reveal { opacity: 0; transform: translateY(16px); transition: ... }
.reveal.is-visible { ... }
/* cursor follow glow(鼠标跟随发光) */
.cursor-glow { background: radial-gradient(400px circle at var(--mx) var(--my), ...) }
实用 utility class:text-gradient / text-gradient-fire / with-noise / aurora-layer / reveal。
强约束:
prefers-reduced-motion: reduce 必须关闭 aurora 与 reveal-webkit-background-clip + background-clip + color: transparent,保证 Safari/Chrome 双兼容var(--brand-500) 等)跟随主题切换所有前端项目使用 UnoCSS 作为原子化 CSS 引擎,且优先用 attributify 风格 而不是 class 风格。理由:
bun add -D unocss @unocss/preset-uno @unocss/preset-attributify @unocss/preset-icons \
@unocss/transformer-directives @unocss/transformer-variant-group
// vite.config.ts
import Unocss from 'unocss/vite'
plugins: [Unocss(), Vue()] // UnoCSS 必须在 Vue 之前
// main.ts
import 'virtual:uno.css'
import './styles/global.css' // 设计 tokens + 复杂动画
uno.config.ts 中 theme.colors / spacing / fontSize / boxShadow / transitionTimingFunction / transitionDuration 全部用 var(--xxx) 引用 tokens.css 里定义的变量,做到统一设计。
theme: {
colors: {
brand: { 500: 'var(--brand-500)', /* ... */ }, // 使用时可以直接 <div bg-brand-500>,不再需要 <div bg="(brand-500)">
accent: { mint: 'var(--accent-mint)', emerald: 'var(--accent-emerald)', /* ... */ },
// ...
},
transitionTimingFunction: {
out: 'var(--ease-out)', // hover 微交互
'page-in': 'var(--ease-page-in)', // 页面/模态转场
// ...
},
transitionDuration: {
'page-in': 'var(--dur-page-in)', // 与 2.5.4 速度感工程学绑定
// ...
},
// ...
}
核心选择树(按这个优先级判断写哪种形式):
1. 无值? → <div flex relative grid>
2. 单值(值为 keyword 或单位为 "spacing") / shortcut? → <div bg-app mt-8 rounded-full>
3. 单值,自定义单位? → <div max-w-1200px gap-10px> 🚨 UnoCSS 支持自定义单位而无需中括号,和 Tailwind CSS 不同,可以绕过浏览器 Attribute name 不可带中括号的限制
4. 单值,CSS 变量? → <div bg-brand-500 text-text-primary> 🚨 需确认所用变量是否在 theme 等处正确注册
5. 单值,复杂函数? → <div max-w="[max(80vw,80%)]"> 🚨 只能走 value 模式
6. 单值,和元素 / 组件属性冲突? → <div text-red> 🚨 不允许 value 模式,否则会影响元素属性值
7. 单值,复杂函数,又和元素 / 组件属性冲突? → <div class="text-[clamp(28px,4vw,44px)]"> 🚨 只能回退为 class 风格
8. 单值 variant(hover/focus/group-hover/max-sm)? → <div hover:bg-active group-hover:translate-x-1>
9. 多值? → <div flex="~ items-center" p="y-3 x-4"> ✨ 聚合相关联的 utilities,减少重复前缀字符
💡 借助插件做权威校验:UnoCSS 写法的合法性以工具实时报告为准,不要凭记忆判断:
- VSCode:装
antfu.unocss扩展,hover / 行内即可看到 utility 是否匹配 + 生成的 CSS- CLI 校验:装
@unocss/eslint-plugin,配 minimaleslint.config.js跑eslint . --rule '@unocss/order: error' --rule '@unocss/blocklist: error'验证;也可直接看 vite dev server stdout 的[unocss] unmatched utility "..."警告- 凡是 vite 报 unmatched 的写法表面用了不存在的规则 / 格式有误——立即修,不要 ship 残缺 class
declare module 'virtual:uno.css'
判断标准:同一段 utility 组合在 ≥ 3 个组件出现,或单段 ≥ 40 字符 → 立即抽进 uno.config.ts 的 shortcuts,模板里只剩语义类名。
命名前缀分组(来自 M1 实战沉淀,扫一眼前缀就知道用途):
| 前缀 | 用途 | 示例 |
|---|---|---|
layout-* / center-* / between-* / col-* | 布局原子 | center-flex、between-flex、col-flex、card-base |
typo-* / heading-* / kicker / eyebrow | 排版语义 | heading-1、eyebrow(uppercase + tracking) |
surface-* | 容器(玻璃 / 卡片) | surface-glass、surface-glass-dark、surface-elevated |
btn-* | 按钮变体(含 hover/active) | btn-primary、btn-secondary、btn-cta |
field-* / kbd-hint / error-banner / demo-* | 表单原子 | error-banner、error-icon、demo-card、kbd-hint |
navbar-* / logo-* / avatar / user-trigger / version-pill | 导航栏专属 | navbar-glass、navbar-glow-line、logo-mark、logo-mark-lg |
brand-* / hero-* / aurora-bg-* / orb-* | 品牌视觉(认证页 / Hero) | brand-pane、hero-display、hero-outline、hero-gradient |
anim-* / animate-* / btn-shimmer / cta-glow | 动画绑定 | animate-shimmer、btn-shimmer、cta-glow(搭配 group 用) |
@keyframes 定义只能写在 CSS 里(UnoCSS 不支持定义,只能引用)。集中沉淀到 styles/global.css,shortcuts 通过 animate-xxx utility 引用:
/* global.css —— 所有共享 keyframes 集中 */
@keyframes shimmer { 0%{transform:translateX(-100%)} 50%,100%{transform:translateX(100%)} }
@keyframes gradient-flow { 0%,100%{background-position:0% 50%} 50%{background-position:100% 50%} }
@keyframes aurora-shift { 0%,100%{transform:translate3d(0,0,0) scale(1)} 50%{transform:translate3d(-3%,2%,0) scale(1.05)} }
@keyframes orb-float-a { 0%,100%{transform:translate3d(0,0,0)} 50%{transform:translate3d(40px,30px,0)} }
@keyframes card-bob { 0%,100%{translate:0 0} 50%{translate:0 -6px} }
// uno.config.ts rules 里逐个注册 animate-* utility
rules: [
['animate-shimmer', { animation: 'shimmer 2.5s ease-in-out infinite' }],
['animate-gradient-flow', { animation: 'gradient-flow 6s ease-in-out infinite' }],
['animate-aurora-shift', { animation: 'aurora-shift 18s ease-in-out infinite' }],
// ...
]
@media (prefers-reduced-motion: reduce) {
[class*="animate-aurora"],
[class*="animate-orb"],
[class*="animate-gradient"],
[class*="animate-card-bob"],
[class*="animate-tag-float"],
[class*="animate-shimmer"],
[class*="animate-pulse"] { animation: none !important; }
}
UnoCSS 默认不带 -webkit-text-stroke(描边文字),加规则即可:
rules: [
[/^text-stroke-(\d+)$/, ([, w]) => ({
'-webkit-text-stroke-width': `${w}px`,
'color': 'transparent',
})],
[/^text-stroke-(\[[^\]]+\]|white|black|brand)$/, ([, c]) => {
const color = c.startsWith('[') ? c.slice(1, -1) : c === 'brand' ? 'var(--brand-500)' : c
return { '-webkit-text-stroke-color': color }
}],
]
用法:<span text-stroke-2 text-stroke="[rgba(255,255,255,.85)]">。
理论上 100% 可以,实战 92%。剩下 8% 必须 / 推荐留 plain CSS:
| 场景 | 为什么留 CSS | 例子 |
|---|---|---|
@keyframes 本身 | UnoCSS 不能定义,只能引用 | keyframes shimmer { ... } |
| Vue Transition 命名 class | Vue 命名约定要求 plain class | .fade-slide-enter-active |
依赖 ::before ::after 伪元素 + 复杂结构 | utility 写多层伪元素链路啰嗦 | .with-noise::after(噪点 overlay) |
| 依赖 JS 注入 CSS var | --mx --my 跟随鼠标场景 | .cursor-glow |
状态化 [data-state='up'] 联动多个子元素 | 父级状态控制多个 selector 时 utility 难表达 | health card 状态色联动 |
所有应用都必须为路由切换提供过渡动画,避免页面"硬切"的廉价感。统一基线:
fade-slide:280ms 入场(12px 上滑)+ 200ms 离场(6px 上飘)mode="out-in" 避免新旧页同框抖动scrollBehavior 始终回到顶部(除非有 meta.keepScroll)prefers-reduced-motion: reduce 媒体查询下完全禁用过渡(不是减速,而是 0ms),与 reveal/aurora 同标准route.meta.transition 字段覆盖默认(如登录页用 fade 不带位移,404/empty state 用 fade-scale)<RouterView v-slot="{ Component, route }"> 在内层包 <Transition>| 维度 | 反面教材 | 正确做法 |
|---|---|---|
| 时长 | 入场 180ms 显跳;入场 ≥ 400ms 显粘 | 页面入场 260-320ms 是甜区;离场比入场短 60-80ms |
| 曲线 | hover 用的 expo-out(前段冲得猛)放到页面转场 | 入场用 cubic-bezier(0.32, 0.72, 0, 1)(iOS spring,末段稳)离场用 cubic-bezier(0.4, 0, 0.6, 1)(gentle,不抢戏) |
| 节奏差 | opacity 和 transform 同时间结束 → 末段"半透明残影"拖尾 | opacity 比 transform 略短(180 vs 280),让位置先稳下来再淡入 |
| 位移幅度 | 入离场幅度一样大 | 入场幅度 > 离场幅度(12px vs 6px),制造"前进感" |
| 属性范围 | transition: all 200ms | 显式列属性,避免浏览器把 color/border-radius/... 全做插值 |
| GPU | translateY() / scale() | translate3d() / scale3d() 强制 GPU compositing,掉帧少 |
判断动画好不好的简单方法:路由切换时眼睛能否"跟得上但又看得到"。跟不上 = 太快,等不及 = 太慢。300ms 上下做加减是黄金区间。
<!-- App.vue(或 layout 内层)-->
<RouterView v-slot="{ Component, route }">
<Transition :name="(route.meta.transition as string) || 'fade-slide'" mode="out-in" appear>
<component :is="Component" :key="route.fullPath" />
</Transition>
</RouterView>
/* global.css —— 默认 fade-slide */
.fade-slide-enter-active {
transition:
opacity var(--dur-fade) var(--ease-page-in),
transform var(--dur-page-in) var(--ease-page-in);
will-change: opacity, transform;
}
.fade-slide-leave-active {
transition:
opacity 160ms var(--ease-page-out),
transform var(--dur-page-out) var(--ease-page-out);
will-change: opacity, transform;
}
.fade-slide-enter-from { opacity: 0; transform: translate3d(0, 12px, 0); }
.fade-slide-leave-to { opacity: 0; transform: translate3d(0, -6px, 0); }
.fade-enter-active { transition: opacity var(--dur-page-in) var(--ease-page-in); }
.fade-leave-active { transition: opacity var(--dur-page-out) var(--ease-page-out); }
.fade-enter-from, .fade-leave-to { opacity: 0; }
.fade-scale-enter-active {
transition:
opacity 220ms var(--ease-page-in),
transform 320ms var(--ease-bounce);
will-change: opacity, transform;
}
.fade-scale-leave-active {
transition:
opacity 160ms var(--ease-page-out),
transform 200ms var(--ease-page-out);
}
.fade-scale-enter-from { opacity: 0; transform: scale3d(0.96, 0.96, 1); }
.fade-scale-leave-to { opacity: 0; transform: scale3d(1.03, 1.03, 1); }
@media (prefers-reduced-motion: reduce) {
.fade-slide-enter-active, .fade-slide-leave-active,
.fade-enter-active, .fade-leave-active,
.fade-scale-enter-active, .fade-scale-leave-active { transition: none !important; }
.fade-slide-enter-from, .fade-slide-leave-to,
.fade-scale-enter-from, .fade-scale-leave-to { transform: none !important; }
}
强约束:
key="route.fullPath" 必须给(而非 route.path),否则 /jobs/1 → /jobs/2 同组件不会触发过渡mode="out-in",不要用 in-out(会出现两份 DOM 同框抖动 + 闪烁滚动条)position: fixed/sticky 的 header — 会跟着动;header 留在 Transition 外面transform 方向应与入场相反(入场上滑 → 离场上飘),制造"前进感"transition: all,必须显式列出参与动画的属性translate3d / scale3d,触发 GPU compositing,scroll 抖动率明显下降💡 进阶:带方向感的 history 过渡(前进右进、后退左出)可在 router
beforeEach比对历史栈记录方向,在meta._transitionDirection上挂值给 Transition 用。
进入编码前,先输出两份文档:
docs/project-dev-plan.html — 总体开发计划(一次性输出,不频繁改)docs/project-milestones.html — 活文档:里程碑实时进度 + 变更日志 + 风险台账 + 关键决策 + 给未来 agent 的续接说明⚡
project-milestones.html是 Phase 3 的核心交接物。每个里程碑完成(哪怕是部分完成)都必须更新本文档; 这是下一个 agent / 新加入的人接手时第一份要看的文档,能节省他们 80% 的"摸索时间"。 模板要点:仪表盘 + 时间线 + 续接说明 + 每个里程碑的详情卡 + 风险登记台账 + ADR-lite 决策表 + 变更日志。
project-dev-plan.html文档必须包含:
.env 填值.gitignore、分支策略、commit 规范MX-XX、任务、类型(BE/FE/MIX/OPS/DB)、依赖、预估工时、优先级按需扩充。
⚠ 超过一半的 MVP 项目卡在环境问题:JDK 版本不匹配、端口被占、镜像拉不下、JWT 密钥未生成……进入 M0 之前花 1–2 小时把环境彻底打通,能节省后面 3–5 倍调试时间。本节自检 100% 通过才能开始编码。
工具与最低版本:
| 工具 | 最低版本 | 用途 | 检查命令 |
|---|---|---|---|
| JDK | 21 (LTS) | 后端运行/编译 | java -version |
| Maven | 3.9+ | 后端构建 | mvn -v |
| Node.js | 20 (LTS) | 前端工具链 | node -v |
| 包管理器 | bun 1.3+ / pnpm 9 / npm 10 | 前端依赖 | bun -v |
| 容器引擎 | Docker 24+ 或 Podman 4+ | 本地 pg/redis | 见下 |
| compose | Docker Compose v2 或 docker-compose v1 或 podman compose | 编排 | 见下 |
| Git | 2.40+ | 版本控制 | git --version |
| OpenSSL | 3.0+ | 生成 JWT 密钥 | openssl version |
| 引擎 | 启动命令 | 备注 |
|---|---|---|
| Docker + Docker Compose | docker compose -f xxx up -d | 现代默认 |
docker-compose v1(独立 binary) | docker-compose -f xxx up -d | 兼容旧仓 / Podman 上常装 |
本地服务方案:
postgres + redis,schema.sql 挂到 /docker-entrypoint-initdb.d/ 自动初始化15432:5432凭据与密钥(不可省略):
openssl genrsa -out jwt-private.pem 2048
openssl rsa -in jwt-private.pem -pubout -out jwt-public.pem
htpasswd -bnBC 12 "" "YourPassword" | tr -d ':\n'
.env、*.pem、*.b64、secrets/ 必须全部加入 .gitignore,任何 commit / 截图 / 日志都不得包含真实密钥。
Git 规范:
xxx-backend/ + xxx-frontend/ + docker-compose.yml)main 保护 + 每里程碑一条 feature/m1-auth[模块] 动词 + 内容,禁止 WIP / update / fix bug.gitignore 必含:.env* / *.pem / *.b64 / target/ / node_modules/ / dist/ / logs/ / uploads/ / .idea/ / .DS_Store环境自检:提供 scripts/check-env.sh(Bash)和 scripts/check-env.ps1(PowerShell),覆盖:
docker compose up -d 后 pg / redis 健康psql ... -c "\dt" 能列出全部表redis-cli ping 返回 PONG.env常见问题预案:
| 问题 | 解决 |
|---|---|
| 端口被占 | compose 改映射;或停掉本机服务 |
| Maven 慢 | ~/.m2/settings.xml 配阿里云 mirror |
| npm/bun 慢 | npm config set registry https://registry.npmmirror.com 或 ~/.bunfig.toml 配 registry |
| 容器拉镜像超时 | Docker Desktop → Engine 配国内 mirror;Podman 改 ~/.config/containers/registries.conf 加 mirror |
BCrypt hash 含 $ 被 shell 截断 | 单引号包裹或写到 application.yml |
| PowerShell 多行命令 | 用反引号 ` 续行,不要用反斜杠 \ |
按需扩充。
| 里程碑 | 名称 | 工期参考 | 关键产出 |
|---|---|---|---|
| M0 | 项目基建 | 1 天 | 前后端骨架 + dev compose + /health 跑通 |
| M1 | 认证模块 | 2 天 | 注册/登录/Refresh + JWT 拦截器 + 路由守卫 |
| M2 | 核心 CRUD | 1 天 | 主实体增删改查 + 列表/详情页 |
| M3 ⭐ | 项目亮点功能 | 2 天 | 以具体项目为准 |
| M4 | 辅助模块 | 2 天 | 文件上传、子实体 CRUD、数据看板 |
| M5 | 打磨交付 | 2 天 | UI 打磨 + 完整 docker-compose + README + 演示 |
按需扩充。
每个里程碑结束都必须能跑起来、能演示一个完整场景。Mn 未通过联调验收禁止进入 Mn+1。
契约先行:每次让 AI 写接口前,必须把以下信息一起喂给它:
生成粒度:
多方案抉择:
project-tech-design.html 冲突时,以设计文档为准后端 7 项:
@PreAuthorize 或在 SecurityConfig 配规则?@Transactional?状态变更是否与审计日志同事务?@Valid + DTO 的 @NotNull/@Size/...)是否齐全?#{} 占位符或 Wrapper,禁止字符串拼接前端 7 项:
types/api.d.ts 引入而非现写?formRef.validate()?meta.roles 声明角色?any 是否已消除?枚举是否从 enums.ts 引用?{ code, msg, data },HTTP 状态码与 code 一致npm run lint / mvn verify 无新增报错git diff self-review,删除 console.log / 调试代码[模块] 动词 + 内容(如 [auth] add refresh endpoint)Map<Stage, Set<Stage>> 声明合法图 + 终态不在 key 中保护/login,并用队列防重入from_stage 校验当前状态,UI 失败时 snapshot 回滚/uploads/提供 docker-compose.yml,一条命令启动所有服务:
# Docker
docker compose up -d
# 或 v1 / Podman 兼容写法
docker-compose up -d
# Podman 原生
podman compose up -d
包含服务:postgres、redis、backend、frontend(nginx)
| 类型 | 路径 | 性质 |
|---|---|---|
| 需求文档 | docs/project-requirements.html | 静态 · Phase 1 末完成 |
| 数据库 Schema | docs/project-schema.sql | 单一来源 · 改动需 dev:reset |
| 技术设计文档 | docs/project-tech-design.html | 静态 · Phase 2 末完成 |
| Phase 3 总体计划 | docs/project-dev-plan.html | 半静态 · 大改才动 |
| 里程碑活文档 | docs/project-milestones.html | 活文档 · 每个里程碑必更 |
接手项目第一份要看:**
docs/project-milestones.html的「续接说明」**章节。
Anthony Fu's opinionated tooling and conventions for JavaScript/TypeScript projects. Use when setting up new projects, configuring ESLint/Prettier alternatives, monorepos, library publishing, or when the user mentions Anthony Fu's preferences.
花叔Design——用HTML做高保真原型、交互Demo、幻灯片、动画、设计变体探索+设计方向顾问+专家评审。根据任务embody对应专家(UX/动画师/幻灯片设计师/原型师),避免web design tropes。触发词:做原型、交互原型、HTML演示、动画Demo、设计变体、hi-fi设计、UI mockup、prototype、做个HTML页面、做个可视化、app原型、iOS原型、导出MP4/GIF、60fps视频、设计风格、设计方向、配色方案、推荐风格、选个风格、做个好看的、评审、好不好看、review this design、带解说的动画、解说视频、长视频科普、voiceover、narration、5分钟讲清楚什么是XX。需求模糊时进设计方向顾问(三套逻辑并行出3版真实视觉,HTML原生40种风格库网页20+PPT20为弹药);另含品牌资产协议、反AI slop、Junior工作流、Tweaks变体、动画→MP4/GIF导出、带解说长视频pipeline、5维评审。