一个优雅、快速、易于部署的书签(网址)收藏与分享平台,完全基于 Cloudflare 全家桶构建。
特性 • 版本亮点 • 快速部署 • 本地开发 • 变量说明 • 常见问题 • 技术栈 • 更新日志
🌐 在线体验: https://iori.hidns.vip
| 首页 | 后台管理 |
|---|---|
![]() |
![]() |
| 大卡片 | 小卡片 |
|---|---|
![]() |
![]() |
| 简洁风格 | 夜间模式 |
|---|---|
![]() |
![]() |
| 桌面设置界面 | 移动设置界面 |
|---|---|
![]() |
![]() |
后台设置页支持分别配置桌面端与手机端卡片,包括卡片列数、卡片风格、切换动画、是否隐藏描述/链接行/分类、毛玻璃效果、圆角以及标题和描述的字体样式。后台设置页面为 URL 后加 /admin。
| 手机端风格一 | 手机端风格二 | 手机端风格三 |
|---|---|---|
![]() |
![]() |
![]() |
💡 手机端可独立设置 1/2/3 列布局,并根据卡片密度自动优化复制按钮显示;卡片的毛玻璃效果和程度也可以在后台设置里自定义。
| 特性 | 说明 |
|---|---|
| 📱 响应式设计 | 完美适配桌面、平板和手机等各种设备 |
| 🎨 主题美观 | 界面简洁优雅,支持自定义主色调与夜间模式 |
| 🔍 快速搜索 | 内置站内模糊搜索,迅速定位所需网站 |
| 📂 分类清晰 | 通过多级分类组织书签,浏览直观高效 |
| 🔒 安全后台 | 基于 KV 的管理员认证,提供完整的书签增删改查后台 |
| 📝 用户提交 | 支持访客提交书签,经管理员审核后显示(可通过环境变量关闭) |
| ⚡ 性能卓越 | 利用 Cloudflare 边缘缓存,秒级加载,节省 D1 数据库读取成本 |
| 📤 数据管理 | 支持书签数据的导入与导出,兼容 Chrome 导出的 HTML 格式 |
- 🛡️ 后台会话安全升级:登录
/admin后将颁发 HttpOnly 会话 Cookie(默认 1 天,可选 1/7/30/60/90 天),凭据不再暴露在 URL 中,并新增一键退出登录。 - 🧹 输入与展示双重校验:新增 URL 规范化、HTML 转义与排序值归一化逻辑,前后台同时防止脏数据和潜在 XSS。
- 🔐 访客投稿可控:通过
ENABLE_PUBLIC_SUBMISSION环境变量即可关闭前台投稿入口,相关接口自动返回 403。 - 🤖 AI 一键自动生成描述:提供 Workers AI、Google Gemini 和 OpenAI 接口。
- 🖼️ Logo 自动生成:默认使用 faviconsnap.com 接口,可在环境变量中自定义。
- 📦 导入导出数据:提供书签数据的导入与导出,支持 Chrome 导出的 HTML 格式一键导入。
准备工作:你需要一个 Cloudflare 账号。
点击上方 "Fork on GitHub" 按钮,并点上 ⭐ Star!
点击上方按钮跳转到 Cloudflare,然后选择连接到 GitHub,授权后选择刚才 Fork 的项目。
点击 开始设置 后,需要填写构建输出目录为 public,其他保持默认即可。
- 在 Cloudflare 控制台,进入
存储和数据库→D1 SQL 数据库。 - 点击
创建数据库,数据库名称输入book,然后创建。
-
在 Cloudflare 控制台,进入
存储和数据库→Worker KV。 -
点击
创建命名空间,名称输入NAV_AUTH。
-
创建后,为此 KV 添加两个条目,用于设置后台登录的 用户名 和 密码:
admin_username:你的管理员用户名(例如admin)admin_password:你的管理员密码
- 进入你刚刚创建的 Pages 项目的
设置→绑定。 - 点击
添加绑定,选择D1 数据库:- 变量名称:
NAV_DB - D1 数据库:选择你创建的
book
- 变量名称:
- 点击
添加绑定,选择KV 命名空间:- 变量名称:
NAV_AUTH - KV 命名空间:选择你创建的
NAV_AUTH
- 变量名称:
- 如需使用 Cloudflare Workers AI,继续点击
添加绑定,选择Workers AI:- 变量名称:
AI
- 变量名称:
点击项目的 部署 选项,在最后一次的部署后边选择 重新部署,等待部署完成,绑定自定义域名即可开始使用。
本地开发依赖
wrangler.toml。仓库提供了可提交的wrangler.example.toml模板,真实配置文件仍会被.gitignore忽略,避免误提交资源 ID 或密钥。
# 安装依赖(TailwindCSS / Husky)
npm install
# 复制本地配置模板,并填入你自己的 D1/KV 资源 ID
cp wrangler.example.toml wrangler.toml
# 构建 CSS(首次或修改 tailwind.css 后执行)
npm run build:css
# 启动本地开发服务器
npm run dev
# 本地执行数据库 schema(可选)
npx wrangler d1 execute book --local --file=schema.sql| 绑定名 | 类型 | 说明 |
|---|---|---|
NAV_DB |
D1 | 主数据库绑定(必需) |
NAV_AUTH |
KV | 会话、限流、缓存标记存储(必需) |
| 绑定名 | 类型 | 说明 |
|---|---|---|
AI |
Workers AI | 使用 Cloudflare Workers AI 生成描述时必需 |
| 变量名 | 默认值 | 说明 |
|---|---|---|
ENABLE_PUBLIC_SUBMISSION |
false |
是否允许访客投稿 |
SITE_NAME |
灰色轨迹 |
首页站点名称(环境变量兜底) |
SITE_DESCRIPTION |
一个优雅、快速、易于部署的书签(网址)收藏与分享平台,完全基于 Cloudflare 全家桶构建 |
首页副标题(环境变量兜底) |
FOOTER_TEXT |
曾梦想仗剑走天涯 |
首页页脚文案 |
ICON_API |
https://faviconsnap.com/api/favicon?url= |
自动补全 logo 的接口前缀 |
AI_REQUEST_DELAY |
1500 |
AI 一键补全描述调用间隔(毫秒) |
TURNSTILE_SITE_KEY |
空 | Cloudflare Turnstile 站点密钥;与 TURNSTILE_SECRET_KEY 同时配置后启用后台登录与公开投稿人机验证 |
TURNSTILE_SECRET_KEY |
空 | Cloudflare Turnstile 机密密钥;与 TURNSTILE_SITE_KEY 同时配置后启用后台登录与公开投稿人机验证 |
DISPLAY_CATEGORY已废弃,当前版本不会读取该变量。
- 首页名称/副标题等支持后台设置项的字段,优先读取数据库
settings,环境变量作为兜底。 AI_REQUEST_DELAY在代码中的默认兜底为1500;本地可按 API 限频自行调整。
💡 提示:如使用免费的 Gemini API Key(模型
gemini-2.5-flash-lite),频率限制为 15 次/分钟,请根据实际情况调整AI_REQUEST_DELAY。
后台管理页面地址为:
https://你的域名/admin
后台登录凭据存放在 NAV_AUTH KV 中的 admin_username 与 admin_password 两个键内。登录 /admin 时需要在页面表单中输入账号与密码,系统会返回一个 HttpOnly 会话 Cookie(默认 1 天,可选 1/7/30/60/90 天),无需也不再支持在 URL 查询参数中传递凭据。点击后台右上角的 "退出登录" 按钮即可立即销毁会话。
如需给后台登录与公开投稿增加 Cloudflare Turnstile 人机验证,请在 Cloudflare Turnstile 控制台创建站点后,将站点密钥配置为 TURNSTILE_SITE_KEY,机密密钥配置为 TURNSTILE_SECRET_KEY。两个变量都为空时会保持原流程;只配置其中一个会提示配置不完整。
/admin无法登录或反复跳回登录页:确认已绑定NAV_AUTH,并在该 KV 中创建admin_username、admin_password。- 首页 500 或数据为空:确认
NAV_DB已正确绑定到book数据库,且已执行过schema.sql。 - 前台看不到投稿入口:确认
ENABLE_PUBLIC_SUBMISSION=true(字符串或布尔都可,代码会统一转换)。 - 修改了
public/css/tailwind.css但样式未生效:先执行npm run build:css再重新部署。
| 类别 | 技术 |
|---|---|
| 计算 | Cloudflare Workers |
| 数据库 | Cloudflare D1 |
| 存储 | Cloudflare KV |
| 前端框架 | TailwindCSS |
- 🎨 2026-06-07:增加手机卡片设置
- 🎨 2026-06-06:首页设置预览与页脚优化
- 🎞️ 2026-06-05:新增卡片动画并隐藏图标
- 🔧 2026-05-28:拆分设置模块并补充测试
- 🛡️ 2026-05-06:完善投稿审核与安全校验
- 🐞 2026-05-05:修复后台HTML转义
- 🔧 2026-04-20:补缓存头并清理资源
- 🔧 2026-04-19:精简字体与后台逻辑
- ⚡ 2026-04-17:深度优化首页性能
- ⚡ 2026-03-31:优化查询与缓存一致性
- 🐞 2026-03-27:稳定首页缓存与搜索
- 🛡️ 2026-03-15:增加CSRF安全防护
- 🛡️ 2026-03-14:强化SQL注入防护
- 🔧 2026-03-07:统一数据库迁移流程
- 🖼️ 2026-03-04:更新图标获取接口
- ⚡ 2026-02-26:优化首页交互与文档
- ⚡ 2026-02-24:优化缓存策略并提升加载性能
- 🖼️ 2026-02-23:优化壁纸功能与加载体验,并补充文档说明
- 🐞 2026-01-24:修复若干问题并提升稳定性,并加强登录安全
- ⚡ 2026-01-20:优化缓存策略并提升加载性能
- ⚡ 2026-01-19:优化缓存策略并提升加载性能
- 🔧 2026-01-16:美化后台管理界面,隐藏待审核列表
- 🎨 2026-01-15:优化卡片样式与后台界面体验
- ⚡ 2026-01-10:优化缓存策略并提升加载性能
- 🧰 2025-12-30:更新文档与部署使用说明
- 🐞 2025-12-29:修复若干问题并提升稳定性
- 📦 2025-12-27:增强导入导出与批量管理能力
- 📂 2025-12-25:增强分类结构与私密数据支持
- 🖼️ 2025-12-24:优化壁纸功能与加载体验
- 📦 2025-12-23:增强导入导出与批量管理能力,并增强分类能力
- 🐞 2025-12-22:修复若干问题并提升稳定性
- 🎨 2025-12-20:优化卡片样式与后台界面体验,并修复多项问题
- 📂 2025-12-19:增强分类结构与私密数据支持,并修复多项问题
- 🎨 2025-12-18:优化卡片样式与后台界面体验,并增强分类能力
- 🧰 2025-12-14:更新文档与部署使用说明
欢迎通过 Issue 或 Pull Request 为本项目贡献代码、提出问题或建议!
- Fork 本仓库
- 创建你的功能分支:
git checkout -b feature/amazing-feature - 提交你的更改:
git commit -m 'Add some amazing feature' - 推送到你的分支:
git push origin feature/amazing-feature - 创建一个 Pull Request
本项目采用 MIT 许可证。
如果你喜欢这个项目,请给它一个 ⭐️!











