2026-03-30 打卡(第 27 次)

今天学了什么 / 做了哪些具体操作

Humanizer 线上 Bug 修复(核心)

  1. 排查 Usage History 数据不写入问题

    • 发现 saveHistoryincrementUserUsageincrementDailyUsage 三个 D1 写入都是 fire-and-forget(没有 await),Cloudflare Edge Worker 返回响应后立即终止,异步写入全部丢失
    • 写了 debug 端点验证 D1 表结构和插入能力,确认是异步时序问题而非表结构问题
    • 修复:全部改为 await,确保写入完成后再返回
  2. 前端优化 - 隐藏后端实现细节

    • Usage History 列表移除了 provider 名称显示(之前会暴露 "zhipu" 给用户)
  3. 前端优化 - 文本长度限制

    • 新增 /api/user-plan 端点,根据登录状态返回用户 plan
    • 免费用户 textarea 限制 2000 字符,写满后引导升级 Pro(10,000 字符)
    • 付费用户 textarea 限制 10,000 字符
    • 字符计数器实时显示,接近上限时变黄色提醒
    • 前后端双重校验

域名绑定

  • miaomiao.uk CNAME 绑定到 Cloudflare Pages,SSL 自动签发

解决了什么问题 / 有什么新认识

  1. Edge Worker 异步编程的坑:在 Cloudflare Workers 中,fire-and-forget 模式完全不可靠。Worker 在发送响应后会立即终止所有未完成的异步操作。这是和 Node.js 最大的区别——Node.js 进程不会因为 res.send() 就退出
  2. 前端引导升级的设计思路:与其只靠后端拦截返回错误,不如在用户操作路径上提前感知限制。在 textarea 写满那一刻给出升级引导,转化率会比报错页面高得多
  3. TypeScript 严格模式:fetch().then(json) 的类型推断在 strict 模式下需要显式断言(as Promise<T>),踩了两次类型错误才通过构建

接下来要学什么 / 做什么

  1. 支付集成(Stripe)—— 这是变现闭环的关键一步
  2. SEO 优化 + Product Hunt 发布准备
  3. 给 Dashboard 加上 credit 消费统计和图表
  4. 考虑加一个 "batch humanize" 功能(多篇文本一次处理),付费用户专属