8 Commits

Author SHA1 Message Date
湛兮 f7b529b1bd chore: move Jenkins pipeline config out of repo 2026-06-05 15:08:13 +08:00
湛兮 a2d02607a7 ci: harden production tag selection 2026-06-05 14:45:45 +08:00
湛兮 cf7b3ea6ac ci: add production tag pipeline 2026-06-05 14:38:31 +08:00
湛兮 f1529c70b9 chore: use npm lock for resume deploy 2026-06-05 12:44:16 +08:00
湛兮 2a9e6066c7 chore: add pnpm lock for resume deploy 2026-06-05 12:41:00 +08:00
湛兮 ecc39745d7 chore: split dev and production deployment env 2026-06-05 12:32:29 +08:00
湛兮 1d841fc1dd 测试 2026-06-04 22:42:11 +08:00
湛兮 416eb14d4e 测试 2026-06-04 22:37:33 +08:00
6 changed files with 4773 additions and 2979 deletions
+4750
View File
File diff suppressed because it is too large Load Diff
+2
View File
@@ -6,6 +6,8 @@
"scripts": { "scripts": {
"dev": "astro dev", "dev": "astro dev",
"build": "astro build", "build": "astro build",
"build:test": "PUBLIC_APP_ENV_LABEL=测试环境 astro build",
"build:prod": "PUBLIC_APP_ENV_LABEL=生产环境 astro build",
"preview": "astro preview" "preview": "astro preview"
}, },
"dependencies": { "dependencies": {
-2976
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -6,7 +6,7 @@ export const resume = {
profile: profile:
"7 年前端与跨端开发经验,长期负责 Web、App、H5、小程序与管理后台的架构设计、工程化建设和核心业务交付。熟悉 AI 产品工程、SSE 流式通信、Next.js/Vue/React Native 跨端体系、微前端和 Monorepo 协作模式。", "7 年前端与跨端开发经验,长期负责 Web、App、H5、小程序与管理后台的架构设计、工程化建设和核心业务交付。熟悉 AI 产品工程、SSE 流式通信、Next.js/Vue/React Native 跨端体系、微前端和 Monorepo 协作模式。",
basics: [ basics: [
{ label: "工作经验111", value: "7 年" }, { label: "工作经验", value: "7 年" },
{ label: "技术管理", value: "2+ 年" }, { label: "技术管理", value: "2+ 年" },
{ label: "项目用户规模", value: "千万级 MAU" }, { label: "项目用户规模", value: "千万级 MAU" },
{ label: "教育背景", value: "电子科技大学 本科" }, { label: "教育背景", value: "电子科技大学 本科" },
+4 -2
View File
@@ -3,6 +3,7 @@ import { resume, resumeEn } from "../data/resume";
import "../styles/global.css"; import "../styles/global.css";
const githubUrl = "https://github.com/zhanBoss"; const githubUrl = "https://github.com/zhanBoss";
const appEnvLabel = import.meta.env.PUBLIC_APP_ENV_LABEL || "生产环境";
const translations = { zh: resume, en: resumeEn }; const translations = { zh: resume, en: resumeEn };
const navIds = ["top", "proof", "skills", "projects", "experience", "contact"]; const navIds = ["top", "proof", "skills", "projects", "experience", "contact"];
const brandAssets = { const brandAssets = {
@@ -38,7 +39,7 @@ const labels = {
themeLight: "浅色", themeLight: "浅色",
themeDark: "深色", themeDark: "深色",
heroEyebrow: "Frontend Engineer · AI Product Systems · Cross-platform", heroEyebrow: "Frontend Engineer · AI Product Systems · Cross-platform",
heroTitle: "把复杂前端系统做成可交付的产品", heroTitle: "把复杂前端系统做成可交付的产品",
viewProjects: "查看项目案例", viewProjects: "查看项目案例",
profileAria: "候选人摘要", profileAria: "候选人摘要",
mapAria: "项目能力地图", mapAria: "项目能力地图",
@@ -63,7 +64,7 @@ const labels = {
domainsKicker: "Featured Domains", domainsKicker: "Featured Domains",
domainsTitle: "最近项目重点。", domainsTitle: "最近项目重点。",
contactKicker: "Contact", contactKicker: "Contact",
contactTitle: "可沟通前端开发工程师岗位", contactTitle: "可沟通前端开发工程师岗位",
sendEmail: "发送邮件", sendEmail: "发送邮件",
footer: "Built with Astro.", footer: "Built with Astro.",
}, },
@@ -143,6 +144,7 @@ const projectLogoFor = (id: string) => brandAssets.projects[id] ?? null;
<body> <body>
<div class="scroll-progress" id="scroll-progress"></div> <div class="scroll-progress" id="scroll-progress"></div>
<canvas class="ambient-canvas" id="ambient-canvas" aria-hidden="true"></canvas> <canvas class="ambient-canvas" id="ambient-canvas" aria-hidden="true"></canvas>
<div class="environment-badge" aria-label={`当前环境:${appEnvLabel}`}>{appEnvLabel}</div>
<header class="topbar"> <header class="topbar">
<a class="brand" href="#top" aria-label={`${displayNameFor(resume)} 简历首页`}> <a class="brand" href="#top" aria-label={`${displayNameFor(resume)} 简历首页`}>
+16
View File
@@ -101,6 +101,22 @@ a {
background: linear-gradient(90deg, var(--green), var(--blue), var(--amber)); background: linear-gradient(90deg, var(--green), var(--blue), var(--amber));
} }
.environment-badge {
position: fixed;
top: 72px;
right: 16px;
z-index: 61;
padding: 8px 10px;
color: #ffffff;
font-size: 12px;
font-weight: 750;
line-height: 1;
letter-spacing: 0;
background: rgba(20, 20, 24, 0.86);
border-radius: 999px;
box-shadow: 0 10px 24px rgba(0, 0, 0, 0.16);
}
.ambient-canvas { .ambient-canvas {
position: fixed; position: fixed;
inset: 0; inset: 0;