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:
@@ -4,7 +4,7 @@ import { personalInfo } from "@/lib/data/index";
|
||||
import { motion } from "framer-motion";
|
||||
import { useState, useEffect } from "react";
|
||||
import { defaultLang } from "@/i18n/ui";
|
||||
import Container from "./ui/Container";
|
||||
import Container from "./ui/Container.tsx";
|
||||
import { type FooterProps } from "@/types";
|
||||
|
||||
export default function Footer({ lang: propLang }: FooterProps) {
|
||||
@@ -39,7 +39,7 @@ export default function Footer({ lang: propLang }: FooterProps) {
|
||||
className="text-sm text-purple-500 font-medium text-center md:text-left"
|
||||
whileHover={{ scale: 1.01 }}
|
||||
>
|
||||
{lang === 'zh' ? '如果你正在寻找一名前端/Ts全栈工程师(远程工作),请联系我!' : 'Looking for a Frontend/TS Full-stack Engineer (Remote)? Contact me!'}
|
||||
{lang === 'zh' ? '构建 AI 产品?寻找技术合伙人?联系我!' : 'Building AI Products? Need a Technical Co-founder? Contact me!'}
|
||||
</motion.p>
|
||||
</motion.div>
|
||||
<motion.p
|
||||
|
||||
@@ -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}
|
||||
|
||||
11
src/components/ui/Container.astro
Normal file
11
src/components/ui/Container.astro
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
interface Props {
|
||||
className?: string;
|
||||
}
|
||||
|
||||
const { className = "" } = Astro.props;
|
||||
---
|
||||
|
||||
<div class={`container mx-auto px-4 sm:px-6 lg:px-8 max-w-6xl ${className}`.trim()}>
|
||||
<slot />
|
||||
</div>
|
||||
Reference in New Issue
Block a user