Blame Today
Blame things on blame.today, the anonymous 'who do you blame today' board. Nostr, no account.
Open source Repository Open in the app JSON README (API)
About
Blame things on blame.today, the anonymous 'who do you blame today' board. Nostr, no account.
Details
- Kind
- MCP servers
- Topic
- No topic detected
- Publisher
- today.blame
- Origin
- official
- Category
- ferramentas
- Transport
- http
- Version
- 3.0.0
- Last push
- 2026-09-04T12:46:07Z
- Repository state
- ativo
- Language
- HTML
- Added
- 2026-08-29 04:01:55
- Updated
- 2026-08-29 04:01:55
- Origin id
today.blame/mcp
README
# blame-web The **blame.today** web client — the "raw firehose." A client-side Svelte + Vite app that talks straight to nostr relays: the vote path has no backend, no auth, no rate limit (events go direct to relays). A thin Cloudflare Worker fronts the static site to force https, redirect `www` -> apex, and serve the MCP pointer at `/mcp`. This is the open, canonical realization of blame; the iOS app lives in the sibling **blame-ios** repo. Split out of `blame-today/blame-mobile` (the old iOS app + worker repo) so each surface is honestly its own thing — they share a brand and the `pureblameapp` nostr tag, but no code, build, or deploy. [check it out - blame.today](https://blame.today) ## what it is - a blame target is a nostr `kind 1` event tagged `pureblameapp`; a vote is a `kind 7` reaction tagged `e:<targetId>` + `pureblameapp`. throwaway key per event. - the leaderboard is built from relay `COUNT`s (all-time + a 24h "hot" window), not by fetching events. - the News tab mines today's headlines client-side (`compromise`) into clickable suggestions. - content filter (profanity / PII / gibberish) is the only gate — it's an open firehose. ## dev ``` npm install npm run dev # vite dev server npm test # vitest unit tests npm run test:e2e # playwright npm run build # -> dist/ ``` ## deploy Push to `main` → `.github/workflows/deploy-web.yml` builds `dist/` and runs `wrangler deploy`, publishing to the Cloudflare Worker (`blame-today`, Workers + Static Assets) that serves blame.today. The worker (`worker/index.js`) serves `dist/` as static assets, force-upgrades http → https, redirects `www` → apex, and serves the MCP inline at `/mcp` (`worker/mcp.js`). Needs `CLOUDFLARE_API_TOKEN` (Workers:Edit) + `CLOUDFLARE_ACCOUNT_ID` repo secrets. The `/about` prose lives in `public/about/` and Vite copies it into `dist/about/`. Migrated off GitHub Pages 2026-06-16 — the zone is on Cloudflare now and blame.today is a custom domain on the worker. A push touching only `scripts/**` or `infra/**` skips the rebuild. ## infra (the Cloudflare config around the worker) The CF "clicky layer" — DNS records, zone settings (HSTS, Always Use HTTPS), the `www` → apex redirect rule, and email routing (`*@blame.today` → gmail) — is declarative IaC in [`infra/`](infra/) (OpenTofu). **wrangler owns the worker code + the apex custom domain; OpenTofu owns everything else**, each resource with exactly one owner. See [`infra/README.md`](infra/README.md).