{
  "name": "imba97 Blog",
  "title": "imba97 Blog · 前端工程 效率工具 独立开发 与折腾记录",
  "alternateNames": [
    "imba97",
    "imba久期"
  ],
  "url": "https://imba97.com",
  "description": "imba97 的个人技术博客，长期记录前端工程实践、效率工具与开源折腾：从 Vite SSG 重构、包体积优化、Node 脚本自动化，到自建服务、踩坑复盘与阶段性思考。每篇文章尽量给出可直接复用的结论、命令与代码，也保留失败尝试和判断依据，方便读者与 AI 检索时快速定位可信答案。",
  "language": "zh-CN",
  "author": {
    "name": "imba97",
    "url": "https://imba97.com/about",
    "email": "mail@imba97.cn",
    "sameAs": [
      "https://github.com/imba97",
      "https://space.bilibili.com/2198461",
      "https://steamcommunity.com/id/imba97"
    ]
  },
  "contact": {
    "email": "mail@imba97.cn",
    "url": "https://imba97.com/about"
  },
  "topics": [
    "前端工程",
    "Vite",
    "Node.js",
    "效率工具",
    "开源折腾",
    "个人博客",
    "生活随笔"
  ],
  "stats": {
    "posts": 146,
    "latestPostDate": "2026-10-26 09:20:23",
    "generatedAt": "2026-10-30T15:51:13.685Z"
  },
  "pages": [
    {
      "url": "https://imba97.com/",
      "description": "首页：最新文章列表与站点入口"
    },
    {
      "url": "https://imba97.com/about",
      "description": "关于站长：技术背景、正在折腾的项目与联系方式"
    },
    {
      "url": "https://imba97.com/links",
      "description": "友情链接：一起折腾前端、开源与自建服务的朋友"
    },
    {
      "url": "https://imba97.com/archives",
      "description": "文章归档：按时间浏览全部文章"
    },
    {
      "url": "https://imba97.com/faq",
      "description": "常见问题：关于内容、技术栈、转载与联系方式的问答"
    }
  ],
  "feeds": {
    "rss": "https://imba97.com/feed.xml",
    "llms": "https://imba97.com/llms.txt",
    "llmsFull": "https://imba97.com/llms-full.txt",
    "sitemap": "https://imba97.com/sitemap.xml",
    "summary": "https://imba97.com/summary.json"
  },
  "faq": [
    {
      "question": "这个博客主要写什么内容？",
      "answer": "以中文为主，集中在三块：一是前端工程实践，包括构建、SSG、包体积与性能优化；二是效率工具与自动化脚本，例如 Node 脚本、GitHub Actions 和自建服务；三是个人生活与职业复盘，例如数字游民报告、年度总结。文章尽量给出可直接复用的命令、代码与结论。"
    },
    {
      "question": "网站是用什么技术搭建的？",
      "answer": "基于 Vue 3 + Vite + vite-ssg 构建的静态站点，文章以 Markdown 编写、构建时预渲染成 HTML，搜索使用本地 wasm 索引，评论通过 Twikoo 接入。完整的技术演进过程写在《Hexo 迁移至 Vite SSG》一文里。"
    },
    {
      "question": "文章可以转载吗？",
      "answer": "可以转载，但请保留原文链接与作者署名，不要用于商业培训或二次售卖。如果要引用其中的代码片段，注明出处即可，不需要单独申请授权。"
    },
    {
      "question": "怎么联系博主？",
      "answer": "可以直接发邮件到 mail@imba97.cn，也可以在 GitHub（github.com/imba97）或 Bilibili 上留言。邮件回复通常比社交平台更快，合作类邮件请说明来意与时间预期。"
    },
    {
      "question": "有没有适合 AI 或订阅工具抓取的入口？",
      "answer": "有。站点提供 RSS（/feed.xml）、面向语言模型的 llms.txt 与 llms-full.txt、结构化站点清单 summary.json，以及带 lastmod 的 sitemap.xml。所有文章页都有 JSON-LD 结构化数据，便于检索与引用。"
    }
  ],
  "recentPosts": [
    {
      "id": "820",
      "title": "为什么 AI 很快，我们却说不清自己的业务",
      "url": "https://imba97.com/post/820",
      "date": "2026-10-26 09:20:23",
      "description": "AI 能在几天内搭出一套能跑的业务系统，但过几天再打开项目，很多人已经找不到某个功能在哪。这篇文章把过程拆成两层：AI 只负责把宏观业务展开成页面、接口、状态和异常分支，缺少收拢；人保留了需求记忆，却丢掉了实现记忆。作者把这笔账叫知识负债，并给出补齐的办法。"
    },
    {
      "id": "819",
      "title": "为什么 AI 很强，普通人还是做不好专业产品",
      "url": "https://imba97.com/post/819",
      "date": "2026-10-20 13:31:20",
      "description": "AI 能写代码、搭页面，也能根据几句话生成一套看起来完整的业务系统，但使用者常觉得能力割裂。文章把原因归到认知：专业术语是一套知识压缩协议，缺少背景的人不知道该描述哪些约束；更深的障碍是元认知，连自己缺哪类信息都没意识到。文中用餐饮对账页面的例子说明差距从哪来。"
    },
    {
      "id": "818",
      "title": "写了个浏览器插件 Offer Hunter",
      "url": "https://imba97.com/post/818",
      "date": "2026-09-29 20:13:21",
      "description": "找工作时要一页页翻 JD、逐条评估匹配度，再手写打招呼语，效率很低。Offer Hunter 是一个浏览器插件：读取你的简历与工作简介，用 AI 给招聘信息打匹配度，并针对具体岗位生成打招呼语。目前支持 BOSS 直聘、电鸭社区和 V2EX，已上架 Chrome 应用商店并开源。"
    },
    {
      "id": "817",
      "title": "我该怎么度过一生？",
      "url": "https://imba97.com/post/817",
      "date": "2026-09-17 10:41:32",
      "description": "二十九岁从成都离职，正好卡在三十岁前这个节点上，我决定先不找下一份工作，而是去骑 318 国道。这篇文章是那段空白期的记录：从成都经雅安、康定、理塘到巴塘的沿途，以及路上反复想起的那个问题——我该怎么度过一生。没有标准答案，只有当时留下的判断依据。"
    },
    {
      "id": "816",
      "title": "五年内的前端会变成什么？",
      "url": "https://imba97.com/post/816",
      "date": "2026-06-24 02:44:33",
      "description": "大多数应用的 AI 入口只是把预制组件搬出来：用户说想改手机号，它先给一段文档，再引导你去常规页面。这篇文章提出另一种做法——把应用能力封装给 AI，让 AI 按精准意图实时生成现炒组件，并给出 Triggerix 的实现思路。作者认为这决定了五年内前端的形态。"
    },
    {
      "id": "815",
      "title": "markdown-it 链接扩展插件",
      "url": "https://imba97.com/post/815",
      "date": "2026-05-31 22:09:54",
      "description": "博客里的文章互链一直是硬编码，标题或路径一变就得全站手改。这篇记录了 markdown-it-extra-link 的由来：一个 markdown-it 链接扩展插件，用 {link:post:814} 这种写法引用站内文章，构建时自动解析成标题与正式链接；另一个扩展处理 GitHub 仓库链接。"
    },
    {
      "id": "814",
      "title": "Hexo 迁移至 Vite SSG",
      "url": "https://imba97.com/post/814",
      "date": "2026-05-21 23:00:45",
      "description": "用了六年的 Hexo 博客迁到 Vite SSG：起因是部署体验差、主题不向后兼容、两台电脑打包结果不一致。新方案基于 Vite + Vue 3，可以直接在 Markdown 里写 Vue 组件，再补上评论、搜索、图片 CDN 等能力。这篇记录了迁移过程、踩到的问题，以及为什么值得折腾这一趟。"
    },
    {
      "id": "813",
      "title": "从体积焦虑到按需加载",
      "url": "https://imba97.com/post/813",
      "date": "2026-05-10 09:12:52",
      "description": "中文字体全量打包动辄十几 MB，子集化能把体积压到几十 KB，但落地时还有多字重、文案变更、CDN 分发三个绕不开的问题。charbi-font 覆盖了从扫描源码、提取真实字符、本地缓存字体到上传云存储的完整链路，支持 woff/woff2/ttf 与多字重合并。文中给出了实测压缩数据。"
    },
    {
      "id": "811",
      "title": "写了个从夯到拉排行榜组件",
      "url": "https://imba97.com/post/811",
      "date": "2026-02-08 10:28:35",
      "description": "起因只是喝完瑞幸新品想跟朋友列个榜单，于是做了个从夯到拉的网页，顺手封装成组件 h2l-ranking。支持拖动排序、分组与自定义档位文案，可以嵌进任意 Vue 页面，体验地址和源码都在文中。代码量不大，适合想找个小项目练手，或者想要同款榜单的人。"
    },
    {
      "id": "810",
      "title": "追寻自我的 2025",
      "url": "https://imba97.com/post/810",
      "date": "2025-12-31 23:59:59",
      "description": "又到年度总结。2025 年的一句话是反者道之动，弱者道之用：这一年去了大连、昆明、大理，回老家陪奶奶住了一个月，又从上海到杭州找工作，最后落脚成都。文章按心理、程序、影音、文字四块复盘，也写了 2026 年的目标，以及几张舍不得删的年度照片。"
    },
    {
      "id": "809",
      "title": "不要只给 AI 软的，也要给硬的",
      "url": "https://imba97.com/post/809",
      "date": "2025-11-18 22:21:07",
      "description": "接手两个十年以上的老项目后，我重新理解了「给 AI 写文档」这件事。文档是软的，自然语言、灵活但含糊；代码是硬的，形式语言、严谨但难改。AI 只拿着软的部分去改硬的部分，就会在混乱的代码里修一个坏一个。文章讲怎么用类型、测试和边界这些硬约束，把 AI 的注意力圈住。"
    },
    {
      "id": "808",
      "title": "组了个 QNAS MINI",
      "url": "https://imba97.com/post/808",
      "date": "2025-10-14 22:17:38",
      "description": "QNAS MINI 是一台 2.5 寸六盘位 NAS，我用 3D 打印外壳、畅网 N355 主板、32G 内存和 ASM1166 扩展卡拼了一台。系统装飞牛，相册和影音开箱即用，再叠一层 Cloudflare Tunnel 做内网穿透。文中列了完整硬件清单、拼装时踩的坑，以及家里的网络拓扑。"
    },
    {
      "id": "806",
      "title": "公司报销全凭本事",
      "url": "https://imba97.com/post/806",
      "date": "2025-08-29 23:33:47",
      "description": "公司买东西流程慢，冰箱等了一个多月才批下来，想要的小家电基本没戏。于是我换了个思路：先自己买，再凭本事报销。这篇讲制冰机是怎么落地办公室的、报销方案怎么设计得让人没法反驳，以及后来怎么把同事和朋友拉进来一起拍视频参与。顺便聊聊这套做法能复制到哪些场景。"
    },
    {
      "id": "805",
      "title": "两年 AI 使用感悟",
      "url": "https://imba97.com/post/805",
      "date": "2025-07-12 11:47:47",
      "description": "付费两年 GitHub Copilot，从 Ask、Edit 用到 Agent 模式，最大的感受是它越来越顺手，但两个毛病一直没变：上下文会遗忘，专注力会被打断。文章给出针对性的改进办法：用项目级知识库补记忆、用规则文件约束行为、把任务拆成可验收的流水线，并附上实际使用中的取舍。"
    },
    {
      "id": "804",
      "title": "我入职了老东家的母公司",
      "url": "https://imba97.com/post/804",
      "date": "2025-06-19 22:05:02",
      "description": "离开老东家做了一年数字游民，最近又入职了它的全资母公司。老东家做餐饮系统，我主要负责点餐屏与蓝牙打印机、电子秤、客显屏等硬件的交互。这篇记录了面试里两次想放弃的瞬间、薪资与地点之间的权衡，以及为什么被认可比多拿一点钱更重要。也写了入职第一天的琐碎感受。"
    },
    {
      "id": "803",
      "title": "数字游民报告",
      "url": "https://imba97.com/post/803",
      "date": "2025-05-30 23:34:18",
      "description": "一年前我向大家提交了 《辞职报告》，给自己了一年的时间，探索数字游民的生活方式 这篇文章来总结一下这一年我都干了什么 2024 年 6 月 30 日，上完了最后一天班，我就开始了自己 《久违的暑假》 因为有文章了，这里就不赘述了 考虑到之后要找远程工作，那么最好有个个人网站来专门展示自己的技能和项目 于是就有了 imb"
    },
    {
      "id": "802",
      "title": "PicGo 插件项目重构",
      "url": "https://imba97.com/post/802",
      "date": "2025-05-11 23:13:45",
      "description": "这是一个四年前的项目，当时发现 PicGo 没有我需要的 FTP 上传插件，于是自己写了一个 最开始用的官方提供的插件模板，这是重构前的代码 imba97/picgo-plugin-ftp-uploader/003b4e 前端技术发展迅猛，积累了四年的前端知识，让我有了重构的想法 我当前开发前端库主要用以下技术 - T"
    },
    {
      "id": "801",
      "title": "让 HR 直接跟我的 AI 聊",
      "url": "https://imba97.com/post/801",
      "date": "2025-04-26 20:40:18",
      "description": "做了个求职偷懒 AI，基于我的简历数据的聊天，目前感觉有不少场景都可以用上 - 比如直接发给 HR - 比如直接复制工作要求让 AI 给出匹配程度 - 可以自己跟 AI 聊聊，学习参考 AI 的回答技巧 AI 是 DeepSeek，并使用了 one-api，直接用 Docker 跑起来 它可以整合各种 AI 接口，统一"
    },
    {
      "id": "800",
      "title": "initx v0.1.0 发布",
      "url": "https://imba97.com/post/800",
      "date": "2025-04-08 22:39:17",
      "description": "initx 是一个免安装的脚本引擎，可以使用 npx 执行，通过 插件实现各种功能 初期设计了匹配器和插件的核心逻辑 简单且强大的匹配器来匹配用户输入指令，后来单独抽离成了一个项目 matchinitx initx 可以免安装运行，但你需要全局安装各种插件，这显然是不合理的 虽然有一个插件管理器 @initx-plug"
    },
    {
      "id": "799",
      "title": "在个人简介同步正在玩的 Steam 游戏",
      "url": "https://imba97.com/post/799",
      "date": "2025-03-13 23:24:48",
      "description": "之前写过一个同步我当前正在听的音乐，大概长这样 尝试把当前正在玩的 Steam 游戏展示到个人简介中 于是去看了一下 Steam API，发现还真行，效果是这样的 开源：imba97/me 为了方便调用，简单封装了一下用到的 Steam API 你可以直接使用 steam-playing-game 的 getUserP"
    }
  ]
}
