Adding Bluesky Rich Link Preview cards to Postiz
Rich link preview cards make a real difference on Bluesky—the clickable previews that show a title, description, and image when you share a URL. Same thing Twitter does with Open Graph cards. They get more engagement than plain text links. The problem? Postiz doesn’t support this yet for Bluesky. Hillary Torn has a pull request…

Rich link preview cards make a real difference on Bluesky—the clickable previews that show a title, description, and image when you share a URL. Same thing Twitter does with Open Graph cards. They get more engagement than plain text links.
The problem? Postiz doesn’t support this yet for Bluesky.
Hillary Torn has a pull request that adds exactly this feature, but it hasn’t been merged. Rather than wait, I built a custom Docker image with her changes.
Here’s how I did it, and how you can use the same image.

What This Enables
When you post a blog link to Bluesky through Postiz, viewers see a styled card with:
- Post title from your blog’s OG tags
- Description pulled from meta tags
- Featured image
- Clickable link to your post
Without this, you just get a plain text URL. The difference in engagement is significant—visual cards get more clicks.
The Build Process
Step 1: Fork and Clone
I forked the Postiz repo so I could apply Hillary’s changes:
git clone https://github.com/kfuras/postiz-app.git
cd postiz-app
git checkout -b feature/bluesky-link-previewsStep 2: Merge the PR
I pulled her changes directly:
git fetch upstream pull/1078/head
git merge FETCH_HEADOne merge conflict in the Bluesky provider file—I resolved it by keeping her version:
git checkout --theirs libraries/nestjs-libraries/src/integrations/social/bluesky.provider.ts
git add libraries/nestjs-libraries/src/integrations/social/bluesky.provider.ts
git commit -m "Merge bluesky embed changes for link previews"Step 3: Build for Linux
I develop on Mac but deploy to a Linux VPS, so the platform flag is important:
docker build --platform linux/amd64 \
-t ghcr.io/kfuras/postiz-app:bluesky-link-previews \
-f Dockerfile.dev .The --platform linux/amd64 ensures the image works on Linux servers even though I’m building on Apple Silicon.
Step 4: Push to GHCR
echo $GHCR_PAT | docker login ghcr.io -u kfuras --password-stdin
docker push ghcr.io/kfuras/postiz-app:bluesky-link-previewsI store my GitHub PAT as GHCR_PAT in my .zshrc. Using --password-stdin keeps the token out of shell history.
I made the package public and linked it to my forked repo, so you can pull it without authentication.
Using the Image
Update your docker-compose.yml:
postiz:
image: ghcr.io/kfuras/postiz-app:bluesky-link-previews
# ... rest of your configThen pull and restart:
docker compose pull
docker compose down
docker compose up -dTesting the Image
After deploying the custom image, I tested it both through the Postiz web app and via n8n’s Postiz node. The link preview cards generate correctly in both cases—Hillary’s code handles the OG tag extraction automatically when you include a URL in your post.
When the Official Version Ships
This is a temporary workaround. Once Hillary’s PR gets merged into the official Postiz release:
- Switch back to the official image:
ghcr.io/gitroomhq/postiz-app:latest - Remove the custom build
- The feature works the same way
You can track the PR status here: github.com/gitroomhq/postiz-app/pull/1078
Why This Works
vs. Waiting for the merge:
- You get the feature now instead of waiting weeks or months
- Zero code changes needed—just swap the Docker image
vs. Building from scratch:
- Hillary already did the implementation work
- Fork + merge + build takes about 10 minutes
vs. Manual link cards:
- Automatic OG tag extraction via n8n
- No manual copy-paste for every post
Resources
- Hillary Torn’s PR — The original feature implementation
- Postiz Repository — The main project
- My Fork — The branch with the changes applied
Credit: The Bluesky link preview implementation is entirely Hillary Torn’s work. This post documents building a Docker image with her unmerged changes. If you find this useful, consider leaving a comment on her PR.
Related Posts
Related
Build a Self-Healing AI Content Agent with Claude Agent SDK
I got tired of the content grind. Write a post, format it for X, reformat for Bluesky, render a video, upload to YouTube, cross-post to Instagram — repeat daily. It was eating 2-3 hours every day. So I built a self-healing AI content agent that does all of it. It runs 24/7 on a Mac…
Run a Claude Agent on a Schedule: Cron Jobs, Persistent Memory, and Error Recovery
Building an AI agent is the easy part. Making it run a Claude agent on a schedule reliably every day without babysitting — that’s where most tutorials stop. I run an autonomous Claude agent called Koda. It executes 15+ scheduled tasks daily: pulling analytics from YouTube, Google Search Console, and Instagram, scanning X for viral…
Automate Your Blog Publishing in 2026: From Draft to Live in One Command
Blog automation saved me 15-20 minutes per post. That’s the manual workflow: write in your editor, open WordPress, paste and reformat, upload a featured image, configure SEO metadata, hit publish. Multiply that by 3-4 posts per week and you’re losing hours to busywork that adds zero value. I built a system that takes a markdown…