Astro启动器

astro-biluo — Astro 启动器模板

作者 Just-Passersby

Biluo(碧落)是一个基于 Astro 的博客主题,使用 Markdown/MDX 内容集合,内置 Pagefind 搜索、Giscus 评论、深浅色模式、系列与标签分组、RSS/sitemap/llms.txt,并针对 Cloudflare Workers 静态资源部署做了配置。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

1 个预览视图
作者提供的预览
作者提供的预览

来自项目 README 的原始预览。

目前有 1 张原始预览,可打开完整图片查看设计细节。

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-10-02查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

浅色水蓝与深色夜空蓝两套配色,支持深浅色模式切换

02

标签支持嵌套分组,系列采用树状结构组织文章

03

Pagefind 构建时全文搜索索引,不依赖 Google site: 查询

04

Giscus 评论默认关闭,可在 src/data/comments.ts 中替换提供方

05

内置 RSS(带 XSL 样式)、sitemap、llms.txt 与 robots.txt

06

针对 Cloudflare Workers Static Assets 部署提供 wrangler.jsonc 与缓存头配置

模板详细介绍

Biluo(碧落)是一个用 Astro 构建的博客主题,内容通过 Markdown / MDX 内容集合管理,构建为静态站点。主题提供浅色(水蓝)与深色(夜空蓝)两套配色,支持带嵌套分组的标签体系和树状结构的系列系统;搜索使用 Pagefind 在构建时生成索引,评论使用 Giscus 且默认关闭、可替换提供方。此外包含提示块(note / tip / important / warning / caution)、GitHub 风格脚注、标题锚点、代码块复制按钮、图片点击缩放、阅读时长估算、置顶文章、相关文章、目录、分页、RSS(带 XSL 样式)、sitemap、llms.txt、robots.txt、移动端抽屉式导航和自定义 404 页面。

主题在设计上是单语言(i18n-ready 而非多语言):所有界面文案集中在 src/i18n/ui.ts,siteLocale 是站点语言、og:locale 与日期格式的唯一来源,默认语言为繁体中文。没有逐篇文章的语言切换器,多语言内容需要用标签和系列来组织。

部署目标是 Cloudflare Workers Static Assets(不是 Pages),wrangler.jsonc 只设置 assets 且没有 main。自定义 404 需要在 wrangler.jsonc 中设置 assets.not_found_handling: "404-page";缓存头方面,public/_headers 对 /_astro/* 和 /fonts/* 设置 immutable 长缓存,HTML 保持默认以便即时更新。

代码采用 MIT 许可,内置字体为 SIL OFL 1.1(每个字体在 public/fonts/ 下有自己的 OFL.txt,来源与版权见 NOTICE)。用户添加的内容不属于主题 MIT 许可范围,页脚渲染可配置的内容许可,默认 All rights reserved。

Markdown 管线目前基于 Remark(通过 astro.config.mjs 中的 processor: unified({...}) 配置),路线图计划在 Sätteri 稳定且功能可完整复现后再切换,目前仍使用 Remark。

Astro启动器

适合你的项目吗?

适用场景

  • 搭建以 Markdown / MDX 撰写内容的个人博客
  • 需要按系列和分组标签组织技术文章或连载内容
  • 希望使用构建时全文搜索而不依赖外部搜索服务
  • 计划将静态站点部署到 Cloudflare Workers Static Assets
  • 需要 RSS、sitemap、llms.txt 等面向搜索引擎与 AI 爬虫的基础文件

适合人群

  • 使用 Astro 并偏好内容集合管理文章的开发者
  • 需要单语言博客、界面文案集中可替换的站点
  • 接受 Giscus 评论并希望默认关闭评论的站点
  • 愿意按文档调整 wrangler.jsonc 与 _headers 的部署者

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    使用 pnpm install 安装依赖,pnpm dev 启动开发服务器(localhost:4321)

  2. 2

    pnpm build 构建到 ./dist/ 并生成 Pagefind 索引;在 CI 或非交互环境使用 CI=true pnpm build

  3. 3

    pnpm preview 通过 wrangler dev 在 localhost:8787 预览 dist,pnpm deploy 执行构建并 wrangler deploy

  4. 4

    站点标题、描述、作者、每页文章数在 src/consts.ts 修改;文章放在 src/content/blog/*.{md,mdx}

  5. 5

    自定义 404 需在 wrangler.jsonc 设置 assets.not_found_handling: "404-page";重命名字体目录时同步更新 @font-face 与 public/_headers

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。

使用时需要遵守

  • 允许免费使用、修改、商用和分发该版本代码。
  • 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
  • 代码按现状提供;担保与责任限制以原许可证及适用法律为准。

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
  • 评论功能使用 Giscus,默认关闭;启用需在 src/data/comments.ts 配置,并需从 giscus.app 获取对应值,属于依赖外部服务的可选功能。
  • 部署目标为 Cloudflare Workers 静态资源,需使用 wrangler 并依赖 Cloudflare 平台;并非任意静态托管开箱即用。
  • 自定义 404 页面必须在 wrangler.jsonc 中设置 assets.not_found_handling 为 "404-page",否则生产环境会返回空白 404。
  • 主题设计上为单语言(仅 i18n-ready,并非多语言);没有逐篇文章的语言切换器,多语言内容需借助标签与系列组织。
  • 默认界面语言为繁体中文;若需英文优先站点,须修改 src/i18n/ui.ts 中的 defaultLang / siteLocale 并翻译界面文案。
  • 用户自行添加的内容不在主题 MIT 许可范围内;页脚默认渲染 All rights reserved 的内容许可,可自行改为 CC 等许可。
  • 页脚默认显示 All rights reserved 的内容许可,需在 src/consts.ts 设置 CONTENT_LICENSE 并在 src/i18n/ui.ts 填写 license.* 才能更换。
  • 内置字体采用 SIL OFL 1.1,与代码的 MIT 许可不同;每个字体在 public/fonts/ 下有独立 OFL.txt,来源与版权见 NOTICE。
  • 在 CI 或代理等非交互环境中需使用 CI=true pnpm build 构建,否则 pnpm 11 会因交互提示而阻塞。
  • Markdown 管线目前基于 Remark;路线图计划在 Sätteri 达到稳定版本且功能可完整复现后再切换,当前仍使用 Remark。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

**Comments**: Giscus, provider-swappable (see `src/data/comments.ts`); off by default

README 原文

**Deploy**: Cloudflare Workers Static Assets (`wrangler`)

README 原文

**Custom 404**: set `assets.not_found_handling: "404-page"` in `wrangler.jsonc`, otherwise the custom 404 only works in `pnpm dev` and returns a blank 404 in production.

README 原文

The theme is **single-locale by design** (i18n-*ready*, not multilingual).

README 原文

The shipped default is Traditional Chinese (`zh-Hant`).

README 原文

**Content** — yours. Anything you add under `src/content/` and `src/assets/` is not covered by the theme's MIT license.

README 原文

The footer renders a configurable content license (default **All rights reserved**).

README 原文

**Fonts** — SIL Open Font License 1.1. Each font ships its own `OFL.txt` under `public/fonts/`; sources and copyright are listed in `NOTICE`.

README 原文

In non-interactive environments (CI / agents) build with `CI=true pnpm build` > (pnpm 11 otherwise blocks on an interactive prompt).

README 原文

The plan is to switch it to [**Sätteri**](https://github.com/bruits/satteri) — a Markdown/MDX processor that parses and compiles in Rust while running plugins in JavaScript, built on the same unified (Remark/Rehype) ecosystem — once it reaches a **stable release** and its surrounding packages mature.

README 原文
https://github.com/Just-Passersby/astro-biluo/blob/main/LICENSEhttps://github.com/Just-Passersby/astro-biluo/blob/main/README.md

DeepSeek 根据仓库许可证和 README 整理 ·2026-10-04。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。

项目核对记录与介绍依据

模板资料

来源平台
Astro Themes
资料与维护参考分
资料一般 · 63 / 100
技术栈
Astro
网站类型
启动器
这个分数如何计算

本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。

这个项目需要核对什么

记录的仓库更新时间
2026-10-01
截图检查日期
2026-10-04

目前没有记录演示链接。请依据仓库说明在本地评估;仅凭截图无法确认交互行为。

目录记录的主要技术栈是 Astro。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。

查看具体选型方法 →

介绍的制作与核对状态

介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。

审核声明: [email protected] · 2026-10-04

查看当时使用的来源资料

SHA-256: 273e0de0ba1d059c62a7442251decbf73d225726aeec4d68a1497137bb10d28e

2026-10-04T17:25:26.771Z

来源文件 / 仓库
English | [繁體中文](./README.zh-Hant.md)

<p align="center">
  <img src="./src/assets/avatar.png" width="140" alt="Biluo logo" />
</p>

<h1 align="center">Biluo (碧落)</h1>

<p align="center">
  <img src="./assets/banner.png" alt="Biluo — light and dark themes, split by the theme-toggle's circular reveal" />
</p>

A clean, performance-focused blog theme built with [Astro](https://astro.build)
and deployed to **Cloudflare Workers Static Assets**. Content is authored in
Markdown / MDX content collections, search is powered by Pagefind, comments by
Giscus, with dark mode, a tree-structured series system, grouped tags, RSS /
sitemap / llms.txt, and an i18n-ready single-locale design.

> The name **碧落 / Biluo** comes from the classical Chinese term for the *azure
> heavens*, echoing the theme's water-blue (light) and night-sky-blue (dark)
> palette.

> **Licensing at a glance:** the theme source code is MIT (see `LICENSE`); the
> bundled fonts are SIL OFL 1.1 (see `NOTICE` and the `OFL.txt` files under
> `public/fonts/`); any content you add is your own. See [License](#license).

## Features

- Light / dark mode with water-blue / night-sky-blue palettes
- Tags with nested groups, and a tree-structured series system
- Full-text search via [Pagefind](https://pagefind.app) (build-time index, not Google `site:`)
- Callouts / admonitions (note / tip / important / warning / caution)
- GitHub-style footnotes (label localized), heading anchor links
- Code-block copy button, click-to-zoom images, reading-time estimate
- Pinned post, related posts, table of contents, pagination
- RSS (with styled XSL view), sitemap, `llms.txt`, `robots.txt`
- Default hero image fallback, `og:image` fallback to a post's hero
- Mobile drawer header, custom 404 page
- Centralized UI strings (i18n-ready, single-locale by design)

<p align="center">
  <img src="./assets/post.png" width="720" alt="A post page: table of contents, series navigation, localized callouts, and syntax-highlighted code" />
</p>
<p align="center"><sub>A post page — table of contents, series navigation, localized callouts, and code highlighting.</sub></p>

## Tech stack

- **[Astro](https://astro.build) 7** (`output: static`), Node 22+
- **Content**: Markdown / MDX content collections (`@astrojs/mdx`); GitHub alert
  syntax, heading anchors. The Markdown pipeline is configured in
  `astro.config.mjs` via `processor: unified({...})` (Astro 7's first-class
  integration point). `@astrojs/markdown-remark` is a load-bearing dependency.
- **Search**: [Pagefind](https://pagefind.app) (build-time index)
- **Images**: Astro `<Image>` + `sharp` (webp / resizing)
- **Comments**: Giscus, provider-swappable (see `src/data/comments.ts`); off by default
- **Deploy**: Cloudflare Workers Static Assets (`wrangler`)

## Quick start

| Command | Action |
| :--- | :--- |
| `pnpm install` | Install dependencies |
| `pnpm dev` | Dev server at `localhost:4321` (`astro dev`) |
| `pnpm build` | Build to `./dist/` (`astro build` + Pagefind index) |
| `pnpm preview` | Serve `dist` with `wrangler dev` at `localhost:8787` (closest to production) |
| `pnpm deploy` | Build and `wrangler deploy` |

> In non-interactive environments (CI / agents) build with `CI=true pnpm build`
> (pnpm 11 otherwise blocks on an interactive prompt).
>
> Check page count: `pnpm build && find ./dist -maxdepth 10 -type f | wc -l`

## Configuration (where to change what)

| What you want to change | File |
| :--- | :--- |
| Site title / description / author / posts-per-page | `src/consts.ts` |
| Posts | `src/content/blog/*.{md,mdx}` (frontmatter schema in `src/content.config.ts`) |
| Series (content) | `src/data/series.ts` (types / logic in `src/lib/series.ts`) |
| Tags taxonomy & groups | `src/data/taxonomy.ts` (types / logic in `src/lib/taxonomy.ts`) |
| Blogroll | `src/data/blogroll.ts` |
| Comments (Giscus) | `src/data/comments.ts` (values from [giscus.app](https://giscus.app)) |
| UI strings (i18n) | `src/i18n/ui.ts` |
| Site URL / Markdown pipeline / redirects / sitemap | `astro.config.mjs` |
| Cloudflare deploy (404 handling, assets dir) | `wrangler.jsonc` |
| Static-asset cache headers | `public/_headers` |

Post frontmatter fields: `title` (required), `description`, `pubDate`
(required), `updatedDate`, `heroImage`, `tags`, `pinned`.

**Where images go**: images that should go through Astro's optimizer (resize /
webp — hero / series / avatar) live in `src/assets/`; assets served verbatim
(favicon, fonts, `_headers`) live in `public/`.

## Documentation

Deeper guides live in [`docs/`](./docs/) (English and 繁體中文):

- [Content](./docs/en/content.md) — post frontmatter, the series data model,
  tags, and language facets.
- [Customization](./docs/en/customization.md) — color palette, fonts (swap or
  drop them), favicons.
- [Search](./docs/en/search.md) — how Pagefind indexes the site, and why search
  is blank in `pnpm dev`.
- [Comments](./docs/en/comments.md) — enabling Giscus and wiring up other
  providers.
- [Deployment](./docs/en/deployment.md) — Cloudflare Workers and other static
  hosts.
- [SEO and crawlers](./docs/en/seo-and-crawlers.md) — robots.txt and the
  AI-crawler policy, sitemap, social previews, `llms.txt`.

The demo posts under `src/content/blog/` also double as documentation.

## Project structure

```text
src/
├── assets/           # Astro-optimized images (hero / series / avatar)
├── components/       # Astro components (Header, SeriesCard, Comments…)
├── content/blog/     # Posts (Markdown / MDX)
├── content.config.ts # Post frontmatter schema
├── consts.ts         # Site-level settings
├── data/             # Content data: series / taxonomy / blogroll / comments
├── i18n/             # UI strings (ui.ts) and helpers (utils.ts)
├── layouts/          # Layouts (BaseLayout / BlogPost…)
├── lib/              # Data schema & logic (series / taxonomy)
├── pages/            # Routes (blog / series / tags / rss / 404…)
└── styles/           # Global styles (global.css)
public/               # Verbatim assets: favicon / fonts / _headers
astro.config.mjs      # site URL / Markdown pipeline / redirects / sitemap
wrangler.jsonc        # Cloudflare Workers Static Assets deploy config
```

## Deployment

This theme deploys to **Cloudflare Workers Static Assets** (not Pages;
`wrangler.jsonc` only sets `assets`, with no `main`). Two gotchas that differ
from Pages:

- **Custom 404**: set `assets.not_found_handling: "404-page"` in
  `wrangler.jsonc`, otherwise the custom 404 only works in `pnpm dev` and
  returns a blank 404 in production.
- **Cache headers**: the default is `max-age=0, must-revalidate`. `public/_headers`
  puts `immutable` long-cache on `/_astro/*` and `/fonts/*` (HTML stays on the
  default so it updates immediately). If you rename the font folder, update both
  the `@font-face` references and the `_headers` rules.

## Internationalization

The theme is **single-locale by design** (i18n-*ready*, not multilingual). All
UI strings live in `src/i18n/ui.ts`, and `siteLocale` there is the single source
of truth for the site's locale (`<html lang>`, `og:locale`, date formatting).
The shipped default is Traditional Chinese (`zh-Hant`).

To run an English-first site, change `defaultLang` / `siteLocale` in
`src/i18n/ui.ts` and translate the UI strings. There is no per-post language
switcher; to organize content in more than one language, use tags and series as
facets. (A demo post walks through this.)

## Roadmap

- **Remark → Sätteri.** The Markdown pipeline currently runs on Remark (via
  `processor: unified({...})` in `astro.config.mjs`). The plan is to switch it to
  [**Sätteri**](https://github.com/bruits/satteri) — a Markdown/MDX processor
  that parses and compiles in Rust while running plugins in JavaScript, built on
  the same unified (Remark/Rehype) ecosystem — once it reaches a **stable
  release** and its surrounding packages mature. The switch will only
  land once Sätteri is stable *and* every feature the current pipeline provides
  is verifiably reproduced on it, with no regression — until then, Remark stays.

## License

- **Code** — MIT (`LICENSE`).
- **Fonts** — SIL Open Font License 1.1. Each font ships its own `OFL.txt` under
  `public/fonts/`; sources and copyright are listed in `NOTICE`.
- **Content** — yours. Anything you add under `src/content/` and `src/assets/`
  is not covered by the theme's MIT license. The footer renders a configurable
  content license (default **All rights reserved**). To switch to a Creative
  Commons or other license, set `CONTENT_LICENSE` in `src/consts.ts` and fill in
  the `license.*` values in `src/i18n/ui.ts` (a CC BY-NC-ND example is included
  there as a comment).
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。