[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81246":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":15,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":9,"pushedAt":9,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":14,"starSnapshotCount":14,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},81246,"quickshare-cloudflare","joeseesun\u002Fquickshare-cloudflare","joeseesun","QuickShare on Cloudflare Workers with R2, D1 and per-user content management",null,"JavaScript",34,17,21,0,13,3.77,false,"main",true,[],"2026-06-12 02:04:12","# QuickShare Cloudflare\n\n> 把 AI 生成的 HTML、Markdown、SVG、Mermaid 变成一个干净链接，部署在你自己的 Cloudflare 账号里。\n> Paste AI-generated HTML, Markdown, SVG, or Mermaid and share it from your own Cloudflare stack.\n\n[![Deploy to Cloudflare](https:\u002F\u002Fdeploy.workers.cloudflare.com\u002Fbutton)](https:\u002F\u002Fdeploy.workers.cloudflare.com\u002F?url=https:\u002F\u002Fgithub.com\u002Fjoeseesun\u002Fquickshare-cloudflare)\n[![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fjoeseesun\u002Fquickshare-cloudflare?style=social)](https:\u002F\u002Fgithub.com\u002Fjoeseesun\u002Fquickshare-cloudflare\u002Fstargazers)\n[![GitHub forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002Fjoeseesun\u002Fquickshare-cloudflare?style=social)](https:\u002F\u002Fgithub.com\u002Fjoeseesun\u002Fquickshare-cloudflare\u002Fforks)\n[![Issues](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fjoeseesun\u002Fquickshare-cloudflare)](https:\u002F\u002Fgithub.com\u002Fjoeseesun\u002Fquickshare-cloudflare\u002Fissues)\n[![Last commit](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002Fjoeseesun\u002Fquickshare-cloudflare)](https:\u002F\u002Fgithub.com\u002Fjoeseesun\u002Fquickshare-cloudflare\u002Fcommits\u002Fmain)\n[![License: ISC](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-ISC-blue.svg)](#license)\n\n![QuickShare 首页：粘贴 Markdown 后自动识别内容类型](docs\u002Fassets\u002Fquickshare-home.png)\n\n**[中文](#中文) | [English](#english)**\n\n---\n\n\u003Ca name=\"中文\">\u003C\u002Fa>\n## 中文\n\n你让 AI 写了一个 HTML Demo、一段 Markdown 文档、一个 SVG 图标或一张 Mermaid 流程图。\n\n发给别人时，最麻烦的不是内容本身，而是怎么让对方不用下载文件、不用登录平台、点开链接就能看。\n\nQuickShare Cloudflare 把这件事压到一个动作：粘贴内容，生成链接。\n\n内容正文进 R2，索引和权限进 D1，页面跑在 Cloudflare Workers。你拥有数据，也拥有部署。\n\n![QuickShare 生成分享链接，并可切换 5 位访问密码](docs\u002Fassets\u002Fquickshare-generated-link.png)\n\n## 为什么值得用\n\n- **专为 AI 生成内容准备**：HTML、Markdown、SVG、Mermaid 都能粘贴，自动识别类型并按合适方式渲染。\n- **一键部署到 Cloudflare**：Worker、Static Assets、R2、D1 都走同一个仓库配置，适合 Fork 后快速改成自己的工具。\n- **正文不塞数据库**：大段内容放 R2，D1 只保存 ID、时间、类型、密码状态、owner 等元数据。\n- **无账号的个人后台**：每个浏览器自动获得 owner cookie，只管理自己创建的内容。\n- **可选 5 位数字密码**：适合临时发给朋友、客户、群聊或测试用户，不需要注册系统。\n- **可编辑、可删除、可切换保护**：后台能查看列表、编辑正文、复制链接、打开预览、删除过期内容。\n\n## 适合场景\n\n| 你有这些内容 | 用 QuickShare 后 |\n| --- | --- |\n| AI 生成的 HTML 小页面 | 发一个 `\u002Fview\u002F\u003Cid>` 链接，对方直接看效果 |\n| Markdown 文档或提示词 | 自动渲染成可读页面，不用贴进聊天窗口刷屏 |\n| SVG 图标或 Mermaid 图 | 生成可分享预览，方便团队快速确认 |\n| 临时内部资料 | 开启 5 位访问密码，降低误传播风险 |\n\n## 功能截图\n\n![QuickShare 分享页：Markdown 和 Mermaid 会被渲染成可读页面](docs\u002Fassets\u002Fquickshare-rendered-page.png)\n\n| 内容管理后台 | 访问密码 |\n| --- | --- |\n| ![QuickShare 后台：按浏览器 owner 管理自己的分享内容](docs\u002Fassets\u002Fquickshare-admin.png) | ![QuickShare 密码访问页：输入 5 位数字密码后查看内容](docs\u002Fassets\u002Fquickshare-password-gate.png) |\n\n## 一键部署\n\n点击顶部的 **Deploy to Cloudflare** 按钮，Cloudflare 会读取 `wrangler.jsonc`，并在部署流程中绑定：\n\n- D1 数据库：`DB`\n- R2 存储桶：`CONTENT_BUCKET`\n- Static Assets：`ASSETS`\n- Worker 入口：`src\u002Fworker.js`\n\n部署命令来自 `package.json`：\n\n```bash\nnpm run db:migrate:remote && wrangler deploy\n```\n\n部署完成后建议立刻在 Cloudflare 控制台里修改变量：\n\n```txt\nAUTH_ENABLED=true\nAUTH_PASSWORD=\u003Cyour-strong-password>\nCOOKIE_SECRET=\u003Copenssl rand -hex 32>\n```\n\n`AUTH_ENABLED=true` 会保护首页和创建接口；已经生成的分享页仍然可以公开访问，除非你给单条内容开启访问密码。\n\n## 本地开发\n\n### 前置条件\n\n- [ ] 安装 Node.js 20+：`node --version`\n- [ ] 安装依赖：`npm install`\n- [ ] 登录 Cloudflare CLI：`npx wrangler login`\n- [ ] 本地应用 D1 迁移：`npm run db:migrate:local`\n\n### 启动\n\n```bash\nnpm run dev\n```\n\n默认地址通常是 `http:\u002F\u002F127.0.0.1:8787`，以 Wrangler 输出为准。\n\n### 验证\n\n```bash\nnpm run check\n```\n\n这个命令会执行 `wrangler deploy --dry-run`，用于确认 Worker 配置、模块入口和绑定没有明显问题。\n\n## 手动部署\n\n不使用 Deploy Button 时，可以自己创建资源：\n\n```bash\nnpx wrangler d1 create quickshare-db\nnpx wrangler r2 bucket create quickshare-content\n```\n\n把 D1 输出里的 `database_id` 写回 `wrangler.jsonc`，然后运行：\n\n```bash\nnpm run deploy\n```\n\n## 刷新 README 截图\n\n先启动本地服务：\n\n```bash\nnpm run dev\n```\n\n再开一个终端运行：\n\n```bash\nnpm run capture:screenshots\n```\n\n如果你的本地服务不是 `8787` 端口：\n\n```bash\nSCREENSHOT_URL=http:\u002F\u002F127.0.0.1:9000 npm run capture:screenshots\n```\n\n截图会写入 `docs\u002Fassets\u002F`。\n\n## 数据模型\n\n```mermaid\nflowchart LR\n  User[\"User pastes content\"] --> Worker[\"Cloudflare Worker\"]\n  Worker --> R2[\"R2: pages\u002F{id}.txt\"]\n  Worker --> D1[\"D1: id, owner, type, password, timestamps\"]\n  D1 --> Admin[\"Owner-only admin\"]\n  R2 --> View[\"Public \u002Fview\u002F{id} page\"]\n```\n\nD1 表 `pages` 保存：\n\n- `id`：短链接 ID\n- `r2_key`：R2 对象 key\n- `created_at` \u002F `updated_at`：创建和更新时间\n- `owner_key`：浏览器 owner 身份哈希\n- `password` \u002F `is_protected`：访问密码和保护状态\n- `code_type`：`html`、`markdown`、`svg`、`mermaid`\n- `content_size` \u002F `content_sha256`：正文大小和哈希\n\nR2 对象保存在 `pages\u002F{id}.txt`。\n\n## Fork 后可以改什么\n\n- 换品牌：修改 `APP_NAME`、图标、主题色和 footer。\n- 加登录：把 owner cookie 换成 GitHub、Google、邮箱验证码或 Cloudflare Access。\n- 加过期时间：给 `pages` 表增加 `expires_at`，在读取和后台列表中过滤。\n- 加公开广场：使用 `\u002Fapi\u002Fpages\u002Flist\u002Frecent` 做最近分享列表。\n- 加自定义域名：在 Cloudflare Workers 路由里绑定你的域名。\n\n## Troubleshooting\n\n| 问题 | 解决方法 |\n| --- | --- |\n| `No such module` 或静态资源 404 | 确认执行过 `npm install`，并通过 `npm run dev` 启动 Wrangler。 |\n| D1 本地表不存在 | 运行 `npm run db:migrate:local`，再重启 `npm run dev`。 |\n| 部署时报 D1 `database_id` 错误 | 手动部署时需要把 `wrangler d1 create` 输出写回 `wrangler.jsonc`；Deploy Button 流程会自动处理绑定。 |\n| 首页任何人都能打开 | 默认 `AUTH_ENABLED=false` 方便体验；生产环境请在 Cloudflare 控制台设置为 `true`。 |\n| 清理 Cookie 后后台看不到旧内容 | 后台按浏览器 owner cookie 区分内容。旧分享链接仍可访问，但当前浏览器会失去管理权。 |\n\n## 致谢\n\n- [Cloudflare Workers](https:\u002F\u002Fworkers.cloudflare.com\u002F)\n- [Cloudflare R2](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fr2\u002F)\n- [Cloudflare D1](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fd1\u002F)\n- [marked](https:\u002F\u002Fgithub.com\u002Fmarkedjs\u002Fmarked)\n- [Playwright](https:\u002F\u002Fplaywright.dev\u002F) 用于生成 README 截图\n\n## License\n\nISC\n\n---\n\n\u003Ca name=\"english\">\u003C\u002Fa>\n## English\n\nQuickShare Cloudflare turns AI-generated HTML, Markdown, SVG, and Mermaid into shareable links on your own Cloudflare account.\n\nIt stores large content bodies in R2, keeps metadata in D1, and serves everything through Cloudflare Workers.\n\n## Features\n\n- Paste HTML, Markdown, SVG, or Mermaid and get a clean `\u002Fview\u002F\u003Cid>` URL.\n- Optional 5-digit password per shared page.\n- R2-backed content storage, D1-backed metadata.\n- Owner-cookie based admin without user accounts.\n- Admin page for listing, editing, opening, copying, protecting, and deleting your own shares.\n- Deploy Button support for fast Cloudflare setup.\n\n## Deploy\n\n[![Deploy to Cloudflare](https:\u002F\u002Fdeploy.workers.cloudflare.com\u002Fbutton)](https:\u002F\u002Fdeploy.workers.cloudflare.com\u002F?url=https:\u002F\u002Fgithub.com\u002Fjoeseesun\u002Fquickshare-cloudflare)\n\nRecommended production variables:\n\n```txt\nAUTH_ENABLED=true\nAUTH_PASSWORD=\u003Cyour-strong-password>\nCOOKIE_SECRET=\u003Copenssl rand -hex 32>\n```\n\n## Local Development\n\n```bash\nnpm install\nnpm run db:migrate:local\nnpm run dev\n```\n\nRun a dry deployment check:\n\n```bash\nnpm run check\n```\n\nRefresh README screenshots:\n\n```bash\nnpm run capture:screenshots\n```\n\nUse another local URL:\n\n```bash\nSCREENSHOT_URL=http:\u002F\u002F127.0.0.1:9000 npm run capture:screenshots\n```\n\n## Architecture\n\n- `src\u002Fworker.js`: Cloudflare Worker routes and API handlers\n- `src\u002Ftemplates.js`: HTML templates for the index, admin, login, password, and error pages\n- `src\u002Frenderers.js`: content type detection and rendering\n- `public\u002F`: static CSS, JS, icons, and assets\n- `migrations\u002F`: D1 schema migrations\n- `docs\u002Fassets\u002F`: README screenshots\n\n## Notes\n\nThe admin page is intentionally lightweight. It uses an owner cookie to separate content created by different browsers. If the cookie is cleared, old public links still work, but that browser loses management access for those pages.\n","QuickShare Cloudflare 是一个基于 Cloudflare Workers 的内容分享工具，支持将 AI 生成的 HTML、Markdown、SVG 和 Mermaid 内容转换为可直接访问的链接。其核心功能包括自动识别粘贴内容类型并进行适当渲染，一键部署到 Cloudflare，以及通过 R2 存储正文和 D1 管理索引与权限。该工具适合需要快速分享文档、图标或图表等场景，尤其是当这些内容由 AI 生成时。用户无需注册即可管理自己创建的内容，并可设置五位数密码以增加安全性。此外，还提供了编辑、删除及切换保护状态的功能，便于个人或团队内部使用。",2,"2026-06-11 04:04:03","CREATED_QUERY"]