Skip to content

Commit d1f1a07

Browse files
authored
refactor(admin): 砍掉 marketing 脚手架,统一到 shadcn v4 主题 (#40)
TanStack Start 脚手架自带的 marketing 页 + Header/Footer 沿用了一套海洋色 变量(sea-ink / lagoon / palm / sand / foam / hero-*),与 shadcn v4 的 中性灰阶主题在 dashboard 路由下叠加,导致 body 渐变和 Card 白底撞色。 - 删除 `_marketing` layout + index/about、Header、Footer,根路由 `/` 改为按登录态 redirect 到 `/dashboard` 或 `/auth/sign-in` - `auth/$authView` 从 `_marketing/auth/` 提到 `routes/auth/` 独立 layout - styles.css 清空海洋色变量、body 多层渐变 + ::before/::after 网格、 `.island-shell` / `.feature-card` / `.nav-link` 等脚手架 utility class; Fraunces 字体、paraglide `marketing_*` / 未再用的 `nav_*` 消息一并删除 - 补齐 dark mode `--sidebar-*` 变量(v4 oklch neutral 等价值),修复 dark sidebar 继承 light 值的 bug - ThemeToggle 重写成 shadcn DropdownMenu(Light/Dark/System),挂到 SidebarFooter - AppSidebar logo 底色 `bg-[var(--lagoon)]` → `bg-primary` - `__root.tsx` title 改 "ApolloKit Admin",body 删 selection 海洋色
1 parent 609eb9b commit d1f1a07

13 files changed

Lines changed: 112 additions & 516 deletions

File tree

apps/admin/messages/en.json

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -202,26 +202,9 @@
202202
"item_no_inventory": "No items in inventory.",
203203
"item_quantity": "Quantity",
204204
"item_stacks": "Stacks",
205-
"marketing_hero_title": "Start simple, ship quickly.",
206-
"marketing_hero_description": "This base starter intentionally keeps things light: two routes, clean structure, and the essentials you need to build from scratch.",
207-
"marketing_feature_routing_title": "Type-Safe Routing",
208-
"marketing_feature_routing_desc": "Routes and links stay in sync across every page.",
209-
"marketing_feature_server_title": "Server Functions",
210-
"marketing_feature_server_desc": "Call server code from your UI without creating API boilerplate.",
211-
"marketing_feature_streaming_title": "Streaming by Default",
212-
"marketing_feature_streaming_desc": "Ship progressively rendered responses for faster experiences.",
213-
"marketing_feature_tailwind_title": "Tailwind Native",
214-
"marketing_feature_tailwind_desc": "Design quickly with utility-first styling and reusable tokens.",
215-
"marketing_about_title": "About ApolloKit",
216-
"marketing_about_description": "ApolloKit is a game SaaS platform built with TanStack Start, Hono, and Better Auth.",
217-
"marketing_footer_author": "Your name here",
218-
"marketing_footer_rights": "All rights reserved",
219-
"marketing_footer_built_with": "Built with TanStack Start",
220205
"nav_brand": "ApolloKit",
221-
"nav_sign_in": "Sign In",
222206
"nav_home": "Home",
223207
"nav_dashboard": "Dashboard",
224-
"nav_about": "About",
225208
"nav_navigation": "Navigation",
226209
"nav_admin": "Admin",
227210
"nav_checkin": "Check-in",
@@ -230,8 +213,6 @@
230213
"nav_mail": "Mail",
231214
"nav_shop": "Shop",
232215
"nav_api_keys": "API Keys",
233-
"nav_go_to_dashboard": "Go to Dashboard",
234-
"nav_about_starter": "About This Starter",
235216

236217
"mail_title": "Mail",
237218
"mail_new_message": "New Mail",

apps/admin/messages/zh.json

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -202,26 +202,9 @@
202202
"item_no_inventory": "库存中暂无物品。",
203203
"item_quantity": "数量",
204204
"item_stacks": "堆叠数",
205-
"marketing_hero_title": "简单起步,快速交付。",
206-
"marketing_hero_description": "这个基础模板有意保持轻量:两个路由、清晰的结构,以及从零构建所需的基本要素。",
207-
"marketing_feature_routing_title": "类型安全路由",
208-
"marketing_feature_routing_desc": "路由和链接在每个页面保持同步。",
209-
"marketing_feature_server_title": "服务端函数",
210-
"marketing_feature_server_desc": "从 UI 调用服务端代码,无需创建 API 模板。",
211-
"marketing_feature_streaming_title": "默认流式渲染",
212-
"marketing_feature_streaming_desc": "渐进式渲染响应,带来更快的体验。",
213-
"marketing_feature_tailwind_title": "原生 Tailwind",
214-
"marketing_feature_tailwind_desc": "使用实用优先的样式和可复用的设计令牌快速设计。",
215-
"marketing_about_title": "关于 ApolloKit",
216-
"marketing_about_description": "ApolloKit 是一个基于 TanStack Start、Hono 和 Better Auth 构建的游戏 SaaS 平台。",
217-
"marketing_footer_author": "Your name here",
218-
"marketing_footer_rights": "保留所有权利",
219-
"marketing_footer_built_with": "基于 TanStack Start 构建",
220205
"nav_brand": "ApolloKit",
221-
"nav_sign_in": "登录",
222206
"nav_home": "首页",
223207
"nav_dashboard": "仪表盘",
224-
"nav_about": "关于",
225208
"nav_navigation": "导航",
226209
"nav_admin": "管理",
227210
"nav_checkin": "签到",
@@ -230,8 +213,6 @@
230213
"nav_mail": "邮件",
231214
"nav_shop": "商城",
232215
"nav_api_keys": "API 密钥",
233-
"nav_go_to_dashboard": "进入仪表盘",
234-
"nav_about_starter": "关于此模板",
235216

236217
"mail_title": "邮件",
237218
"mail_new_message": "发送邮件",

apps/admin/src/components/AppSidebar.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import {
5252
SidebarSeparator,
5353
} from "#/components/ui/sidebar"
5454
import { LanguageSwitcher } from "./LanguageSwitcher"
55+
import ThemeToggle from "./ThemeToggle"
5556
import * as m from "../paraglide/messages.js"
5657

5758
type NavItem = {
@@ -172,7 +173,7 @@ export function AppSidebar() {
172173
<SidebarMenuItem>
173174
<SidebarMenuButton size="lg" asChild>
174175
<Link to="/">
175-
<div className="flex aspect-square size-8 items-center justify-center rounded-lg bg-[var(--lagoon)] text-white">
176+
<div className="flex aspect-square size-8 items-center justify-center rounded-lg bg-primary text-primary-foreground">
176177
<span className="text-sm font-bold">A</span>
177178
</div>
178179
<div className="flex flex-col gap-0.5 leading-none">
@@ -238,8 +239,9 @@ export function AppSidebar() {
238239
<SidebarFooter>
239240
<SidebarMenu>
240241
<SidebarMenuItem>
241-
<div className="px-1 py-1">
242+
<div className="flex items-center gap-1 px-1 py-1">
242243
<LanguageSwitcher />
244+
<ThemeToggle />
243245
</div>
244246
</SidebarMenuItem>
245247
<SidebarMenuItem>

apps/admin/src/components/Footer.tsx

Lines changed: 0 additions & 46 deletions
This file was deleted.

apps/admin/src/components/Header.tsx

Lines changed: 0 additions & 69 deletions
This file was deleted.
Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,46 @@
1-
import { useEffect, useState } from 'react'
2-
import { useTheme } from 'next-themes'
1+
import { Monitor, Moon, Sun } from "lucide-react"
2+
import { useTheme } from "next-themes"
3+
import { useEffect, useState } from "react"
4+
5+
import { Button } from "./ui/button"
6+
import {
7+
DropdownMenu,
8+
DropdownMenuContent,
9+
DropdownMenuItem,
10+
DropdownMenuTrigger,
11+
} from "./ui/dropdown-menu"
312

413
export default function ThemeToggle() {
514
const { theme, setTheme } = useTheme()
615
const [mounted, setMounted] = useState(false)
716

8-
useEffect(() => setMounted(true), [])
9-
10-
function toggleMode() {
11-
const next = theme === 'light' ? 'dark' : theme === 'dark' ? 'system' : 'light'
12-
setTheme(next)
13-
}
17+
useEffect(() => {
18+
setMounted(true)
19+
}, [])
1420

15-
const display = !mounted ? null : theme === 'system' ? 'Auto' : theme === 'dark' ? 'Dark' : 'Light'
21+
const Icon = !mounted ? Sun : theme === "dark" ? Moon : theme === "system" ? Monitor : Sun
1622

1723
return (
18-
<button
19-
type="button"
20-
onClick={toggleMode}
21-
aria-label="Toggle theme"
22-
title="Toggle theme"
23-
className="rounded-full border border-[var(--chip-line)] bg-[var(--chip-bg)] px-3 py-1.5 text-sm font-semibold text-[var(--sea-ink)] shadow-[0_8px_22px_rgba(30,90,72,0.08)] transition hover:-translate-y-0.5"
24-
>
25-
{display}
26-
</button>
24+
<DropdownMenu>
25+
<DropdownMenuTrigger asChild>
26+
<Button variant="ghost" size="icon" aria-label="Toggle theme">
27+
<Icon className="size-4" />
28+
</Button>
29+
</DropdownMenuTrigger>
30+
<DropdownMenuContent align="end">
31+
<DropdownMenuItem onClick={() => setTheme("light")}>
32+
<Sun className="mr-2 size-4" />
33+
Light
34+
</DropdownMenuItem>
35+
<DropdownMenuItem onClick={() => setTheme("dark")}>
36+
<Moon className="mr-2 size-4" />
37+
Dark
38+
</DropdownMenuItem>
39+
<DropdownMenuItem onClick={() => setTheme("system")}>
40+
<Monitor className="mr-2 size-4" />
41+
System
42+
</DropdownMenuItem>
43+
</DropdownMenuContent>
44+
</DropdownMenu>
2745
)
2846
}

apps/admin/src/routes/__root.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export const Route = createRootRoute({
2020
content: 'width=device-width, initial-scale=1',
2121
},
2222
{
23-
title: 'TanStack Start Starter',
23+
title: 'ApolloKit Admin',
2424
},
2525
],
2626
links: [
@@ -40,7 +40,7 @@ function RootDocument({ children }: { children: React.ReactNode }) {
4040
<script dangerouslySetInnerHTML={{ __html: THEME_INIT_SCRIPT }} />
4141
<HeadContent />
4242
</head>
43-
<body className="font-sans antialiased [overflow-wrap:anywhere] selection:bg-[rgba(79,184,178,0.24)]">
43+
<body className="font-sans antialiased [overflow-wrap:anywhere]">
4444
<RootProvider>
4545
<Providers>
4646
{children}

apps/admin/src/routes/_marketing.tsx

Lines changed: 0 additions & 18 deletions
This file was deleted.

apps/admin/src/routes/_marketing/about.tsx

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)