用 Codex 生成了一份留言板的开发方式

Airly 跟我要留言板的开发方式。 我想到我的留言板以及点赞都是一个后台生成的。 我就让 Codex 给我写了个教程。

一、先发这一段

我想给我的 Hugo 网站安装一套“游客留言 + 文章点赞”功能。

视觉和交互参考永澄现在的网站: https://yryc.wang/log/e/de44d3b1-a430-4c92-a3e8-832cf29da7dc/

请只参考这个页面当前呈现的留言区、点赞区样式和交互,不要研究或采用它以前使用过的其他评论方案,也不要复制它的域名、服务器地址、账号、密钥、邮件地址或项目路径。

一、我想实现的文章点赞

在普通文章详情页的正文结束处增加一个轻量点赞卡片,位置在正文与标签之间。

样式和文字参考:

  • “读完了,觉得不错?”
  • “轻轻点一下,不用留言。”
  • 初始按钮:“♡ 点个赞”
  • 显示“N 个赞”
  • 点赞后显示:“♥ 已点赞”
  • 成功提示:“谢谢你的回应。”
  • 再点一次可以取消点赞
  • 刷新页面后,当前浏览器仍能记住是否点过赞
  • 点赞服务故障时,只禁用点赞按钮并显示友好提示,不影响正文和留言阅读

这是轻量回应数,不需要注册、昵称或邮箱,也不宣称是经过认证的独立人数。

二、我想实现的游客留言

在普通文章详情页底部增加留言区,样式和交互参考:

  • 标题:“留言交流”
  • 主文案:“读到这里,留下点什么吧。”
  • 不用注册或登录
  • 自动生成一个保存在本机的游客昵称
  • 用户可以“换一个”或者“自己改名”
  • 邮箱完全选填,只用于站长回复提醒,不得在公开页面或公开 API 中展示
  • 支持留言、回复、排序、Markdown、简单表情和给单条留言点赞
  • 新留言先进入待审核状态,管理员批准后才能公开
  • 管理员可以审核、回复和删除留言
  • 留言区接近可视区域时再加载
  • API 暂时不可用时,正文继续正常显示,留言区显示失败说明和“重新加载留言”

三、页面范围

点赞和留言只出现在普通文章详情页。

首页、每日总结页、列表页、RSS 和 Pagefind 搜索结果中都不要加载或索引这些组件。

文章和留言的身份必须使用本站稳定的永久链接,例如 Hugo 的 `.RelPermalink`。请先检查我的永久链接规则,不要机械照搬参考网站的 `/log/e/{uuid}/` 路径。

四、视觉要求

请通过浏览器实际检查参考页面的桌面端和移动端效果,然后适配我网站现有的字体、颜色、圆角、边框、间距和明暗主题。

要求:

  • 看起来像我网站原生的一部分,不像突然嵌入的第三方插件
  • 移动端不产生横向滚动
  • 按钮触控区域足够大
  • 有完整的 loading、ready、saving、success、error 状态
  • 支持键盘操作和屏幕阅读器
  • 不因为安装留言功能而改动文章正文、导航或无关样式

五、推荐的技术方向

请先检查我的服务器和部署条件,再判断是否适用以下方向:

  • Hugo 负责页面模板和前端样式
  • 使用自托管的 Waline 兼容留言服务或经过审查的等价实现
  • SQLite 保存留言和点赞计数
  • 留言服务独立运行,由 systemd 管理,只监听本机端口
  • Nginx 通过 comments.<我的域名> 反向代理
  • 使用独立的管理后台审核留言
  • 文章点赞可以复用 Waline Counter 的一个 reaction 计数,但必须增加严格的服务端校验
  • 如果当前 Node 新版本与 SQLite 原生依赖不兼容,应选择经过实际验证的 Node LTS 版本,不要强行使用最新版

点赞写接口只允许:

  • 本站合法且稳定的文章永久路径
  • 固定的点赞计数类型
  • 增加和取消两种操作

必须拒绝非法路径、其他计数类型和未知操作。计数更新需要并发安全,取消后不得出现负数。

六、安全和运维要求

  • CORS 只允许我的正式网站域名,不能使用 *
  • CSP 只增加留言 API 所必需的 connect-src
  • 对公开写接口和管理员登录进行限流
  • 输入内容必须经过可靠的 XSS 消毒
  • 邮箱、IP、未消毒原文和管理信息不得出现在公开接口
  • 密码、SMTP 凭证、密钥和 Token 只能放在权限为 0600 的独立环境文件中,不能写入仓库、命令参数或文档
  • 管理员使用独立强密码,支持的话开启 2FA
  • 如果使用 Cloudflare,留言 API 和管理后台必须绕过缓存
  • SQLite 必须有每日一致性备份、保留策略和异机加密副本
  • 上线前至少完成一次真实恢复并执行数据库完整性检查
  • 留言服务故障不能影响 Hugo 静态文章访问

七、你的工作方式

现在先进入只读方案阶段,不要修改代码、服务器、DNS、Cloudflare 或生产环境。

请先完成:

  1. 检查我的 Hugo 项目结构、模板、样式、永久链接和现有构建测试。
  2. 检查当前 Git 分支、未提交改动和默认主分支。
  3. 检查服务器、Nginx、Node、systemd、DNS、TLS、Cloudflare、SMTP 和部署方式。
  4. 判断现有网站是否已经存在评论、点赞或计数功能,避免重复安装。
  5. 给出适合我网站的准确实施方案。
  6. 列出准备新增或修改的文件、服务、域名、数据库和外部配置。
  7. 说明哪些地方来自参考网站,哪些地方需要根据我的网站重新适配。
  8. 给出本地测试、候选构建、生产部署、备份和回滚方案。
  9. 列出需要我提供或亲自确认的账号、域名和权限,但不要让我在聊天里发送密码。
  10. 给出完整验收清单和下一条授权指令。

在我明确确认方案前,不要执行任何写入或生产操作。

二、再发这一段

我确认采用你刚才给出的“当前游客留言 + 文章轻点赞”方案。

我授权你在刚才列明的范围内:

  • 修改对应的 Hugo 模板、前端资源、配置和测试;
  • 创建并配置留言服务、SQLite、systemd 和 Nginx;
  • 在我确认具体域名后配置留言子域、TLS、CORS、CSP 和必要的 Cloudflare 规则;
  • 配置留言审核、回复通知、限流、备份和恢复机制;
  • 完成本地测试、隔离数据库测试、候选构建、生产部署和公网验收;
  • 只改本功能涉及的文件,不带入工作区中的其他改动。

请连续推进到验收完成。遇到需要我登录账号、输入密码、确认 DNS、授权 Cloudflare、设置 SMTP 或执行其他高影响外部动作时,停下来告诉我:

  1. 这一步在解决什么问题;
  2. 需要我具体做什么;
  3. 做完后你将如何验证。

生产上线前必须先备份现有站点、配置和数据库,并准备可执行的回滚路径。

最终至少验证:

  • 匿名留言提交后处于待审核状态,公开页面不可见;
  • 管理员批准后留言公开;
  • 管理员可以回复和删除;
  • 邮箱不会在公开页面或接口中泄露;
  • 文章点赞完成“0 → 1 → 刷新仍为1 → 取消回到0”;
  • 并发点赞安全,计数不会成为负数;
  • 非法路径、类型和操作会被服务端拒绝;
  • 首页、列表页、每日页、RSS 和 Pagefind 不加载点赞及留言组件;
  • 桌面端、移动端和明暗主题显示正常;
  • API 故障不影响文章阅读;
  • CORS、CSP、限流和缓存策略符合预期;
  • 服务运行正常,数据库备份和恢复验证通过;
  • 公网真实浏览器无控制台错误;
  • 当前分支、提交、推送及是否归并主分支的状态清楚。

完成后给我一份简洁的交付报告:改了什么、部署了什么、验证证据、管理入口、备份位置、回滚方法和后续维护要求。

读完了,觉得不错?

轻轻点一下,不用留言。
个赞

正在读取点赞……

发布记录 af5593f0-d05e-4010-be29-948a059c05db 在 Obsidian 中维护

留言交流

读到这里,留下点什么吧。

不用注册或登录。先给你一个本机游客昵称,随时可以换一个或自己修改。

你的游客昵称

它只保存在当前设备,不是认证账号;别人可以使用相同昵称。

邮箱完全选填。 想在站长公开回复时收到提醒,就留下邮箱;它不会在公开页面或公开接口展示。

留言区将在接近这里时加载。