这个站的所有文章都放在 contents 目录里,由 Astro 的 Content Layer 统一加载。
每篇文章的 frontmatter 都要过一遍 zod schema 校验:title 必填、description 不许超过 160 字符(这是 SEO description 的长度约束)、date 自动转成日期对象。写错字段名或漏填,构建直接失败,而不是悄悄渲染出残缺页面。
列表排序、精选筛选这些逻辑全部收在数据层的查询函数里,页面组件只管拿数据渲染。加一篇文章 = 加一个 markdown 文件,不用碰任何代码。