--- title: 我的静态博客动态化方案 date: '2026-05-20T00:00:00.000Z' slug: '202605202304' draft: false categories: - 技术 tags: [] author: 小赵 layout: post ai_comment: >- 从技术选型看,Next.js+Tailwind确实能提供流畅的本地写作体验,既保留静态博客的简洁性,又弥补了动态编辑的便利。GitHub API的速率限制问题很典型,你们的本地化方案是个优雅解法——直接读写Markdown文件既规避了网络依赖,又符合Hugo哲学。回收站设计体现工程思维,建议可扩展为自动备份到对象存储,兼顾容灾与serverless原则。 --- ## 碎碎念 前段时间,DeepSeek官方宣布发布了V4版本。在当下AI浪潮如火如荼的背景下,这倒也不算意外。我一直在用的Vibe coding方案是火山引擎的coding plan,主要因为用习惯了,所以一直续费着。但说实话,豆包的编码能力确实一般,一个需求往往要反复调整好几遍,有时候真的恨铁不成钢。 ## 友链 前几天五一假期,我逛了逛博友的网站,发现不少人的站点已经打不开了。为了避免跳转到黄色链接,我在这里做了隐藏处理,如果站点恢复,请在留言区告知即可。 ## 发现 前几天在浏览博友博客时,我发现了几个很有意思的文章,核心思路都是用静态博客实现一个后台,主要分为以下三个方案: 小十的博客 https://www.xiaoten.com/posts/2026/03/ai-build-hugo-cms——用AI为Hugo打造了博客文章发布平台; 东风博主的博客 https://easte.cc/posts/feishu-sync-bot-deploy ——飞书同步机器人,利用飞书提供的接口,将飞书文档同步到博客中,这个想法非常有趣; 小饿博主的博客 https://dongjunke.cn/posts/2026/05/05/50369.html ——我的独立博客,终于拥有了一个像样的后台。 经朋友推荐,我尝试使用了DeepSeek V4 Pro。DeepSeek的收费模式跟其他家有点不一样,主要是通过充值余额,直接消耗余额来使用,没有其他家所谓的coding plan。对于我这种使用频率较低的用户来说,还是很不错的。 我首先尝试了东风博主的思路,对接飞书,期间遇到了几个极其纠缠的问题,始终没能解决,只好放弃。接着试了小十的思路,通过接入GitHub API实现在线编辑博客,于是就有了我后台在线编辑器的第一版。 ![第一版后台管理系统](image.png) DeepSeek V4 Pro的表现还算不错,我提出的需求,基本一次两次就能实现我想要的效果。 但很快我又遇到一个新问题:这个方法非常依赖GitHub的API,频繁请求时会出现拒绝请求的情况。我暂时没有一个好的方法解决,我尝试通过edgeone的kv存储,缓存一些数据,从而减轻GitHub API的访问压力,但是我发现我大部分的时间都消耗在跟第三方平台进行对接上了。 其次就是GitHub在国内的访问速度一般,电信网络如果不接入代理,基本很难顺利访问,只有在代理环境下才能有较好的体验。 GitHub的API其中也有几个坑,不断搜资料也没找到我满意的解决方法。 一度冲动,甚至想直接切换到Typecho或WordPress。 不得不说动态博客真的舒服,可以省了好多事。 后面转变思路,于是,我开始尝试小饿博主的方案——通过Next.js实现一个本地写作平台。 这样就能从根源上减轻GitHub API的依赖了。 ## 技术选型 关于技术选型,我保持跟小饿博主一致,框架选了Next.js 16,样式用Tailwind CSS 4。 配色参考了森同学的主题配色,暖白纸色背景,深蓝文字,整体偏书卷气,看着不累。 森同学博客:https://oxxx.cn 数据存储方面,坚持serverless原则,我坚持不用数据库。 直接读写Hugo的Markdown文件,跟Hugo本身的哲学一致:简单、直接、可控。 整个项目放在博客根目录下的`/write`文件夹里,跟Hugo本身井水不犯河水。 端口映射到8016,就本地,也不打算映射到公网,不然又要去折腾那该死的GitHub API了。 ## 文章管理 这是最核心的模块。打开后台首页,所有文章以卡片列表展示,标题、日期、分类、发布状态一目了然。支持搜索和分页,每页20条。 ![](image-1.png) 点击标题直接进编辑页,不用到处找编辑按钮。hover会浮出预览、编辑、删除三个操作。 ![](image-2.png) 预览会自动启动Hugo dev server(如果没自己手动执行的话),在新标签页打开`localhost:1313`,也可以点击右上角的眼睛。 ![](image-3.png) 删除不会真删,进了回收站,保留30天,误删了还能捞回来。 这个主要是参考了小饿博主的idea。 ![](image-4.png) ## 撰写体验 新建文章时,Slug自动生成`YYYYMMDDHHmm`格式的数字时间戳,跟我之前文章的命名风格保持一致。 文件夹名则是`日期-中文标题`,比如`2026-05-20-我的静态博客动态化方案`,找起来方便。 编辑器右侧挂了两个面板:上面是快捷插入(H2、H3、代码块、引用、图片等),下面是AI助手。 AI浪潮怎能不加点AI元素,选中文字可以润色、扩写、缩写、纠错;填了标题能自动生成摘要和标签。 ![](image-5.png) AI接的是DeepSeek的API,OpenAI兼容格式,也可以切Anthropic格式。 图片上传到文章同级文件夹里,跟`index.md`放在一起,Markdown直接引用文件名就行。 不像以前要手动拖文件、改路径。 发布流程分了三个按钮:草稿(`draft:true`,前台不可见)、保存(`draft:false`,存本地)、发布(保存+自动执行`git add -A && git commit && git push`)。 不用再切终端敲命令了,真正解放双手。 还有个贴心的小功能:每5秒自动缓存到浏览器localStorage。 万一电脑崩了或者不小心关了标签页,重新打开会自动恢复,不会丢稿。 ## 评论管理 我的博客用的是Artalk评论系统。后台对接了Artalk的API v2,管理员登录一次后token和凭据缓存在本地,下次自动登录。 ![](image-6.png) 界面是左右分栏:左边文章列表,按MD文件日期倒序排列,最新的在最上面。 点开一篇文章,右侧按需加载评论,不会像第一版那样全量拉取6000条导致卡死。 支持在线回复、隐藏、删除评论。 回复时会显示被回复者的昵称和内容摘要,知道上下文。 ## 订阅源和友链 这两个模块,我都一定程度实现了动态化,都对接了我自己搭建的API。 订阅源管理可以增删RSS源,支持批量检测存活状态。 ![](image-7.png) 友链管理更完整一些:增删改查、隐藏/显示切换、单条或批量存活检测。 ![](image-8.png) 检测走的是腾讯云SCF代理,因为有些博客在境外,直连可能不通。 友链列表里每个站点前面有个WiFi图标,绿色表示在线,红色表示失联。 这样我能及时发现哪些博友的网站打不开了,该隐藏就隐藏,保持友链页面的健康度。 ![](image-9.png) ## 微信公众号同步 最近我也开始尝试写公众号。我在自己的接口站新增了微信公众号素材接口,可以把文章同步到公众号草稿箱。 ![](image-10.png) 流程很简单:后台里选一篇文章,填个封面图URL,点「同步到微信草稿」就行了。 Markdown会自动转成微信兼容的HTML——标题有深蓝底边线、代码块是Dracula深色主题、引用有蓝色左边框、底部有个居中的「—END—」收尾。 在公众号后台的草稿箱里预览一下就能直接群发,不用再排版一遍,这样可以保证博客和公众号的同步更新。 ## 图片管理 单独做了一个图片管理页面,把所有文章文件夹里的图片扫出来,网格预览,能看到每张图的文件大小和所属目录。 一键复制Markdown引用地址,多余的图片可以直接删。 以前图片散落在几十个文件夹里,根本不知道哪些在用哪些没用了。现在一目了然。 同时也可以当做一个回忆相册,哈哈,不是吗? ![](image-11.webp) ## 开源提示词 因为本系统是基于自己的主题深度定制的,不适合开源给大家。 这里把Vibe coding的技术选型开源出来,方便大家自己Vibe coding自己的后台系统。 ```txt # 写作后台 Hugo 博客的本地管理后台,Next.js 16 + Tailwind CSS 4,运行在 `localhost:8016`。 ## 核心模块 ### 1. 文章管理 `/` - 读取 Hugo `content/post/` 下的 Markdown 文件,列表展示、搜索、分页 - 点击标题进入编辑,hover 显示预览、编辑、删除按钮 - 预览自动启动 `hugo serve`(kill 端口冲突后重启) ### 2. 撰写/编辑 `/edit` - 新建文章自动生成 `YYYYMMDDHHmm` 格式 slug,文件夹命名 `YYYY-MM-DD-slug` - 文章元信息编辑(标题、日期、分类、标签、作者、AI 评论) - Markdown 正文编辑,支持插入图片(上传到文章同级文件夹) - 三个发布状态: - **草稿** — `draft: true`,前台不可见 - **保存** — `draft: false`,存本地不推送 - **发布** — 保存 + `git add -A && git commit && git push` ### 3. 评论管理 `/comments` - Artalk 管理员登录(邮箱+密码),token 缓存 localStorage - 文章列表按 MD 文件日期倒序,默认选中最新文章,按需加载评论 - 支持在线回复、隐藏/显示、删除评论 - 回复评论时显示父级评论引用 ### 4. 订阅源管理 `/feeds` - 对接 api,token 存储在 `.env` 服务端 - 增删 RSS 订阅源,批量检测存活状态 ### 5. 友链管理 `/links` - 对接 api,token 存储在 `.env` 服务端 - 增删改友链,支持隐藏/显示切换 - 单个/批量存活检测,失联标记 ### 6. 回收站 `/recycle` - 软删除文章移至 `.recycle/`,保留 30 天 - 支持恢复和永久删除 ## API 路由 | 路径 | 方法 | 说明 | |------|------|------| | `/api/posts` | GET/POST | 文章列表、新建 | | `/api/posts/[slug]` | GET/PUT/DELETE | 单篇文章 CRUD | | `/api/comments` | GET/POST | 评论列表、回复 | | `/api/comments/[id]` | PUT/DELETE | 评论操作 | | `/api/comments/login` | POST | Artalk 登录 | | `/api/rss/feeds` | GET/POST/DELETE | 订阅源管理 | | `/api/rss/links` | GET/POST/PUT/DELETE | 友链管理 | | `/api/recycle` | GET/POST/DELETE | 回收站 | | `/api/upload` | POST | 图片上传 | | `/api/deploy` | POST | Git 部署 | | `/api/hugo` | GET | Hugo 启动/检测 | ## 技术栈 - **框架**: Next.js 16 (App Router, Turbopack) - **样式**: Tailwind CSS 4,SEN 主题暖色系 - **数据**: 直接读写 Hugo Markdown 文件(gray-matter),无数据库 - **评论**: Artalk API v2 - **RSS/友链**: 自建 API + SCF 代理 - **部署**: 执行 shell git push ## 提示词指南 ### 新增页面/模块 > "在写作后台新增一个 XXX 模块,左侧侧边栏加入口,页面风格与现有文章管理一致" ### 修改现有功能 > "优化文章管理页面的 XXX 功能,保持 SEN 配色和卡片式布局" > "修复评论管理页面的 XXX bug,不要改动其他功能" ### 样式调整 > "把 XXX 页面的色调整体改为 SEN 暖色系(bg: #fcfaf5, text: #223d66, accent: #1d3d6c, line: #e4dfd2)" ### API 对接 > "对接 api.usj.cc 的 XXX 接口,token 在 .env 的 RSS_API_TOKEN,后端代理不要暴露到前端" ### 常见问题描述 - "布局太窄了" → 去掉 max-w 限制 - "左右比例不对" → sidebar w-1/4,main flex-1 - "最新数据没排前面" → sort by date desc - "不知道点哪里" → 标题做成可点击,加明显按钮 ``` 希望来访的朋友,可以关注一下我的公众号,感谢! ![](image-13.png)