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 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-previews
Step 2: Merge the PR
I pulled her changes directly:
git fetch upstream pull/1078/head
git merge FETCH_HEAD
One 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-previews
I 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 config
Then pull and restart:
docker compose pull
docker compose down
docker compose up -d
Testing 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.