衷画画Huahua Zhong
返回写作工程 / Field notes

本站是怎么搭起来的

一篇示例文章,同时也是这套自建博客系统的技术说明。可以直接删掉。

这是一篇示例文章,用来验证 Markdown 渲染管线。确认没问题之后可以直接删除 content/posts/colophon.md

技术栈#

整站不依赖任何博客框架,是从 create-next-app 开始一行行搭起来的:

选型
框架Next.js 16(App Router)
样式Tailwind CSS v4
组件shadcn/ui
动效Motion + Lenis
图标Lucide + Simple Icons
Markdownunified / remark / rehype

写文章#

content/posts/ 下新建一个 .md 文件即可,front matter 支持这些字段:

---
title: "标题"
description: "摘要,会显示在列表页"
date: 2026-08-28
tags: ["标签一", "标签二"]
draft: false      # true 则只在开发模式可见
---

代码高亮走 Shiki,在构建期完成,浏览器端不加载高亮器:

def fetch(url: str) -> str:
    """抓取 Google Scholar 主页并解析论文列表。"""
    with urlopen(Request(url, headers={"User-Agent": UA})) as r:
        return r.read().decode("utf-8", "ignore")
export function getAllPosts(): PostMeta[] {
  return readFiles()
    .map(parseMeta)
    .filter(visible)
    .sort((a, b) => +new Date(b.date) - +new Date(a.date));
}

排版元素#

引用块用于强调关键判断。左侧的细线取自整站的强调色。

无序列表:

  • 支持 GFM,表格、删除线、任务列表都能用
  • 标题会自动生成锚点,右侧目录跟随滚动高亮
  • 图片自动加圆角与描边

有序列表:

  1. 第一步
  2. 第二步
  3. 第三步

行内代码写成 pnpm dev,会有独立底色。


关于论文列表#

/about 页的论文列表不是手写的,由 scripts/fetch_scholar.py 从 Google Scholar 抓取后写入 data/scholar.json,页面在构建时读取。抓取失败会保留上一次的数据, 不会把页面弄空。

— 就写到这里 —全部写作