xmr.club ask search guides
← 首页

版权信息(Colophon)

xmr.club 跑在什么上、为什么选它、又刻意拒绝了什么。公开发布,方便任何想审计或想分叉这个站点的人不用猜。

运行时

  • Cloudflare Workers — 请求时 SSR + JSON API。在边缘渲染 HTML,JS 还没跑就已经有内容了。
  • Cloudflare D1 — 边缘 SQLite。存放服务条目、审计日志、评论、赞助、洋葱探测结果。读副本;写操作通过主节点串行化。
  • Cloudflare KV — 小而热的缓存(限流计数器、幂等键、/ask 分类器缓存)。最终一致;不存储无法重建的数据。
  • Cloudflare R2 — 服务方 logo + OG 图 + 公开的 /data.json 快照。CC-BY-4.0;欢迎镜像。
  • Tor 隐藏服务 — 独立 Docker 容器,Caddy 站点块按 Host 匹配将流量回源到 https://xmr.club,并加上 X-Onion-Origin 头,让 worker 把出站链接改写为对应的服务方 .onion。指纹公开于 /transparency

前端

  • SSR 优先。 每个公开页面都在 JS 跑起来之前先渲染出有意义的 HTML。在 Tor "最严格"模式 + Lynx + curl 下都测试过。AI 表面地图暴露了每个页面的纯文本孪生体。
  • React + react-router-dom 用于交互式表面(管理后台、/q 筛选、/search)。SSR 是底线;SPA 是增强。在没有 JS 时更好用的页面(glossary、transparency、peers、colophon)是 SSR-only——SPA 接管会硬跳回服务端渲染,避免用空白客户端 HTML 把好好的 HTML 替换掉。
  • 没有 CSS 框架。 一份手写的 /src/styles.css。单色背景 + 一种强调色。三种主题:light / dark / auto,通过基于 cookie 的 /toggle-theme 路由切换,所以无 JS 客户端也能切。
  • 没有分析、没有指纹。 不用 GA、不用 Plausible、不用 Cloudflare Web Analytics。流量通过 Cloudflare 的请求日志衡量(这本来就为 worker 收集,不可归因到用户个体)。
  • Service worker 在空闲时注册,提供 network-first 的回退缓存。失败静默;没有它站点也能跑。

数据与内容

  • 服务条目存在 D1,通过管理 worker 编辑。每次状态变化都会写一条审计记录(在 /audit 可见),并清掉相关边缘缓存键。
  • 长文指南worker/guides.ts 下的 TypeScript 模块。选代码而非 Markdown,是为了拿到类型校验的内部跳转、schema.org HowTo 块、以及每篇指南各自的 JSON-LD 生成——无需额外构建步骤。
  • Logo 优先 SVG,PNG 兜底。存在 R2 上,附带长缓存策略与路径中带不可变 hash。
  • 洋葱验证由每日 cron 跑:抓取每条上架服务的 Onion-Location 并与我们的记录比对。漂移会在 /onion-audit 暴露。
  • 开放数据。 /data.json + 每个 feed 的 JSON 孪生体。CC-BY-4.0。我们自己也用它来跑入库测试。

AI 引擎表面

  • /llms.txt + /llms-full.txt — 面向 LLM 爬虫的 RFC 风格站点索引。
  • 每个页面的纯文本孪生体位于 /llm/<page>.txt — 同样内容,无外壳,结构便于解析。
  • JSON Feed v1.1 位于 /feed.json,与 Atom 并行——现代爬虫更偏好这个。
  • Speakable schema 标注在长文页面上 — 语音助手友好的摘要提示。
  • 设计原则:每个被助手引用的表面都同时回指一个规范的 HTML URL 一个纯文本孪生体,方便复核而无需抓 HTML。

编辑机器人

  • @xmrclub_bot(Telegram)— 独立的 Cloudflare Worker,部署在 bot.xmr.club,与公开站点除了一个单向通知 webhook 外没有任何关联。DM 转入私有支持群;回复再转回用户。编辑本人的 Telegram 不暴露。
  • 提交更正赞助咨询都通过这个机器人或 /submit。两个入口都写入 D1;机器人通过共享密钥 X-Bot-Notify 头通知支持群。

我们刻意拒绝了什么

  • 不设付费墙、不要注册、不要邮箱门槛。 权威来自"任何人都能现场验证"。受门控的目录无法被相互交叉核对。
  • 不接第三方追踪。 不上 GA、不上 Hotjar、不上 Sentry 会话回放。一个跑追踪器的隐私目录等于自己不相信自己的论点。
  • 不绑前端框架。 SSR 是事实来源;SPA 是可以随时拆掉的增强。
  • 不接构建步 CMS。 不用 Astro、Next、Gatsby。内容改动直接落入 D1,在一个边缘缓存 TTL 之内就出现。静态重建在按服务方调度审计的节奏下无法扩展。
  • 不出 "AI 生成的评测"。 站上每篇评测都是编辑亲笔。AI 工具用于起草 schema 和审计代码;绝不让 LLM 给服务方打分。

推荐分叉栈

  • 从零开始且想用相同形状:Cloudflare Workers + D1 + KV。在 1000 万请求/日之内大约 5 美元/月。
  • 不想要 Cloudflare:Bun + SQLite + Caddy 等价可行。SSR 优先意味着边缘并不是关键依赖——只是一个延迟优化。
  • 想做完全静态分叉(不要 D1):导出 /data.json,用任何东西渲染都行。许可是 CC-BY-4.0,需署名。

运营成本(透明披露)

2026-05 的月度大致成本:Cloudflare Workers + D1 + KV + R2 ≈ 免费额度内(远低于 10 万请求/日的门槛)。洋葱基础设施的边际成本是隐藏服务容器(≈ 0 美元)。域名和那串 .onion 前缀的虚名挖矿是仅有的真金白银开销。资金模型见 /transparency

致谢

/heroes,那里列了 xmr.club 依赖的开源项目和生态参与者。看 /peers,那里是我们交叉互校的独立目录同行。