Files
smirk-backend-core/examples/paid-relay
jwinterm a455c60ed0 docs: operator console guide + fix example recipes + document all env vars
- New docs/operations/CONSOLE.md: reaching /admin, NIP-98 login, the
  defaults->env->DB precedence model, per-section runtime-safe vs
  restart-required table, expected_versions concurrency, restart_apply_mode
  (with the systemd Restart=always requirement for auto), clearing a DB
  override. Linked from README + OPERATOR_SETUP.
- All six example recipes gained an explicit chain-enablement block
  (FEATURE_XMR/WOW on, BTC/LTC/GRIN off) so they no longer hard-fail
  Config::validate in production (default-on chains with empty sources).
- Documented all 16 previously-undocumented env vars in .env.example
  (RESTART_APPLY_MODE, TOR_ADMIN_ONION, DEPLOYMENT_MODE, TIP_SHARE_BASE_URL,
  ...); RELAY.md gained the premium-post policy + RELAY_WRITE_ALLOWLIST_NPUBS;
  ADMIN_PUBKEYS noted as reserved/inert.
2026-07-19 15:52:07 -04:00
..

paid-relay — free wallet, paid Nostr posting (the flagship)

A free wallet (open + PoW) plus a paid premium tier for general Nostr posting to your relay. Wallet-functional events — encrypted DMs, tips, swap coordination — stay free for registered users; premium unlocks general posting. Recurring revenue tied to a real service. Implements the premium-relay feature.

  • Config: .env.example — RELAY_WRITE_POLICY=premium-post, PREMIUM_ENABLED=true, tiered PREMIUM_PLANS (a built-in discount curve), and the PAYMENT_* processor block (reused from pay-to-register; BTCPay-compatible).
  • Free vs paid: the relay is free for what makes the wallet work; you pay to use it as your everyday relay. Reads stay open (v1); premium gates writes.
  • Money: you sell access to your relay (a fee), non-custodial + pull-model — never hold funds. PAYMENT_CONFIRMATIONS >= 1; validation rejects the unsafe combos.
  • Content: running a relay means hosting user content — a DMCA designated agent, a CSAM-reporting process, and acceptable-use terms apply. See ../LEGAL_AND_OPS.md.
  • Resources: the relay runs beside the wallet backend + LWS, so keep the size / retention / connection / rate caps (in .env.example and the nostr-rs-relay config under deploy/relay); move to RELAY_MODE=external on its own host if load climbs.