From a0c2701cf137dca1576aae9cae22ddf234fb4619 Mon Sep 17 00:00:00 2001 From: kennethcheng Date: Sun, 13 Sep 2026 13:46:55 +0800 Subject: [PATCH] chore: bootstrap repo with AGENTS.md and .gitignore --- .gitignore | 57 +++++++++ AGENTS.md | 330 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 387 insertions(+) create mode 100644 .gitignore create mode 100644 AGENTS.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..45016ec --- /dev/null +++ b/.gitignore @@ -0,0 +1,57 @@ +# ===== OS ===== +.DS_Store +Thumbs.db +desktop.ini +$RECYCLE.BIN/ + +# ===== IDE ===== +.vscode/ +.idea/ +*.swp +*.swo +*.iml +.cursor/ + +# ===== Logs ===== +*.log +logs/ + +# ===== Env / Secrets ===== +.env +.env.local +.env.*.local +*.pem +*.key +secrets/ + +# ===== Backend (Go) ===== +fuellog-api/bin/ +fuellog-api/dist/ +fuellog-api/coverage.out +fuellog-api/*.test +fuellog-api/*.out +fuellog-api/.air.toml.local + +# ===== Database (SQLite) ===== +# Keep the data/ directory, but ignore runtime DB files +data/*.db +data/*.db-journal +data/*.db-shm +data/*.db-wal + +# ===== Frontend (Node / Vue) ===== +fuellog-web/node_modules/ +fuellog-web/dist/ +fuellog-web/dist-ssr/ +fuellog-web/.vite/ +fuellog-web/*.local +fuellog-web/.nuxt/ +fuellog-web/.next/ +fuellog-web/.cache/ + +# ===== Coverage ===== +coverage/ +.nyc_output/ + +# ===== Docker ===== +*.pid diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..b3974de --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,330 @@ +# AGENTS.md + +> 一个轻量、精美、移动端优先的个人加油记录与车辆燃油成本分析工具。 +> +> 中英别名: FuelLog / 加油记 + +## 项目目标 + +10 秒完成一笔加油记录,自动算出实际油价、百公里油耗、每公里成本;移动端 + PWA 优先;架构简单、不堆中间件,后续可扩展到充电、保养、停车、保险等车辆综合成本。 + +完整产品/技术决策见 `FuelLog_PLAN.md`,本文件是给 Agent 的工程操作手册。 + +--- + +## 仓库结构(单仓双工程,推荐) + +仓库根 = 整个项目,内含前端与后端两个 Go module 风格的子工程: + +``` +FuelLog/ +├── fuellog-web/ # Vue 3 + TS + Vite 前端 +├── fuellog-api/ # Go + Gin + GORM 后端 +├── deploy/ # docker-compose / Nginx / PWA manifest 等 +├── docs/ # 设计稿、API 文档、截图 +├── data/ # SQLite 文件(开发期;部署期挂 volume) +├── AGENTS.md # 本文件 +├── README.md +└── .gitignore +``` + +> 若 Agent 决定使用 `frontend/` `backend/` 之类的别名,在该子目录里再放一份本地 `AGENTS.md` 明确路径即可,根目录命令按本文件执行。 + +--- + +## Setup commands + +### 准备环境 + +- Node.js ≥ 20,pnpm ≥ 9(优先 pnpm,无则 npm) +- Go ≥ 1.22 +- Docker / Docker Compose(部署) +- `git`、`make`(可选,`make help` 查看快捷命令) + +### 后端 + +```bash +cd fuellog-api +go mod tidy +cp .env.example .env # 本地 SQLite 默认 ./data/fuellog.db +go run ./cmd/server # 监听 :8080 +go test ./... # 核心计算单测 +go vet ./... +``` + +### 前端 + +```bash +cd fuellog-web +pnpm install # 或 npm install +pnpm dev # 启动 Vite,默认 :5173,自动代理 /api -> :8080 +pnpm build +pnpm preview # 预览构建产物 +pnpm typecheck # vue-tsc +pnpm lint # eslint + prettier +``` + +### 整体(开发期) + +```bash +docker compose -f deploy/docker-compose.dev.yml up # API + Web + 反代 一把起 +``` + +### 部署 + +```bash +docker compose -f deploy/docker-compose.yml up -d +``` + +`data/` 目录必须挂载 volume,SQLite 不可随容器删除。 + +--- + +## 技术栈(锁定,不要临时换) + +### Frontend +- Vue 3 + TypeScript + Vite +- Vue Router / Pinia +- Tailwind CSS(主题通过 CSS Variables / Tailwind Theme,不在组件里写死颜色) +- Naive UI(优先,不适合时退到 Element Plus) +- ECharts(统计图表) +- vite-plugin-pwa(PWA: manifest + service worker + 添加到主屏) + +### Backend +- Go + Gin +- GORM(默认;若团队更熟 sqlc 允许,需在 PR 写理由) +- SQLite(默认,代码层用 GORM 抽象,后续能切 Postgres) +- 金额:使用 `decimal` 库或按"分"为单位的整数,避免 float 累计误差 + +### Infra +- Docker / Docker Compose +- Nginx / Nginx Proxy Manager 反代 +- 单一 SQLite 文件 + volume 持久化 + +### MVP 禁止引入 +Kubernetes / 微服务 / Kafka / Redis / RabbitMQ / Elasticsearch / GraphQL / Service Mesh / CQRS / Event Sourcing —— 出现真实需求前不要上。 + +--- + +## 项目布局 + +### 后端 `fuellog-api/` + +``` +fuellog-api/ +├── cmd/server/ # main.go +├── internal/ +│ ├── handler/ # Gin handler,只做 HTTP +│ ├── service/ # 业务逻辑(油价/油耗/成本/统计) +│ ├── repository/ # 数据库访问 +│ ├── model/ # 实体 +│ ├── dto/ # 入参/出参 +│ ├── middleware/ # 日志/错误/恢复 +│ └── router/ # 路由注册 +├── migrations/ # GORM AutoMigrate 或 goose 脚本 +├── config/ +├── pkg/ # 通用工具(decimal 封装、错误码等) +├── go.mod +└── Dockerfile +``` + +硬性分层:**Handler 不允许写业务逻辑**。Service 持有 Repository 抽象,便于单测。 + +### 前端 `fuellog-web/` + +``` +fuellog-web/ +├── src/ +│ ├── api/ # 类型化 API client(基于 openapi 后再生成) +│ ├── assets/ +│ ├── components/ +│ ├── layouts/ # 移动端 Bottom Nav + 桌面侧栏 +│ ├── pages/ +│ │ ├── dashboard/ +│ │ ├── refuel/ # 列表 + 新增 + 编辑 +│ │ ├── statistics/ +│ │ └── vehicle/ +│ ├── router/ +│ ├── stores/ # Pinia +│ ├── types/ +│ ├── utils/ # decimal 工具、单位转换 +│ ├── App.vue +│ └── main.ts +├── public/ # PWA manifest 图标 +├── package.json +└── vite.config.ts +``` + +--- + +## Code style + +### 通用 + +- 文件名、变量、commit 用英文;用户可见文案、注释、commit message 用简体中文。 +- Conventional Commits 强制:`feat:` `fix:` `docs:` `refactor:` `style:` `test:` `chore:` `perf:`。 +- 提交前 `pnpm lint` + `go vet` 必须 0 错 0 警。 +- 金额、加油量、里程统一用 decimal 或显式单位,严禁直接 `==` 比较 float。 + +### 前端 + +- TypeScript `strict: true`;不写 `any`,能用 `unknown` / 联合类型收口。 +- Vue SFC `