Intriguing Stuff

I added a section on my Journal today dedicated to intriguing stuff.
Think of it as a handpicked collection of links I have recently bookmarked.1 If you use a feed reader you can subscribe to it here.
Some of my favorite online content is a compilation of curated links with concise commentaries. Waxy, Daring Fireball and Kottke maintain my favorite examples.
If you’re curious about some of the technical details, read on.
🛠 How I Publish Bookmarks to My Blog
I wanted a streamlined process for posting interesting links on my Ghost blog—something that fit naturally into my bookmarking routine. I use Omnivore Raindrop.io as my primary bookmarking tool. It’s cross-platform, has a great browser extension, and supports highlights, notes, and tags.
To automate the publishing process, I wrote a Google Cloud Function that checks for my most recent Raindrop bookmark with a specific tag (1
in my case). If the bookmark includes a note or highlight, it also formats that additional content into structured HTML and publishes it to my Ghost blog using the Ghost Admin API.
Each published post includes:
- The bookmark’s title and canonical URL
- Highlighted annotations from the original page and/or personal comments
- Embedded metadata to support custom styling and filtering
- A links tag so it only shows up on the links page
📡 Creating Custom RSS Feeds for Specific Pages
Ghost automatically generates an RSS feed for your main blog, but I wanted /links/
to have its own feed with just bookmarks. Same for /activities/
.
To do that, I:
- Updated
default.hbs
to include special<head>
logic for those pages - Created separate partials for each type of feed
Example: default.hbs
Instead of rendering the standard <head>
, I use:
{{#is "links"}}
{{> "head-links"}}
{{else is "activities"}}
{{> "head-activities"}}
{{else}}
{{> "head-default"}}
{{/is}}
Each partial like head-links.hbs contains something like:
<head>
<title>{{@site.title}} - Links</title>
<meta name="description" content="A curated collection of my favorite recent bookmarks.">
<link rel="alternate" type="application/rss+xml" title="Links Feed" href="/links/rss/">
{{ghost_head}}
</head>
The other partials, head-default.hbs and head-activities.hbs, each link to their unique feeds.
This ensures the RSS link in the <head>
points to /links/rss/
— not the main blog feed — and gives feed readers the right metadata when subscribing.
Why This Matters
Feed readers (like Feedbin or NetNewsWire) pick up the first <link rel="alternate" type="application/rss+xml"> in the head section. Without this override, Ghost defaults to the main /rss/
feed even on /links/
, which can be confusing to subscribers.
💻 Displaying Bookmarks on My Ghost Blog
To display the links at danielraffel.me/links, I updated my Ghost routes.yaml file to create a collection for posts tagged with links. I also created a custom links.hbs template that:
- Groups posts by the date they were bookmarked
- Formats them like a linkroll (similar to Daring Fireball)
- Embeds structured metadata to support a links RSS feed
This lets visitors browse recent bookmarks, and makes it easy for others to subscribe to link-only updates.
👨💻 Cloud Function Source Code
I’ve open-sourced this integration on GitHub as raindrop-to-ghost-sync. If you use Raindrop and Ghost and want to automate your bookmarking workflow, feel free to fork it or submit ideas. I’d love to hear how others are using it—or improving upon it.
Example Workflow
- Save a page using the Raindrop extension in your browser (desktop or mobile).

- Highlight a passage and add a note using the Raindrop extension.

- Automatically publish to your Ghost blog.

- I think OGs call this a linklog.
- Cathy Sarisky on the Ghost Forum was incredibly helpful at answering questions I had to get my custom RSS implementation working.