feat: 五站五种登录页设计(去 shadcn 默认味)+ 语言路由确认

- FormShell 重写为六种布局变体,五站各用一种:
  · AI Stack  = glass      深蓝渐变全屏 + 玻璃拟态浮动卡片
  · LaunchAI  = gradient   橙色渐变全屏 + 白色大圆角卡片
  · The AI Ledger = editorial 报纸头版:双细线报头(日期/品牌/标语衬线居中)
                            + 下划线输入 + 方角大写 tracking 黑按钮
  · DevAI.tools = terminal 深色终端窗口(三色标题栏 + $ devai.tools auth --login)
                            + 等宽输入 + 绿底黑字命令按钮
  · findai    = minimal    纯白居中 + 大圆角浅灰输入 + 紫色按钮
- 输入框/标签/社交按钮按 data-theme 形态变化(auth 路由注入 data-theme)
- 修复 FormShell 各变体根元素缺 w-full(被 auth flex 容器挤压成 1/3 宽)
- 回归:五站构建 OK / mock 登录 OK
This commit is contained in:
AI Directory Platform
2026-09-09 20:06:10 +00:00
parent 6baf0246d2
commit 3fddde470b
19 changed files with 331 additions and 79 deletions
+1
View File
@@ -14,6 +14,7 @@ NEXT_PUBLIC_APP_URL="http://localhost:3001"
NEXT_PUBLIC_APP_NAME="AI Stack"
# 登录页品牌模板(分栏侧栏颜色与标语)
NEXT_PUBLIC_AUTH_ACCENT="222 47% 11%"
NEXT_PUBLIC_AUTH_VARIANT="glass"
NEXT_PUBLIC_AUTH_BRAND_TAGLINE="The professional AI tools directory — ranked by the community."
# 开发阶段免邮箱验证(生产置 false 发送真实验证邮件)
DEV_SKIP_EMAIL_VERIFY="true"
+1
View File
@@ -2,6 +2,7 @@ import type { SiteConfig } from "@/kit/types";
// AI Stack —— 独立站点的全部品牌/导航/页脚配置
export const siteConfig: SiteConfig = {
"authVariant": "glass",
"themeClass": "site-ai-stack",
"brandZh": {
"name": "AI Stack",
+1
View File
@@ -14,6 +14,7 @@ NEXT_PUBLIC_APP_URL="http://localhost:3004"
NEXT_PUBLIC_APP_NAME="DevAI.tools"
# 登录页品牌模板(分栏侧栏颜色与标语)
NEXT_PUBLIC_AUTH_ACCENT="150 60% 30%"
NEXT_PUBLIC_AUTH_VARIANT="terminal"
NEXT_PUBLIC_AUTH_BRAND_TAGLINE="AI tools for developers — curated, tested, ranked by the community."
# 开发阶段免邮箱验证(生产置 false 发送真实验证邮件)
DEV_SKIP_EMAIL_VERIFY="true"
+1
View File
@@ -2,6 +2,7 @@ import type { SiteConfig } from "@/kit/types";
// DevAI.tools —— 独立站点的全部品牌/导航/页脚配置
export const siteConfig: SiteConfig = {
"authVariant": "terminal",
"themeClass": "site-devai-tools",
"brandZh": {
"name": "DevAI.tools",
+1
View File
@@ -14,6 +14,7 @@ NEXT_PUBLIC_APP_URL="http://localhost:3005"
NEXT_PUBLIC_APP_NAME="findai"
# 登录页品牌模板(分栏侧栏颜色与标语)
NEXT_PUBLIC_AUTH_ACCENT="260 70% 52%"
NEXT_PUBLIC_AUTH_VARIANT="minimal"
NEXT_PUBLIC_AUTH_BRAND_TAGLINE="The minimal AI tool search engine."
# 开发阶段免邮箱验证(生产置 false 发送真实验证邮件)
DEV_SKIP_EMAIL_VERIFY="true"
+1
View File
@@ -2,6 +2,7 @@ import type { SiteConfig } from "@/kit/types";
// findai —— 独立站点的全部品牌/导航/页脚配置
export const siteConfig: SiteConfig = {
"authVariant": "minimal",
"themeClass": "site-findai",
"brandZh": {
"name": "findai",
+1
View File
@@ -14,6 +14,7 @@ NEXT_PUBLIC_APP_URL="http://localhost:3002"
NEXT_PUBLIC_APP_NAME="LaunchAI"
# 登录页品牌模板(分栏侧栏颜色与标语)
NEXT_PUBLIC_AUTH_ACCENT="16 85% 55%"
NEXT_PUBLIC_AUTH_VARIANT="gradient"
NEXT_PUBLIC_AUTH_BRAND_TAGLINE="Discover and upvote today's AI products."
# 开发阶段免邮箱验证(生产置 false 发送真实验证邮件)
DEV_SKIP_EMAIL_VERIFY="true"
+1
View File
@@ -2,6 +2,7 @@ import type { SiteConfig } from "@/kit/types";
// LaunchAI —— 独立站点的全部品牌/导航/页脚配置
export const siteConfig: SiteConfig = {
"authVariant": "gradient",
"themeClass": "site-launchai",
"brandZh": {
"name": "LaunchAI",
+1
View File
@@ -14,6 +14,7 @@ NEXT_PUBLIC_APP_URL="http://localhost:3003"
NEXT_PUBLIC_APP_NAME="The AI Ledger"
# 登录页品牌模板(分栏侧栏颜色与标语)
NEXT_PUBLIC_AUTH_ACCENT="36 70% 40%"
NEXT_PUBLIC_AUTH_VARIANT="editorial"
NEXT_PUBLIC_AUTH_BRAND_TAGLINE="Independent journalism on AI tools, with a community-ranked directory."
# 开发阶段免邮箱验证(生产置 false 发送真实验证邮件)
DEV_SKIP_EMAIL_VERIFY="true"
+1
View File
@@ -2,6 +2,7 @@ import type { SiteConfig } from "@/kit/types";
// The AI Ledger —— 独立站点的全部品牌/导航/页脚配置
export const siteConfig: SiteConfig = {
"authVariant": "editorial",
"themeClass": "site-the-ai-ledger",
"brandZh": {
"name": "The AI Ledger",
+1 -1
View File
@@ -64,7 +64,7 @@ async function SiteHome({ locale }: { locale: string }) {
</div>
{/* Masthead */}
<section className="border-b border-border">
<section className="hero-mast border-b border-border">
<div className="mx-auto max-w-4xl px-4 py-16 text-center sm:px-6 md:py-20">
<p className="text-xs font-medium uppercase tracking-[0.3em] text-muted-foreground">
{t("mastheadLabel")}