One Bookmark Archive for X, Bluesky, Mastodon, and Nostr: Why I Built It This Way

Published by
Philipp Defner's X profile picture
Philipp Defner
· · 3 minutes read

The first version of Birdfeeder only did one thing: archive your X bookmarks so you could actually find them again. I launched it in 2022, and it worked fine until X changed its API pricing in early 2023. Reading a user's own bookmarks through the official API got expensive enough that the math stopped working, and I shut it down.

This July I relaunched it, and this time it's not just X. Bluesky, Mastodon, and Nostr all bookmark into the same archive.

The reason I could bring the price down isn't that X got cheaper. It's that most of what Birdfeeder needs to do doesn't actually require X's official API. Reading your own bookmarks still has to go through X's OAuth endpoints, there's no way around that. But enriching other people's profiles, the accounts your bookmarked posts are from, doesn't need your OAuth token at all. For that I use twitterapi.io, a third-party API that's dramatically cheaper per request than X's own endpoints for that kind of read. Splitting reads this way, official API for your own data, cheap third-party API for everything else, is what made the relaunch financially sane.

The bigger design decision was around identity. I didn't want Birdfeeder to be four separate products wearing one login page. One account can hold several identities at once: sign up with X, Bluesky, or Mastodon, then go to Settings and link the others. Everything lands in one searchable archive, regardless of which network you actually bookmarked it from. If you're the kind of person who reads on Bluesky in the morning and X at night, you shouldn't have to remember which app to search in later.

Nostr doesn't fit that pattern, because it has no OAuth. There's no "log in with Nostr" button to build, since the protocol doesn't work that way. So you sign up with one of the other three first, then paste your npub, your public key, into Settings. Birdfeeder reads your public bookmark list off a handful of relays from there. It never asks for your nsec, your private key, and never stores one. If a product asks for your Nostr private key, that's a red flag, and I didn't want Birdfeeder anywhere near that line.

Once a bookmark is in, it doesn't matter which network it came from. Full-text search, a weekly summary email, private notes, public sharing on individual bookmarks, an RSS/JSON feed, and MCP access so an AI assistant can search your archive directly, all four networks get the same set. I didn't want Bluesky bookmarks to feel like a second-class citizen bolted onto an X-shaped product, so the feature set was built network-agnostic from the start rather than X-first with the others patched in later.

The whole thing is a bet that people's reading habits are already spread across networks and their tools should catch up to that, instead of asking them to keep four separate bookmark piles in their head.

Related feature