feat(portfolio): redesign site as opportunity gateway

- add now/hire pages and update IA/navigation

- feature Elynd in projects and homepage messaging

- refresh services/blog/brand copy for AI product positioning

- reduce hydration overhead by using Astro Container

- remove Google Fonts external dependency and use local fallback stack
This commit is contained in:
zguiyang
2026-03-13 14:01:04 +08:00
parent 52a5d14a4e
commit a208bab7ea
25 changed files with 2069 additions and 493 deletions

View File

@@ -1,7 +1,7 @@
import { personalInfo } from "@/lib/data/index";
import LanguageSwitcher from "./LanguageSwitcher";
import ThemeToggle from "./ui/theme-toggle";
import Container from "./ui/Container";
import Container from "./ui/Container.tsx";
import { useTranslations, getLocalizedPath } from "@/i18n/utils";
import type { Lang } from "@/types/i18n";
import { useState, useEffect } from "react";
@@ -63,11 +63,12 @@ export default function GlassHeader({ lang: propLang }: GlassHeaderProps) {
{/* Desktop Navigation */}
<nav className="hidden md:flex items-center space-x-6 text-sm font-medium">
{[
{[
{ key: 'nav.home', icon: '🏠 ', href: getLocalizedPath('/', lang) },
// { key: 'nav.projects', icon: '🚀 ', href: getLocalizedPath('/projects', lang) },
{ key: 'nav.projects', icon: '🚀 ', href: getLocalizedPath('/projects', lang) },
{ key: 'nav.blog', icon: '📝 ', href: getLocalizedPath('/blog', lang) },
{ key: 'nav.services', icon: '🛠️ ', href: getLocalizedPath('/services', lang) },
{ key: 'nav.now', icon: ' ', href: getLocalizedPath('/now', lang) },
{ key: 'nav.hire', icon: '💼 ', href: getLocalizedPath('/hire', lang) },
{ key: 'nav.about', icon: '👨‍💻 ', href: getLocalizedPath('/about', lang) },
].map((item, index) => (
@@ -133,12 +134,13 @@ export default function GlassHeader({ lang: propLang }: GlassHeaderProps) {
: 'bg-white/85 dark:bg-black/85'
}`}>
<nav className="flex flex-col space-y-3 text-sm font-medium">
{[
{[
{ key: 'nav.home', icon: '🏠 ', href: getLocalizedPath('/', lang) },
{ key: 'nav.about', icon: '👨‍💻 ', href: getLocalizedPath('/about', lang) },
{ key: 'nav.services', icon: '🛠️ ', href: getLocalizedPath('/services', lang) },
{ key: 'nav.projects', icon: '🚀 ', href: getLocalizedPath('/projects', lang) },
{ key: 'nav.blog', icon: '📝 ', href: getLocalizedPath('/blog', lang) },
{ key: 'nav.now', icon: '⚡ ', href: getLocalizedPath('/now', lang) },
{ key: 'nav.hire', icon: '💼 ', href: getLocalizedPath('/hire', lang) },
{ key: 'nav.about', icon: '👨‍💻 ', href: getLocalizedPath('/about', lang) },
].map((item, index) => (
<motion.a
key={item.key}