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

@@ -3,7 +3,7 @@ import BlogLayout from '../../layouts/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 BlogPost } from '@/types';
import { useTranslations } from '@/i18n/utils';
import { type Lang } from '@/types/i18n';
@@ -43,22 +43,22 @@ const sortedBlogPosts = sortPostsByDate(blogPosts);
---
<BlogLayout title="Blog - Joy Zhao" description="Dive into my thoughts on coding, tech trends, and developer life. Explore my latest posts below.">
<BlogLayout title="Blog - Joy Zhao" description="Thoughts on AI products, full-stack development, and building in public. Explore my latest posts below.">
<main class="min-h-screen">
<!-- Header Section -->
<Container client:load className="pt-24 pb-12">
<Container className="pt-24 pb-12">
<div class="text-center mb-16">
<h1 class="text-5xl md:text-6xl font-bold bg-gradient-to-r from-foreground via-purple-600 to-purple-800 dark:from-foreground dark:via-purple-200 dark:to-purple-300 bg-clip-text text-transparent mb-6">
Our <span class="text-purple-500">Latest</span> Blog
<span class="text-purple-500">Blog</span>
</h1>
<p class="text-xl text-muted-foreground max-w-3xl mx-auto">
{t('blog.slogan')} Dive into my thoughts on coding, tech trends, and developer life. Explore my latest posts below.
Thoughts on AI products, full-stack development, and building in public. Exploring the intersection of technology and product building.
</p>
</div>
</Container>
<!-- Main Content -->
<Container client:load className="pb-20">
<Container className="pb-20">
<div class="grid grid-cols-1 lg:grid-cols-4 gap-8">
<!-- 侧边栏 -->
<div class="lg:col-span-1 space-y-8">
@@ -85,4 +85,4 @@ const sortedBlogPosts = sortPostsByDate(blogPosts);
-webkit-box-orient: vertical;
overflow: hidden;
}
</style>
</style>

374
src/pages/hire.astro Normal file
View File

@@ -0,0 +1,374 @@
---
import Layout from "@/layouts/Layout.astro";
import GlassHeader from "@/components/GlassHeader";
import Footer from "@/components/Footer";
import Container from "@/components/ui/Container.astro";
import { useTranslations } from "@/i18n/utils";
import type { Lang } from "@/types/i18n";
import { defaultLang } from "@/i18n/ui";
const lang = Astro.currentLocale as Lang || defaultLang;
const t = useTranslations(lang);
const pageTitle = lang === 'zh' ? '合作' : 'Hire Me';
---
<Layout title={pageTitle}>
<GlassHeader lang={lang} client:only="react" />
<main class="min-h-screen">
<!-- Hire Page Hero -->
<section class="py-24 relative overflow-hidden">
<div class="absolute inset-0 bg-gradient-to-br from-purple-900/20 via-purple-800/10 to-blue-900/20 dark:from-purple-900/30 dark:via-purple-800/20 dark:to-blue-900/30"></div>
<Container className="relative z-10">
<div class="text-center mb-16">
<span class="inline-block px-4 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm font-medium mb-4">
{lang === 'zh' ? '专业合作' : 'Professional Collaboration'}
</span>
<h1 class="text-5xl md:text-6xl font-bold mb-6 bg-gradient-to-r from-gray-900 via-purple-600 to-purple-800 dark:from-white dark:via-purple-200 dark:to-purple-300 bg-clip-text text-transparent">
{lang === 'zh' ? '合作' : 'Hire Me'}
</h1>
<p class="text-lg text-muted-foreground max-w-2xl mx-auto">
{lang === 'zh'
? '构建优秀产品,从找到合适的技术合伙人开始'
: 'Building great products starts with finding the right technical partner'}
</p>
</div>
</Container>
</section>
<!-- Who I Work With -->
<section class="py-16 relative">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-purple-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">👥</span>
</div>
<h2 class="text-3xl font-bold">
{lang === 'zh' ? '我与谁合作' : 'Who I Work With'}
</h2>
</div>
<div class="grid md:grid-cols-2 gap-6">
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/20 p-6">
<h3 class="text-lg font-bold mb-3">
{lang === 'zh' ? '初创公司' : 'Startups'}
</h3>
<p class="text-muted-foreground">
{lang === 'zh'
? '从零到一构建产品的早期创业团队,需要快速迭代和灵活响应的技术方案。'
: 'Early-stage startup teams building products from scratch, needing fast iteration and flexible technical solutions.'}
</p>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/20 p-6">
<h3 class="text-lg font-bold mb-3">
{lang === 'zh' ? '独立创始人' : 'Indie Hackers'}
</h3>
<p class="text-muted-foreground">
{lang === 'zh'
? '独自构建产品的创业者,需要技术合伙人来实现产品愿景。'
: 'Solo founders building products who need a technical partner to realize their product vision.'}
</p>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/20 p-6">
<h3 class="text-lg font-bold mb-3">
{lang === 'zh' ? '传统企业' : 'Traditional Businesses'}
</h3>
<p class="text-muted-foreground">
{lang === 'zh'
? '希望数字化转型的传统企业,需要现代化的技术解决方案。'
: 'Traditional businesses looking to go digital and need modern technical solutions.'}
</p>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/20 p-6">
<h3 class="text-lg font-bold mb-3">
{lang === 'zh' ? '技术团队' : 'Technical Teams'}
</h3>
<p class="text-muted-foreground">
{lang === 'zh'
? '需要额外技术资源或特定技能集来推进项目的开发团队。'
: 'Development teams needing additional technical resources or specific skill sets to move projects forward.'}
</p>
</div>
</div>
</div>
</Container>
</section>
<!-- What I Build -->
<section class="py-16 relative bg-white/5 dark:bg-gray-900/50">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-blue-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">🛠️</span>
</div>
<h2 class="text-3xl font-bold">
{lang === 'zh' ? '我能构建什么' : 'What I Build'}
</h2>
</div>
<div class="space-y-6">
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-blue-500/20 p-8">
<div class="flex items-start gap-4">
<div class="w-12 h-12 bg-gradient-to-br from-purple-600 to-blue-600 rounded-xl flex items-center justify-center flex-shrink-0">
<span class="text-2xl">⚡</span>
</div>
<div>
<h3 class="text-xl font-bold mb-2">AI 产品与应用</h3>
<p class="text-muted-foreground">
{lang === 'zh'
? '从 AI 助手到 Agent 系统,从 RAG 应用到 AI 驱动的 SaaS 产品。我可以帮助你将 AI 能力产品化。'
: 'From AI assistants to Agent systems, from RAG applications to AI-powered SaaS products. I can help you productize AI capabilities.'}
</p>
</div>
</div>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-blue-500/20 p-8">
<div class="flex items-start gap-4">
<div class="w-12 h-12 bg-gradient-to-br from-green-600 to-teal-600 rounded-xl flex items-center justify-center flex-shrink-0">
<span class="text-2xl">🌐</span>
</div>
<div>
<h3 class="text-xl font-bold mb-2">Web 应用</h3>
<p class="text-muted-foreground">
{lang === 'zh'
? '现代 Web 应用、SaaS 平台、电商系统、内容管理系统等。使用 React、Next.js、Node.js 等技术栈。'
: 'Modern web applications, SaaS platforms, e-commerce systems, content management systems, etc. Using React, Next.js, Node.js and other tech stacks.'}
</p>
</div>
</div>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-blue-500/20 p-8">
<div class="flex items-start gap-4">
<div class="w-12 h-12 bg-gradient-to-br from-orange-600 to-red-600 rounded-xl flex items-center justify-center flex-shrink-0">
<span class="text-2xl">📱</span>
</div>
<div>
<h3 class="text-xl font-bold mb-2">全栈产品</h3>
<p class="text-muted-foreground">
{lang === 'zh'
? '从前端到后端,从数据库到部署,我提供完整的全栈开发能力,一个项目只需一个开发者。'
: 'From frontend to backend, from database to deployment, I provide complete full-stack development capabilities - one developer for the entire project.'}
</p>
</div>
</div>
</div>
</div>
</div>
</Container>
</section>
<!-- Engagement Models -->
<section class="py-16 relative">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-green-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">📋</span>
</div>
<h2 class="text-3xl font-bold">
{lang === 'zh' ? '合作模式' : 'Engagement Models'}
</h2>
</div>
<div class="grid md:grid-cols-3 gap-6">
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-green-500/20 p-6 text-center">
<div class="w-12 h-12 bg-green-500/20 rounded-xl flex items-center justify-center mx-auto mb-4">
<span class="text-2xl">🤝</span>
</div>
<h3 class="text-lg font-bold mb-2">
{lang === 'zh' ? '技术合伙人' : 'Technical Co-founder'}
</h3>
<p class="text-sm text-muted-foreground">
{lang === 'zh'
? '长期合作,股权合作,共同承担创业风险与回报'
: 'Long-term partnership, equity-based, sharing startup risks and rewards'}
</p>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-green-500/20 p-6 text-center">
<div class="w-12 h-12 bg-blue-500/20 rounded-xl flex items-center justify-center mx-auto mb-4">
<span class="text-2xl">💰</span>
</div>
<h3 class="text-lg font-bold mb-2">
{lang === 'zh' ? '项目制' : 'Project-based'}
</h3>
<p class="text-sm text-muted-foreground">
{lang === 'zh'
? '按项目交付,固定价格或按阶段付款,适合明确需求的项目'
: 'Fixed-price or milestone-based, suitable for projects with clear requirements'}
</p>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-green-500/20 p-6 text-center">
<div class="w-12 h-12 bg-purple-500/20 rounded-xl flex items-center justify-center mx-auto mb-4">
<span class="text-2xl">⏰</span>
</div>
<h3 class="text-lg font-bold mb-2">
{lang === 'zh' ? '咨询/顾问' : 'Consulting'}
</h3>
<p class="text-sm text-muted-foreground">
{lang === 'zh'
? '按小时咨询,帮助你做出技术决策,审查代码,指导团队'
: 'Hourly consulting, helping you make technical decisions, code reviews, team guidance'}
</p>
</div>
</div>
</div>
</Container>
</section>
<!-- Delivery Style -->
<section class="py-16 relative bg-white/5 dark:bg-gray-900/50">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-yellow-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">🎯</span>
</div>
<h2 class="text-3xl font-bold">
{lang === 'zh' ? '工作方式' : 'Delivery Style'}
</h2>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-yellow-500/20 p-8">
<ul class="space-y-4">
<li class="flex items-start gap-3">
<span class="text-green-500 text-xl">✓</span>
<div>
<strong class="block mb-1">
{lang === 'zh' ? '敏捷迭代' : 'Agile Iteration'}
</strong>
<p class="text-muted-foreground text-sm">
{lang === 'zh'
? '2周一个迭代快速交付可用功能持续获取反馈'
: '2-week sprints, rapid delivery of usable features, continuous feedback'}
</p>
</div>
</li>
<li class="flex items-start gap-3">
<span class="text-green-500 text-xl">✓</span>
<div>
<strong class="block mb-1">
{lang === 'zh' ? '透明沟通' : 'Transparent Communication'}
</strong>
<p class="text-muted-foreground text-sm">
{lang === 'zh'
? '定期同步进度,及时报告问题,保持信息对称'
: 'Regular progress updates, timely issue reporting, keeping information symmetric'}
</p>
</div>
</li>
<li class="flex items-start gap-3">
<span class="text-green-500 text-xl">✓</span>
<div>
<strong class="block mb-1">
{lang === 'zh' ? '代码质量' : 'Code Quality'}
</strong>
<p class="text-muted-foreground text-sm">
{lang === 'zh'
? '完整的测试覆盖,清晰的文档注释,可维护的代码结构'
: 'Complete test coverage, clear documentation, maintainable code structure'}
</p>
</div>
</li>
<li class="flex items-start gap-3">
<span class="text-green-500 text-xl">✓</span>
<div>
<strong class="block mb-1">
{lang === 'zh' ? '产品思维' : 'Product Thinking'}
</strong>
<p class="text-muted-foreground text-sm">
{lang === 'zh'
? '不只是写代码,还思考产品价值,用户体验和业务目标'
: 'Not just writing code, but also thinking about product value, user experience, and business goals'}
</p>
</div>
</li>
</ul>
</div>
</div>
</Container>
</section>
<!-- Availability -->
<section class="py-16 relative">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-red-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">📅</span>
</div>
<h2 class="text-3xl font-bold">
{lang === 'zh' ? '当前可用性' : 'Availability'}
</h2>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-red-500/20 p-8">
<div class="flex items-center gap-4 mb-6">
<div class="w-4 h-4 bg-green-500 rounded-full animate-pulse"></div>
<span class="text-lg font-semibold">
{lang === 'zh' ? '目前可接受新项目' : 'Currently Available for New Projects'}
</span>
</div>
<p class="text-muted-foreground mb-6">
{lang === 'zh'
? '我目前可以接受 1-2 个新项目。偏好长期合作模式(技术合伙人或长期项目),但也会考虑短期项目。'
: 'I can currently take on 1-2 new projects. Prefer long-term partnership (technical co-founder or long-term projects), but also open to short-term projects.'}
</p>
<div class="flex flex-wrap gap-2">
<span class="px-3 py-1 bg-green-500/20 text-green-600 dark:text-green-400 rounded-full text-sm">
{lang === 'zh' ? '可立即开始' : 'Available immediately'}
</span>
<span class="px-3 py-1 bg-blue-500/20 text-blue-600 dark:text-blue-400 rounded-full text-sm">
{lang === 'zh' ? '远程工作' : 'Remote only'}
</span>
<span class="px-3 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm">
{lang === 'zh' ? '中英双语' : 'Bilingual EN/ZH'}
</span>
</div>
</div>
</div>
</Container>
</section>
<!-- Contact CTA -->
<section class="py-16 relative bg-gradient-to-br from-purple-900/20 to-blue-900/20 dark:from-purple-900/30 dark:to-blue-900/30">
<Container>
<div class="max-w-4xl mx-auto text-center">
<h2 class="text-3xl font-bold mb-6">
{lang === 'zh' ? '准备好一起构建了吗?' : 'Ready to build together?'}
</h2>
<p class="text-lg text-muted-foreground mb-8 max-w-xl mx-auto">
{lang === 'zh'
? '告诉我你的项目想法,让我们看看能否合作。'
: "Tell me about your project idea and let's see if we can work together."}
</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<a
href="mailto:zhaoguiyang18@gmail.com"
class="bg-purple-500 hover:bg-purple-600 text-white px-8 py-3 rounded-lg font-semibold transition-colors inline-flex items-center justify-center gap-2"
>
<span>📧</span>
{lang === 'zh' ? '发送邮件' : 'Send Email'}
</a>
<a
href={lang === 'zh' ? '/zh/now' : '/now'}
class="border border-purple-500 text-purple-500 hover:bg-purple-500 hover:text-white px-8 py-3 rounded-lg font-semibold transition-colors inline-flex items-center justify-center gap-2"
>
<span>📡</span>
{lang === 'zh' ? '了解更多关于我' : 'Learn More About Me'}
</a>
</div>
</div>
</Container>
</section>
</main>
<Footer lang={lang} client:only="react" />
</Layout>

View File

@@ -4,7 +4,7 @@ import GlassHeader from "@/components/GlassHeader";
import SkillsMarquee from "@/components/SkillsMarquee";
import TypewriterEffect from "@/components/TypewriterEffect";
import Footer from "@/components/Footer";
import Container from "@/components/ui/Container";
import Container from "@/components/ui/Container.astro";
import { useTranslations } from "@/i18n/utils";
import type { Lang } from "@/types/i18n";
import { defaultLang } from "@/i18n/ui";
@@ -24,7 +24,7 @@ const pageTitle = t('site.title');
<!-- Background gradient -->
<div class="absolute inset-0 bg-gradient-to-br from-purple-900/20 via-purple-800/10 to-purple-700/20 dark:from-purple-900/30 dark:via-purple-800/20 dark:to-purple-700/30"></div>
<Container client:load className="relative z-10">
<Container className="relative z-10">
<div class="text-center mb-16">
<!-- Greeting -->
<div class="flex items-center justify-center mb-6">
@@ -79,23 +79,23 @@ const pageTitle = t('site.title');
<!-- Action buttons -->
<div class="flex flex-col sm:flex-row gap-4 justify-center items-center mb-16">
<a
href="#about"
href={`/${lang === 'zh' ? 'zh/' : ''}hire`}
class="bg-purple-500 hover:bg-purple-600 text-white px-8 py-3 rounded-lg font-semibold transition-colors flex items-center gap-2"
>
<svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"></path>
</svg>
{t('hero.viewProjects')}
{t('hero.ctaPrimary')}
</a>
<a
href={`mailto:${personalInfo.email}`}
href={`/${lang === 'zh' ? 'zh/' : ''}projects`}
class="border border-purple-500 text-purple-500 hover:bg-purple-500 hover:text-white px-8 py-3 rounded-lg font-semibold transition-colors flex items-center gap-2"
>
<svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
</svg>
{t('hero.contactMe')}
{t('hero.ctaSecondary')}
</a>
</div>
@@ -199,10 +199,81 @@ const pageTitle = t('site.title');
</section>
<SkillsMarquee lang={lang} client:only="react" />
<!-- Featured Project: Elynd -->
<section class="py-24 bg-gradient-to-br from-purple-900/20 via-purple-800/10 to-blue-900/20 dark:from-purple-900/30 dark:via-purple-800/20 dark:to-blue-900/30">
<Container>
<div class="text-center mb-12">
<span class="inline-block px-4 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm font-medium mb-4">
{lang === 'zh' ? 'featured 项目' : 'Featured Project'}
</span>
<h2 class="text-4xl md:text-5xl font-bold mb-4 bg-gradient-to-r from-purple-400 via-blue-400 to-purple-400 bg-clip-text text-transparent">
Elynd
</h2>
<p class="text-lg text-muted-foreground max-w-2xl mx-auto">
{lang === 'zh'
? '一个开放的 AI 工作空间,让构建者能够更智能地工作'
: 'An open AI workspace for builders to work smarter'}
</p>
</div>
<div class="max-w-4xl mx-auto">
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/20 overflow-hidden">
<div class="h-64 md:h-80 bg-gradient-to-br from-purple-600/20 via-blue-600/20 to-purple-600/20 flex items-center justify-center relative overflow-hidden">
<div class="absolute inset-0 bg-grid-purple-500/10 [mask-image:linear-gradient(0deg,white,rgba(255,255,255,0.3))]"></div>
<div class="text-center z-10">
<div class="text-6xl md:text-8xl mb-4">⚡</div>
<div class="text-2xl md:text-3xl font-bold text-purple-400">
{lang === 'zh' ? '让 AI 成为你的共同构建者' : 'Make AI Your Co-Builder'}
</div>
</div>
</div>
<div class="p-8">
<div class="grid md:grid-cols-3 gap-6 mb-8">
<div class="text-center">
<div class="text-3xl font-bold text-purple-400 mb-2">AI-First</div>
<div class="text-sm text-muted-foreground">
{lang === 'zh' ? '从第一天就融入 AI 思维' : 'Built with AI from day one'}
</div>
</div>
<div class="text-center">
<div class="text-3xl font-bold text-blue-400 mb-2">Open</div>
<div class="text-sm text-muted-foreground">
{lang === 'zh' ? '完全开放,可自托管' : 'Fully open, self-hostable'}
</div>
</div>
<div class="text-center">
<div class="text-3xl font-bold text-green-400 mb-2">Builder-First</div>
<div class="text-sm text-muted-foreground">
{lang === 'zh' ? '为构建者打造的工作空间' : 'Workspace built for builders'}
</div>
</div>
</div>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<a
href={`/${lang === 'zh' ? 'zh/' : ''}projects`}
class="bg-purple-500 hover:bg-purple-600 text-white px-6 py-3 rounded-lg font-semibold transition-colors inline-flex items-center justify-center gap-2"
>
<span>🚀</span>
{t('hero.ctaSecondary')}
</a>
<a
href={`/${lang === 'zh' ? 'zh/' : ''}now`}
class="border border-purple-500 text-purple-500 hover:bg-purple-500 hover:text-white px-6 py-3 rounded-lg font-semibold transition-colors inline-flex items-center justify-center gap-2"
>
<span>📡</span>
{lang === 'zh' ? '了解更多' : 'Learn More'}
</a>
</div>
</div>
</div>
</div>
</Container>
</section>
<!-- Services Section - Inlined Content -->
<section id="services" class="py-20 bg-gradient-to-br from-slate-50 to-blue-50 dark:from-slate-900 dark:to-slate-800">
<Container client:load>
<Container>
<h2 class="text-4xl font-bold text-center mb-16 bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent">
{t('services.title')}
</h2>
@@ -246,7 +317,7 @@ const pageTitle = t('site.title');
<!-- Background gradient -->
<div class="absolute inset-0 bg-gradient-to-br from-blue-900/10 via-purple-800/5 to-indigo-700/10 dark:from-blue-900/20 dark:via-purple-800/10 dark:to-indigo-700/20"></div>
<Container client:load className="relative z-10">
<Container className="relative z-10">
<div class="text-center mb-16">
<!-- Section Title -->
<div class="flex items-center justify-center mb-6">
@@ -388,7 +459,7 @@ const pageTitle = t('site.title');
<!-- <section id="projects" class="py-20 relative">
<div class="absolute inset-0 bg-gradient-to-b from-transparent via-purple-900/5 to-transparent"></div>
<Container client:load className="relative z-10">
<Container className="relative z-10">
<div class="text-center mb-16">
<h2 class="text-4xl md:text-5xl font-bold mb-4 bg-gradient-to-r from-purple-400 to-purple-600 bg-clip-text text-transparent">
Latest Projects

203
src/pages/now.astro Normal file
View File

@@ -0,0 +1,203 @@
---
import Layout from "@/layouts/Layout.astro";
import GlassHeader from "@/components/GlassHeader";
import Footer from "@/components/Footer";
import Container from "@/components/ui/Container.astro";
import { useTranslations } from "@/i18n/utils";
import type { Lang } from "@/types/i18n";
import { defaultLang } from "@/i18n/ui";
const lang = Astro.currentLocale as Lang || defaultLang;
const t = useTranslations(lang);
const pageTitle = lang === 'zh' ? '现在' : 'Now';
---
<Layout title={pageTitle}>
<GlassHeader lang={lang} client:only="react" />
<main class="min-h-screen">
<!-- Now Page Hero -->
<section class="py-24 relative overflow-hidden">
<div class="absolute inset-0 bg-gradient-to-br from-purple-900/20 via-purple-800/10 to-blue-900/20 dark:from-purple-900/30 dark:via-purple-800/20 dark:to-blue-900/30"></div>
<Container className="relative z-10">
<div class="text-center mb-16">
<span class="inline-block px-4 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm font-medium mb-4">
{lang === 'zh' ? '关于我现在正在做什么' : "What's happening now"}
</span>
<h1 class="text-5xl md:text-6xl font-bold mb-6 bg-gradient-to-r from-gray-900 via-purple-600 to-purple-800 dark:from-white dark:via-purple-200 dark:to-purple-300 bg-clip-text text-transparent">
{lang === 'zh' ? '现在' : 'Now'}
</h1>
<p class="text-lg text-muted-foreground max-w-2xl mx-auto">
{lang === 'zh'
? '持续更新我的现状、正在构建的内容以及合作机会'
: 'Continuously updating my current status, what I am building, and collaboration opportunities'}
</p>
</div>
</Container>
</section>
<!-- Building Section -->
<section class="py-16 relative">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-purple-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">🔨</span>
</div>
<h2 class="text-3xl font-bold">
{lang === 'zh' ? '正在构建' : 'Building'}
</h2>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/20 p-8">
<div class="flex items-start gap-6">
<div class="w-16 h-16 bg-gradient-to-br from-purple-600 to-blue-600 rounded-xl flex items-center justify-center flex-shrink-0">
<span class="text-3xl">⚡</span>
</div>
<div class="flex-1">
<h3 class="text-xl font-bold mb-2">Elynd</h3>
<p class="text-muted-foreground mb-4">
{lang === 'zh'
? '一个开放的 AI 工作空间,让构建者能够更智能地工作。从 AI 第一性原理出发,打造完全开放、可自托管的协作工具。'
: 'An open AI workspace for builders to work smarter. Built from first principles of AI, creating fully open, self-hostable collaboration tools.'}
</p>
<div class="flex flex-wrap gap-2">
<span class="px-3 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm">AI Product</span>
<span class="px-3 py-1 bg-blue-500/20 text-blue-600 dark:text-blue-400 rounded-full text-sm">TypeScript</span>
<span class="px-3 py-1 bg-green-500/20 text-green-600 dark:text-green-400 rounded-full text-sm">Open Source</span>
</div>
</div>
</div>
</div>
</div>
</Container>
</section>
<!-- Exploring Section -->
<section class="py-16 relative bg-white/5 dark:bg-gray-900/50">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-blue-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">🔭</span>
</div>
<h2 class="text-3xl font-bold">
{lang === 'zh' ? '正在探索' : 'Exploring'}
</h2>
</div>
<div class="grid gap-6">
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-blue-500/20 p-6">
<h3 class="text-lg font-bold mb-3">
{lang === 'zh' ? 'AI Agents 与工作流自动化' : 'AI Agents & Workflow Automation'}
</h3>
<p class="text-muted-foreground">
{lang === 'zh'
? '研究如何构建能够自主完成复杂任务的 AI Agent以及如何将 AI 能力融入日常工作流。'
: 'Researching how to build AI Agents that can autonomously complete complex tasks, and how to integrate AI capabilities into daily workflows.'}
</p>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-blue-500/20 p-6">
<h3 class="text-lg font-bold mb-3">
{lang === 'zh' ? '产品导向的开发实践' : 'Product-Led Development Practices'}
</h3>
<p class="text-muted-foreground">
{lang === 'zh'
? '探索从产品角度思考开发,构建真正解决用户问题的产品,而不仅仅是技术实现。'
: 'Exploring product thinking in development, building products that truly solve user problems, not just technical implementations.'}
</p>
</div>
</div>
</div>
</Container>
</section>
<!-- Shipping Section -->
<section class="py-16 relative">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-green-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">🚀</span>
</div>
<h2 class="text-3xl font-bold">
{lang === 'zh' ? '最近发布' : 'Shipping'}
</h2>
</div>
<div class="space-y-4">
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-xl border border-green-500/20 p-6 flex items-center gap-4">
<div class="w-12 h-12 bg-green-500/20 rounded-lg flex items-center justify-center flex-shrink-0">
<span class="text-xl">✨</span>
</div>
<div>
<h3 class="font-bold mb-1">
{lang === 'zh' ? '个人网站全新改版' : 'Portfolio Website Redesign'}
</h3>
<p class="text-sm text-muted-foreground">
{lang === 'zh'
? '全新设计的个人网站,突出 AI 产品构建者的定位'
: 'Redesigned portfolio with focus on AI product builder positioning'}
</p>
</div>
</div>
</div>
</div>
</Container>
</section>
<!-- Open to Collaborate Section -->
<section class="py-16 relative bg-gradient-to-br from-purple-900/10 to-blue-900/10 dark:from-purple-900/20 dark:to-blue-900/20">
<Container>
<div class="max-w-4xl mx-auto text-center">
<div class="flex items-center justify-center gap-4 mb-8">
<div class="w-12 h-12 bg-yellow-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">🤝</span>
</div>
<h2 class="text-3xl font-bold">
{lang === 'zh' ? '开放合作' : 'Open to Collaborate'}
</h2>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-yellow-500/20 p-8">
<p class="text-lg text-muted-foreground mb-8">
{lang === 'zh'
? '我始终对新的合作机会持开放态度。无论你是想要构建产品、寻找技术合伙人,还是需要技术咨询,都可以联系我。'
: "I'm always open to new collaboration opportunities. Whether you're looking to build a product, seeking a technical co-founder, or need technical consulting, feel free to reach out."}
</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<a
href={lang === 'zh' ? '/zh/hire' : '/hire'}
class="bg-purple-500 hover:bg-purple-600 text-white px-6 py-3 rounded-lg font-semibold transition-colors inline-flex items-center justify-center gap-2"
>
<span>💼</span>
{lang === 'zh' ? '查看合作方式' : 'View Collaboration Options'}
</a>
<a
href="mailto:zhaoguiyang18@gmail.com"
class="border border-purple-500 text-purple-500 hover:bg-purple-500 hover:text-white px-6 py-3 rounded-lg font-semibold transition-colors inline-flex items-center justify-center gap-2"
>
<span>📧</span>
{lang === 'zh' ? '发送邮件' : 'Send Email'}
</a>
</div>
</div>
</div>
</Container>
</section>
<!-- Last Updated -->
<section class="py-12">
<Container>
<div class="max-w-4xl mx-auto text-center">
<p class="text-sm text-muted-foreground">
{lang === 'zh' ? '最后更新:' : 'Last updated: '}
<span class="font-medium">2025年3月</span>
</p>
</div>
</Container>
</section>
</main>
<Footer lang={lang} client:only="react" />
</Layout>

View File

@@ -2,7 +2,7 @@
import Layout from "@/layouts/Layout.astro";
import GlassHeader from "@/components/GlassHeader";
import Footer from "@/components/Footer";
import Container from "@/components/ui/Container";
import Container from "@/components/ui/Container.astro";
import { useTranslations } from "@/i18n/utils";
import type { Lang } from "@/types/i18n";
import { defaultLang } from "@/i18n/ui";
@@ -15,6 +15,15 @@ const pageTitle = t('projects.title');
// 根据当前语言获取项目数据
const currentProjects = projects[lang as keyof typeof projects] || projects.en;
// Separate featured and grouped projects
const featuredProject = currentProjects.find(p => p.featured);
const otherProjects = currentProjects.filter(p => !p.featured);
// Group by type
const productProjects = otherProjects.filter(p => p.type === 'product');
const clientProjects = otherProjects.filter(p => p.type === 'client');
const experimentProjects = otherProjects.filter(p => p.type === 'experiment');
---
<Layout title={pageTitle}>
@@ -24,8 +33,8 @@ const currentProjects = projects[lang as keyof typeof projects] || projects.en;
<section class="py-24 relative overflow-hidden">
<!-- Background gradient -->
<div class="absolute inset-0 bg-gradient-to-br from-purple-900/20 via-purple-800/10 to-purple-700/20 dark:from-purple-900/30 dark:via-purple-800/20 dark:to-purple-700/30"></div>
<Container client:load className="relative z-10">
<Container className="relative z-10">
<div class="text-center mb-16">
<!-- Main title -->
<h1 class="text-5xl md:text-6xl font-bold mb-6 bg-gradient-to-r from-gray-900 via-purple-600 to-purple-800 dark:from-white dark:via-purple-200 dark:to-purple-300 bg-clip-text text-transparent">
@@ -40,69 +49,274 @@ const currentProjects = projects[lang as keyof typeof projects] || projects.en;
</Container>
</section>
<!-- Projects Grid Section -->
<section class="py-12 relative">
<!-- Background gradient -->
<div class="absolute inset-0 bg-gradient-to-b from-transparent via-purple-900/5 to-transparent"></div>
<Container client:load className="relative z-10">
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8 items-stretch">
{currentProjects.map((project) => (
<div class={`group overflow-hidden border border-${project.color}-500/20 hover:border-${project.color}-500/40 h-full flex flex-col transition-all duration-500 hover:scale-105 bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-xl relative`}>
<!-- Project tag - positioned at top right -->
<div class="absolute top-4 right-4 z-10">
<span class={`px-3 py-1 bg-${project.color}-100 dark:bg-${project.color}-800 text-${project.color}-800 dark:text-${project.color}-200 text-xs rounded-full font-medium border border-${project.color}-200 dark:border-${project.color}-700`}>{t(`project.tag.${project.tag}`)}</span>
</div>
<!-- Project image placeholder -->
<div class={`h-48 bg-gradient-to-br ${project.image.bg} relative overflow-hidden`}>
<div class={`absolute inset-0 bg-gradient-to-br ${project.image.bg} group-hover:${project.image.hover} transition-all duration-500`}></div>
<div class="absolute bottom-4 left-4 right-4">
<div class={`bg-black/50 backdrop-blur-sm rounded px-3 py-1 text-xs font-mono ${project.image.text}`}>
{project.title}
<!-- Featured Project Section -->
{featuredProject && (
<section class="py-12 bg-gradient-to-br from-purple-900/10 to-blue-900/10 dark:from-purple-900/20 dark:to-blue-900/20">
<Container>
<div class="max-w-5xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<span class="inline-block px-4 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm font-medium">
Featured
</span>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/30 overflow-hidden">
<div class="grid lg:grid-cols-2">
<div class="h-64 lg:h-auto bg-gradient-to-br from-purple-600/20 via-blue-600/20 to-purple-600/20 flex items-center justify-center relative overflow-hidden">
<div class="text-8xl">{featuredProject.icon}</div>
</div>
<div class="p-8">
<div class="flex items-center gap-3 mb-4">
<span class="px-3 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm">
{t(`project.status.${featuredProject.status}`)}
</span>
<span class="px-3 py-1 bg-blue-500/20 text-blue-600 dark:text-blue-400 rounded-full text-sm">
{t(`project.type.${featuredProject.type}`)}
</span>
</div>
<h2 class="text-3xl font-bold mb-4">{featuredProject.title}</h2>
<div class="space-y-4 mb-6">
<div>
<span class="text-sm text-muted-foreground">{t('project.role')}:</span>
<p class="font-medium">{featuredProject.role}</p>
</div>
<div>
<span class="text-sm text-muted-foreground">{t('project.impact')}:</span>
<p class="font-medium">{featuredProject.impact}</p>
</div>
</div>
<div class="space-y-2 mb-6">
{featuredProject.description.map((desc) => (
<p class="text-muted-foreground text-sm">{desc}</p>
))}
</div>
<div class="flex flex-wrap gap-2 mb-6">
{featuredProject.tech.map((tech) => (
<span class="px-3 py-1 bg-gray-500/10 dark:bg-gray-400/20 text-gray-600 dark:text-gray-300 text-sm rounded-md border border-gray-500/20 dark:border-gray-400/30">{tech}</span>
))}
</div>
<div class="flex gap-4">
<a href={featuredProject.link} class="bg-purple-500 hover:bg-purple-600 text-white px-6 py-2 rounded-lg font-medium transition-colors inline-flex items-center gap-2">
{t('project.visit')}
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
{featuredProject.links?.github && (
<a href={featuredProject.links.github} target="_blank" rel="noopener noreferrer" class="border border-gray-500 text-gray-600 dark:text-gray-300 hover:bg-gray-500/10 px-6 py-2 rounded-lg font-medium transition-colors inline-flex items-center gap-2">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
</svg>
GitHub
</a>
)}
</div>
</div>
</div>
<div class="p-6 pb-4">
<h3 class={`text-xl group-hover:text-${project.color}-400 transition-colors duration-300 flex items-center gap-2 font-bold mb-4`}>
<span class={`text-${project.color}-500`}>{project.icon}</span>
{project.title}
</h3>
</div>
<div class="px-6 flex-grow">
<div class="space-y-3">
{project.description.map((desc) => (
<div class="flex items-start gap-2 text-sm text-muted-foreground group-hover:text-foreground transition-colors duration-300">
<span class={`text-${project.color}-500 mt-1`}>•</span>
<span>{desc}</span>
</div>
))}
</div>
<!-- Tech stack indicators with unified gray styling -->
<div class="mt-6 mb-4 flex flex-wrap gap-2">
{project.tech.map((tech) => (
<span class="px-2 py-1 bg-gray-500/10 dark:bg-gray-400/20 text-gray-600 dark:text-gray-300 text-xs rounded-md border border-gray-500/20 dark:border-gray-400/30">{tech}</span>
))}
</div>
</div>
<!-- Visit project link -->
<div class="p-6 pt-2">
<a href={project.link} class={`inline-flex items-center text-sm font-medium text-${project.color}-500 hover:text-${project.color}-600 dark:hover:text-${project.color}-400 transition-colors duration-300`}>
{t('project.visit')}
<svg class="ml-1 w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
</div>
</div>
))}
</div>
</div>
</div>
</Container>
</section>
)}
<!-- Projects by Type -->
<section class="py-12 relative">
<Container>
<!-- Product Projects -->
{productProjects.length > 0 && (
<>
<div class="flex items-center gap-4 mb-8">
<div class="w-10 h-10 bg-purple-500/20 rounded-lg flex items-center justify-center">
<span class="text-xl">🛍️</span>
</div>
<h2 class="text-2xl font-bold">{t('project.type.product')}</h2>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8 mb-12">
{productProjects.map((project) => (
<div class={`group overflow-hidden border border-${project.color}-500/20 hover:border-${project.color}-500/40 h-full flex flex-col transition-all duration-500 hover:scale-105 bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-xl relative`}>
<div class="absolute top-4 right-4 z-10 flex gap-2">
<span class={`px-3 py-1 bg-${project.color}-100 dark:bg-${project.color}-800 text-${project.color}-800 dark:text-${project.color}-200 text-xs rounded-full font-medium border border-${project.color}-200 dark:border-${project.color}-700`}>{t(`project.status.${project.status}`)}</span>
</div>
<div class={`h-48 bg-gradient-to-br ${project.image.bg} relative overflow-hidden`}>
<div class={`absolute inset-0 bg-gradient-to-br ${project.image.bg} group-hover:${project.image.hover} transition-all duration-500`}></div>
<div class="absolute bottom-4 left-4 right-4">
<div class={`bg-black/50 backdrop-blur-sm rounded px-3 py-1 text-xs font-mono ${project.image.text}`}>
{project.title}
</div>
</div>
</div>
<div class="p-6 pb-4">
<h3 class={`text-xl group-hover:text-${project.color}-400 transition-colors duration-300 flex items-center gap-2 font-bold mb-4`}>
<span class={`text-${project.color}-500`}>{project.icon}</span>
{project.title}
</h3>
</div>
<div class="px-6 flex-grow">
<div class="space-y-3">
{project.description.slice(0, 2).map((desc) => (
<div class="flex items-start gap-2 text-sm text-muted-foreground group-hover:text-foreground transition-colors duration-300">
<span class={`text-${project.color}-500 mt-1`}>•</span>
<span>{desc}</span>
</div>
))}
</div>
<div class="mt-6 mb-4 flex flex-wrap gap-2">
{project.tech.slice(0, 4).map((tech) => (
<span class="px-2 py-1 bg-gray-500/10 dark:bg-gray-400/20 text-gray-600 dark:text-gray-300 text-xs rounded-md border border-gray-500/20 dark:border-gray-400/30">{tech}</span>
))}
</div>
</div>
<div class="p-6 pt-2">
<a href={project.link} class={`inline-flex items-center text-sm font-medium text-${project.color}-500 hover:text-${project.color}-600 dark:hover:text-${project.color}-400 transition-colors duration-300`}>
{t('project.visit')}
<svg class="ml-1 w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
</div>
</div>
))}
</div>
</>
)}
<!-- Client Projects -->
{clientProjects.length > 0 && (
<>
<div class="flex items-center gap-4 mb-8">
<div class="w-10 h-10 bg-blue-500/20 rounded-lg flex items-center justify-center">
<span class="text-xl">💼</span>
</div>
<h2 class="text-2xl font-bold">{t('project.type.client')}</h2>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8 mb-12">
{clientProjects.map((project) => (
<div class={`group overflow-hidden border border-${project.color}-500/20 hover:border-${project.color}-500/40 h-full flex flex-col transition-all duration-500 hover:scale-105 bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-xl relative`}>
<div class="absolute top-4 right-4 z-10 flex gap-2">
<span class={`px-3 py-1 bg-${project.color}-100 dark:bg-${project.color}-800 text-${project.color}-800 dark:text-${project.color}-200 text-xs rounded-full font-medium border border-${project.color}-200 dark:border-${project.color}-700`}>{t(`project.status.${project.status}`)}</span>
</div>
<div class={`h-48 bg-gradient-to-br ${project.image.bg} relative overflow-hidden`}>
<div class={`absolute inset-0 bg-gradient-to-br ${project.image.bg} group-hover:${project.image.hover} transition-all duration-500`}></div>
<div class="absolute bottom-4 left-4 right-4">
<div class={`bg-black/50 backdrop-blur-sm rounded px-3 py-1 text-xs font-mono ${project.image.text}`}>
{project.title}
</div>
</div>
</div>
<div class="p-6 pb-4">
<h3 class={`text-xl group-hover:text-${project.color}-400 transition-colors duration-300 flex items-center gap-2 font-bold mb-4`}>
<span class={`text-${project.color}-500`}>{project.icon}</span>
{project.title}
</h3>
</div>
<div class="px-6 flex-grow">
<div class="space-y-3">
{project.description.slice(0, 2).map((desc) => (
<div class="flex items-start gap-2 text-sm text-muted-foreground group-hover:text-foreground transition-colors duration-300">
<span class={`text-${project.color}-500 mt-1`}>•</span>
<span>{desc}</span>
</div>
))}
</div>
<div class="mt-6 mb-4 flex flex-wrap gap-2">
{project.tech.slice(0, 4).map((tech) => (
<span class="px-2 py-1 bg-gray-500/10 dark:bg-gray-400/20 text-gray-600 dark:text-gray-300 text-xs rounded-md border border-gray-500/20 dark:border-gray-400/30">{tech}</span>
))}
</div>
</div>
<div class="p-6 pt-2">
<a href={project.link} class={`inline-flex items-center text-sm font-medium text-${project.color}-500 hover:text-${project.color}-600 dark:hover:text-${project.color}-400 transition-colors duration-300`}>
{t('project.visit')}
<svg class="ml-1 w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
</div>
</div>
))}
</div>
</>
)}
<!-- Experiment Projects -->
{experimentProjects.length > 0 && (
<>
<div class="flex items-center gap-4 mb-8">
<div class="w-10 h-10 bg-green-500/20 rounded-lg flex items-center justify-center">
<span class="text-xl">🧪</span>
</div>
<h2 class="text-2xl font-bold">{t('project.type.experiment')}</h2>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
{experimentProjects.map((project) => (
<div class={`group overflow-hidden border border-${project.color}-500/20 hover:border-${project.color}-500/40 h-full flex flex-col transition-all duration-500 hover:scale-105 bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-xl relative`}>
<div class="absolute top-4 right-4 z-10 flex gap-2">
<span class={`px-3 py-1 bg-${project.color}-100 dark:bg-${project.color}-800 text-${project.color}-800 dark:text-${project.color}-200 text-xs rounded-full font-medium border border-${project.color}-200 dark:border-${project.color}-700`}>{t(`project.status.${project.status}`)}</span>
</div>
<div class={`h-48 bg-gradient-to-br ${project.image.bg} relative overflow-hidden`}>
<div class={`absolute inset-0 bg-gradient-to-br ${project.image.bg} group-hover:${project.image.hover} transition-all duration-500`}></div>
<div class="absolute bottom-4 left-4 right-4">
<div class={`bg-black/50 backdrop-blur-sm rounded px-3 py-1 text-xs font-mono ${project.image.text}`}>
{project.title}
</div>
</div>
</div>
<div class="p-6 pb-4">
<h3 class={`text-xl group-hover:text-${project.color}-400 transition-colors duration-300 flex items-center gap-2 font-bold mb-4`}>
<span class={`text-${project.color}-500`}>{project.icon}</span>
{project.title}
</h3>
</div>
<div class="px-6 flex-grow">
<div class="space-y-3">
{project.description.slice(0, 2).map((desc) => (
<div class="flex items-start gap-2 text-sm text-muted-foreground group-hover:text-foreground transition-colors duration-300">
<span class={`text-${project.color}-500 mt-1`}>•</span>
<span>{desc}</span>
</div>
))}
</div>
<div class="mt-6 mb-4 flex flex-wrap gap-2">
{project.tech.slice(0, 4).map((tech) => (
<span class="px-2 py-1 bg-gray-500/10 dark:bg-gray-400/20 text-gray-600 dark:text-gray-300 text-xs rounded-md border border-gray-500/20 dark:border-gray-400/30">{tech}</span>
))}
</div>
</div>
<div class="p-6 pt-2">
<a href={project.link} class={`inline-flex items-center text-sm font-medium text-${project.color}-500 hover:text-${project.color}-600 dark:hover:text-${project.color}-400 transition-colors duration-300`}>
{t('project.visit')}
<svg class="ml-1 w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
</div>
</div>
))}
</div>
</>
)}
</Container>
</section>
</main>
<Footer lang={lang} client:load />
</Layout>
</Layout>

View File

@@ -1,119 +0,0 @@
---
title: "My Services"
description: "Explore the professional services I offer to help bring your digital projects to life"
layout: "../layouts/AboutLayout.astro"
---
import HighlightBox from '../components/ui/HighlightBox.astro';
# Services I Provide 🛠️
<HighlightBox type="tip">
用优雅的代码和创新的思维,为复杂问题打造精致的解决方案。
</HighlightBox>
## Web Development 🌐
<HighlightBox type="info" title="Web Development Services">
- Building responsive and modern websites using the latest technologies
- Creating custom web applications tailored to your specific needs
- Implementing frontend interfaces with React, Vue.js, or Angular
- Developing backend systems with Node.js, Express, Django, or Flask
- Optimizing website performance and user experience
</HighlightBox>
## App Development 📱
<HighlightBox type="success" title="Mobile App Solutions">
- Developing cross-platform mobile applications using React Native or Flutter
- Creating native iOS and Android applications
- Building progressive web apps (PWAs) for mobile-like experiences on the web
- Implementing offline functionality and push notifications
- Integrating with device features like camera, GPS, and sensors
</HighlightBox>
## WeChat Mini Program Development 💬
<HighlightBox type="tip" title="WeChat Mini Program Expertise">
- Designing and developing WeChat Mini Programs for businesses
- Creating interactive and engaging user interfaces
- Implementing WeChat Pay and other WeChat APIs
- Optimizing for WeChat's ecosystem and requirements
- Building custom features and functionalities specific to your business needs
</HighlightBox>
## UI Design 🎨
<HighlightBox type="note" title="UI Design Services">
- Creating modern, clean, and intuitive user interfaces
- Designing responsive layouts that work across all devices
- Developing brand identity and visual language
- Creating wireframes, prototypes, and high-fidelity mockups
- Implementing design systems for consistent user experiences
</HighlightBox>
## Bug Fixing 🐛
<HighlightBox type="error" title="Bug Fixing & Code Optimization">
- Identifying and resolving issues in existing applications
- Debugging complex problems in frontend and backend systems
- Optimizing code for better performance and reliability
- Refactoring legacy code to modern standards
- Implementing automated testing to prevent future bugs
</HighlightBox>
## Important Notes 📝
<HighlightBox type="warning" title="Before Contacting Me">
To avoid unnecessary misunderstandings, please read the following notes before contacting me:
1. Please provide detailed project requirements, including wireframes or design specifications (if you don't understand these, I can help guide you).
2. Please specify project completion time and development period.
3. In general, I only accept commercial projects, and other forms of cooperation need to be discussed separately.
4. I currently cannot provide invoicing services.
5. Projects can be maintained free of charge for 3 months after completion.
</HighlightBox>
## Collaboration Process 🤝
<HighlightBox type="info" title="How We'll Work Together">
1. Confirm the project
2. Determine the collaboration method
3. Confirm project functional requirements
4. Confirm development period and delivery time
5. Confirm project design or wireframes
6. Make payment
7. Project development
8. Project testing
9. Project launch
10. Project maintenance
</HighlightBox>
## Payment Methods 💰
<HighlightBox type="note" title="Payment Options">
- WeChat Pay
- Alipay
- Bank Transfer
**Note: All projects use the 442 payment method**
</HighlightBox>
## Contact Information 📞
<HighlightBox type="success" title="Get in Touch">
- QQ: **2770723534**
- WeChat: **JoyCodeing**
- Email: **zhaoguiyang18@gmail.com**
</HighlightBox>

View File

@@ -1,71 +1,42 @@
---
title: "My Services"
description: "Explore the professional services I offer to help bring your digital projects to life"
title: "What I Do"
description: "Professional services focused on building AI products and technical excellence"
layout: "../layouts/AboutLayout.astro"
---
import HighlightBox from '../components/markdown/HighlightBox.astro';
# Services I Provide 🛠️
# What I Do 🚀
<HighlightBox type="tip">
用优雅的代码和创新的思维,为复杂问题打造精致的解决方案。
Building AI-powered products and turning ambitious ideas into reality.
</HighlightBox>
## Web Development 🌐
## AI Product Development 🤖
- Building responsive and modern websites using the latest technologies
- Creating custom web applications tailored to your specific needs
- Implementing frontend interfaces with React, Vue.js, or Angular
- Developing backend systems with Node.js, Express, Django, or Flask
- Optimizing website performance and user experience
- Building AI-powered products from concept to launch
- RAG applications, AI agents, and intelligent automation
- Full-stack development with modern tech stack (React, Next.js, Node.js)
- Product thinking - focus on solving real problems
- Rapid prototyping and iterative development
## Bug Fixing 🐛
## Technical Consulting 📊
<HighlightBox type="error" title="Bug Fixing & Code Optimization">
<HighlightBox type="info" title="How I Can Help">
- Identifying and resolving issues in existing applications
- Debugging complex problems in frontend and backend systems
- Optimizing code for better performance and reliability
- Refactoring legacy code to modern standards
- Implementing automated testing to prevent future bugs
- Technical architecture and stack decisions
- Code reviews and best practices implementation
- Team mentoring and knowledge transfer
- Performance optimization and scaling strategies
- Technical due diligence for investments
</HighlightBox>
# Services I Provide 🛠️
## Important Notes 📝
<HighlightBox type="warning" title="Before Contacting Me">
To avoid unnecessary misunderstandings, please read the following notes before contacting me:
1. Please provide detailed project requirements, including wireframes or design specifications (if you don't understand these, I can help guide you).
2. Please specify project completion time and development period.
3. In general, I only accept commercial projects, and other forms of cooperation need to be discussed separately.
4. I currently cannot provide invoicing services.
5. Projects can be maintained free of charge for 3 months after completion.
</HighlightBox>
# Services I Provide 🛠️
## Collaboration Process 🤝
<HighlightBox type="info" title="How We'll Work Together">
1. Confirm the project
2. Determine the collaboration method
3. Confirm project functional requirements
4. Confirm development period and delivery time
5. Confirm project design or wireframes
6. Make payment
7. Project development
8. Project testing
9. Project launch
10. Project maintenance
</HighlightBox>
# Services I Provide 🛠️
## Contact Information 📞
# Let's Build Together 💼
<HighlightBox type="success" title="Get in Touch">
- QQ: **2770723534**
- WeChat: **JoyCodeing**
I'm always open to discussing new projects and opportunities. Whether you're looking for a technical co-founder, need help building an AI product, or want technical consulting - let's talk.
- Email: **zhaoguiyang18@gmail.com**
</HighlightBox>
- Check out my [Hire Me](/hire) page for collaboration options
</HighlightBox>

View File

@@ -3,7 +3,7 @@ import BlogLayout from '../../../layouts/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 BlogPost } from '@/types';
import { useTranslations } from '@/i18n/utils';
import { type Lang } from '@/types/i18n';
@@ -55,22 +55,22 @@ const tags = extractTags(allPostsArray);
---
<BlogLayout title="博客 - Joy Zhao" description="深入我对编程、技术趋势和开发者生活的思考。探索我的最新文章。">
<BlogLayout title="博客 - Joy Zhao" description="关于 AI 产品、全栈开发和公开构建的思考。探索技术与产品构建的交汇点。">
<main class="min-h-screen">
<!-- 头部区域 -->
<Container client:load className="pt-24 pb-12">
<Container className="pt-24 pb-12">
<div class="text-center mb-16">
<h1 class="text-5xl md:text-6xl font-bold bg-gradient-to-r from-foreground via-purple-600 to-purple-800 dark:from-foreground dark:via-purple-200 dark:to-purple-300 bg-clip-text text-transparent mb-6">
我的<span class="text-purple-500">博客</span>
<span class="text-purple-500">博客</span>
</h1>
<p class="text-xl text-muted-foreground max-w-3xl mx-auto">
{t('blog.slogan')} 探索我对网络开发、设计和技术的想法、教程和见解
关于 AI 产品、全栈开发和公开构建的思考。探索技术与产品构建的交汇点
</p>
</div>
</Container>
<!-- 主要内容 -->
<Container client:load className="pb-20">
<Container className="pb-20">
<div class="grid grid-cols-1 lg:grid-cols-4 gap-8">
<!-- 侧边栏 -->
<div class="lg:col-span-1 space-y-8">
@@ -98,4 +98,4 @@ const tags = extractTags(allPostsArray);
-webkit-box-orient: vertical;
overflow: hidden;
}
</style>
</style>

332
src/pages/zh/hire.astro Normal file
View File

@@ -0,0 +1,332 @@
---
import Layout from "@/layouts/Layout.astro";
import GlassHeader from "@/components/GlassHeader";
import Footer from "@/components/Footer";
import Container from "@/components/ui/Container.astro";
import { useTranslations } from "@/i18n/utils";
import type { Lang } from "@/types/i18n";
import { defaultLang } from "@/i18n/ui";
const lang = Astro.currentLocale as Lang || defaultLang;
const t = useTranslations(lang);
const pageTitle = lang === 'zh' ? '合作' : 'Hire Me';
---
<Layout title={pageTitle}>
<GlassHeader lang={lang} client:only="react" />
<main class="min-h-screen">
<!-- Hire Page Hero -->
<section class="py-24 relative overflow-hidden">
<div class="absolute inset-0 bg-gradient-to-br from-purple-900/20 via-purple-800/10 to-blue-900/20 dark:from-purple-900/30 dark:via-purple-800/20 dark:to-blue-900/30"></div>
<Container className="relative z-10">
<div class="text-center mb-16">
<span class="inline-block px-4 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm font-medium mb-4">
专业合作
</span>
<h1 class="text-5xl md:text-6xl font-bold mb-6 bg-gradient-to-r from-gray-900 via-purple-600 to-purple-800 dark:from-white dark:via-purple-200 dark:to-purple-300 bg-clip-text text-transparent">
合作
</h1>
<p class="text-lg text-muted-foreground max-w-2xl mx-auto">
构建优秀产品,从找到合适的技术合伙人开始
</p>
</div>
</Container>
</section>
<!-- Who I Work With -->
<section class="py-16 relative">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-purple-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">👥</span>
</div>
<h2 class="text-3xl font-bold">
我与谁合作
</h2>
</div>
<div class="grid md:grid-cols-2 gap-6">
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/20 p-6">
<h3 class="text-lg font-bold mb-3">
初创公司
</h3>
<p class="text-muted-foreground">
从零到一构建产品的早期创业团队,需要快速迭代和灵活响应的技术方案。
</p>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/20 p-6">
<h3 class="text-lg font-bold mb-3">
独立创始人
</h3>
<p class="text-muted-foreground">
独自构建产品的创业者,需要技术合伙人来实现产品愿景。
</p>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/20 p-6">
<h3 class="text-lg font-bold mb-3">
传统企业
</h3>
<p class="text-muted-foreground">
希望数字化转型的传统企业,需要现代化的技术解决方案。
</p>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/20 p-6">
<h3 class="text-lg font-bold mb-3">
技术团队
</h3>
<p class="text-muted-foreground">
需要额外技术资源或特定技能集来推进项目的开发团队。
</p>
</div>
</div>
</div>
</Container>
</section>
<!-- What I Build -->
<section class="py-16 relative bg-white/5 dark:bg-gray-900/50">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-blue-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">🛠️</span>
</div>
<h2 class="text-3xl font-bold">
我能构建什么
</h2>
</div>
<div class="space-y-6">
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-blue-500/20 p-8">
<div class="flex items-start gap-4">
<div class="w-12 h-12 bg-gradient-to-br from-purple-600 to-blue-600 rounded-xl flex items-center justify-center flex-shrink-0">
<span class="text-2xl">⚡</span>
</div>
<div>
<h3 class="text-xl font-bold mb-2">AI 产品与应用</h3>
<p class="text-muted-foreground">
从 AI 助手到 Agent 系统,从 RAG 应用到 AI 驱动的 SaaS 产品。我可以帮助你将 AI 能力产品化。
</p>
</div>
</div>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-blue-500/20 p-8">
<div class="flex items-start gap-4">
<div class="w-12 h-12 bg-gradient-to-br from-green-600 to-teal-600 rounded-xl flex items-center justify-center flex-shrink-0">
<span class="text-2xl">🌐</span>
</div>
<div>
<h3 class="text-xl font-bold mb-2">Web 应用</h3>
<p class="text-muted-foreground">
现代 Web 应用、SaaS 平台、电商系统、内容管理系统等。使用 React、Next.js、Node.js 等技术栈。
</p>
</div>
</div>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-blue-500/20 p-8">
<div class="flex items-start gap-4">
<div class="w-12 h-12 bg-gradient-to-br from-orange-600 to-red-600 rounded-xl flex items-center justify-center flex-shrink-0">
<span class="text-2xl">📱</span>
</div>
<div>
<h3 class="text-xl font-bold mb-2">全栈产品</h3>
<p class="text-muted-foreground">
从前端到后端,从数据库到部署,我提供完整的全栈开发能力,一个项目只需一个开发者。
</p>
</div>
</div>
</div>
</div>
</div>
</Container>
</section>
<!-- Engagement Models -->
<section class="py-16 relative">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-green-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">📋</span>
</div>
<h2 class="text-3xl font-bold">
合作模式
</h2>
</div>
<div class="grid md:grid-cols-3 gap-6">
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-green-500/20 p-6 text-center">
<div class="w-12 h-12 bg-green-500/20 rounded-xl flex items-center justify-center mx-auto mb-4">
<span class="text-2xl">🤝</span>
</div>
<h3 class="text-lg font-bold mb-2">
技术合伙人
</h3>
<p class="text-sm text-muted-foreground">
长期合作,股权合作,共同承担创业风险与回报
</p>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-green-500/20 p-6 text-center">
<div class="w-12 h-12 bg-blue-500/20 rounded-xl flex items-center justify-center mx-auto mb-4">
<span class="text-2xl">💰</span>
</div>
<h3 class="text-lg font-bold mb-2">
项目制
</h3>
<p class="text-sm text-muted-foreground">
按项目交付,固定价格或按阶段付款,适合明确需求的项目
</p>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-green-500/20 p-6 text-center">
<div class="w-12 h-12 bg-purple-500/20 rounded-xl flex items-center justify-center mx-auto mb-4">
<span class="text-2xl">⏰</span>
</div>
<h3 class="text-lg font-bold mb-2">
咨询/顾问
</h3>
<p class="text-sm text-muted-foreground">
按小时咨询,帮助你做出技术决策,审查代码,指导团队
</p>
</div>
</div>
</div>
</Container>
</section>
<!-- Delivery Style -->
<section class="py-16 relative bg-white/5 dark:bg-gray-900/50">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-yellow-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">🎯</span>
</div>
<h2 class="text-3xl font-bold">
工作方式
</h2>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-yellow-500/20 p-8">
<ul class="space-y-4">
<li class="flex items-start gap-3">
<span class="text-green-500 text-xl">✓</span>
<div>
<strong class="block mb-1">敏捷迭代</strong>
<p class="text-muted-foreground text-sm">
2周一个迭代快速交付可用功能持续获取反馈
</p>
</div>
</li>
<li class="flex items-start gap-3">
<span class="text-green-500 text-xl">✓</span>
<div>
<strong class="block mb-1">透明沟通</strong>
<p class="text-muted-foreground text-sm">
定期同步进度,及时报告问题,保持信息对称
</p>
</div>
</li>
<li class="flex items-start gap-3">
<span class="text-green-500 text-xl">✓</span>
<div>
<strong class="block mb-1">代码质量</strong>
<p class="text-muted-foreground text-sm">
完整的测试覆盖,清晰的文档注释,可维护的代码结构
</p>
</div>
</li>
<li class="flex items-start gap-3">
<span class="text-green-500 text-xl">✓</span>
<div>
<strong class="block mb-1">产品思维</strong>
<p class="text-muted-foreground text-sm">
不只是写代码,还思考产品价值,用户体验和业务目标
</p>
</div>
</li>
</ul>
</div>
</div>
</Container>
</section>
<!-- Availability -->
<section class="py-16 relative">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-red-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">📅</span>
</div>
<h2 class="text-3xl font-bold">
当前可用性
</h2>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-red-500/20 p-8">
<div class="flex items-center gap-4 mb-6">
<div class="w-4 h-4 bg-green-500 rounded-full animate-pulse"></div>
<span class="text-lg font-semibold">
目前可接受新项目
</span>
</div>
<p class="text-muted-foreground mb-6">
我目前可以接受 1-2 个新项目。偏好长期合作模式(技术合伙人或长期项目),但也会考虑短期项目。
</p>
<div class="flex flex-wrap gap-2">
<span class="px-3 py-1 bg-green-500/20 text-green-600 dark:text-green-400 rounded-full text-sm">
可立即开始
</span>
<span class="px-3 py-1 bg-blue-500/20 text-blue-600 dark:text-blue-400 rounded-full text-sm">
远程工作
</span>
<span class="px-3 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm">
中英双语
</span>
</div>
</div>
</div>
</Container>
</section>
<!-- Contact CTA -->
<section class="py-16 relative bg-gradient-to-br from-purple-900/20 to-blue-900/20 dark:from-purple-900/30 dark:to-blue-900/30">
<Container>
<div class="max-w-4xl mx-auto text-center">
<h2 class="text-3xl font-bold mb-6">
准备好一起构建了吗?
</h2>
<p class="text-lg text-muted-foreground mb-8 max-w-xl mx-auto">
告诉我你的项目想法,让我们看看能否合作。
</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<a
href="mailto:zhaoguiyang18@gmail.com"
class="bg-purple-500 hover:bg-purple-600 text-white px-8 py-3 rounded-lg font-semibold transition-colors inline-flex items-center justify-center gap-2"
>
<span>📧</span>
发送邮件
</a>
<a
href="/zh/now"
class="border border-purple-500 text-purple-500 hover:bg-purple-500 hover:text-white px-8 py-3 rounded-lg font-semibold transition-colors inline-flex items-center justify-center gap-2"
>
<span>📡</span>
了解更多关于我
</a>
</div>
</div>
</Container>
</section>
</main>
<Footer lang={lang} client:only="react" />
</Layout>

View File

@@ -4,7 +4,7 @@ import GlassHeader from "@/components/GlassHeader";
import SkillsMarquee from "@/components/SkillsMarquee";
import TypewriterEffect from "@/components/TypewriterEffect";
import Footer from "@/components/Footer";
import Container from "@/components/ui/Container";
import Container from "@/components/ui/Container.astro";
import { useTranslations } from "@/i18n/utils";
import type { Lang } from "@/types/i18n";
import { defaultLang } from "@/i18n/ui";
@@ -24,7 +24,7 @@ const pageTitle = t('site.title');
<!-- Background gradient -->
<div class="absolute inset-0 bg-gradient-to-br from-purple-900/20 via-purple-800/10 to-purple-700/20 dark:from-purple-900/30 dark:via-purple-800/20 dark:to-purple-700/30"></div>
<Container client:load className="relative z-10">
<Container className="relative z-10">
<div class="text-center mb-16">
<!-- Greeting -->
<div class="flex items-center justify-center mb-6">
@@ -79,23 +79,23 @@ const pageTitle = t('site.title');
<!-- Action buttons -->
<div class="flex flex-col sm:flex-row gap-4 justify-center items-center mb-16">
<a
href="#about"
href="/zh/hire"
class="bg-purple-500 hover:bg-purple-600 text-white px-8 py-3 rounded-lg font-semibold transition-colors flex items-center gap-2"
>
<svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"></path>
</svg>
{t('hero.viewProjects')}
{t('hero.ctaPrimary')}
</a>
<a
href={`mailto:${personalInfo.email}`}
href="/zh/projects"
class="border border-purple-500 text-purple-500 hover:bg-purple-500 hover:text-white px-8 py-3 rounded-lg font-semibold transition-colors flex items-center gap-2"
>
<svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
</svg>
{t('hero.contactMe')}
{t('hero.ctaSecondary')}
</a>
</div>
@@ -199,10 +199,79 @@ const pageTitle = t('site.title');
</section>
<SkillsMarquee lang={lang} client:only="react" />
<!-- Featured Project: Elynd -->
<section class="py-24 bg-gradient-to-br from-purple-900/20 via-purple-800/10 to-blue-900/20 dark:from-purple-900/30 dark:via-purple-800/20 dark:to-blue-900/30">
<Container>
<div class="text-center mb-12">
<span class="inline-block px-4 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm font-medium mb-4">
Featured 项目
</span>
<h2 class="text-4xl md:text-5xl font-bold mb-4 bg-gradient-to-r from-purple-400 via-blue-400 to-purple-400 bg-clip-text text-transparent">
Elynd
</h2>
<p class="text-lg text-muted-foreground max-w-2xl mx-auto">
一个开放的 AI 工作空间,让构建者能够更智能地工作
</p>
</div>
<div class="max-w-4xl mx-auto">
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/20 overflow-hidden">
<div class="h-64 md:h-80 bg-gradient-to-br from-purple-600/20 via-blue-600/20 to-purple-600/20 flex items-center justify-center relative overflow-hidden">
<div class="absolute inset-0 bg-grid-purple-500/10 [mask-image:linear-gradient(0deg,white,rgba(255,255,255,0.3))]"></div>
<div class="text-center z-10">
<div class="text-6xl md:text-8xl mb-4">⚡</div>
<div class="text-2xl md:text-3xl font-bold text-purple-400">
让 AI 成为你的共同构建者
</div>
</div>
</div>
<div class="p-8">
<div class="grid md:grid-cols-3 gap-6 mb-8">
<div class="text-center">
<div class="text-3xl font-bold text-purple-400 mb-2">AI-First</div>
<div class="text-sm text-muted-foreground">
从第一天就融入 AI 思维
</div>
</div>
<div class="text-center">
<div class="text-3xl font-bold text-blue-400 mb-2">Open</div>
<div class="text-sm text-muted-foreground">
完全开放,可自托管
</div>
</div>
<div class="text-center">
<div class="text-3xl font-bold text-green-400 mb-2">Builder-First</div>
<div class="text-sm text-muted-foreground">
为构建者打造的工作空间
</div>
</div>
</div>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<a
href="/zh/projects"
class="bg-purple-500 hover:bg-purple-600 text-white px-6 py-3 rounded-lg font-semibold transition-colors inline-flex items-center justify-center gap-2"
>
<span>🚀</span>
{t('hero.ctaSecondary')}
</a>
<a
href="/zh/now"
class="border border-purple-500 text-purple-500 hover:bg-purple-500 hover:text-white px-6 py-3 rounded-lg font-semibold transition-colors inline-flex items-center justify-center gap-2"
>
<span>📡</span>
了解更多
</a>
</div>
</div>
</div>
</div>
</Container>
</section>
<!-- Services Section - Inlined Content -->
<section id="services" class="py-20 px-4 bg-gradient-to-br from-slate-50 to-blue-50 dark:from-slate-900 dark:to-slate-800">
<Container client:load>
<Container>
<h2 class="text-4xl font-bold text-center mb-16 bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent">
{t('services.title')}
</h2>
@@ -246,7 +315,7 @@ const pageTitle = t('site.title');
<!-- Background gradient -->
<div class="absolute inset-0 bg-gradient-to-br from-blue-900/10 via-purple-800/5 to-indigo-700/10 dark:from-blue-900/20 dark:via-purple-800/10 dark:to-indigo-700/20"></div>
<Container client:load className="relative z-10">
<Container className="relative z-10">
<div class="text-center mb-16">
<!-- Section Title -->
<div class="flex items-center justify-center mb-6">
@@ -389,7 +458,7 @@ const pageTitle = t('site.title');
<!-- <section id="projects" class="py-20 relative">
<div class="absolute inset-0 bg-gradient-to-b from-transparent via-purple-900/5 to-transparent"></div>
<Container client:load className="relative z-10">
<Container className="relative z-10">
<div class="text-center mb-16">
<h2 class="text-4xl md:text-5xl font-bold mb-4 bg-gradient-to-r from-purple-400 to-purple-600 bg-clip-text text-transparent">
我的项目

191
src/pages/zh/now.astro Normal file
View File

@@ -0,0 +1,191 @@
---
import Layout from "@/layouts/Layout.astro";
import GlassHeader from "@/components/GlassHeader";
import Footer from "@/components/Footer";
import Container from "@/components/ui/Container.astro";
import { useTranslations } from "@/i18n/utils";
import type { Lang } from "@/types/i18n";
import { defaultLang } from "@/i18n/ui";
const lang = Astro.currentLocale as Lang || defaultLang;
const t = useTranslations(lang);
const pageTitle = lang === 'zh' ? '现在' : 'Now';
---
<Layout title={pageTitle}>
<GlassHeader lang={lang} client:only="react" />
<main class="min-h-screen">
<!-- Now Page Hero -->
<section class="py-24 relative overflow-hidden">
<div class="absolute inset-0 bg-gradient-to-br from-purple-900/20 via-purple-800/10 to-blue-900/20 dark:from-purple-900/30 dark:via-purple-800/20 dark:to-blue-900/30"></div>
<Container className="relative z-10">
<div class="text-center mb-16">
<span class="inline-block px-4 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm font-medium mb-4">
关于我现在正在做什么
</span>
<h1 class="text-5xl md:text-6xl font-bold mb-6 bg-gradient-to-r from-gray-900 via-purple-600 to-purple-800 dark:from-white dark:via-purple-200 dark:to-purple-300 bg-clip-text text-transparent">
现在
</h1>
<p class="text-lg text-muted-foreground max-w-2xl mx-auto">
持续更新我的现状、正在构建的内容以及合作机会
</p>
</div>
</Container>
</section>
<!-- Building Section -->
<section class="py-16 relative">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-purple-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">🔨</span>
</div>
<h2 class="text-3xl font-bold">
正在构建
</h2>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/20 p-8">
<div class="flex items-start gap-6">
<div class="w-16 h-16 bg-gradient-to-br from-purple-600 to-blue-600 rounded-xl flex items-center justify-center flex-shrink-0">
<span class="text-3xl">⚡</span>
</div>
<div class="flex-1">
<h3 class="text-xl font-bold mb-2">Elynd</h3>
<p class="text-muted-foreground mb-4">
一个开放的 AI 工作空间,让构建者能够更智能地工作。从 AI 第一性原理出发,打造完全开放、可自托管的协作工具。
</p>
<div class="flex flex-wrap gap-2">
<span class="px-3 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm">AI 产品</span>
<span class="px-3 py-1 bg-blue-500/20 text-blue-600 dark:text-blue-400 rounded-full text-sm">TypeScript</span>
<span class="px-3 py-1 bg-green-500/20 text-green-600 dark:text-green-400 rounded-full text-sm">开源</span>
</div>
</div>
</div>
</div>
</div>
</Container>
</section>
<!-- Exploring Section -->
<section class="py-16 relative bg-white/5 dark:bg-gray-900/50">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-blue-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">🔭</span>
</div>
<h2 class="text-3xl font-bold">
正在探索
</h2>
</div>
<div class="grid gap-6">
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-blue-500/20 p-6">
<h3 class="text-lg font-bold mb-3">
AI Agents 与工作流自动化
</h3>
<p class="text-muted-foreground">
研究如何构建能够自主完成复杂任务的 AI Agent以及如何将 AI 能力融入日常工作流。
</p>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-blue-500/20 p-6">
<h3 class="text-lg font-bold mb-3">
产品导向的开发实践
</h3>
<p class="text-muted-foreground">
探索从产品角度思考开发,构建真正解决用户问题的产品,而不仅仅是技术实现。
</p>
</div>
</div>
</div>
</Container>
</section>
<!-- Shipping Section -->
<section class="py-16 relative">
<Container>
<div class="max-w-4xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<div class="w-12 h-12 bg-green-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">🚀</span>
</div>
<h2 class="text-3xl font-bold">
最近发布
</h2>
</div>
<div class="space-y-4">
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-xl border border-green-500/20 p-6 flex items-center gap-4">
<div class="w-12 h-12 bg-green-500/20 rounded-lg flex items-center justify-center flex-shrink-0">
<span class="text-xl">✨</span>
</div>
<div>
<h3 class="font-bold mb-1">
个人网站全新改版
</h3>
<p class="text-sm text-muted-foreground">
全新设计的个人网站,突出 AI 产品构建者的定位
</p>
</div>
</div>
</div>
</div>
</Container>
</section>
<!-- Open to Collaborate Section -->
<section class="py-16 relative bg-gradient-to-br from-purple-900/10 to-blue-900/10 dark:from-purple-900/20 dark:to-blue-900/20">
<Container>
<div class="max-w-4xl mx-auto text-center">
<div class="flex items-center justify-center gap-4 mb-8">
<div class="w-12 h-12 bg-yellow-500/20 rounded-xl flex items-center justify-center">
<span class="text-2xl">🤝</span>
</div>
<h2 class="text-3xl font-bold">
开放合作
</h2>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-yellow-500/20 p-8">
<p class="text-lg text-muted-foreground mb-8">
我始终对新的合作机会持开放态度。无论你是想要构建产品、寻找技术合伙人,还是需要技术咨询,都可以联系我。
</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<a
href="/zh/hire"
class="bg-purple-500 hover:bg-purple-600 text-white px-6 py-3 rounded-lg font-semibold transition-colors inline-flex items-center justify-center gap-2"
>
<span>💼</span>
查看合作方式
</a>
<a
href="mailto:zhaoguiyang18@gmail.com"
class="border border-purple-500 text-purple-500 hover:bg-purple-500 hover:text-white px-6 py-3 rounded-lg font-semibold transition-colors inline-flex items-center justify-center gap-2"
>
<span>📧</span>
发送邮件
</a>
</div>
</div>
</div>
</Container>
</section>
<!-- Last Updated -->
<section class="py-12">
<Container>
<div class="max-w-4xl mx-auto text-center">
<p class="text-sm text-muted-foreground">
最后更新:
<span class="font-medium">2025年3月</span>
</p>
</div>
</Container>
</section>
</main>
<Footer lang={lang} client:only="react" />
</Layout>

View File

@@ -2,7 +2,7 @@
import Layout from "@/layouts/Layout.astro";
import GlassHeader from "@/components/GlassHeader";
import Footer from "@/components/Footer";
import Container from "@/components/ui/Container";
import Container from "@/components/ui/Container.astro";
import { useTranslations } from "@/i18n/utils";
import type { Lang } from "@/types/i18n";
import { defaultLang } from "@/i18n/ui";
@@ -15,6 +15,15 @@ const pageTitle = t('projects.title');
// 根据当前语言获取项目数据
const currentProjects = projects[lang as keyof typeof projects] || projects.en;
// Separate featured and grouped projects
const featuredProject = currentProjects.find(p => p.featured);
const otherProjects = currentProjects.filter(p => !p.featured);
// Group by type
const productProjects = otherProjects.filter(p => p.type === 'product');
const clientProjects = otherProjects.filter(p => p.type === 'client');
const experimentProjects = otherProjects.filter(p => p.type === 'experiment');
---
<Layout title={pageTitle}>
@@ -24,8 +33,8 @@ const currentProjects = projects[lang as keyof typeof projects] || projects.en;
<section class="py-24 relative overflow-hidden">
<!-- Background gradient -->
<div class="absolute inset-0 bg-gradient-to-br from-purple-900/20 via-purple-800/10 to-purple-700/20 dark:from-purple-900/30 dark:via-purple-800/20 dark:to-purple-700/30"></div>
<Container client:load className="relative z-10">
<Container className="relative z-10">
<div class="text-center mb-16">
<!-- Main title -->
<h1 class="text-5xl md:text-6xl font-bold mb-6 bg-gradient-to-r from-gray-900 via-purple-600 to-purple-800 dark:from-white dark:via-purple-200 dark:to-purple-300 bg-clip-text text-transparent">
@@ -40,69 +49,274 @@ const currentProjects = projects[lang as keyof typeof projects] || projects.en;
</Container>
</section>
<!-- Projects Grid Section -->
<section class="py-12 relative">
<!-- Background gradient -->
<div class="absolute inset-0 bg-gradient-to-b from-transparent via-purple-900/5 to-transparent"></div>
<Container client:load className="relative z-10">
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8 items-stretch">
{currentProjects.map((project) => (
<div class={`group overflow-hidden border border-${project.color}-500/20 hover:border-${project.color}-500/40 h-full flex flex-col transition-all duration-500 hover:scale-105 bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-xl relative`}>
<!-- Project tag - positioned at top right -->
<div class="absolute top-4 right-4 z-10">
<span class={`px-3 py-1 bg-${project.color}-100 dark:bg-${project.color}-800 text-${project.color}-800 dark:text-${project.color}-200 text-xs rounded-full font-medium border border-${project.color}-200 dark:border-${project.color}-700`}>{t(`project.tag.${project.tag}`)}</span>
</div>
<!-- Project image placeholder -->
<div class={`h-48 bg-gradient-to-br ${project.image.bg} relative overflow-hidden`}>
<div class={`absolute inset-0 bg-gradient-to-br ${project.image.bg} group-hover:${project.image.hover} transition-all duration-500`}></div>
<div class="absolute bottom-4 left-4 right-4">
<div class={`bg-black/50 backdrop-blur-sm rounded px-3 py-1 text-xs font-mono ${project.image.text}`}>
{project.title}
<!-- Featured Project Section -->
{featuredProject && (
<section class="py-12 bg-gradient-to-br from-purple-900/10 to-blue-900/10 dark:from-purple-900/20 dark:to-blue-900/20">
<Container>
<div class="max-w-5xl mx-auto">
<div class="flex items-center gap-4 mb-8">
<span class="inline-block px-4 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm font-medium">
Featured 项目
</span>
</div>
<div class="bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-2xl border border-purple-500/30 overflow-hidden">
<div class="grid lg:grid-cols-2">
<div class="h-64 lg:h-auto bg-gradient-to-br from-purple-600/20 via-blue-600/20 to-purple-600/20 flex items-center justify-center relative overflow-hidden">
<div class="text-8xl">{featuredProject.icon}</div>
</div>
<div class="p-8">
<div class="flex items-center gap-3 mb-4">
<span class="px-3 py-1 bg-purple-500/20 text-purple-600 dark:text-purple-400 rounded-full text-sm">
{t(`project.status.${featuredProject.status}`)}
</span>
<span class="px-3 py-1 bg-blue-500/20 text-blue-600 dark:text-blue-400 rounded-full text-sm">
{t(`project.type.${featuredProject.type}`)}
</span>
</div>
<h2 class="text-3xl font-bold mb-4">{featuredProject.title}</h2>
<div class="space-y-4 mb-6">
<div>
<span class="text-sm text-muted-foreground">{t('project.role')}:</span>
<p class="font-medium">{featuredProject.role}</p>
</div>
<div>
<span class="text-sm text-muted-foreground">{t('project.impact')}:</span>
<p class="font-medium">{featuredProject.impact}</p>
</div>
</div>
<div class="space-y-2 mb-6">
{featuredProject.description.map((desc) => (
<p class="text-muted-foreground text-sm">{desc}</p>
))}
</div>
<div class="flex flex-wrap gap-2 mb-6">
{featuredProject.tech.map((tech) => (
<span class="px-3 py-1 bg-gray-500/10 dark:bg-gray-400/20 text-gray-600 dark:text-gray-300 text-sm rounded-md border border-gray-500/20 dark:border-gray-400/30">{tech}</span>
))}
</div>
<div class="flex gap-4">
<a href={featuredProject.link} class="bg-purple-500 hover:bg-purple-600 text-white px-6 py-2 rounded-lg font-medium transition-colors inline-flex items-center gap-2">
{t('project.visit')}
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
{featuredProject.links?.github && (
<a href={featuredProject.links.github} target="_blank" rel="noopener noreferrer" class="border border-gray-500 text-gray-600 dark:text-gray-300 hover:bg-gray-500/10 px-6 py-2 rounded-lg font-medium transition-colors inline-flex items-center gap-2">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
</svg>
GitHub
</a>
)}
</div>
</div>
</div>
<div class="p-6 pb-4">
<h3 class={`text-xl group-hover:text-${project.color}-400 transition-colors duration-300 flex items-center gap-2 font-bold mb-4`}>
<span class={`text-${project.color}-500`}>{project.icon}</span>
{project.title}
</h3>
</div>
<div class="px-6 flex-grow">
<div class="space-y-3">
{project.description.map((desc) => (
<div class="flex items-start gap-2 text-sm text-muted-foreground group-hover:text-foreground transition-colors duration-300">
<span class={`text-${project.color}-500 mt-1`}>•</span>
<span>{desc}</span>
</div>
))}
</div>
<!-- Tech stack indicators with unified gray styling -->
<div class="mt-6 mb-4 flex flex-wrap gap-2">
{project.tech.map((tech) => (
<span class="px-2 py-1 bg-gray-500/10 dark:bg-gray-400/20 text-gray-600 dark:text-gray-300 text-xs rounded-md border border-gray-500/20 dark:border-gray-400/30">{tech}</span>
))}
</div>
</div>
<!-- Visit project link -->
<div class="p-6 pt-2">
<a href={project.link} class={`inline-flex items-center text-sm font-medium text-${project.color}-500 hover:text-${project.color}-600 dark:hover:text-${project.color}-400 transition-colors duration-300`}>
{t('project.visit')}
<svg class="ml-1 w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
</div>
</div>
))}
</div>
</div>
</div>
</Container>
</section>
)}
<!-- Projects by Type -->
<section class="py-12 relative">
<Container>
<!-- Product Projects -->
{productProjects.length > 0 && (
<>
<div class="flex items-center gap-4 mb-8">
<div class="w-10 h-10 bg-purple-500/20 rounded-lg flex items-center justify-center">
<span class="text-xl">🛍️</span>
</div>
<h2 class="text-2xl font-bold">{t('project.type.product')}</h2>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8 mb-12">
{productProjects.map((project) => (
<div class={`group overflow-hidden border border-${project.color}-500/20 hover:border-${project.color}-500/40 h-full flex flex-col transition-all duration-500 hover:scale-105 bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-xl relative`}>
<div class="absolute top-4 right-4 z-10 flex gap-2">
<span class={`px-3 py-1 bg-${project.color}-100 dark:bg-${project.color}-800 text-${project.color}-800 dark:text-${project.color}-200 text-xs rounded-full font-medium border border-${project.color}-200 dark:border-${project.color}-700`}>{t(`project.status.${project.status}`)}</span>
</div>
<div class={`h-48 bg-gradient-to-br ${project.image.bg} relative overflow-hidden`}>
<div class={`absolute inset-0 bg-gradient-to-br ${project.image.bg} group-hover:${project.image.hover} transition-all duration-500`}></div>
<div class="absolute bottom-4 left-4 right-4">
<div class={`bg-black/50 backdrop-blur-sm rounded px-3 py-1 text-xs font-mono ${project.image.text}`}>
{project.title}
</div>
</div>
</div>
<div class="p-6 pb-4">
<h3 class={`text-xl group-hover:text-${project.color}-400 transition-colors duration-300 flex items-center gap-2 font-bold mb-4`}>
<span class={`text-${project.color}-500`}>{project.icon}</span>
{project.title}
</h3>
</div>
<div class="px-6 flex-grow">
<div class="space-y-3">
{project.description.slice(0, 2).map((desc) => (
<div class="flex items-start gap-2 text-sm text-muted-foreground group-hover:text-foreground transition-colors duration-300">
<span class={`text-${project.color}-500 mt-1`}>•</span>
<span>{desc}</span>
</div>
))}
</div>
<div class="mt-6 mb-4 flex flex-wrap gap-2">
{project.tech.slice(0, 4).map((tech) => (
<span class="px-2 py-1 bg-gray-500/10 dark:bg-gray-400/20 text-gray-600 dark:text-gray-300 text-xs rounded-md border border-gray-500/20 dark:border-gray-400/30">{tech}</span>
))}
</div>
</div>
<div class="p-6 pt-2">
<a href={project.link} class={`inline-flex items-center text-sm font-medium text-${project.color}-500 hover:text-${project.color}-600 dark:hover:text-${project.color}-400 transition-colors duration-300`}>
{t('project.visit')}
<svg class="ml-1 w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
</div>
</div>
))}
</div>
</>
)}
<!-- Client Projects -->
{clientProjects.length > 0 && (
<>
<div class="flex items-center gap-4 mb-8">
<div class="w-10 h-10 bg-blue-500/20 rounded-lg flex items-center justify-center">
<span class="text-xl">💼</span>
</div>
<h2 class="text-2xl font-bold">{t('project.type.client')}</h2>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8 mb-12">
{clientProjects.map((project) => (
<div class={`group overflow-hidden border border-${project.color}-500/20 hover:border-${project.color}-500/40 h-full flex flex-col transition-all duration-500 hover:scale-105 bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-xl relative`}>
<div class="absolute top-4 right-4 z-10 flex gap-2">
<span class={`px-3 py-1 bg-${project.color}-100 dark:bg-${project.color}-800 text-${project.color}-800 dark:text-${project.color}-200 text-xs rounded-full font-medium border border-${project.color}-200 dark:border-${project.color}-700`}>{t(`project.status.${project.status}`)}</span>
</div>
<div class={`h-48 bg-gradient-to-br ${project.image.bg} relative overflow-hidden`}>
<div class={`absolute inset-0 bg-gradient-to-br ${project.image.bg} group-hover:${project.image.hover} transition-all duration-500`}></div>
<div class="absolute bottom-4 left-4 right-4">
<div class={`bg-black/50 backdrop-blur-sm rounded px-3 py-1 text-xs font-mono ${project.image.text}`}>
{project.title}
</div>
</div>
</div>
<div class="p-6 pb-4">
<h3 class={`text-xl group-hover:text-${project.color}-400 transition-colors duration-300 flex items-center gap-2 font-bold mb-4`}>
<span class={`text-${project.color}-500`}>{project.icon}</span>
{project.title}
</h3>
</div>
<div class="px-6 flex-grow">
<div class="space-y-3">
{project.description.slice(0, 2).map((desc) => (
<div class="flex items-start gap-2 text-sm text-muted-foreground group-hover:text-foreground transition-colors duration-300">
<span class={`text-${project.color}-500 mt-1`}>•</span>
<span>{desc}</span>
</div>
))}
</div>
<div class="mt-6 mb-4 flex flex-wrap gap-2">
{project.tech.slice(0, 4).map((tech) => (
<span class="px-2 py-1 bg-gray-500/10 dark:bg-gray-400/20 text-gray-600 dark:text-gray-300 text-xs rounded-md border border-gray-500/20 dark:border-gray-400/30">{tech}</span>
))}
</div>
</div>
<div class="p-6 pt-2">
<a href={project.link} class={`inline-flex items-center text-sm font-medium text-${project.color}-500 hover:text-${project.color}-600 dark:hover:text-${project.color}-400 transition-colors duration-300`}>
{t('project.visit')}
<svg class="ml-1 w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
</div>
</div>
))}
</div>
</>
)}
<!-- Experiment Projects -->
{experimentProjects.length > 0 && (
<>
<div class="flex items-center gap-4 mb-8">
<div class="w-10 h-10 bg-green-500/20 rounded-lg flex items-center justify-center">
<span class="text-xl">🧪</span>
</div>
<h2 class="text-2xl font-bold">{t('project.type.experiment')}</h2>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
{experimentProjects.map((project) => (
<div class={`group overflow-hidden border border-${project.color}-500/20 hover:border-${project.color}-500/40 h-full flex flex-col transition-all duration-500 hover:scale-105 bg-white/10 dark:bg-gray-800/50 backdrop-blur-sm rounded-xl relative`}>
<div class="absolute top-4 right-4 z-10 flex gap-2">
<span class={`px-3 py-1 bg-${project.color}-100 dark:bg-${project.color}-800 text-${project.color}-800 dark:text-${project.color}-200 text-xs rounded-full font-medium border border-${project.color}-200 dark:border-${project.color}-700`}>{t(`project.status.${project.status}`)}</span>
</div>
<div class={`h-48 bg-gradient-to-br ${project.image.bg} relative overflow-hidden`}>
<div class={`absolute inset-0 bg-gradient-to-br ${project.image.bg} group-hover:${project.image.hover} transition-all duration-500`}></div>
<div class="absolute bottom-4 left-4 right-4">
<div class={`bg-black/50 backdrop-blur-sm rounded px-3 py-1 text-xs font-mono ${project.image.text}`}>
{project.title}
</div>
</div>
</div>
<div class="p-6 pb-4">
<h3 class={`text-xl group-hover:text-${project.color}-400 transition-colors duration-300 flex items-center gap-2 font-bold mb-4`}>
<span class={`text-${project.color}-500`}>{project.icon}</span>
{project.title}
</h3>
</div>
<div class="px-6 flex-grow">
<div class="space-y-3">
{project.description.slice(0, 2).map((desc) => (
<div class="flex items-start gap-2 text-sm text-muted-foreground group-hover:text-foreground transition-colors duration-300">
<span class={`text-${project.color}-500 mt-1`}>•</span>
<span>{desc}</span>
</div>
))}
</div>
<div class="mt-6 mb-4 flex flex-wrap gap-2">
{project.tech.slice(0, 4).map((tech) => (
<span class="px-2 py-1 bg-gray-500/10 dark:bg-gray-400/20 text-gray-600 dark:text-gray-300 text-xs rounded-md border border-gray-500/20 dark:border-gray-400/30">{tech}</span>
))}
</div>
</div>
<div class="p-6 pt-2">
<a href={project.link} class={`inline-flex items-center text-sm font-medium text-${project.color}-500 hover:text-${project.color}-600 dark:hover:text-${project.color}-400 transition-colors duration-300`}>
{t('project.visit')}
<svg class="ml-1 w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
</div>
</div>
))}
</div>
</>
)}
</Container>
</section>
</main>
<Footer lang={lang} client:load />
</Layout>
</Layout>

View File

@@ -1,108 +1,42 @@
---
title: "我的服务"
description: "探索我提供的专业服务,帮助您实现数字项目"
title: "我能做什么"
description: "专注于构建 AI 产品和技术卓越的专业服务"
layout: "../../layouts/AboutLayout.astro"
---
import HighlightBox from '../../components/markdown/HighlightBox.astro';
# 提供服务 🛠️
# 我能做什么 🚀
<HighlightBox type="tip" title="服务理念">
用优雅的代码和创新的思维,为复杂问题打造精致的解决方案
<HighlightBox type="tip">
构建 AI 驱动产品,将雄心勃勃的想法变为现实
</HighlightBox>
## 网站开发 🌐
## AI 产品开发 🤖
- 使用最新技术构建响应式现代网站
- 创建根据您特定需求定制的网络应用程序
- 使用 React、Vue.js 或 Angular 实现前端界面
- 使用 Node.js、Express、Django 或 Flask 开发后端系统
- 优化网站性能和用户体验
- 从概念到上线构建 AI 驱动产品
- RAG 应用、AI Agent 和智能自动化
- 使用现代技术栈的全栈开发React、Next.js、Node.js
- 产品思维 - 专注于解决实际问题
- 快速原型和迭代开发
## APP 开发 📱
## 技术咨询 📊
- 使用 React Native 或 Flutter 开发跨平台移动应用
- 创建原生 iOS 和 Android 应用
- 构建渐进式网络应用PWAs提供类似移动应用的网页体验
- 实现离线功能和推送通知
- 集成设备功能如摄像头、GPS 和传感器
<HighlightBox type="info" title="我可以如何帮助">
## 微信小程序开发 💬
- 为企业设计和开发微信小程序
- 创建交互性强且引人入胜的用户界面
- 实现微信支付和其他微信 API
- 针对微信生态系统和要求进行优化
- 构建特定于您业务需求的自定义功能
## UI设计 🎨
- 创建现代、简洁、直观的用户界面
- 设计适用于所有设备的响应式布局
- 开发品牌标识和视觉语言
- 创建线框图、原型和高保真模型
- 实现设计系统,确保一致的用户体验
## BUg 修复 🐛
<HighlightBox type="error" title="Bug修复与代码优化">
- 识别和解决现有应用程序中的问题
- 调试前端和后端系统中的复杂问题
- 优化代码以提高性能和可靠性
- 将旧代码重构为现代标准
- 实施自动化测试以防止未来出现错误
- 技术架构和技术栈决策
- 代码审查和最佳实践实施
- 团队指导和知识转移
- 性能优化和扩展策略
- 投资技术尽职调查
</HighlightBox>
## 注意事项 📝
# 一起构建 💼
<HighlightBox type="warning" title="合作前须知">
为了减少不必要的麻烦,请在沟通之前仔细阅读以下注意事项:
<HighlightBox type="success" title="联系我">
我始终对讨论新项目和机会持开放态度。无论你是正在寻找技术合伙人、需要帮助构建 AI 产品,还是想要技术咨询 - 让我们聊聊。
1. 请提供详细的需求说明,有原型图或设计稿更佳(如果你不了解这些也没关系,我这边可以帮你整理)。
2. 请提供项目完成时间,开发周期。
3. 一般情况下只接商单,其他形式的合作需要另行协商。
4. 暂时无法提供开票服务。
5. 项目完成后可免费维护3个月。
</HighlightBox>
## 合作步骤 🤝
<HighlightBox type="info" title="合作流程">
1. 确定合作项目
2. 确定合作方式
3. 确定项目功能需求
4. 确定开发周期以及交付时间
5. 确定项目设计图或原型图
6. 支付费用
7. 项目开发
8. 项目测试
9. 项目上线
10. 项目维护
</HighlightBox>
## 付款方式 💰
<HighlightBox type="success" title="支付方式">
- 微信支付
- 支付宝支付
- 银行转账
**注所有项目费用均为442付款制**
</HighlightBox>
## 联系方式 📞
<HighlightBox type="info" title="联系我">
- QQ: **2770723534**
- 微信:**JoyCodeing**
- 邮箱:**zhaoguiyang18@gmail.com**
</HighlightBox>
- 查看我的[合作](/zh/hire)页面了解合作方式
</HighlightBox>