Skip to content

⚡ Value-for-Value Lightning payments for Feedbin RSS reader — Alby bounty submission

Notifications You must be signed in to change notification settings

patoo0x/v4v-feedbin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚡ V4V for Feedbin

Value-for-Value Lightning payments inside your Feedbin RSS reader

A browser extension (Chrome + Firefox) that adds WebLN-powered Lightning payments to Feedbin. When a feed contains podcast:value tags (Podcasting 2.0), a Boost panel appears directly in the article view — so you can send sats to creators without ever leaving your reader.

Built by Patoo for the Alby V4V Bounty (150k sats).


✨ Features

Feature Details
🔍 Auto-detection Scans RSS feeds for podcast:value Lightning tags
WebLN payments Uses webln.keysend() via Alby (or any WebLN wallet)
🎛 Split payments Distributes boosts to all recipients by their split percentage
💬 Boostagrams Attach a message with your payment (TLV record 7629169)
🎨 Native UI Clean design that blends with Feedbin's minimal aesthetic
🌙 Dark mode Respects prefers-color-scheme
💾 Smart caching Feeds are cached 10 min to avoid redundant fetches
🔄 SPA-aware MutationObserver + Turbolinks/Turbo event listeners

🏗 Architecture

v4v-feedbin/
├── manifest.json          # MV3 manifest (Chrome + Firefox compat)
├── popup.html             # Extension popup UI
├── src/
│   ├── content.js         # Content script — injected into feedbin.com
│   ├── background.js      # Service worker — CORS-free RSS fetching
│   ├── styles.css         # Content-script styles
│   ├── popup.js           # Popup logic
│   └── popup.css          # Popup styles
├── icons/                 # Extension icons (16, 32, 48, 128px)
└── README.md

🔧 How It Works

  1. Content script (content.js) watches Feedbin's DOM via MutationObserver and URL change polling.
  2. When an entry is viewed, it tries to identify the RSS feed URL (via DOM attributes or Feedbin's own API).
  3. The background service worker (background.js) fetches the RSS/XML — bypassing CORS because the extension has host_permissions for all origins.
  4. The feed XML is parsed for <podcast:value> and <podcast:valueRecipient> elements.
  5. If a Lightning keysend value block is found, a Boost Panel is injected above the article.
  6. On click, webln.keysend() is called for each recipient according to their split percentage.
  7. A boostagram TLV record (7629169) is included with the podcast name, app name, and optional message.

📦 Installation

From source (Developer Mode)

  1. Clone this repo:

    git clone https://github.com/patoo0x/v4v-feedbin.git
    cd v4v-feedbin
  2. Chrome / Brave / Edge:

    • Go to chrome://extensions
    • Enable Developer mode
    • Click Load unpacked → select this directory
  3. Firefox:

    • Go to about:debugging#/runtime/this-firefox
    • Click Load Temporary Add-on → select manifest.json
  4. Install Alby browser extension and connect your Lightning wallet.

  5. Visit feedbin.com and open any feed with podcast:value support!


🎙 Finding V4V Feeds

Any podcast listed on PodcastIndex with Lightning enabled will work. Try subscribing to feeds like:

  • Podcasting 2.0https://mp3s.nashownotes.com/pc20rss.xml
  • What Bitcoin Did — has V4V enabled
  • Any podcast using Fountain, Podcastindex, or Buzzsprout with V4V

You can verify a feed has the tag by checking for <podcast:value type="lightning" method="keysend"> in the XML.


🧪 Testing the Core Logic

# Run the parser test (Node.js)
node test/test-parser.js

Expected output:

✓ Detected podcast:value tag
✓ Parsed 3 recipients
✓ Split calculation correct
✓ Suggested amount: 1000 sats

🛠 Development Notes

podcast:value XML format

<podcast:value type="lightning" method="keysend" suggested="0.00000015000">
  <podcast:valueRecipient
      name="Alice (Podcaster)"
      type="node"
      address="02d5c1bf8b940dc9cadca86d1b0a3c37fbe39cee4c7e839e33bef9174531d27f52"
      split="40"
  />
  <podcast:valueRecipient
      name="Bob (Co-host)"
      type="node"
      address="032f4ffbbafffbe51726ad3c164a3d0d37ec27bc67b29a159b0f49ae8ac21b8508"
      split="60"
  />
</podcast:value>

WebLN keysend call

await webln.enable();
await webln.keysend({
  destination: recipientNodePubkey,
  amount: String(satsForThisRecipient),
  customRecords: {
    // Boostagram (BLIP-10)
    '7629169': JSON.stringify({
      app_name: 'V4V for Feedbin',
      podcast: feedTitle,
      message: userMessage,
      value_msat_total: totalSats * 1000,
      sender_name: 'Feedbin Reader'
    })
  }
});

🤝 Contributing

PRs welcome! Ideas for improvement:

  • Lightning Address support (in addition to node keysend)
  • Streaming payments per minute read (V4V 2.0 style)
  • LNURL-pay support
  • Per-feed boost history / stats
  • Feedbin native API integration for feed discovery

📄 License

MIT © 2026 Patoo — patoo.ai


🙏 Credits

  • Alby — WebLN provider & bounty sponsor
  • Feedbin — the excellent RSS reader
  • Podcasting 2.0 — the podcast:value spec
  • WebLN — Lightning payment API

About

⚡ Value-for-Value Lightning payments for Feedbin RSS reader — Alby bounty submission

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors