Card moved to Researched
[2026-04-06T08:09:25+00:00] Phase 1: Research...
Research brief saved to `blog/pipeline/.research-notes.md`. Here's what was found:
**Three ERCs submitted within 4 days of each other in March 2026:**
| ERC | Author | Problem |
|-----|--------|---------|
| ERC-8191 | @chasseurmic (Cadence Protocol) | Recurring billing — supersedes failed ERC-1337 |
| ERC-8190 | @kimbo128 | Micropayment channels with signed vouchers (2 on-chain txs for unlimited off-chain interactions) |
| ERC-8187 | Guillermo Narvaja (Amxx/OpenZeppelin feedback) | Spending from yield positions without maintaining liquid balances |
**No existing article overlap** — the blog's ERC-8183 post is a natural companion (discrete job escrow vs. streaming payments).
**Three angles proposed; recommended Angle 1:**
> *"The Missing Subscription Primitive: ERC-8191 and the Case for Standardized On-Chain Billing"*
Focus on ERC-8191 as the richest/most tutorial-ready spec, using ERC-1337's failure and ERC-5643's limitations as the "why this matters" narrative. The outline covers: failed predecessors → interface walkthrough → the `PastDue` non-storage design decision → soft-fail collection + keeper model → extensions/composability with ERC-8187 and ERC-8183 → open questions → Ethernal tie-in (every `collectPayment()` call and `PaymentFailed` event is a queryable on-chain transaction).
[2026-04-06T08:18:41+00:00] Phase 1 complete. Research notes saved.
[2026-04-06T08:18:41+00:00] Phase 2: Draft...
::article-path:: blog/src/content/blog/erc-8191-onchain-recurring-payments.md
[2026-04-06T08:20:45+00:00] Phase 2 complete. Article: blog/src/content/blog/erc-8191-onchain-recurring-payments.md
[2026-04-06T08:20:45+00:00] Phase 3: Humanize...
Zero em dashes remaining. Here's what changed:
- **13 em dashes removed** throughout, replaced with periods, commas, colons, or parentheses
- **Bold-header bullets** in the keeper model section converted to prose paragraphs (two bullets with `**Global keepers**:` / `**Per-merchant keepers**:` format)
- **Table header** "What It Enables" corrected to sentence case
- **Open questions section** reformatted from bold-header paragraph starters to `###` subheadings
- **"Two details are worth unpacking"** replaced with a more direct construction
- **Code block em dashes** (in the three-layer stack diagram) replaced with colons
- **Added a first-person opinion** in the keeper section ("I think the two-tier approach gets it right") and a brief observation about the three ERCs appearing together ("That's not a coincidence")
- **One attribution style** tightened: "unlimited off-chain service requests settled with only two on-chain transactions" preserved but the em dash before it replaced with a colon
::done::
[2026-04-06T08:24:26+00:00] Phase 3 complete.
[2026-04-06T08:24:26+00:00] Validating blog build...
08:24:30 [content] Syncing content
08:24:31 [content] Synced content
08:24:31 [types] Generated 807ms
[2026-04-06T08:24:31+00:00] Build validation passed.
[2026-04-06T08:24:31+00:00] Generating cover image...
Generating image with model: gemini-3.1-flash-image-preview
Prompt: Flat vector flow diagram on dark navy background (#0f172a) with subtle dot grid pattern overlay. Topic: Payments & Streams. Use rounded pill-shaped boxes in steel blue (#4a8ecb) with soft shadows, connected by thin arrows. 2-4 labeled elements showing a simple relationship or flow. Large readable white text labels. Centered composition with lots of whitespace. Style: polished Figma mockup, NOT realistic 3D icons, NOT wireframes, NOT text-heavy. No gradients, no glow effects.
Attempt 1...
Done. Cover: 1047008 bytes, OG: 747851 bytes
/opt/ethernal-blog-stack/blog/public/images/erc-8191-onchain-recurring-payments.png
/opt/ethernal-blog-stack/blog/public/images/erc-8191-onchain-recurring-payments-og.png
[2026-04-06T08:24:51+00:00] Regenerating llms.txt...
Blog Pipeline Failure
Phase: Unexpected error (line 306)
Topic: Payments & Streams
Card ID: PVTI_lADOBLpTN84BRc80zgnN3-Y
Date: 2026-04-06T08:24:51+00:00
Log file:
/var/log/blog-pipeline/draft-20260406-080920.logLast 50 lines of log