diff --git a/app/composables/NavLinks.ts b/app/composables/NavLinks.ts index 44c989f..8876bcc 100644 --- a/app/composables/NavLinks.ts +++ b/app/composables/NavLinks.ts @@ -80,6 +80,14 @@ export const useNavLinks = () => { }, ], }, + {label: t("common.header.teams.label"), + icon: "mdi:account-group-outline", + children: [{ + label: t("common.header.teams.children.xiaomai.label"), + description: t("common.header.teams.children.xiaomai.description"), + to: '/about/xiaomai' + }] + } ]); return navLinks; diff --git a/app/pages/about/[slug].vue b/app/pages/about/[slug].vue new file mode 100644 index 0000000..c565ffe --- /dev/null +++ b/app/pages/about/[slug].vue @@ -0,0 +1,49 @@ + + + + + diff --git a/app/pages/index.vue b/app/pages/index.vue index b912771..0ee7a63 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -71,14 +71,14 @@ diff --git a/app/utils/clipboard.ts b/app/utils/clipboard.ts new file mode 100644 index 0000000..1e6a4d2 --- /dev/null +++ b/app/utils/clipboard.ts @@ -0,0 +1,13 @@ +export function copyToClipboard( + toCopy: string, + message: string = "Copied to clipboard" +) { + const toast = useToast(); + navigator.clipboard.writeText(toCopy).then(() => { + toast.add({ + title: message, + color: "success", + icon: "i-lucide-check-circle", + }); + }); +} diff --git a/content.config.ts b/content.config.ts index 91aa2b3..064f9c9 100644 --- a/content.config.ts +++ b/content.config.ts @@ -50,9 +50,7 @@ const defineWebDevSchema = () => label: z.string().min(1), icon: z.string().optional(), // 比如 "lucide:mouse-pointer-click" // 你原结构里通过 createService 包装,但最终是一个对象 - plans: z - .array(PricingPlanPropsSchema) - .min(1), + plans: z.array(PricingPlanPropsSchema).min(1), // 预留扩展字段(例如:category、tags、hidden 等) category: z.string().optional(), tags: z.array(z.string()).optional(), @@ -82,5 +80,10 @@ export default defineContentConfig({ source: "zh-CN/webDev.yml", schema: defineWebDevSchema(), }), + about: defineCollection({ + type: "page", + source: "about/*.md", + schema: z.object({}), + }), }, }); diff --git a/content/about/xiaomai.md b/content/about/xiaomai.md new file mode 100644 index 0000000..e1efd78 --- /dev/null +++ b/content/about/xiaomai.md @@ -0,0 +1,138 @@ +--- +name: 小麦(Xiaomai) +title: 游戏开发者 | 前后端开发者 | 工作室创办人 +location: 马来西亚,柔佛 +email: xsbugh@gmail.com +website: https://github.com/kingsmai +education: + university: 武汉工商学院 + major: 计算机科学与技术 + gpa: 3.93/4.0 + period: 2019年9月 - 2024年8月 + rank: 专业排名 8/303 + scholarship: 四年全额奖学金获得者 +awards: + - 2021年全国高校商业精英挑战赛创新创业竞赛全国总决赛一等奖 + - 2021年"互联网+"大学生创新创业大赛湖北省复赛金奖 + - 马来西亚外交部志愿者贡献表彰(2022年) +skills: + - Unity 2D/3D 游戏开发 + - Godot 4 游戏开发 + - JavaWeb 后端开发 (SpringBoot) + - Web 前端开发 (Vue, Node.js, Webpack) + - Python 数据分析与自动化 + - SQLite, MySQL 数据库管理 + - Blender LowPoly 建模 + - 区块链开发与NFT技术 + - 自动化测试 (Selenium) + - AI与机器学习基础 +--- + +# 麦祖奕 - 工作室创办人介绍 + +## 个人简介 + +我是一名来自马来西亚的华裔游戏开发者,本科以优异成绩毕业于武汉工商学院计算机科学与技术专业。作为一名充满热情的技术创作者,我拥有丰富的全栈开发经验。 + +我的技术生涯始于对游戏开发的热爱,逐渐扩展到区块链技术、Web 全栈开发和自动化系统等多个领域。我相信技术应该服务于创意,致力于通过代码实现具有社会价值的创新项目。 + +**人生使命**:开发具有教育价值且在全球广受欢迎的角色扮演游戏,通过游戏传递知识、启发思考。 + +## 教育背景与学术成就 + +在武汉工商学院就读期间,我以 **3.93 的 GPA** 成绩位列专业前 3%(8/303),连续四年获得全额奖学金。系统学习了计算机科学的核心课程,包括数据结构、算法设计、软件工程、数据库原理等,为后续的技术实践奠定了坚实的理论基础。 + +## 专业技术能力 + +### 游戏开发专长 +- **Unity引擎开发者**:精通 2D 游戏开发,熟悉物理系统、动画系统、UI系统 +- **Godot引擎实践者**:掌握 Godot 4 及 GDScript,具备快速原型开发能力 +- **游戏架构设计**:熟练运用单例模式、工厂模式、观察者模式、对象池等设计模式 +- **AI系统实现**:掌握状态机、上下文转向寻路、行为树等AI技术 +- **数据持久化**:精通 SQLite 嵌入式数据库、PlayerPrefs 等存储方案 +- **安全加密**:实践 XOR 数据加密技术保护游戏数据 + +### 全栈开发能力 +- **后端开发**:SpringBoot, ASP .NET Core, PHP, Node.js, 数据库设计与优化 +- **前端开发**:Vue.js, Nuxt, Webpack, 响应式设计, 静态站点生成 +- **移动端开发**:Android 原生开发,跨平台适配 +- **自动化脚本**:Python + Selenium 自动化操作 + +### 其他技术技能 +- **区块链开发**:NFT 自动化交易开发,智能合约理解 +- **3D建模**:Blender LowPoly 建模,游戏资源制作 +- **数据分析**:Python 数据处理与可视化 +- **项目管理**:Git 版本控制,团队协作开发 + +## 代表性项目 + +### 🎮 《匠人英雄》- 2D生存类游戏(毕业设计) +**技术栈**: Unity, SQLite, Context Steering AI, Perlin Noise, 设计模式 + +作为大学毕业设计,我独立设计并开发了这款2D俯视角生存游戏。项目实现了: +- 基于 CSV 和 XOR 加密的游戏数据配置系统 +- 嵌入式 SQLite 数据库存档系统 +- 上下文转向 AI 寻路与 Perlin 噪声地图生成 +- 完整的设计模式应用架构 + +### 🔥 《光追》- 地牢冒险游戏(GameJam作品) +**技术栈**: Godot 4, 有限状态机, GDScript + +在 48 小时极限开发挑战中,我担任程序与策划,带领团队完成: +- 基于状态机的 AI 行为系统 +- 光影核心玩法机制设计 +- B站宣传片获得 700+ 观看量 +- 吸引 200+ 玩家参与测试 + +### 🌐 马来西亚赴华资料整合网站 +**技术栈**: Node.js, Webpack, GitHub Pages, JSON API + +疫情期间,我联合多所高校留学生发起并开发了这个信息整合平台: +- 3 天内完成从需求分析到部署上线的全流程 +- 自研基于 JSON 的静态页面 API 模拟框架 +- 帮助近 5000 名马来西亚留学生顺利返校 +- 获得马来西亚外交部官方认可 + +### 💰 慈善竞标大屏系统 +**技术栈**: Unity, 双屏显示, 实时动画 + +为慈善机构开发的商业化项目: +- 实时竞价数据显示与动画效果 +- 主控台与大屏幕的双屏协同 +- 在马来西亚多个组织中成功应用 + +## 工作与创业经历 + +### 马来西亚民主行动党 - 软件开发实习生 +**2022年2月-2022年9月** + +在实习期间,我承担了多项技术任务: +- 使用 Python 进行选举数据分析和可视化 +- 基于 SpringBoot + Vue 开发中大型数据管理系统 +- 实现 NFT 交易平台的自动化操作脚本 +- 协助多语言新闻稿的发布与传播 + +### 技术创业经历 +基于在游戏开发和 Web 全栈领域的技术积累,我具备从零到一的产品开发能力,能够带领团队完成技术选型、架构设计、开发实施和运营维护的全过程。 + +## 技术理念与愿景 + +### 开发哲学 +我相信优秀的技术产品应该具备三个特质:**用户体验优先**、**技术架构稳健**、**社会价值正向**。在每一个项目中,我都努力平衡技术创新与实际需求,确保代码质量与开发效率的最佳结合。 + +### 工作室愿景 +作为工作室创办人,我致力于: +1. 打造具有教育意义的精品游戏 +2. 探索游戏与新兴技术的结合点 +3. 培养年轻开发者的技术能力 +4. 通过技术解决方案创造社会价值 + +## 荣誉与认可 + +除了在学术和技术竞赛中获得的奖项外,我最珍视的认可是那些通过技术帮助他人的时刻。特别是在疫情期间开发的留学生返校网站,不仅获得了马来西亚外交部的正式表彰,更重要的是切实帮助了数千名学子重返校园。 + +我相信,技术的真正价值在于它能够为人们的生活带来积极的改变。作为一名技术创作者,这始终是我前进的动力和追求的目标。 + +--- + +*欢迎通过以上联系方式与我交流技术创意、项目合作或投资机会。我始终对新的技术挑战和具有社会价值的项目保持开放态度。* \ No newline at end of file diff --git a/i18n/locales/en-US/common.json b/i18n/locales/en-US/common.json index 6d1bcd3..b68de2a 100644 --- a/i18n/locales/en-US/common.json +++ b/i18n/locales/en-US/common.json @@ -51,6 +51,15 @@ "description": "Have a look at our indie games!" } } + }, + "teams": { + "label": "Teams", + "children": { + "xiaomai": { + "label": "Xiaomai", + "description": "Founder of Tootaio Studio - Full Stack Developer" + } + } } }, "button": { diff --git a/i18n/locales/zh-CN/common.json b/i18n/locales/zh-CN/common.json index ca809a9..7840b53 100644 --- a/i18n/locales/zh-CN/common.json +++ b/i18n/locales/zh-CN/common.json @@ -51,6 +51,15 @@ "description": "我们工作室创始人小麦的博客网站。" } } + }, + "teams": { + "label": "团队", + "children": { + "xiaomai": { + "label": "小麦", + "description": "Tootaio Studio 创始人 - 全栈开发者" + } + } } }, "button": { diff --git a/nuxt.config.ts b/nuxt.config.ts index da2bf1b..1cd31ec 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -13,8 +13,8 @@ export default defineNuxtConfig({ compatibilityDate: "2025-07-15", devtools: { enabled: process.env.NODE_ENV !== "production" }, modules: [ - "@nuxt/content", "@nuxt/ui", + "@nuxt/content", "@nuxt/eslint", "@nuxtjs/i18n", "@nuxtjs/seo", diff --git a/public/images/xiaomai.png b/public/images/xiaomai.png new file mode 100644 index 0000000..55712f4 Binary files /dev/null and b/public/images/xiaomai.png differ