← на главную колофон · как это устроено
Колофон
На чём работает xmr.club, почему мы это выбрали и от чего сознательно отказались. Публично, чтобы аудитор (или форк) не угадывал.
Рантайм
- Cloudflare Workers — SSR + JSON-API на edge.
- Cloudflare D1 — SQLite на edge. Провайдеры, аудит-лог, обзоры, спонсорство.
- Cloudflare KV + R2 — горячие кэши + лого/OG + /data.json (CC-BY-4.0).
- Tor hidden service — отдельный контейнер, проксирующий xmr.club. Отпечаток: /transparency.
Фронтенд
- SSR-first (Astro). Каждая страница рендерит осмысленный HTML до запуска JS. Тестируется в Tor safest mode + Lynx + curl.
- Без CSS-фреймворка. Одна ручная таблица стилей. Три темы: светлая / тёмная / авто.
- Без аналитики и фингерпринта. Никаких GA, Plausible.
Данные + контент
- Записи провайдеров в D1, редактируются админ-воркером. Каждое изменение пишет аудит-строку в /audit.
- Длинные гайды — TypeScript-модули в <code>lib/guides.ts</code>.
- Onion-верификация на ежедневном cron. Дрейф: /onion-audit.
- Открытые данные.
/data.json + JSON-двойники по фидам. CC-BY-4.0.
Редакционный бот
- @xmrclub_bot в Telegram — отдельный воркер на
bot.xmr.club. - Заявки, правки, спонсорство — через бот или /submit.
От чего сознательно отказались
- Без paywall, регистрации и e-mail-гейта. Авторитет — из публичной проверяемости.
- Без сторонней аналитики. Никаких GA, Hotjar или Sentry session-replay.
- Без CMS со ступенью сборки. Правки идут в D1 и появляются за один TTL edge-кэша.
- Никаких "обзоров от ИИ". Каждый обзор написан куратором вручную.
Стек, который мы порекомендуем форку
- Если стартуете с нуля и хотите такую же форму: Cloudflare Workers + D1 + KV. ~$5/мес всё включено.
- Если не хотите Cloudflare: Bun + SQLite + Caddy работают так же.
- Хотите статичный форк (без D1): экспортируйте /data.json и рендерьте чем угодно.
Операционные расходы (прозрачность)
Мы намеренно не публикуем фиксированную «месячную сумму». CF Workers + D1 + KV + R2; основная переменная — D1 reads, и неиндексированные сканы могут разогнать месяц до сотен долларов до того, как индекс будет добавлен. Модель: /transparency.