# 轻量级混合架构博客系统 (暂定名：NovaBlog) 需求及开发文档

## 1. 项目概述

本项目旨在开发一款面向程序员和极客的极轻量级博客系统。针对目前市面上静态博客（如 Hexo）排版能力有限、缺乏动态交互，以及动态博客（如 Halo、WordPress）过度商业化、架构臃肿、资源占用高的问题，本项目提出一种**“静态渲染 + 轻量级微服务”**的解耦架构。

**核心目标：**

* **极致的排版自由：** 原生支持 MDX，允许在 Markdown 中直接嵌入前端组件（JS/HTML 动效）和 Typst 复杂学术排版。
* **优雅的动态交互：** 支持用户注册登录、评论、点赞，但核心页面保持纯静态。
* **低资源占用：** 确保应用能在 2C1G 甚至更低配置的云服务器上稳定运行，杜绝周期性 CPU 满载问题，同时支持 Docker 容器化，方便部署在个人 NAS 上。
* **现代化的主题系统：** 基于组件化思想构建主题，实现积木式的页面组合，降低主题开发和迁移成本。

---

## 2. 核心架构设计

系统采用前后端完全解耦的架构，前端负责内容解析与预渲染，后端仅作为无状态的数据 API 提供支持。

### 2.1 表现层 (前端 / Astro)

基于 Astro 框架构建，利用其 Islands Architecture（群岛架构）特性：

* **构建时 (Build Time)：** 将 `.md` 和 `.mdx` 文件（包含 Typst 代码块）统一编译为纯静态的 HTML/CSS。
* **运行时 (Client Side)：** 大部分页面为 Zero-JS，仅在“评论区”、“点赞按钮”等特定“岛屿”组件上挂载 JavaScript 并发起按需 API 请求。

### 2.2 交互层 (后端微服务 / Micro API)

一个极轻量的后端 API 服务，专门处理动态请求。为了绝对的轻量化，避免 JVM 或臃肿 Node 框架带来的内存和 CPU 开销，采用轻量级语言或极简框架开发，搭配本地文件型数据库（SQLite）。

### 2.3 部署形态

* **前端产物：** 编译后的纯静态文件可托管于任何 CDN、Nginx 容器或 GitHub Pages。
* **后端 API：** 打包为轻量级 Docker 镜像，暴露特定端口，通过 Nginx 反向代理提供服务。可轻松接入虚拟局域网作为服务节点。

---

## 3. 功能需求详细说明

### 3.1 内容管理模块 (基于文件系统)

* **本地化撰写：** 以 `src/content/blog/` 目录为核心，通过标准 Markdown 和 Frontmatter (YAML) 管理元数据（标题、日期、标签、分类）。
* **MDX 混合解析：** * 支持标准的 Markdown 语法。
* 支持直接在文章中 `import` 并使用 Vue/React/原生 JS 组件，实现图表、可交互动画等丰富排版。


* **Typst 渲染支持：** 封装 `<TypstBlock />` 组件，在构建阶段调用 Typst 编译器将数学公式和复杂排版渲染为高质量 SVG 嵌入页面。

### 3.2 动态交互模块 (API 驱动)

* **用户鉴权：** * 管理员身份认证（用于后台极简面板或特定 API 调用）。
* 普通用户注册/登录（支持邮箱验证或 OAuth 第三方登录，如 GitHub）。
* 基于 JWT (JSON Web Token) 的无状态鉴权。


* **评论系统：**
* 支持文章下的多级嵌套评论。
* 支持 Markdown 基础语法解析。
* 前端组件支持 `client:visible` 懒加载，仅当用户滚动到评论区时才加载请求逻辑。


* **点赞系统：**
* 基于文章 ID 和用户 ID (或访客 IP Hash) 的防刷点赞接口。



### 3.3 主题与布局系统 (组件化)

* **Layout 核心：** 提供基础的 `BaseLayout.astro`，定义全局的 Header、Footer 和 SEO Meta 标签。
* **CSS 变量换肤：** 样式层全面采用 CSS Variables，通过切换变量配置文件即可实现黑白模式和主题色彩切换。
* **组件插槽 (Slots)：** 页面主体留白，通过 Astro 的 `<slot />` 机制允许不同文章复用或重写特定的页面布局。

---

## 4. 技术选型建议

### 4.1 前端 (静态生成与渲染)

* **核心框架：** Astro (提供极速构建、MDX 支持和内容集合强校验)。
* **组件库生态：** Vue 3 或 React (仅用于编写需要动态交互的“岛屿”组件，如评论框)。
* **样式方案：** Tailwind CSS 或纯 CSS 变量 (保持轻量)。

### 4.2 后端 (动态 API 提供)

为了解决小鸡（如 2C1G 配置）资源受限问题，推荐以下两种方案之一：

* **方案 A (性能极致 - 推荐)：** **Go 语言 (Gin/Fiber) + SQLite**。编译为二进制文件运行，内存常驻极低（通常十几 MB），CPU 开销极小，高并发无压力。
* **方案 B (开发极速)：** **Node.js (Hono 或 Fastify) + SQLite + Prisma (ORM)**。比传统的 NestJS 或 Express 轻量得多，生态契合度高。

---

## 5. 阶段开发规划 (Roadmap)

### Phase 1: 核心静态引擎构建 (MVP)

* [ ] 初始化 Astro 项目，配置 Content Collections 数据校验。
* [ ] 编写基础的博客 Layout (主页、文章列表页、文章详情页)。
* [ ] 实现 MDX 支持，编写首个包含动态 HTML 交互组件的测试文章。
* [ ] 封装 Typst 渲染组件，打通构建流。

### Phase 2: 轻量 API 服务开发

* [ ] 搭建后端服务项目，配置 SQLite 数据库和 ORM 模型 (Users, Posts_Meta, Comments)。
* [ ] 实现 JWT 登录与鉴权接口。
* [ ] 实现评论的 CRUD 接口和文章点赞接口。
* [ ] 后端 Docker 化封装。

### Phase 3: 前后端联调与交互组件

* [ ] 在 Astro 中使用 UI 框架 (Vue/React) 开发独立于静态页面的评论区组件。
* [ ] 联调跨域 API，处理 Loading、Error 等异步状态。
* [ ] 实现文章页的点赞按钮交互。

### Phase 4: 部署与测试

* [ ] 前端打包测试 (`astro build`)，验证打包后的 JS 产物大小。
* [ ] 后端部署至云服务器或 NAS 节点，配置 Nginx 反向代理。
* [ ] 压力测试与 CPU 监控，确保资源占用在合理阈值内。
