# Noah 的个人博客

纯静态核心 + 可选数据库后台，可部署到 Cloudflare Pages、腾讯云 Pages、Vercel（见 docs/multi-platform-deploy.md）。

## 一句话

- 首页（`/`）：作品、文章列表、搜索、文章页、知乎/X 分享
- 编辑器 `admin.html`：粘贴网页保留格式、Markdown/HTML 互转、PDF/图片嵌入、一键发布、再编辑
- 后台 `login.html`：美观登录页，用户名 + 密码，首次创建管理员，之后入口自动关闭
- 数据库：本地真 SQLite 文件 `blog.db`（`node server/index.js`），Cloudflare 上是 D1（SQLite 方言，全球分布），同一套 `/api/*`
- 备份/灾备：JSON/SQL/SQLite 下载、导入恢复、备份到 GitHub 私有仓、三地副本（见 docs/disaster-recovery.md）
- 防火墙：Cloudflare 边缘 Bot Fight + Managed Challenge + 速率限制 + 登录页 Turnstile，应用层限流与机器人拦截兜底（见 docs/firewall.md）
- 风格/语言/PWA：14 种风格、11 种界面语言、PWA 可安装、离线缓存、自适应手机/苹果/全终端

## 目录

- `/`（首页） / `app.js` / `styles.css` / `themes.css` / `theme.js` / `lang.js`：首页与主题语言
- `admin.html` / `admin.js` / `admin-db.js`：编辑器 + 数据库管理 + 备份
- `login.html` / `login.js` / `config.js`：后台登录（Turnstile Site Key 填 config.js，不填密钥）
- `posts.json` / `posts/*.html`：静态文章（数据库不可用时首页自动回落到这里）
- `uploads/`：图片 / PDF
- `functions/`：Cloudflare Pages Functions + D1（可选层，静态站不依赖它）
- `server/index.js`：本地/VPS Node SQLite 后台（Node 内置 sqlite，无依赖）
- `schema.sql`：SQLite / D1 通用表结构
- `scripts/build-pages.sh`：生成 `dist/`（只含静态文件，可原样部署到任何平台）
- `docs/`：cloudflare-deploy / firewall / disaster-recovery / multi-platform-deploy

## 编辑器能力

- 富文本：加粗、标题、列表、引用、代码块、链接、图片
- 直接粘贴网页内容：保留段落、标题、图片、链接、列表，自动去掉 `<script>`、跟踪代码和 `on*` 事件
- HTML 源码 / Markdown 互转（CDN：marked + turndown，断网时富文本仍可用）
- 导入 `.md` / `.html` / `.txt`；导入 `.pdf` 以嵌入阅读器 + 下载链接插入
- 上传图片 / PDF，发布时一并处理
- 草稿存浏览器 localStorage；可载入已有文章再编辑

## 发布

- 静态 GitHub 模式：在编辑器里填仓库 owner / 仓库名 / GitHub Token（仅当次会话，不存 localStorage、不写进仓库），
  点“一键发布”提交 `posts/<slug>.html` + `posts.json`；Pages 已关联仓库时自动重新部署。
  没有 Token 时点“下载文章文件”，放进 `posts/`、更新 `posts.json` 后推送即可。
- 数据库模式：在编辑器“后台数据库管理”里点“保存当前文章到数据库”，首页优先显示数据库文章。

## 同步到知乎 / X —— 真实限制

- **知乎：没有面向个人的公开写文章 API。** 不能靠密钥自动发专栏。本站提供：生成知乎版全文 → 一键复制 → 打开撰写页粘贴发布。
- **X：发帖 API 需要付费开发者账号 + 用户授权。** 本站提供：按 ≤270 字切分 thread → 一键复制 → 打开撰写页；
  有授权 Bearer Token 时编辑器里可尝试直接调 `POST /2/tweets`，失败会原样显示平台错误，不会假装成功。
- 小红书 / 微博 / 微信：你这次明确说不要，本站没有做；如以后要加，同样只能走各平台官方的复制 + 撰写页流程。

## 部署（保证能上线）

静态核心零构建，一定能上。详见 docs/cloudflare-deploy.md 和 docs/multi-platform-deploy.md。
后台 D1 是可选层，没有它网站照常显示静态文章。

## 版权提醒

编辑器能粘贴，不等于能发表。只发表自己的作品，或已获得授权 / 公开许可的内容；转载必须填来源链接并保留作者信息。
