Monorepo:apps/web(React+Vite)+ apps/api(FastAPI)。
# 一次性安装依赖
pnpm install # 前端(monorepo 根目录)
cd apps/api && uv sync && cd ../.. # 后端(uv)在仓库根目录执行下面这条,它会用 concurrently 同时拉起前端与后端:
pnpm dev # 同时跑 dev:api(uvicorn:8000)+ dev:web(vite:5173)前端 dev server 通过 vite.config.ts 把
/api/*反代到http://localhost:8000。后端没启动时,Vite 代理会向浏览器返回 HTTP 500(注意不是 502),所以一旦看到/api/*全部报 500,先确认是否在根目录跑了pnpm dev把后端也带起来了,而不是只单独跑了apps/web。
- 多半是后端没起。确认:
lsof -nP -iTCP:8000 -sTCP:LISTEN看不到进程即未启动。 - 单独起后端:
cd apps/api && uv run uvicorn app.main:app --reload --port 8000。 - 端口被占(
address already in use):lsof -nP -iTCP:8000找到占用进程,kill <PID>后再起。
后端:cd apps/api && uv run pytest
前端:cd apps/web && pnpm test -- --run
apps/api/— FastAPI 后端(models / schemas / routers / services / auth)apps/web/— React + Vite 前端(api / hooks / components / pages)docs/superpowers/specs/— 设计文档(spec)docs/superpowers/plans/— 实施计划(plan)
后端环境变量见 apps/api/.env.example(复制为 .env 后按需修改)。
