Menu

2.x 版本更新

提示

版本号请查看 package.json 文件的 version 字段

2.0.0

优化

  • 更通用的落地页模板
  • 内置完整的支付需求:月订阅、年订阅、一次性付款

2.1.0

优化

2.2.0

新增特性

  1. 记录用户首次访问来源,查看更新记录1更新记录2
  • 执行数据库文件 supabase/migrations/20250802164211_users_add_referral.sql,并更新 types.ts 文件
  • 执行数据库文件 supabase/migrations/20250803113600_update_my_profile_add_referral.sql,并更新 types.ts 文件
  • middleware.ts:根据 URL 参数在 Cookie 记录用户来源
  • components/providers/AuthProvider.tsx:将用户来源携带到登录参数重
  • app/auth/callback/route.ts:将用户来源记录到 users 表
  1. 简化已有的邮件模板,邮件内容仅保留英文,查看更新记录
  • emails/invoice-payment-failed.tsx:删除非英语内容
  • emails/newsletter-welcome.tsx:删除非英语内容
  • actions/newsletter/index.ts:更新传入的邮件参数
  1. 统一邮件发送函数,查看更新记录
  • actions/resend/index.ts:统一处理邮件发送、订阅取消
  • actions/newsletter/index.ts:调用统一发送邮件的方法
  • lib/stripe/actions.ts:调用统一发送邮件的方法
  1. 可配置是否向新用户发送欢迎邮件,查看更新记录
  • .env.example:新增环境变量 NEXT_PUBLIC_USER_WELCOME 用于配置是否开启新用户欢迎邮件
  • app/auth/callback/route.ts:在新用户登录时,发送新用户邮件通知
  • emails/user-welcome.tsx:新用户欢迎邮件模板

优化

  1. 优化部分组件样式:
  • components/LanguageDetectionAlert.tsx
  • components/ui/rainbow-button.tsx
  1. 优化动态图标的处理方式:
  • components/DynamicIcon.tsx
  1. 优化登录弹框关闭时机:
  • components/auth/LoginForm.tsx

2.2.1

优化

  1. 优化定价管理表单的 lang_json 字段的 JSON 验证和预览卡片的 JSON 解析
  • app/[locale]/(protected)/dashboard/(admin)/prices/PricePlanForm.tsx
  • app/[locale]/(protected)/dashboard/(admin)/prices/PricingCardPreview.tsx
  • lib/safeJson.ts

2.2.2

优化

  1. 优化语言切换提示器样式
  • components/LanguageDetectionAlert.tsx
  • 多语言包 LanguageDetection 字段:
    • i18n/messages/en/common.json
    • i18n/messages/ja/common.json
    • i18n/messages/zh/common.json

2.3.0

优化用户权益获取链路,并实现可靠的 SSG 方案。

优化

  1. AuthProvider.tsx 里调用 useSearchParams 下移到登录组件,保持 layout 服务端渲染,查看更新记录
  • 更新 components/providers/AuthProvider.tsx
  • 更新 components/auth/LoginForm.tsx
  • 更新 app/[locale]/login/page.tsx
  1. 原有的用户权益获取链路复杂,对新手不够友好,且会影响 SSG,所以针对权益获取与使用的方式进行优化,查看更新记录
  • 安装依赖 swr: pnpm i swr
  • 更新 app/[locale]/layout.tsx
  • 更新 actions/usage/benefits.ts,添加客户端获取用户权益的方法 getClientUserBenefits
  • 新增 hooks/useUserBenefits.ts,共享用户权益请求、更新方法和数据状态
  • 更新 components/layout/CurrentUserBenefitsDisplay.tsx,由原来调用 @/stores/benefitsStore 修改为调用 @/hooks/useUserBenefits,两个文件提供的方法名一样,所以该文件里其他代码无需修改
  • 更新 components/header/UserInfo.tsx
  • 更新 app/[locale]/payment/success/page.tsx,使用重新获取数据的方法 mutate(revalidateBenefits) 立即更新权益
  • 删除 components/layout/BenefitsErrorBoundary.tsx
  • 删除 components/providers/BenefitsProvider.tsx

二开的功能,无论新增积分或者扣除积分,都应当调用 mutate(revalidateBenefits) 立即同步数据库的积分。

  1. 修复 SSG 实现,查看更新记录
  • 更新 app/[locale]/layout.tsx
  • 更新 app/[locale]/blogs/[slug]/page.tsx,从 params 取出 locale,而不是使用 getLocale()

2.3.1

修复

  1. GoogleOneTap 判断环境变量是否填写,查看更新记录1更新记录2
  • components/auth/GoogleOneTap.tsx

2.3.2

优化

  1. 登录按钮、支付按钮重定向到登录页,携带页面路径到 URL,用于登录后重定向,查看更新记录
  • components/home/PricingCTA.tsx
  • components/header/UserInfo.tsx
  • lib/utils.ts

修复

  1. 修复 URL 参数 next 为空字符串时无法登录的问题,该 bug 由 2.3.0 修改 LoginForm.tsx 引起,本次变更做了兜底处理。查看更新记录
  • app/auth/callback/route.ts
  • app/auth/confirm/route.ts

2.4.0

优化

  1. 更新布局,Dashboard 使用 Shadcn Sidebar 组件重构左右布局,其他页面保持原有的上中下布局,查看更新记录
  • 执行 pnpm dlx shadcn@latest add sidebar
  • 创建文件夹 app/[locale]/(basic-layout),新增文件 app/[locale]/(basic-layout)/layout.tsx
  • app/[locale] 文件夹下,除了 app/[localte]/layout.tsxapp/[locale]/(protected),其他文件和文件夹全部移入 app/[localte]/(basic-layout)
  • 更新 app/[locale]/layout.tsx,删除其中的 HeaderFooter 引用,删除 <main> 标签(不要删除 <main> 里面的 childeen)
  • 新增 app/[locale]/(protected)/dashboard/DashboardSidebar.tsx
  • 新增 components/header/SidebarInsetHeader.tsx
  • 更新 app/[locale]/(protected)/dashboard/layout.tsx,使用新的 Sidebar
  • i18n/message/en/common.jsoni18n/message/en/common.jsoni18n/message/en/common.jsonUserMenusAdminMenus 新增目录 icon
  • 删除 app/[locale]/(protected)/dashboard/Sidebar.tsx
  • 删除 app/[locale]/(protected)/dashboard/MobileSidebar.tsx
  • 组件样式优化:
    • components/header/UserInfo.tsx
    • components/header/UserAvatar.tsx
    • components/header/MobileMenu.tsx
    • components/header/HeaderLinks.tsx
    • components/header/Header.tsx
  1. 优化复制样式
  • components/mdx/CopyButton.tsx

新增

  1. 添加管理员 overview 页面,查看更新记录
  • 执行 pnpm dlx shadcn@latest add chart
  • 迁移新 sql 文件:supabase/migrations/20250812143117_create_order_stats_function.sql, supabase/migrations/20250812151308_create_daily_growth_stats_function.sql,查看更新方法
  • 新增 Server Actions actions/overview
  • 新增页面 app/[locale]/(protected)/dashboard/(admin)/overview
  • 更新 lib/supabase/middleware.ts,将 /dashboard/overview 添加到管理员权限页面
  • 更新 lib/utils.ts,新增数字格式化方法
  • 更新多语言包
    • 编辑目录:i18n/messages/en/common.json, i18n/messages/ja/common.json, i18n/messages/zh/common.json,新增新页面的目录项
    • 新增新页面语言包: i18n/messages/en/Dashboard/Admin/Overview.json, i18n/messages/ja/Dashboard/Admin/Overview.json, i18n/messages/zh/Dashboard/Admin/Overview.json
    • 编辑 i18n/request.ts,导入新页面语言包
  1. 添加管理员查看 orders 页面,查看更新记录
  • 新增 Server Actions actions/orders
  • 新增页面 app/[locale]/(protected)/dashboard/(admin)/orders
  • 更新 lib/supabase/middleware.ts,将 /dashboard/orders 添加到管理员权限页面
  • 更新多语言包
    • 编辑目录:i18n/messages/en/common.json, i18n/messages/ja/common.json, i18n/messages/zh/common.json,新增新页面的目录项
    • 新增新页面语言包: i18n/messages/en/Dashboard/Admin/Orders.json, i18n/messages/ja/Dashboard/Admin/Orders.json, i18n/messages/zh/Dashboard/Admin/Orders.json
    • 编辑 i18n/request.ts,导入新页面语言包

2.4.1

修复

  1. 修复 AI Demo 页面谷歌模型无法
  • .env.example
  • config/models.ts
  • app/api/admin/translate/route.ts
  • app/api/ai-demo/multi-chat/route.ts
  • app/api/ai-demo/single-chat/route.ts
  1. 邮件模板中的网站名称使用 config/site.ts 配置
  • actions/newsletter/index.ts
  • app/auth/callback/route.ts

2.4.2

修复

  1. 修复一次性付款使用 100% 优惠码无法处理权益升级的问题,查看更新记录
  • lib/stripe/webhook-handlers.ts
  • app/api/payment/verify-success/route.ts

优化

进行一些样式和细节优化

2.4.3

修复

  1. 更新认证重定向URL,使用站点URL而非源URL,查看更新记录
  • app/auth/callback/route.ts
  • app/auth/confirm/route.ts

2.4.4

webhook 处理升级

  1. 一次性付款和订阅付款,webhook 处理减少一次 orders 表查询,查看更新记录
  • lib/stripe/webhook-handlers.ts
  1. 一次性付款和订阅付款升级权益的 rpc 添加重试机制,查看更新记录
  • lib/stripe/webhook-handlers.ts
  1. 添加付款升级权益 rpc 3次重试均失败后的邮件提醒,查看更新记录
  • emails/credit-upgrade-failed.tsx 邮件通知模板
  • lib/stripe/actions.ts 添加邮件通知的方法
  • lib/stripe/webhook-handlers.ts 重试失败后调用邮件通知方法

其他优化

  1. 定价卡片 TabsList 自适应 components/home/Pricing.tsx

  2. 修复 PricePlanForm 错误的多语言 namespace

  • app/[locale]/(protected)/dashboard/(admin)/prices/PricePlanForm.tsx

2.4.5

  1. .eslintrc.json 修改为 .eslintrc.js

2.4.7

  1. 支持 Magic Link 登录中转确认,避免部分邮件服务扫描页面导致token失效和无法登录的问题
  • 新增页面 app/[locale]/(basic-layout)/login/confirm/page.tsx
  • 修改 app/auth/confirm/route.ts
  • 新增环境变量 MAGIC_LINK_REQUIRE_CONFIRMATION,只有值为 true 时开启中转页面