Initial Paprika Next.js implementation

This commit is contained in:
2026-07-06 12:12:36 -04:00
commit 7d585484a6
38 changed files with 14824 additions and 0 deletions

253
working/03-推进台账.md Normal file
View File

@@ -0,0 +1,253 @@
# 03-推进台账
本文件按轮次记录工作。每轮结束必须写清楚:做了什么、改了哪些文件、验证了什么、下一步是什么。
## R001 - 建立 working 文档体系
- 日期2026-07-06
- 任务编号T001、T002
- 做了什么:
- 阅读 `doc/index.html` 的页面结构、导航、路由、表单 mockup、服务模块、FAQ、O-1A criteria、法务页面和渲染脚本。
- 建立 `working` 目录下 6 份编号文档和 README 索引。
- 初步记录当前项目是自包含静态 HTML mockup。
- 改了哪些文件:
- `working/README.md`
- `working/01-项目功能内容.md`
- `working/02-项目程序开发详细步骤.md`
- `working/03-推进台账.md`
- `working/04-任务矩阵.md`
- `working/05-验收证据.md`
- `working/06-决策记录.md`
- 验证了什么:
- 确认 `doc/index.html` 是自包含静态 HTML。
- 确认页面通过 `?page=...` 查询参数切换。
- 确认 Start Here 和 Ask a Question 当前是视觉 mockup不是真实表单。
- 证据链接或编号E001、E002、E003
- 遗留问题:
- 未做浏览器截图验收。
- 未做移动端回归。
- 未实现表单和部署。
- 下一步:
-`04-任务矩阵.md``VERIFY``TODO` 任务继续推进。
## R002 - 完全对标 doc/index.html 补强 working 文档
- 日期2026-07-06
- 任务编号T028
- 做了什么:
- 复读 `doc/index.html` 中 header、footer、`pageData`、页面组合函数、Press/Judging/Resources/FAQ/Legal/Form 模块。
- 补充 `01-项目功能内容.md`把页面路由、内容模块、表单字段、服务卡片、O-1A criteria、法律页面、已知缺陷和发布环境写完整。
- 补充 `02-项目程序开发详细步骤.md`形成阶段化路线基线复现、静态修复、真实表单、工程化拆分、8082 端口部署、HTTPS、回归验收。
- 补强任务矩阵新增服务器部署、凭据处理、contact 死链、outlet/network 陈述风险、README 索引维护等任务。
- 补强验收证据,记录本轮命令、源码发现和后续证据清单。
- 补强决策记录,明确不在长期文档保存明文密码、服务默认走 8082、Services 的 `contact` 路由是缺陷。
- 改了哪些文件:
- `working/README.md`
- `working/01-项目功能内容.md`
- `working/02-项目程序开发详细步骤.md`
- `working/03-推进台账.md`
- `working/04-任务矩阵.md`
- `working/05-验收证据.md`
- `working/06-决策记录.md`
- 验证了什么:
- `rg --files` 确认项目当前主要文件为 `doc/index.html``doc/README.md``working/*.md`
- `rg -n` 确认公开路由、隐藏路由、表单 mockup、legal 页面、动态路由逻辑均在 `doc/index.html`
- `sed` 分段读取源文件,确认 Services 04/05/06 卡片指向不存在的 `contact` 页面。
- `git status --short` 失败,确认当前目录不是 Git 仓库或未在 Git 工作树内。
- 证据链接或编号E004、E005、E006、E007
- 遗留问题:
- 尚未改 `doc/index.html`
- 尚未启动本地服务器或做截图。
- 尚未登录远端服务器。
- 用户提供了密码,但长期文档未写入明文密码。
- 下一步:
- 优先处理 T029修复 Services 页面不存在的 `contact` 路由。
- 继续 T003-T011对核心页面做浏览器截图验收。
- 之后按产品选择推进 T012/T013 表单落地或 T022 工程化拆分。
## R003 - 源码级对标附录完善
- 日期2026-07-06
- 任务编号T034
- 做了什么:
- 重新扫描 `doc/index.html` 的 CSS token、响应式断点、路由链接、函数列表、FAQ、Legal sections 和渲染逻辑。
-`01-项目功能内容.md` 增加视觉设计、组件 CSS 类、JavaScript 函数、CTA 全量映射、FAQ 完整编号、Legal 逐项结构和源码级结论。
-`02-项目程序开发详细步骤.md` 增加“完全对标核验清单”,规定以后如何证明文档与源 HTML 对齐。
- 更新任务矩阵、验收证据和决策记录。
- 改了哪些文件:
- `working/01-项目功能内容.md`
- `working/02-项目程序开发详细步骤.md`
- `working/03-推进台账.md`
- `working/04-任务矩阵.md`
- `working/05-验收证据.md`
- `working/06-决策记录.md`
- 验证了什么:
- `doc/index.html` 共 3423 行。
- CSS 只有一个显式响应式断点:`@media (max-width: 1080px)`
- `pageData` 包含公开路由、隐藏路由和 legal 页面。
- FAQ 共 4 组 20 个问题。
- Terms 编号缺少 17Legal 日期均为 `July 10, 2026`
- 多个函数和 CSS 模块存在但当前未调用。
- 证据链接或编号E016
- 遗留问题:
- 仍未修改 `doc/index.html` 源码。
- 仍未做浏览器截图和真实部署验收。
- 下一步:
- 按 T029 修复 `contact` 缺陷,或按 T003-T011 做页面截图验收。
## R004 - 明确正式开发技术架构
- 日期2026-07-06
- 任务编号T035
- 做了什么:
- 根据用户确认,将正式开发路线从候选方案收敛为 Next.js + React + PostgreSQL。
- 将默认数据访问层定为 Prisma ORM。
- 补充 Next.js 路由迁移表、PostgreSQL 数据模型初稿、表单 API、环境变量、8082 启动方式和部署验收标准。
- 更新任务矩阵和决策记录。
- 改了哪些文件:
- `working/01-项目功能内容.md`
- `working/02-项目程序开发详细步骤.md`
- `working/03-推进台账.md`
- `working/04-任务矩阵.md`
- `working/05-验收证据.md`
- `working/06-决策记录.md`
- `working/README.md`
- 验证了什么:
- 文档已不再把 Vite/静态拆分作为推荐路线。
- 部署命令已调整为 Next.js `npm run start -- -p 8082`
- 数据库任务已进入矩阵。
- 证据链接或编号E017
- 遗留问题:
- 尚未实际创建 Next.js 工程。
- 尚未创建 PostgreSQL 数据库或 Prisma migration。
- 文件上传存储方案仍需单独确认。
- 下一步:
- 执行 T036 初始化 Next.js 工程。
- 执行 T037 设计并迁移 PostgreSQL schema。
## R005 - 记录服务器 PostgreSQL 安装状态
- 日期2026-07-06
- 任务编号T040
- 做了什么:
- 根据用户反馈,记录 PostgreSQL 已在服务器 `170.106.192.152` 安装完成。
- 补充服务器 PostgreSQL 验证命令、应用数据库和受限用户创建建议。
- 保持凭据安全规则:不把明文 SSH 密码写入长期文档。
- 改了哪些文件:
- `working/01-项目功能内容.md`
- `working/02-项目程序开发详细步骤.md`
- `working/03-推进台账.md`
- `working/04-任务矩阵.md`
- `working/05-验收证据.md`
- `working/06-决策记录.md`
- 验证了什么:
- 本轮未登录服务器验证,仅记录用户确认。
- 证据链接或编号E018
- 遗留问题:
- 需要远程执行 `systemctl status postgresql``psql --version`、数据库列表检查。
- 需要创建或确认 `paprika` 数据库和 `paprika_app` 应用用户。
- 下一步:
- 执行 T040 远程验证 PostgreSQL。
- 执行 T037 接入 Prisma schema 和 migration。
## R006 - 记录邮箱系统账号需求
- 日期2026-07-06
- 任务编号T041
- 做了什么:
- 记录普通用户 webmail 入口、管理员入口和 `admin@paprikalaw.com` 管理员账号。
- 记录 10 个普通公司邮箱账号清单。
- 补充邮件 DNS、收发验证、表单通知接入和凭据安全要求。
- 明确用户提供的统一初始密码不写入长期文档。
- 改了哪些文件:
- `working/01-项目功能内容.md`
- `working/02-项目程序开发详细步骤.md`
- `working/03-推进台账.md`
- `working/04-任务矩阵.md`
- `working/05-验收证据.md`
- `working/06-决策记录.md`
- `working/README.md`
- 验证了什么:
- 本轮只记录需求,未登录邮件后台,未验证 DNS/MX/SPF/DKIM/DMARC。
- 证据链接或编号E019
- 遗留问题:
- 需要登录 `https://mail.paprikalaw.com/admin/` 确认账号是否已创建。
- 需要测试 webmail 登录、内外部收发和 DNS 记录。
- 需要决定网站表单通知使用哪个邮箱。
- 下一步:
- 执行 T041 邮箱账号创建/确认。
- 执行 T042 邮件 DNS 和收发测试。
- 执行 T043 Next.js 表单邮件通知配置。
## R007 - 落地 Next.js 工程、Prisma 和真实表单
- 日期2026-07-06
- 任务编号T012、T013、T017、T020、T022、T029、T036、T037、T038、T039、T044
- 做了什么:
- 修复 `doc/index.html` 中 Services 04/05/06 CTA 指向不存在 `contact` 的缺陷,统一改为 `start`
- 将 legal 页面日期从未来日期 `July 10, 2026` 改为当前工作日期 `July 6, 2026`
- 在项目根目录初始化 Next.js + React + TypeScript App Router 工程。
- 编写 `scripts/extract-legacy-pages.mjs`,从 `doc/index.html` 抽取 CSS 和静态页面 HTML生成 `app/globals.css``lib/legacy-pages.ts`
- 建立 `app/[page]/page.tsx` 静态路由,迁移公开页面到 `/press``/judging``/services` 等路径路由。
- 建立 `/start``/ask` 真实 React 表单,提交到 `POST /api/submissions`
- 建立 Prisma schema、初始化 migration、`.env.example`、数据库访问层和 Zod 校验。
- 增加基础 SEO metadata、`robots.txt``sitemap.xml`
- 升级到 Next `16.2.10`、React `19.2.7`,并配置 ESLint 9 flat config。
- 改了哪些文件:
- `doc/index.html`
- `.env.example`
- `.gitignore`
- `package.json`
- `package-lock.json`
- `tsconfig.json`
- `next-env.d.ts`
- `next.config.mjs`
- `eslint.config.mjs`
- `scripts/extract-legacy-pages.mjs`
- `app/*`
- `components/*`
- `lib/*`
- `prisma/schema.prisma`
- `prisma/migrations/20260706120000_init/migration.sql`
- `working/README.md`
- `working/01-项目功能内容.md`
- `working/02-项目程序开发详细步骤.md`
- `working/03-推进台账.md`
- `working/04-任务矩阵.md`
- `working/05-验收证据.md`
- `working/06-决策记录.md`
- 验证了什么:
- `npm run generate:legacy` 成功生成 12 个旧页面数据。
- `npm run prisma:generate` 成功生成 Prisma Client。
- `npm run lint` 通过。
- `npx tsc --noEmit` 通过。
- `npm run build` 通过,生成 19 个 app route。
- `npm run start -- -p 8082` 本地生产服务可启动。
- `/``/press``/judging``/scholarly``/services``/why``/resources``/faq``/start``/ask``/thanks``/terms``/privacy``/disclaimer``/robots.txt``/sitemap.xml` 本地生产服务均返回 200。
- `/api/submissions` 对缺失必填字段和错误 email 返回 400 校验错误。
- 有效提交在未配置 `DATABASE_URL` 时返回 500确认入库成功仍需真实 PostgreSQL。
- 证据链接或编号E022、E023、E024、E025、E026
- 遗留问题:
- 本地未配置 PostgreSQL `DATABASE_URL`,尚不能完成真实入库验收。
- 远程 PostgreSQL、应用数据库、应用用户、migration deploy 尚未验证。
- 邮箱后台、DNS、SMTP 通知未验证。
- 法务内容审核、outlet/network 名称确认、文件上传策略仍需外部确认。
- 尚未做浏览器截图/PDF 归档。
- 下一步:
- 执行 T040/T044远程验证 PostgreSQL配置生产 `DATABASE_URL`,执行 migration并提交 Start/Ask 获取 `submission_id`
- 执行 T039/T024部署 Next.js 到服务器 `8082` 并配置 systemd。
- 执行 T041-T043验证邮箱和 SMTP 通知。
- 执行 T018/T026补桌面和移动端截图证据。
## 后续轮次模板
### RXXX - 标题
- 日期:
- 任务编号:
- 做了什么:
- 改了哪些文件:
- 验证了什么:
- 证据链接或编号:
- 遗留问题:
- 下一步: