feat: 四项体验修复(字号/品牌登录模板/第三方登录/免邮箱验证)

① 全局字号提升一档:body 基准 16.8px,14 个核心组件 99 处 text-xs/text-sm 放大
② 五站五套登录模板:FormShell 品牌分栏布局(左品牌色侧栏+右表单),
   每站独立 accent(近黑/橙红/纸墨棕/终端绿/紫),站点字标替换 Toolso.AI Logo;
   AuthLayout 简化为容器,布局职责下沉 FormShell
③ 第三方登录按钮:未配置 OAuth 凭据时显示 Google/GitHub 按钮,
   走 /api/auth/mock-social 一键创建演示 session(生产配置凭据后自动 403 切真实流程);
   按钮重设计为全宽方形(替换胶囊 Button)
④ 开发阶段免邮箱验证:better-auth databaseHooks 注册即 emailVerified=true,
   sendOnSignUp 仅生产开启;注册成功直接回跳原页面(跳过 check-email)

回归验证:字号 16.8px / 五站品牌色各异 / mock 登录闭环(投票→登录→回原页)/
注册免验证直接进站(emailVerified=t + 跳首页)全部 PASS
This commit is contained in:
AI Directory Platform
2026-09-09 06:02:16 +00:00
parent 3a2adbec76
commit 14af0aaa3a
54 changed files with 537 additions and 247 deletions
+6
View File
@@ -12,3 +12,9 @@ RESEND_API_KEY=""
RESEND_FROM_EMAIL="AI Stack <noreply@localhost>"
NEXT_PUBLIC_APP_URL="http://localhost:3001"
NEXT_PUBLIC_APP_NAME="AI Stack"
# 登录页品牌模板(分栏侧栏颜色与标语)
NEXT_PUBLIC_AUTH_ACCENT="222 47% 11%"
NEXT_PUBLIC_AUTH_BRAND_TAGLINE="The professional AI tools directory — ranked by the community."
# 开发阶段免邮箱验证(生产置 false 发送真实验证邮件)
DEV_SKIP_EMAIL_VERIFY="true"
NEXT_PUBLIC_DEV_SKIP_EMAIL_VERIFY="true"
+6 -2
View File
@@ -209,7 +209,10 @@
"social": {
"googleSignIn": "Continue with Google",
"or": "Or continue with",
"githubSignIn": "Continue with GitHub"
"githubSignIn": "Continue with GitHub",
"orContinueWith": "or continue with",
"loading": "Signing in...",
"mockFailed": "Social sign-in is unavailable right now. Use email instead."
},
"checkEmail": {
"title": "Check Your Email",
@@ -645,7 +648,8 @@
"sort": {
"latest": "Latest",
"trending": "Trending"
}
},
"clearFilters": "Clear search & filters"
},
"seo": {
"home": {
+6 -2
View File
@@ -209,7 +209,10 @@
"social": {
"googleSignIn": "使用 Google 继续",
"or": "或者继续使用",
"githubSignIn": "使用 GitHub 登录"
"githubSignIn": "使用 GitHub 登录",
"orContinueWith": "或使用以下方式",
"loading": "登录中...",
"mockFailed": "第三方登录暂不可用,请使用邮箱登录。"
},
"checkEmail": {
"title": "请查收您的邮件",
@@ -653,7 +656,8 @@
"sort": {
"latest": "最新",
"trending": "最热"
}
},
"clearFilters": "清除搜索与筛选"
},
"seo": {
"home": {
@@ -0,0 +1,2 @@
// 自动生成:[locale]/(marketing)/loading.tsx 的薄路由
export { default } from "@aidir/core/pages/[locale]/(marketing)/loading";
@@ -0,0 +1,2 @@
// 自动生成:api/auth/mock-social/route.ts 的薄路由
export { POST } from "@aidir/core/pages/api/auth/mock-social/route";
+1
View File
@@ -2,6 +2,7 @@ import type { SiteConfig } from "@/kit/types";
// AI Stack —— 独立站点的全部品牌/导航/页脚配置
export const siteConfig: SiteConfig = {
"accent": "222 47% 11%",
"port": 3001,
"brand": {
"name": "AI Stack",
+6
View File
@@ -12,3 +12,9 @@ RESEND_API_KEY=""
RESEND_FROM_EMAIL="DevAI.tools <noreply@localhost>"
NEXT_PUBLIC_APP_URL="http://localhost:3004"
NEXT_PUBLIC_APP_NAME="DevAI.tools"
# 登录页品牌模板(分栏侧栏颜色与标语)
NEXT_PUBLIC_AUTH_ACCENT="150 60% 30%"
NEXT_PUBLIC_AUTH_BRAND_TAGLINE="AI tools for developers — curated, tested, ranked by the community."
# 开发阶段免邮箱验证(生产置 false 发送真实验证邮件)
DEV_SKIP_EMAIL_VERIFY="true"
NEXT_PUBLIC_DEV_SKIP_EMAIL_VERIFY="true"
+6 -2
View File
@@ -209,7 +209,10 @@
"social": {
"googleSignIn": "Continue with Google",
"or": "Or continue with",
"githubSignIn": "Continue with GitHub"
"githubSignIn": "Continue with GitHub",
"orContinueWith": "or continue with",
"loading": "Signing in...",
"mockFailed": "Social sign-in is unavailable right now. Use email instead."
},
"checkEmail": {
"title": "Check Your Email",
@@ -645,7 +648,8 @@
"sort": {
"latest": "Latest",
"trending": "Trending"
}
},
"clearFilters": "Clear search & filters"
},
"seo": {
"home": {
+6 -2
View File
@@ -209,7 +209,10 @@
"social": {
"googleSignIn": "使用 Google 继续",
"or": "或者继续使用",
"githubSignIn": "使用 GitHub 登录"
"githubSignIn": "使用 GitHub 登录",
"orContinueWith": "或使用以下方式",
"loading": "登录中...",
"mockFailed": "第三方登录暂不可用,请使用邮箱登录。"
},
"checkEmail": {
"title": "请查收您的邮件",
@@ -653,7 +656,8 @@
"sort": {
"latest": "最新",
"trending": "最热"
}
},
"clearFilters": "清除搜索与筛选"
},
"seo": {
"home": {
@@ -0,0 +1,2 @@
// 自动生成:[locale]/(marketing)/loading.tsx 的薄路由
export { default } from "@aidir/core/pages/[locale]/(marketing)/loading";
@@ -0,0 +1,2 @@
// 自动生成:api/auth/mock-social/route.ts 的薄路由
export { POST } from "@aidir/core/pages/api/auth/mock-social/route";
+1
View File
@@ -2,6 +2,7 @@ import type { SiteConfig } from "@/kit/types";
// DevAI.tools —— 独立站点的全部品牌/导航/页脚配置
export const siteConfig: SiteConfig = {
"accent": "150 60% 30%",
"port": 3004,
"brand": {
"name": "DevAI.tools",
+6
View File
@@ -12,3 +12,9 @@ RESEND_API_KEY=""
RESEND_FROM_EMAIL="findai <noreply@localhost>"
NEXT_PUBLIC_APP_URL="http://localhost:3005"
NEXT_PUBLIC_APP_NAME="findai"
# 登录页品牌模板(分栏侧栏颜色与标语)
NEXT_PUBLIC_AUTH_ACCENT="260 70% 52%"
NEXT_PUBLIC_AUTH_BRAND_TAGLINE="The minimal AI tool search engine."
# 开发阶段免邮箱验证(生产置 false 发送真实验证邮件)
DEV_SKIP_EMAIL_VERIFY="true"
NEXT_PUBLIC_DEV_SKIP_EMAIL_VERIFY="true"
+6 -2
View File
@@ -209,7 +209,10 @@
"social": {
"googleSignIn": "Continue with Google",
"or": "Or continue with",
"githubSignIn": "Continue with GitHub"
"githubSignIn": "Continue with GitHub",
"orContinueWith": "or continue with",
"loading": "Signing in...",
"mockFailed": "Social sign-in is unavailable right now. Use email instead."
},
"checkEmail": {
"title": "Check Your Email",
@@ -645,7 +648,8 @@
"sort": {
"latest": "Latest",
"trending": "Trending"
}
},
"clearFilters": "Clear search & filters"
},
"seo": {
"home": {
+6 -2
View File
@@ -209,7 +209,10 @@
"social": {
"googleSignIn": "使用 Google 继续",
"or": "或者继续使用",
"githubSignIn": "使用 GitHub 登录"
"githubSignIn": "使用 GitHub 登录",
"orContinueWith": "或使用以下方式",
"loading": "登录中...",
"mockFailed": "第三方登录暂不可用,请使用邮箱登录。"
},
"checkEmail": {
"title": "请查收您的邮件",
@@ -653,7 +656,8 @@
"sort": {
"latest": "最新",
"trending": "最热"
}
},
"clearFilters": "清除搜索与筛选"
},
"seo": {
"home": {
@@ -0,0 +1,2 @@
// 自动生成:[locale]/(marketing)/loading.tsx 的薄路由
export { default } from "@aidir/core/pages/[locale]/(marketing)/loading";
@@ -0,0 +1,2 @@
// 自动生成:api/auth/mock-social/route.ts 的薄路由
export { POST } from "@aidir/core/pages/api/auth/mock-social/route";
+1
View File
@@ -2,6 +2,7 @@ import type { SiteConfig } from "@/kit/types";
// findai —— 独立站点的全部品牌/导航/页脚配置
export const siteConfig: SiteConfig = {
"accent": "260 70% 52%",
"port": 3005,
"brand": {
"name": "findai",
+6
View File
@@ -12,3 +12,9 @@ RESEND_API_KEY=""
RESEND_FROM_EMAIL="LaunchAI <noreply@localhost>"
NEXT_PUBLIC_APP_URL="http://localhost:3002"
NEXT_PUBLIC_APP_NAME="LaunchAI"
# 登录页品牌模板(分栏侧栏颜色与标语)
NEXT_PUBLIC_AUTH_ACCENT="16 85% 55%"
NEXT_PUBLIC_AUTH_BRAND_TAGLINE="Discover and upvote today's AI products."
# 开发阶段免邮箱验证(生产置 false 发送真实验证邮件)
DEV_SKIP_EMAIL_VERIFY="true"
NEXT_PUBLIC_DEV_SKIP_EMAIL_VERIFY="true"
+6 -2
View File
@@ -209,7 +209,10 @@
"social": {
"googleSignIn": "Continue with Google",
"or": "Or continue with",
"githubSignIn": "Continue with GitHub"
"githubSignIn": "Continue with GitHub",
"orContinueWith": "or continue with",
"loading": "Signing in...",
"mockFailed": "Social sign-in is unavailable right now. Use email instead."
},
"checkEmail": {
"title": "Check Your Email",
@@ -645,7 +648,8 @@
"sort": {
"latest": "Latest",
"trending": "Trending"
}
},
"clearFilters": "Clear search & filters"
},
"seo": {
"home": {
+6 -2
View File
@@ -209,7 +209,10 @@
"social": {
"googleSignIn": "使用 Google 继续",
"or": "或者继续使用",
"githubSignIn": "使用 GitHub 登录"
"githubSignIn": "使用 GitHub 登录",
"orContinueWith": "或使用以下方式",
"loading": "登录中...",
"mockFailed": "第三方登录暂不可用,请使用邮箱登录。"
},
"checkEmail": {
"title": "请查收您的邮件",
@@ -653,7 +656,8 @@
"sort": {
"latest": "最新",
"trending": "最热"
}
},
"clearFilters": "清除搜索与筛选"
},
"seo": {
"home": {
@@ -0,0 +1,2 @@
// 自动生成:[locale]/(marketing)/loading.tsx 的薄路由
export { default } from "@aidir/core/pages/[locale]/(marketing)/loading";
@@ -0,0 +1,2 @@
// 自动生成:api/auth/mock-social/route.ts 的薄路由
export { POST } from "@aidir/core/pages/api/auth/mock-social/route";
+1
View File
@@ -2,6 +2,7 @@ import type { SiteConfig } from "@/kit/types";
// LaunchAI —— 独立站点的全部品牌/导航/页脚配置
export const siteConfig: SiteConfig = {
"accent": "16 85% 55%",
"port": 3002,
"brand": {
"name": "LaunchAI",
+6
View File
@@ -12,3 +12,9 @@ RESEND_API_KEY=""
RESEND_FROM_EMAIL="The AI Ledger <noreply@localhost>"
NEXT_PUBLIC_APP_URL="http://localhost:3003"
NEXT_PUBLIC_APP_NAME="The AI Ledger"
# 登录页品牌模板(分栏侧栏颜色与标语)
NEXT_PUBLIC_AUTH_ACCENT="36 70% 40%"
NEXT_PUBLIC_AUTH_BRAND_TAGLINE="Independent journalism on AI tools, with a community-ranked directory."
# 开发阶段免邮箱验证(生产置 false 发送真实验证邮件)
DEV_SKIP_EMAIL_VERIFY="true"
NEXT_PUBLIC_DEV_SKIP_EMAIL_VERIFY="true"
+6 -2
View File
@@ -209,7 +209,10 @@
"social": {
"googleSignIn": "Continue with Google",
"or": "Or continue with",
"githubSignIn": "Continue with GitHub"
"githubSignIn": "Continue with GitHub",
"orContinueWith": "or continue with",
"loading": "Signing in...",
"mockFailed": "Social sign-in is unavailable right now. Use email instead."
},
"checkEmail": {
"title": "Check Your Email",
@@ -645,7 +648,8 @@
"sort": {
"latest": "Latest",
"trending": "Trending"
}
},
"clearFilters": "Clear search & filters"
},
"seo": {
"home": {
+6 -2
View File
@@ -209,7 +209,10 @@
"social": {
"googleSignIn": "使用 Google 继续",
"or": "或者继续使用",
"githubSignIn": "使用 GitHub 登录"
"githubSignIn": "使用 GitHub 登录",
"orContinueWith": "或使用以下方式",
"loading": "登录中...",
"mockFailed": "第三方登录暂不可用,请使用邮箱登录。"
},
"checkEmail": {
"title": "请查收您的邮件",
@@ -653,7 +656,8 @@
"sort": {
"latest": "最新",
"trending": "最热"
}
},
"clearFilters": "清除搜索与筛选"
},
"seo": {
"home": {
@@ -0,0 +1,2 @@
// 自动生成:[locale]/(marketing)/loading.tsx 的薄路由
export { default } from "@aidir/core/pages/[locale]/(marketing)/loading";
@@ -0,0 +1,2 @@
// 自动生成:api/auth/mock-social/route.ts 的薄路由
export { POST } from "@aidir/core/pages/api/auth/mock-social/route";
+1
View File
@@ -2,6 +2,7 @@ import type { SiteConfig } from "@/kit/types";
// The AI Ledger —— 独立站点的全部品牌/导航/页脚配置
export const siteConfig: SiteConfig = {
"accent": "36 70% 40%",
"port": 3003,
"brand": {
"name": "The AI Ledger",