在 AI 时代,我为什么还要自己搭博客:因为我想留下自己的成长痕迹

Published on
9 mins read
--- views

这两年我一直想搭一个自己的博客。原因很简单:我需要一个地方沉淀知识、输出总结,也让别人能看到我在学什么、怎么想、怎么成长。

到了 AI 时代,我为什么还要自己搭一个博客

博客不难搭,难的是别把它做成一个没有个人痕迹的模板站。我更想做一个别人能通过它认识我的地方。AI 可以拉平很多实现能力,但人的表达、判断和成长痕迹不该被一起拉平。所以对我来说,博客不是单纯的内容容器,它更像一个长期记录自己的系统。

我也不是反对模板和 AI。只是我越来越明确,AI 应该加速我的表达,而不是代替我的表达。 它可以帮我补结构、整理表达、校验项目事实,但判断还是要由我来下,文章也应该保留我的个人表达。

所以这个项目里,我也在尝试把“我自己”交给 AI 去理解

这也是为什么我在项目里额外做了两件事:一是补协作规则,把主线能力、目录边界、复用入口和验证要求写进文档里;二是补风格画像,让 AI 在真正落笔前先读项目里的博文、个人信息和风格约束,按我的表达方式去组织内容。

这些想法,才是这个博客真正的前置

所以如果你问我,做这个博客最重要的前置是什么,我现在的答案已经不是“先选技术栈”了,更前面的其实是这些:

  • 你到底想拿这个博客记录什么
  • 你想让别人通过这个博客看到什么
  • 你只是想做一个站,还是想做一个能长期承载自己的地方
  • 你想怎么用 AI,是让它代替你,还是帮你思考

这些问题想不清楚,后面就很容易变成纯搭建。而我不想让这件事只停留在“搭建一个博客”,我更想一边搭建项目,一边留下自己的方法论和思考过程。

这些想清楚以后,项目设计反而变得简单了

上面说的是动机。下面我尽量高效一点,讲这个项目为什么会被我设计成现在这样。

我给这个博客定的核心方向很清楚:内容优先,结构清楚,动态能力克制,AI 协作友好。

所以最后它落成了这样一套结构:

app/           页面路由和 API Routes
components/    组件层
layouts/       页面布局骨架
lib/           内容函数、SEO、服务逻辑
data/          博文、作者、站点配置
prisma/        数据库 schema 和迁移
docs/          项目说明、协作规范、风格文件

这里面的设计其实没有那么玄,核心就几个点。

1. 内容跟着 Git 走

我用 data/blog/*.mdx 管文章,用 data/authors/*.mdx 管作者信息。这样做的好处很直接:

  • 写作就是写文件
  • 历史变更天然有记录
  • 不需要额外维护 CMS
  • frontmatter 可以做结构约束

我想让博客服务写作,而不是让写作去迁就一个复杂后台。

2. 静态内容为主,动态能力只补最需要的部分

内容页本质上适合静态生成,所以我用 Contentlayer 在构建期处理 MDX,生成类型、标签、阅读时长、搜索索引这些派生数据。

真正需要运行时的部分,我只保留了少量几项:

  • 浏览量和互动统计
  • GitHub 仓库信息
  • Giscus 评论

也就是说,我不想让整个博客被数据库绑架。我只在必要的地方引入动态能力。

3. 页面、布局、组件、服务分层

我不想把所有逻辑都堆在页面文件里,所以把结构拆成:

  • app/ 负责路由和页面入口
  • layouts/ 负责页面骨架
  • components/ 负责可复用部件
  • lib/ 负责内容逻辑、SEO 和服务调用

这样做的意义不是“看起来专业”,而是后面改起来不会那么乱,AI 也更容易找到正确落点,而不是到处复制一套新的实现。

4. 文档不是附属品,而是项目本身的一部分

我把公开项目说明放在 docs/project/,把给维护者和 AI 用的工作文档放在 docs/harness/,再把风格画像单独放进 docs/style/。这背后的想法很简单:如果以后我自己回来看,希望我还能接得住;如果以后别人来协作,或者 AI 来接手,也希望它不是一团雾。

快速搭建这个博客,路径其实也很直接

如果你只是想快速理解这个项目怎么跑起来,可以直接抓住下面这几步。

第一步:准备环境

确保本地有:

  • Node.js 24.x
  • pnpm 10.x
  • PostgreSQL

如果没有 pnpm

npm install -g pnpm

第二步:安装依赖

pnpm install

这个过程会顺手生成 Prisma Client,并执行项目的后处理脚本。

第三步:配置环境变量

cp .env.example .env.local

最少要补的是数据库连接:

POSTGRES_URL=postgresql://postgres:postgres@localhost:5432/blog_db

如果你还想启用评论和 GitHub 数据,再补:

GITHUB_API_TOKEN=your_github_token
NEXT_PUBLIC_GISCUS_REPO=your_username/your_repo
NEXT_PUBLIC_GISCUS_REPOSITORY_ID=your_repo_id
NEXT_PUBLIC_GISCUS_CATEGORY=your_category
NEXT_PUBLIC_GISCUS_CATEGORY_ID=your_category_id

不过我的建议是,先别被增强项绊住。主线跑通最重要。

第四步:初始化数据库

本地有 PostgreSQL 的话:

pnpm prisma:migrate

如果你想偷懒,也可以先起一个 Docker 数据库:

docker compose up -d postgres
pnpm prisma:migrate

第五步:启动开发环境

pnpm dev

这个命令会先跑 contentlayer2 build,再启动 Next.js 开发服务器。也就是说,它会顺手完成:

  • 解析 data/blog/*.mdx
  • 生成内容类型
  • 生成标签统计
  • 生成本地搜索索引
  • 启动网站

默认访问地址:

http://localhost:3000

第六步:开始写你的第一篇文章

新文章就是一个 MDX 文件,例如:

---
title: '我的第一篇技术文章'
date: '2026-04-04'
tags: ['nextjs', 'blog']
category: 'tech'
draft: false
summary: '这是一篇关于博客搭建的文章'
authors: ['default']
layout: PostLayout
---

这里开始写正文。

保存之后,它会自动进入博客列表、分类页、标签页、搜索索引和 RSS。

这也是我很喜欢这套方案的地方:你不是在维护一套繁琐的发布流程,而是在认真写一篇文章,系统知道怎么把它放进正确的位置。

最后说两句

我现在越来越相信,AI 时代真正不该丢掉的,不是“自己写了多少代码”,而是“你还有没有自己的表达、自己的判断、自己的成长痕迹”。 如果这个博客最后能帮我把这些东西一点点留下来,那它对我来说就不只是一个项目,而是一个真正属于我自己的地方。