import type { Metadata } from "next"; import { getTranslations, setRequestLocale } from "next-intl/server"; import { Briefcase, MapPin, Mail, Code2, Gauge, Palette, Wrench, } from "lucide-react"; import { Container, Section } from "@/components/ui/layout"; import { Card } from "@/components/ui/card"; import { buttonClassName } from "@/components/ui/button-variants"; import { Reveal } from "@/components/motion/reveal"; import { siteConfig } from "@/lib/site-config"; /** * 关于页渲染策略:ISR 缓存 60 秒。 * 路由段配置必须是字面量(Next.js 会静态分析)。 */ export const revalidate = 60; type AboutPageProps = { params: Promise<{ locale: string }>; }; export async function generateMetadata({ params, }: AboutPageProps): Promise { const { locale } = await params; const t = await getTranslations({ locale, namespace: "About" }); return { title: t("title"), description: t("description"), alternates: { canonical: `/${locale}/about` }, openGraph: { type: "profile", title: t("title"), description: t("description"), url: `${siteConfig.url}/${locale}/about`, images: [{ url: siteConfig.ogImage }], }, }; } /** 关注方向 —— 图标仅为装饰,语义由文本承载 */ const FOCUS_AREAS = [ { icon: Gauge, title: "Web 性能", description: "关注核心网页指标、渲染路径与打包体积,把「快」当作可度量的工程目标而不是感觉。", }, { icon: Code2, title: "开发者体验", description: "好的工具应该让正确的事情变简单。投入最多的地方是构建流程、类型系统与文档。", }, { icon: Palette, title: "设计系统", description: "把设计规范翻译成可执行的代码约束,让一致性由类型系统保证,而不是靠代码评审。", }, { icon: Wrench, title: "工程化实践", description: "测试策略、CI/CD、可观测性——那些看不见但决定了项目能走多远的基建。", }, ] as const; export default async function AboutPage({ params }: AboutPageProps) { const { locale } = await params; setRequestLocale(locale); const t = await getTranslations("About"); const { author } = siteConfig; const facts = [ { icon: Briefcase, label: t("role"), value: author.jobTitle }, { icon: MapPin, label: t("location"), value: author.location }, { icon: Mail, label: t("email"), value: author.email }, ]; return ( <> {/* 页头 */}

{t("eyebrow")}

{t("title")}

{t("description")}

{/* 主栏:简介 + 关注方向 */}

{t("introTitle")}

{author.bio}

这个博客用来记录我在日常工作中遇到的问题和解决思路。 我倾向于写下那些「当时找不到答案、后来自己想明白了」的内容, 因为这类经验对别人往往也最有价值。

写作风格上,我更在意准确而不是完整:与其罗列所有可能性, 不如把一条路径讲透,并说清楚它为什么成立、在什么情况下会失效。

{t("techTitle")}

{t("techDescription")}

{FOCUS_AREAS.map((area, index) => ( ))}
{/* 侧栏:基本信息 + 联系方式 */}
); }