diff --git a/src/components/GlassHeader.tsx b/src/components/GlassHeader.tsx index 7c17a5e..2697e09 100644 --- a/src/components/GlassHeader.tsx +++ b/src/components/GlassHeader.tsx @@ -5,7 +5,7 @@ import Container from "./ui/Container.tsx"; import { useTranslations, getLocalizedPath } from "@/i18n/utils"; import type { Lang } from "@/types/i18n"; import { useState, useEffect } from "react"; -import { Menu, X, Home, Rocket, PenTool, Zap, User, Wrench, Mail } from "lucide-react"; +import { Menu, X, Home, Rocket, PenTool, User, Briefcase, Mail } from "lucide-react"; import { defaultLang } from "@/i18n/ui"; import { type GlassHeaderProps } from "@/types"; import { motion } from "framer-motion"; @@ -40,11 +40,10 @@ export default function GlassHeader({ lang: propLang }: GlassHeaderProps) { const navItems = [ { key: 'nav.home', icon: Home, href: getLocalizedPath('/', lang) }, - { key: 'nav.about', icon: User, href: getLocalizedPath('/about', lang) }, { key: 'nav.projects', icon: Rocket, href: getLocalizedPath('/projects', lang) }, { key: 'nav.blog', icon: PenTool, href: getLocalizedPath('/blog', lang) }, - { key: 'nav.now', icon: Zap, href: getLocalizedPath('/now', lang) }, - { key: 'nav.uses', icon: Wrench, href: getLocalizedPath('/uses', lang) }, + { key: 'nav.about', icon: User, href: getLocalizedPath('/about', lang) }, + { key: 'nav.hire', icon: Briefcase, href: getLocalizedPath('/hire', lang) }, { key: 'nav.contact', icon: Mail, href: getLocalizedPath('/contact', lang) }, ]; diff --git a/src/i18n/translations.ts b/src/i18n/translations.ts index b0b702e..c5e8c92 100644 --- a/src/i18n/translations.ts +++ b/src/i18n/translations.ts @@ -11,13 +11,14 @@ export const translations = { about: 'About', projects: 'Projects', blog: 'Blog', + hire: 'Hire', uses: 'Uses', contact: 'Contact', now: 'Now', }, site: { - title: 'Joey Zhao - Senior Frontend Engineer', - description: 'Senior Frontend Engineer building complex systems and AI-assisted products', + title: 'Joey Zhao - Full-stack Engineer', + description: 'Full-stack Engineer for custom development, outsourcing projects, and reliable delivery', }, hero: { greeting: "Hello, I'm", @@ -197,13 +198,14 @@ export const translations = { about: '关于', projects: '项目', blog: '博客', + hire: '合作', uses: '工具', contact: '联系', now: '现在', }, site: { - title: 'Joey Zhao - 资深前端工程师', - description: '专注复杂系统与 AI 协作工程实践的资深前端工程师', + title: 'Joey Zhao - 全栈工程师', + description: '承接定制开发、项目外包与高质量交付的全栈工程师', }, hero: { greeting: '你好,我是', diff --git a/src/lib/data/personal-info.ts b/src/lib/data/personal-info.ts index 9e385d3..416bbbb 100644 --- a/src/lib/data/personal-info.ts +++ b/src/lib/data/personal-info.ts @@ -10,12 +10,12 @@ export const personalInfo: PersonalInfo = { website: 'https://zhaoguiyang.com', twitter: 'https://twitter.com/zhaoguiyang', position: { - en: 'Senior Frontend Engineer · Full-stack Developer', - zh: '资深前端工程师 · 全栈开发者', + en: 'Full-stack Engineer', + zh: '全栈工程师', }, description: { - en: '8 years building enterprise systems, financial platforms, and blockchain infrastructure. Focused on frontend architecture, complex system design, and AI-assisted engineering workflows.', - zh: '8 年企业系统、金融平台与区块链基础设施研发经验,专注前端架构、复杂系统设计与 AI 协作工程化实践。', + en: '8 years building enterprise systems, financial platforms, and blockchain infrastructure. Available for custom development, outsourcing projects, bug fixing, and long-term remote collaboration.', + zh: '8 年企业系统、金融平台与区块链基础设施研发经验,可承接定制开发、项目外包、Bug 修复与长期远程合作。', }, about: { en: [ diff --git a/src/pages/about.astro b/src/pages/about.astro index d54b52a..0cb0ef8 100644 --- a/src/pages/about.astro +++ b/src/pages/about.astro @@ -3,12 +3,13 @@ import Layout from '@/layouts/Layout.astro'; import GlassHeader from '@/components/GlassHeader'; import Footer from '@/components/Footer'; import Container from '@/components/ui/Container.astro'; -import { personalInfo } from '@/lib/data'; +import { personalInfo, uses, contactMethods } from '@/lib/data'; import type { Lang } from '@/types/i18n'; import { defaultLang } from '@/i18n/ui'; const lang = (Astro.currentLocale as Lang) || defaultLang; const isZh = lang === 'zh'; +const prefix = isZh ? '/zh' : ''; const focusAreas = isZh ? ['前端架构设计与模块治理', '大型企业应用工程化交付', '金融与区块链系统前端建设', 'AI 协作开发流程实践'] @@ -25,6 +26,10 @@ const experienceNotes = isZh 'Contributed to government- and fintech-related systems, including trading platforms, blockchain infrastructure, and industrial management systems.', 'Strong in cross-functional collaboration and remote async execution with long-term maintainability in mind.', ]; + +const workStyle = isZh + ? ['远程优先、异步协作为主,关键节点同步决策', '强调可维护架构与稳定交付节奏', '文档化需求与边界,降低沟通与返工成本'] + : ['Remote-first and async-friendly collaboration with sync checkpoints', 'Maintainable architecture and stable delivery cadence', 'Documented requirements and boundaries to reduce rework']; --- @@ -32,37 +37,85 @@ const experienceNotes = isZh
-
+
+ +

{isZh ? '关于我' : 'About'}

{personalInfo.description[lang]}

-
-
-

{isZh ? '背景' : 'Background'}

-
- {personalInfo.about[lang].map((line) =>

{line}

)} -
-
- -
-

{isZh ? '技术焦点' : 'Technical Focus'}

-
    - {focusAreas.map((item) => ( -
  • {item}
  • - ))} -
-
-
- -
+

{isZh ? '经验概览' : 'Experience'}

-
    +
    + {personalInfo.about[lang].map((line) =>

    {line}

    )} +
    +
      {experienceNotes.map((item) => (
    • {item}
    • ))}
+ +
+

{isZh ? '技术焦点' : 'Technical Focus'}

+
    + {focusAreas.map((item) => ( +
  • {item}
  • + ))} +
+
+ +
+

{isZh ? '工具与工作流' : 'Uses'}

+
+ {uses.map((group) => ( +
+

{group.title[lang]}

+
    + {group.items.map((item) =>
  • • {item}
  • )} +
+
+ ))} +
+
+ +
+

{isZh ? '工作方式' : 'Work Style'}

+
    + {workStyle.map((item) => ( +
  • {item}
  • + ))} +
+
+ +
+

{isZh ? '联系(简版)' : 'Contact Brief'}

+

{isZh ? '优先沟通远程岗位机会,其次为项目合作咨询。' : 'Remote role opportunities are prioritized, followed by project collaboration.'}

+ +
    + {contactMethods.slice(0, 2).map((method) => ( +
  • + {method.label[lang]} + {method.href ? ( + {method.value} + ) : ( + {method.value} + )} +
  • + ))} +
+ + +
diff --git a/src/pages/contact.astro b/src/pages/contact.astro index ad30db4..b194149 100644 --- a/src/pages/contact.astro +++ b/src/pages/contact.astro @@ -23,6 +23,12 @@ const isZh = lang === 'zh'; ? '欢迎联系我沟通远程岗位或项目合作。默认优先响应远程岗位机会。' : 'Open to remote role opportunities and project collaboration. Remote role discussions are prioritized.'}

+

+ {isZh ? '想先了解合作方式与付款方式?请查看' : 'Want details on collaboration and payment terms first? Visit'} + {' '} + {isZh ? '合作页面' : 'Hire page'} + 。 +

@@ -55,6 +61,17 @@ const isZh = lang === 'zh'; : 'Suggestion: include role/project context, expected collaboration model, and timeline in your first message.'}

+ +
+

{isZh ? '需求信息模板' : 'Request Template'}

+ +
diff --git a/src/pages/hire.astro b/src/pages/hire.astro index 06f4dd1..9a8431d 100644 --- a/src/pages/hire.astro +++ b/src/pages/hire.astro @@ -1,3 +1,178 @@ --- -return Astro.redirect('/contact', 301); +import Layout from '@/layouts/Layout.astro'; +import GlassHeader from '@/components/GlassHeader'; +import Footer from '@/components/Footer'; +import Container from '@/components/ui/Container.astro'; +import type { Lang } from '@/types/i18n'; +import { defaultLang } from '@/i18n/ui'; + +const lang = (Astro.currentLocale as Lang) || defaultLang; +const isZh = lang === 'zh'; + +const models = isZh + ? [ + { + title: '远程岗位合作', + desc: '适合长期加入团队,以资深前端/全栈角色参与核心产品建设。', + }, + { + title: '项目制交付', + desc: '适合目标明确的系统建设、重构与性能优化项目,按阶段交付。', + }, + { + title: '技术咨询/顾问', + desc: '适合架构评审、工程治理、复杂问题诊断与实施建议。', + }, + ] + : [ + { + title: 'Remote Role', + desc: 'Long-term collaboration as a senior frontend/full-stack engineer on core products.', + }, + { + title: 'Project Delivery', + desc: 'Milestone-based delivery for scoped system builds, refactors, and performance optimization.', + }, + { + title: 'Technical Consulting', + desc: 'Architecture reviews, engineering governance, complex issue diagnosis, and execution guidance.', + }, + ]; + +const paymentOptions = isZh + ? ['里程碑付款(推荐)', '月度结算(长期合作)', '咨询按小时或按天计费'] + : ['Milestone-based payments (recommended)', 'Monthly settlement (for long-term collaboration)', 'Hourly or daily consulting billing']; + +const startingPackages = isZh + ? [ + 'Bug 修复:¥800 起(按问题复杂度评估)', + '小型定制页面/落地页:¥3000 起', + '后台模块开发:¥6000 起(按里程碑)', + ] + : [ + 'Bug fixing: from $120 (scoped by issue complexity)', + 'Small custom page/landing page: from $450', + 'Admin module delivery: from $850 (milestone-based)', + ]; + +const process = isZh + ? ['需求沟通与目标确认', '方案评估与范围定义', '里程碑排期与执行', '阶段验收与交付总结'] + : ['Discovery and goal alignment', 'Solution assessment and scope definition', 'Milestone planning and execution', 'Stage acceptance and delivery summary']; + +const boundaries = isZh + ? [ + '默认不承接违法或高风险灰色业务。', + '需求变更超出范围时,会先同步影响与补充报价。', + '交付文档、代码与协作记录会保持透明可追踪。', + ] + : [ + 'No illegal or high-risk gray-area business engagements.', + 'Out-of-scope changes are assessed first with impact and updated pricing.', + 'Delivery docs, code, and collaboration records remain transparent and traceable.', + ]; + +const faqItems = isZh + ? [ + { q: '多久回复?', a: '默认 24 小时内给出初步回复,紧急问题可优先处理。' }, + { q: '如何开始合作?', a: '先在联系页提交背景与目标,我会给出范围评估与合作建议。' }, + { q: '需求变更多怎么办?', a: '超出原范围会先同步影响、排期和补充报价,再继续执行。' }, + ] + : [ + { q: 'Response time?', a: 'Initial response is usually within 24 hours, with priority handling for urgent issues.' }, + { q: 'How do we start?', a: 'Submit your context and goals on the contact page, then I provide scope assessment and recommendations.' }, + { q: 'What about scope changes?', a: 'Out-of-scope changes are reviewed with impact and revised pricing before execution.' }, + ]; --- + + + + +
+ +
+

{isZh ? '合作方式' : 'Work With Me'}

+

+ {isZh + ? '这个页面用于明确合作方式、付款方式、交付流程与边界,方便你快速判断是否匹配。' + : 'This page outlines collaboration models, payment methods, delivery process, and boundaries to quickly assess fit.'} +

+
+ +
+

{isZh ? '合作方式' : 'Collaboration Models'}

+
+ {models.map((model) => ( +
+

{model.title}

+

{model.desc}

+
+ ))} +
+
+ +
+
+

{isZh ? '付款方式' : 'Payment Terms'}

+
    + {paymentOptions.map((item) =>
  • • {item}
  • )} +
+
+ +
+

{isZh ? '交付流程' : 'Delivery Process'}

+
    + {process.map((item) =>
  1. {item}
  2. )} +
+
+
+ +
+

{isZh ? '参考起步价' : 'Starting Packages'}

+
    + {startingPackages.map((item) =>
  • • {item}
  • )} +
+

+ {isZh ? '说明:最终报价会根据需求复杂度、时间窗口与交付范围确认。' : 'Note: final pricing depends on complexity, timeline, and agreed delivery scope.'} +

+
+ +
+

{isZh ? '合作边界与说明' : 'Engagement Boundaries'}

+
    + {boundaries.map((item) =>
  • • {item}
  • )} +
+
+ +
+

{isZh ? '常见问题' : 'FAQ'}

+
+ {faqItems.map((item) => ( +
+

{item.q}

+

{item.a}

+
+ ))} +
+
+ +
+

{isZh ? '下一步' : 'Next Step'}

+

+ {isZh + ? '如果你已经有明确岗位或项目需求,请进入联系页提交背景、目标、时间与预算信息。' + : 'If you already have a role or project in mind, continue to the contact page with context, goals, timeline, and budget.'} +

+ +
+
+
+ +