One Person Company — 一句话生成个人产业服务网站,自动部署到 EdgeOne Pages。
自由职业者、独立顾问、个人工作室的建站利器:个人官网 → 服务目录 → 在线预约 → AI 产业顾问 → 客户管理 → 在线收款 → 后台总控,一包搞定。
| 模块 | 功能 |
|---|
| 🏠 前台展示 | 首页、服务列表、定价方案、案例作品、关于我们、FAQ、推荐语、联系咨询 |
| 📅 在线预约 | 选择服务 → 选择时段 → 提交预约 → 状态追踪 |
| 💳 支付管理 | 多支付方式支持、订单记录、支付状态流转 |
| 🤖 AI 顾问 | SSE 流式对话,智能解答客户疑问 |
| 👥 客户管理 | 客户资料、标签分类、沟通记录 |
| ✉️ 消息咨询 | 访客留言、后台回复、已读/未读管理 |
| 🔐 用户系统 | 注册/登录、JWT 认证、RBAC 权限(普通用户/管理员) |
| ⚙️ 管理后台 | 仪表盘、服务管理、预约管理、客户管理、支付记录、消息管理、站点设置 |
| ☁️ 边缘部署 | EdgeOne Pages 一键部署,全球加速,零运维 |
| 维度 | 选择 |
|---|
| 前端 | 原生 HTML/CSS/JS(零构建,直接编辑即可生效) |
| 后端 | Fastify 4.x |
| ORM | Prisma 5.x |
| 数据库 | SQLite(零配置,开箱即用) |
| 认证 | JWT(bcrypt 密码加密) |
| 边缘计算 | EdgeOne Edge Functions / Cloud Functions / KV / Middleware |
node .opc-site/templates/project-skeleton/scripts/scaffold.js \
--title "我的技术服务" \
--description "专业个人技术咨询服务" \
--features booking,payment \
--output ./my-opc-site
cd ./my-opc-site
npm run setup
npm run dev
cp -r .opc-site/templates/project-skeleton ./my-site
cd ./my-site
npm install
npx prisma generate
npx prisma db push
node scripts/post-gen.js
npm run dev
| 字段 | 值 |
|---|
| 邮箱 | admin@opc.site |
| 密码 | admin123 |
可通过环境变量自定义:ADMIN_EMAIL / ADMIN_PASSWORD
my-opc-site/
├── package.json # 项目依赖与脚本
├── tsconfig.json # TypeScript 配置
├── prisma/
│ ├── schema.prisma # 7 个数据模型定义
│ └── dev.db # SQLite 数据库文件(自动生成)
├── src/
│ ├── app.ts # Fastify 应用入口
│ ├── config.ts # 环境配置管理
│ ├── middleware/
│ │ ├── auth.ts # JWT 认证中间件
│ │ └── error-handler.ts # 统一错误处理
│ ├── routes/ # 8 条业务路由
│ │ ├── auth.ts # 注册/登录/获取用户
│ │ ├── services.ts # 服务 CRUD
│ │ ├── booking.ts # 预约管理
│ │ ├── payments.ts # 支付处理
│ │ ├── clients.ts # 客户管理
│ │ ├── messages.ts # 消息咨询
│ │ ├── admin.ts # 后台管理
│ │ └── agent.ts # AI 顾问(SSE 流式)
│ ├── services/
│ │ ├── ai-agent.ts # AI 对话服务
│ │ └── payment.ts # 支付集成服务
│ └── utils/
│ ├── jwt.ts # JWT 签名/验证
│ └── response.ts # 统一响应格式
├── public/
│ ├── css/
│ │ ├── style.css # 前台样式(CSS 变量主题)
│ │ └── admin.css # 后台样式
│ ├── js/
│ │ └── app.js # 公共工具库(api/toast/modal/format/auth)
│ └── pages/ # 10 个前台页面
│ ├── index.html # 首页
│ ├── services.html # 服务列表
│ ├── pricing.html # 定价方案
│ ├── about.html # 关于我们
│ ├── contact.html # 联系咨询
│ ├── booking.html # 在线预约
│ ├── blog.html # 博客
│ ├── faq.html # 常见问题
│ ├── portfolio.html # 作品案例
│ ├── testimonials.html # 客户评价
│ └── login.html # 登录
├── admin/ # 7 个后台管理页面
│ ├── dashboard.html # 运营仪表盘
│ ├── services-mgmt.html # 服务管理
│ ├── bookings.html # 预约管理
│ ├── clients.html # 客户管理
│ ├── payments.html # 支付记录
│ ├── messages.html # 消息管理
│ └── settings.html # 站点设置
├── edge-functions/
│ ├── _middleware.ts # 边缘中间件(路由分发 + JWT 校验 + 安全头)
│ └── api-proxy.ts # API 代理转发
└── cloud-functions/
└── deploy-hook.ts # 部署后自动执行种子数据
| 模型 | 说明 | 核心字段 |
|---|
| User | 用户账户 | email, name, password(hashed), role(admin/user) |
| Service | 服务项目 | title, slug, description, category, price, duration |
| Booking | 预约订单 | userId, serviceId, status, date, price |
| Payment | 支付记录 | bookingId, amount, method, status |
| Client | 客户资料 | userId, name, email, phone, company, tags |
| Message | 咨询消息 | name, email, subject, content, read |
| Conversation | AI 对话记录 | sessionId, role(user/assistant), content |
| SiteSetting | 站点配置 | key-value 键值对 |
| 前缀 | 路由 | 认证 | 说明 |
|---|
/api/auth | POST /register | ❌ | 注册 |
/api/auth | POST /login | ❌ | 登录 |
/api/auth | GET /me | ✅ | 获取当前用户 |
/api/auth | PUT /profile | ✅ | 更新资料 |
/api/services | GET / | ❌ | 服务列表 |
/api/services | GET /:id | ❌ | 服务详情 |
/api/services | POST / | ✅ admin | 创建服务 |
/api/services | PUT /:id | ✅ admin | 更新服务 |
/api/services | DELETE /:id | ✅ admin | 删除服务 |
/api/bookings | GET / | ✅ | 我的预约 |
/api/bookings | POST / | ✅ | 创建预约 |
/api/bookings | PUT /:id/status | ✅ admin | 更新状态 |
/api/payments | GET / | ✅ admin | 支付列表 |
/api/clients | GET / | ✅ | 客户列表 |
/api/clients | POST / | ✅ | 添加客户 |
/api/messages | GET / | ✅ admin | 消息列表 |
/api/messages | POST / | ❌ | 提交留言 |
/api/messages | PUT /:id | ✅ admin | 标记已读/回复 |
/api/agent | GET /chat | ✅ | SSE 流式对话 |
/api/admin | GET /stats | ✅ admin | 仪表盘统计 |
| 变量 | 默认值 | 说明 |
|---|
PORT | 3000 | 服务端口 |
HOST | 0.0.0.0 | 监听地址 |
JWT_SECRET | opc-site-dev-secret-... | JWT 签名密钥(生产环境务必修改!) |
JWT_EXPIRES_IN | 7d | Token 有效期 |
SITE_TITLE | 我的服务 | 站点标题 |
SITE_DESCRIPTION | 个人产业服务网站 | 站点描述 |
AI_PROVIDER | openai | AI 服务商 |
AI_API_KEY | `` | AI API 密钥 |
AI_MODEL | gpt-4o-mini | AI 模型 |
ADMIN_EMAIL | admin@opc.site | 默认管理员邮箱 |
ADMIN_PASSWORD | admin123 | 默认管理员密码 |
- 在 EdgeOne 控制台 创建 Pages 项目
- 将代码推送到 Git 仓库并关联
| 配置项 | 值 |
|---|
| 构建命令 | npm install && npx prisma generate && npx prisma db push && node scripts/post-gen.js |
| 输出目录 | . |
| Edge Functions 目录 | edge-functions/ |
| Cloud Functions 目录 | cloud-functions/ |
在 Pages 项目 → 设置 → 环境变量中添加以下变量:
JWT_SECRET — 改为安全的随机字符串
SITE_TITLE — 站点名称
SITE_DESCRIPTION — 站点描述
AI_API_KEY — AI 服务密钥(如需 AI 顾问功能)
Edge Functions 会自动代理 /api/* 请求到后端 Cloud Function,并在边缘层完成 JWT 校验、安全头注入和静态资源缓存。
详情参见 references/edgeone-pages-deploy.md。
编辑 public/css/style.css 中的 CSS 变量:
:root {
--primary: #3b82f6;
--primary-dark: #2563eb;
--primary-light: #93c5fd;
--accent: #8b5cf6;
--bg: #ffffff;
--text: #1e293b;
}
- 在
public/pages/ 下创建 HTML 文件,复用 style.css 的 CSS 变量
- 模板中已包含完整的 Header/Nav 组件,可直接复制使用
- 在
src/app.ts 中添加静态文件路由(通常不需要,Fastify static 会自动服务)
可选模块文档位于 templates/modules/:
| 模块 | 文件 | 说明 |
|---|
| 认证增强 | auth.md | OAuth 第三方登录、密码重置 |
| 预约深度 | booking.md | 日历视图、时段管理、通知推送 |
| 支付集成 | payment.md | 微信支付、支付宝、Stripe 接入 |
| AI 顾问 | agent.md | 知识库接入、对话历史、意图识别 |
| 客户门户 | client-portal.md | 客户自助查看订单、历史记录 |
| 后台增强 | admin.md | 数据分析、导出、多管理员 |
| 命令 | 说明 |
|---|
npm run dev | 开发模式(tsx watch 热重载) |
npm run build | TypeScript 编译 |
npm start | 生产模式启动 |
npm run db:generate | 生成 Prisma 客户端 |
npm run db:push | 同步数据库表结构 |
npm run db:seed | 写入种子数据 |
npm run setup | 全自动初始化(install + generate + push + seed) |
MIT