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.

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:

  1. Switch back to the official image: ghcr.io/gitroomhq/postiz-app:latest
  2. Remove the custom build
  3. 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


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.

Similar Posts