老张
老张楼主
用户反馈最积极的是暗色模式和加载体验。暗色模式用 next-themes 实现,CSS 变量控制配色。加载状态用 skeleton 骨架屏,比 spinner 体验好很多。表单提交用按钮 loading 状态 + toast 反馈,空状态有引导文案和插画。
认证系统踩了不少坑。Auth.js 5 beta 的 JWT callback 必须处理 trigger === 'update',否则用户修改资料后 session 不刷新。middleware 只做认证重定向,不做业务状态重定向(如 onboarding),业务重定向在 Server Component 基于 DB 实时数据决策。
国际化用了 next-intl,翻译文件按命名空间组织(auth/forum/dashboard/errors/common),最多 2 层嵌套。ICU 插值用 {min}/{max} 占位符。中间件做 i18n 路由处理,URL 格式 /{locale}/...。所有用户可见文本都走 t(),没有硬编码字符串。
数据库设计用了 Prisma + PostgreSQL,所有 DateTime 字段都加了 @db.Timestamptz。软删除用 deletedAt 字段,查询时自动过滤。索引方面,所有查询条件字段都加了 @@index,外键关系加了级联删除。迁移用 prisma migrate dev,生产用 prisma migrate deploy。
性能对比:ISR vs SSR vs SSG。我的选择是公共页面用 ISR(revalidate: 3600),用户页面用 SSR(个性化数据),认证页面用 SSG(表单页)。ISR 缓存安全要确保 SSR 输出对所有用户相同,不含 session 数据。