Over the past few weeks, mostly in-between late night wake windows with the new baby, I’ve been working on a small side project called GhostPicks—a simple way for other writers and creators on Ghost to share affiliate or curated product recommendations inside their posts and pages.
Today, it’s live.
This post is a quick rundown of what GhostPicks is, why I built it, and how it works under the hood.
The Problem
I love Ghost. The writing experience is clean, the membership model works, and Markdown support keeps me happy. But sharing product recommendations? That's where things get clunky, you’re mostly stuck with one of these familiar product blocks:

FUJIFILM X-T5
I've been using Fujifilm since 2017, when the Fujifilm X-T20 released. The X-T5 carries on my love for Fuji with its delightfully tactile mechanics and still makes everyday shooting feel special.
These are okay, they're a little tedious to make and I have to remake them for anywhere I want to use them. I wanted something more like a personal product database—create once, use everywhere, update in one place.
What I Built
GhostPicks is deliberately simple. Here's the entire workflow:
- Create an account (just email and password)
- Add a collection (like "My Home Office Setup" or "Books That Changed My Mind")
- Add your products with titles, images, URLs, and descriptions
- Copy the embed code and drop it anywhere in Ghost
That's it. The embed loads fast and updates automatically when you change something in your dashboard.

Each product card includes your custom copy, the visuals you choose, and whatever URL you want (hello, affiliate links). Think of it as your personal storefront that you can sprinkle throughout your content, with updates automatically syncing across all your posts.

Building for Speed and Privacy
I made some intentional choices to keep this thing fast and respectful:
Minimal client-side rendering. The embeds use vanilla JavaScript (no heavy frameworks) to fetch and display your products. They're lightweight and load fast.
Privacy-focused tracking. Zero cookies, no tracking pixels on visitor browsers. It does collect anonymous click-through and impression stats to help you see which recommendations perform best in the GhostPicks admin panel—no IP addresses collected, just anonymized usage data.
No Ghost integrations required. Just paste a snippet into a code block or HTML card. No API keys, no complex setups, no breaking changes when Ghost updates.
The Design Philosophy
I wanted GhostPicks to feel like it belongs on your blog, not like some foreign widget that screams "affiliate content here". The styling is minimal and automatically inherits the styling of your blog—it should complement your writing, not compete with it.
The whole thing is designed around a simple principle: create once, use everywhere, update globally. Change a product URL in your dashboard, and it updates across every post where you've used it. Finally.
What's Next
Right now, GhostPicks is free to try. Here's how the pricing works:
- Free plan: 1 collection, up to 10 products, includes "Powered by GhostPicks" branding
- Pro Monthly: $7/month for unlimited collections and products, option to remove branding
- Pro Annual: $64/year (save $20!) with everything in Pro Monthly plus locked-in pricing
All plans include the same fast performance, privacy-focused analytics, and simple embed system.
On the roadmap: Amazon imports, being able to search for products directly within GhostPicks, and better collection management.
Give It a Shot
If you're on Ghost and tired of rebuilding the same product blocks over and over, check it out: ghostpicks.co
I'd love to hear what you think. Hit me up on Bluesky or send me an email at hello@ghostpicks.co if you have ideas, questions, or just want to chat about building weird little tools for fun.
Oh, and you can use the code GHOST25 for 25% off, forever.