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

@@ -5,7 +5,7 @@ import { type Lang, type FrontmatterProps } from '@/types';
import { defaultLang } from '@/i18n/ui';
import GlassHeader from '@/components/GlassHeader';
import Footer from '@/components/Footer';
import Container from '../components/ui/Container';
import Container from "../components/ui/Container.astro";
// Use Astro's MarkdownLayoutProps for proper type safety
export type Props = MarkdownLayoutProps<FrontmatterProps>;
@@ -30,7 +30,7 @@ const lang = Astro.currentLocale as Lang || defaultLang;
<!-- Main content with proper spacing for fixed header -->
<div class="pt-16 sm:pt-20">
<Container client:load className="py-8 md:py-12">
<Container className="py-8 md:py-12">
<div class="max-w-7xl mx-auto">
<div class="grid grid-cols-1 xl:grid-cols-4 gap-6 lg:gap-8">
<!-- Main Content -->
@@ -202,4 +202,4 @@ const lang = Astro.currentLocale as Lang || defaultLang;
#toc-list a {
transition: all 0.2s ease;
}
</style>
</style>

View File

@@ -11,7 +11,7 @@ import AuthorCard from '@/components/AuthorCard';
import TableOfContents from '@/components/layout/TableOfContents.astro';
import BlogNavigation from '@/components/layout/BlogNavigation.astro';
import PostMeta from '@/components/blog/PostMeta.astro';
import Container from '../components/ui/Container';
import Container from "../components/ui/Container.astro";
import Comments from '@/components/blog/Comments';
// Use Astro's MarkdownLayoutProps for proper type safety
@@ -47,7 +47,7 @@ const finalReadingTime = readTime ? parseInt(readTime.replace(/\D/g, '')) : unde
<!-- Main content with proper spacing for fixed header -->
<div class="pt-16 sm:pt-20">
<Container client:load className="py-6 sm:py-8">
<Container className="py-6 sm:py-8">
<div class="max-w-7xl mx-auto">
<div class="grid grid-cols-1 xl:grid-cols-4 gap-6 lg:gap-8">
<!-- Main Content -->
@@ -277,4 +277,4 @@ const finalReadingTime = readTime ? parseInt(readTime.replace(/\D/g, '')) : unde
-webkit-box-orient: vertical;
overflow: hidden;
}
</style>
</style>

View File

@@ -25,12 +25,6 @@ const t = useTranslations(lang);
<meta name="generator" content={Astro.generator} />
<meta name="description" content={description} />
<title>{title}{t('site.title') ? ` | ${t('site.title')}` : ''}</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"
rel="stylesheet"
/>
{
import.meta.env.MODE === 'production' && (
<script defer src="https://cloud.umami.is/script.js" data-website-id="a79f759b-74ae-4165-b738-56d123a1c6be"></script>

View File

@@ -7,7 +7,7 @@ import BlogLayout from './BlogLayout.astro';
import BlogList from '../components/blog/BlogList.astro';
import CategoryCard from '../components/blog/CategoryCard.astro';
import TagCard from '../components/blog/TagCard.astro';
import Container from '../components/ui/Container';
import Container from "../components/ui/Container.astro";
import { type Lang } from '@/types/i18n';
import { type BlogPost } from '@/types';
@@ -53,7 +53,7 @@ const localizedText = getLocalizedText();
---
<BlogLayout title={title} description={Astro.props.description}>
<Container client:load className="py-8">
<Container className="py-8">
<!-- Header Section - Centered at the top -->
<div class="text-center mb-10">
<h1 class="text-4xl font-bold mb-3">
@@ -92,4 +92,4 @@ const localizedText = getLocalizedText();
</div>
</div>
</Container>
</BlogLayout>
</BlogLayout>