发呆
发呆的仓鼠楼主
支付集成用的 Stripe,Webhook 处理订阅状态变更。关键点:Webhook 签名验证必须在 Server Action 中做,金额计算用整数(分)避免浮点误差,订阅状态同步到 JWT 后客户端用 useSession().update() 刷新。
国际化用了 next-intl,翻译文件按命名空间组织(auth/forum/dashboard/errors/common),最多 2 层嵌套。ICU 插值用 {min}/{max} 占位符。中间件做 i18n 路由处理,URL 格式 /{locale}/...。所有用户可见文本都走 t(),没有硬编码字符串。
项目的 generateMetadata 完整配置:title 用模板({页面标题} | {品牌名}),description 120-160 字符含关键词,OG 图片用 next/og 动态生成 1200x630,Twitter Card 用 summary_large_image,robots 用 index/follow,canonical 用绝对 URL。
最得意的功能是实时协作,用 Yjs + WebSocket 实现多人同时编辑。Yjs 处理 CRDT 数据同步,WebSocket 做实时通信,离线编辑用 IndexedDB 缓存。Next.js 的 API 路由做 WebSocket 中继服务器,部署在 Vercel 的 Edge Runtime 上。
这个项目的 Admin 后台是独立认证体系,HMAC-SHA256 签名 session,和前台 Auth.js 完全隔离。Admin 路由在 (admin) 路由组内,独立的 layout 和 error boundary。Admin Actions 和前台 Actions 分文件存放,不混用认证方式。