└─ cd ../projects

// case study · self-hosted infra · [●] live

Pastebox

Self-hosted pastebin со сквозным шифрованием — делиться кодом и секретами из терминала. CLI + API, E2EE, burn-after-read, TTL и вебхуки, полный контроль над своими данными.

typescriptfastifydrizzlepnpm-monorepodockere2eeclimcp
└─01

ИДЕЯ

Публичные pastebin'ы — это чужой сервер видит твои секреты. А кидать конфиг, лог или одноразовый токен коллеге надо постоянно. Хотелось своё: на своём хосте, с шифрованием, и чтобы работало прямо из терминала — запайпил вывод команды и получил ссылку.

Pastebox — это API + CLI + доки, self-hosted одной Docker-командой. Контент можно шифровать в браузере (ключ живёт только в URL-фрагменте и не доходит до сервера), ставить срок жизни, жечь после первого чтения и слать события в вебхуки/Telegram.

└─02

CLI-FIRST

// запайпил — получил ссылку
zsh — ~/work
$ echo "super secret" | pastebox create --e2ee
✓ https://paste.example.com/p/aBcDeFgH#key=…   // шифр в браузере, ключ в URL

$ git diff | pastebox create --syntax diff --title "My changes"
✓ https://paste.example.com/p/9f3k2pQ

$ pastebox create --file secret.txt --burn --title "One-time secret"
✓ https://paste.example.com/p/x7YzL0   // сгорит после первого чтения

$ cat /var/log/app.log | pastebox create --syntax log --ttl 3600
✓ https://paste.example.com/p/Qw3rT5   // истечёт через час

$ pastebox list --limit 3
ID        TITLE             AGE   TTL
9f3k2pQ   My changes        2m    —
x7YzL0    One-time secret   5m    burn
Qw3rT5    —                 8m    59m
└─03

ЧТО ВНУТРИ

e2ee

Сквозное шифрование: контент шифруется в браузере, ключ живёт только в URL-фрагменте и до сервера не доходит.

envelope

Серверный режим на XChaCha20-Poly1305 — per-paste ключи под мастер-ключом, military-grade AEAD.

burn-after-read

Паста самоуничтожается после первого просмотра — для одноразовых секретов и токенов.

ttl

Срок жизни на пасту; истёкшее чистится фоновым воркером автоматически.

webhooks

События пасты по HTTP с HMAC-SHA256 подписью и авто-ретраями.

telegram

Привязка Telegram-чата — мгновенные уведомления о новых пастах.

cli + stdin

Полноценный CLI: create/get/list/delete, авто-подсветка по расширению, пайп из stdin.

self-hosted

Своя инфра одной Docker-командой: Caddy, бэкапы, конфиг под деплой в Coolify.

└─04

АРХИТЕКТУРА

// pnpm-монорепо
apps/cli pastebox CLI stdin · create/get/list
clients REST API · webhooks API-ключи pb_…
HTTP
apps/api Fastify + workers валидация Zod · TTL-cleanup
envelope-крипто (packages/shared)
Drizzle SQL
storage PostgreSQL пасты · ключи · события
└─05

ДЛЯ АГЕНТОВ

// агент сложил → отдал ссылку → чат чистый

Pastebox можно сделать дефолтным «sink» для вывода кодинг-агента: вместо простыней логов, диффов и дампов в чат — агент кладёт их в Pastebox и отдаёт ссылку. Два способа подключения:

  • MCP-сервер pastebox-mcp (npm) — нативный инструмент create_paste для любого MCP-совместимого агента: npx -y pastebox-mcp, auth через env.
  • Скачиваемые скилы под Claude Code, Codex, Cursor и generic — учат агента, когда и как пастить; качаются прямо с лендинга одним zip.
  • Без E2EE по MCP/curl: для секретов остаётся CLI pastebox --e2ee --burn — это явно прописано в описании тула и доках, чтобы агент не слил токен.
pastebox.devisfun.ru/#for-agents⤢ развернуть
For Agents «For Agents» — карточки Claude Code / Codex / Cursor / любой MCP-агент + скачивание
└─06

СКРИНШОТЫ

// клик = полный размер · pastebox.devisfun.ru
pastebox.devisfun.ru⤢ развернуть
Лендинг Лендинг — фичи: E2EE, envelope, burn, TTL, webhooks, Telegram
└─07

СТЕК

├─ backend
Node.js TypeScript Fastify Drizzle ORM PostgreSQL
├─ tooling
pnpm workspaces esbuild Vitest Zod
├─ crypto
XChaCha20-Poly1305 E2EE HMAC-SHA256
└─ infra
Docker Caddy Coolify VitePress GitHub Actions

Свой шифрованный pastebin — пощупать:

$ open pastebox.devisfun.ru └─ вернуться ко всем проектам