Skip links
broker for cloud-to-CMS sync (1)

Why no one has built a broker for cloud-to-CMS sync (until now)

A working photographer has 40,000 images in Lightroom Cloud and a WordPress portfolio site. The path between the two is a series of brittle, manual steps: export a smart preview JPEG, batch-rename for SEO, drag to the WordPress media library, wait for the upload, regenerate thumbnails, repair the broken file paths in old posts, hope the slugs don’t collide with last month’s wedding gallery. If she also sells prints through Shopify, multiply that workflow by two. If she uses HubSpot for email, by three.

The obvious answer — “build a plugin” — has been attempted for fifteen years. WP/LR Sync, Envira, Photo Engine, NextGEN with Imagely, Jeffrey Friedl’s per-service uploaders, Automattic’s own Lightroom plugin. Every one of them is a one-source-to-one-destination tool with the same architectural ceiling. Photographers stack three or four of them and live with the seams.

There’s a reason nobody has built the obvious unified answer: a broker that sits between every cloud source and every CMS destination. The reason isn’t that engineers haven’t thought of it. It’s that the constraints make bootstrapping one nearly impossible, and the constraints aren’t what most builders assume.

The naive approach and why it can’t work

The first instinct is to bundle OAuth credentials into the WordPress plugin. Photographer installs the plugin, plugin holds the Lightroom client ID and secret, plugin talks directly to Adobe’s API. Simple. It also breaks the first principle of OAuth.

Client secrets aren’t supposed to be distributed. The moment a secret ships inside a WordPress plugin, it’s available to anyone who can unzip a .zip file. One reverse-engineered plugin equals compromised credentials for the entire user base. Adobe, Canva, Figma, Dropbox — each of them runs an approval gate precisely to prevent this pattern. They aren’t being paranoid. They’re enforcing the constraint that makes the naive approach architecturally impossible at scale.

A determined developer can sometimes ship a plugin with a secret anyway, get a few hundred installs, and operate in the gray zone. The moment the cloud provider notices, they revoke the OAuth client and every install in the wild breaks simultaneously. The plugin is dead, the photographers are stranded, and the developer has to start over with a new approval cycle.

This is why the existing landscape looks the way it does. Most plugins that synchronize Lightroom with WordPress use Lightroom Classic — the desktop catalog — not Lightroom Cloud. Classic doesn’t require OAuth, because it runs on the user’s machine and writes through a Lightroom Publish Service plugin. The credential problem disappears because there are no credentials. That works, but it locks you out of the entire mobile-first, cloud-native workflow that Adobe has been pushing photographers toward for the last six years.

Application Passwords aren’t the answer either

A few products have taken a different route: skip OAuth on the destination side and use WordPress Application Passwords instead. WPVibe (now part of Awesome Motive’s SeedProd line) is the cleanest example. The photographer generates an Application Password in WordPress, pastes it into the source-side tool, and the tool writes to the WordPress REST API on her behalf.

This solves a real problem and works fine for single-source, single-destination workflows. It doesn’t solve the broader problem for three reasons.

First, Application Passwords only exist on the destination side. They authenticate writes to WordPress. They don’t authenticate reads from Lightroom Cloud, Canva, Figma, or Dropbox. You still need OAuth — or worse, the photographer’s actual credentials — to talk to the source.

Second, Application Passwords are WordPress-specific. Shopify uses its own admin API token model. HubSpot uses OAuth with private apps. Contentful uses content management tokens. Webflow uses site tokens. Every CMS has its own auth model, and a per-platform credential strategy multiplies the surface the user has to manage. The N×M problem doesn’t shrink — it just moves to the user’s password manager.

Third, this approach shifts credential security onto the photographer. She becomes responsible for revoking tokens when she changes contractors, rotating credentials when a laptop is stolen, and remembering which sites have which app passwords installed. Most don’t.

What a broker actually does

The strategic shape is familiar from adjacent industries — Plaid sits between banks and fintech applications, Stripe between card networks and merchants, Twilio between telecom carriers and developers. Each one resolved a fragmented credential and protocol surface so that one side could scale without negotiating with the other. The cloud-to-CMS problem is structurally harder than any of those: not N×1 like banking, but a true N×M matrix where every source has its own OAuth quirks and every destination has its own auth model, schema, and asset-handling rules. The specific mechanism that makes this work for binary assets and cross-CMS schema reconciliation is different enough from payments middleware that it required its own design — and its own patent application.

A cloud-to-CMS broker holds the OAuth client credentials for every source. The WordPress plugin, the Shopify app, the HubSpot module — none of them ever see a client secret. They authenticate to the broker with a license token, the broker authenticates to the source on their behalf, and the broker returns a permissioned response.

In practice, this means the broker has to handle a lot:

  • OAuth client registration and ongoing relationship with each cloud provider (Adobe took weeks of approval; Canva took roughly three months; Figma required developer verification)
  • Encrypted storage of refresh tokens at rest, with the encryption keys held server-side and rotated independently
  • Transparent token refresh — when a Lightroom token expires mid-sync, the broker swaps it without surfacing the failure to the destination plugin
  • Scope enforcement at the operation level, so a “read photos” token can’t be used to write or delete
  • Per-provider rate limit management across the entire federation, not just the single user’s quota
  • Provider-specific quirks: Figma’s X-Figma-Token header for personal access tokens versus Authorization: Bearer for OAuth, Canva’s 30-day refresh window, Dropbox’s chunked upload protocol, Lightroom Cloud’s preview-vs-master pagination model

Each one of these is a multi-week engineering task. Stacked, they’re an eighteen-month project before a single user can sync a single image.

Why nobody built it for fifteen years

Four reasons.

First, the chicken-and-egg problem is brutal. A broker has value only when both sides are connected. You need approved OAuth clients with seven cloud providers and production-ready plugins for five or more CMS destinations and enough volume to justify either side’s approval process. Most builders ship one source-destination pair, hit revenue, and never make it through the second provider’s approval gate.

Second, the platforms that could have built this — Adobe, Automattic, Canva, Shopify — each have a structural reason not to. Adobe wants photographers to stay in Adobe Portfolio. Automattic wants images uploaded directly to WordPress. Canva wants you to publish from Canva’s own publish menu. A neutral broker that lets a photographer move freely between any source and any destination is structurally hostile to every platform’s lock-in strategy. The companies with the resources to build it have the strongest incentives not to.

Third, brokers don’t look like products. They look like infrastructure. Venture capital funds products — things with screens, demos, growth charts. Infrastructure shows up only when the full N×M matrix is live and the user can finally do something they couldn’t do before. The middle of that build is unfundable on conventional product metrics.

Fourth, the architecture itself is non-obvious. The broker pattern for cross-platform credential federation is one of those designs that looks inevitable in retrospect, but specifying the actual mechanism — how the destination plugin holds no secrets, how the broker rotates encryption keys, how scope is enforced per operation — required deciding against a half-dozen plausible alternatives that look right and aren’t. This is the kind of architecture that ends up in a patent application (ours was filed January 5, 2026 as US App. No. 19/440,404) because the specific mechanism matters as much as the general idea.

What unlocks once the broker exists

A photographer publishes once from Lightroom Cloud and her images land in WordPress (portfolio), Shopify (print store), and HubSpot (newsletter) with metadata, alt text, and slugs synchronized across all three. When she edits a photo in Lightroom, the edit propagates everywhere downstream.

An agency manages fifty client WordPress sites from one Lightroom catalog without storing fifty sets of credentials in a spreadsheet. A brand updates a hero image in Canva and every distribution surface — landing page, product listing, email — receives the new version automatically. A programmatic SEO pipeline generates pages that include images sourced live from Dropbox, so refreshing the source refreshes the published asset.

AI agents can sync assets through the same broker via MCP without ever touching a credential. That’s not theoretical — Syncific is already listed in Anthropic’s MCP registry, with the broker enforcing scope on every agent-initiated operation.

The infrastructure shift

The broker isn’t a feature on top of the existing landscape. It’s the missing layer underneath it. Plaid didn’t compete with banks; it made banking accessible to a new generation of applications that couldn’t otherwise exist. Stripe didn’t compete with card networks; it made card payments programmable. Cloud-to-CMS asset distribution has been waiting for an analogous infrastructure layer of its own — one shaped by a different problem and built on a different mechanism — and the reason nobody built it isn’t that nobody noticed. It’s that the constraints made bootstrapping one prohibitively expensive in time, approvals, and conviction.

We’re through the gates now. Seven approved OAuth sources, five CMS destinations, plus unlimited HTTP webhook endpoints. The pattern is here. The more interesting question is what the ecosystem looks like once builders can assume it exists.

Try the Live Sync Demo Explore the LightSync architecture