Shop Canvas
Founder-built Framer × Shopify infrastructure — the Bouguessa-class commerce job, on the surface where brands actually design in Framer.
I founded Shop Canvas after client work kept surfacing the same split: Framer for design speed, Shopify for catalog and checkout — and every bridge asked the team to give up ownership of one side.
I’m the founder of Shop Canvas. The problem I kept hitting on client work: teams design storefronts in Framer, run commerce in Shopify, and the glue between them either rents you a sync layer or pulls you out of the design model you chose Framer for.
Problem
Framer buyers want layout, motion, and CMS structure they control. Shopify holds variants, prices, inventory, and checkout. When those two worlds meet through a third-party bridge, someone else often owns the collection, the sync schedule, or the component model — and migration becomes the real product.
On Bouguessa — Shopify Plus, luxury fashion — I saw the same job from the theme side: editorial cadence and campaign layout matter as much as cart logic. Shop Canvas is that bet for Framer-led teams: design and CMS ownership stay in Framer; catalog and checkout stay in Shopify.
Context
Buyers I have in mind: Shopify Plus and Framer-led brands (and agencies shipping many storefronts) with Bouguessa-shaped pain — publishing speed cannot wait on an engineering queue, but ops still live in Shopify.
Goal: connect once, sync into a Framer CMS collection the buyer owns, style code components on canvas, checkout on Shopify. Constraints: public Storefront API only (no Admin secrets in the plugin), producers not engineers as the primary installer, and trust that a bad sync must not silently overwrite live campaign rows.
Who it’s for: Shopify Plus and Framer-led brands (and agencies shipping many storefronts) — editorial and merchandising producers, not an engineering queue. Goal in one line: owned Framer CMS sync, design on canvas, checkout on Shopify. Hard constraint: Storefront API only in the plugin; every catalog apply goes through preview-before-apply so live campaign rows are never overwritten blindly.
What buyers were stuck with
Status quo
Managed sync SaaS puts the collection on vendor infrastructure — switching tools means migrating content you never owned. Leaving Framer for a headless theme or custom stack trades away the visual model the team already chose.
Shop Canvas
Sync into a Framer CMS collection the buyer owns, with explicit field mapping. Design, motion, and CMS structure stay in Framer; catalog, variants, inventory, and checkout stay on Shopify.
Before locking architecture I ran Framer × Shopify competitive fieldwork (Notion: “Shop Canvas — Framer×Shopify competitive research,” ~Sep 2026). Method honesty: only a minority of claims were hands-on verified in that pass — on the order of five of forty — the rest stayed vendor-stated and labelled as such. I used the sheet to rank build priorities, not to quote market share.
Technical decisions
Owned CMS, not a managed mirror. Preview-before-apply for every deliberate sync. Security boundary by design: Storefront token in the plugin; card data only on Shopify checkout — repeated in the setup skill so agents do not improvise broader scopes.
Plugin UX for producers: connection status, demo vs live store, prepare/insert that lands components with bindings visible — not a JSON console dressed up as “simple.”
Systems and edges
Demo store must never touch a merchant catalog; live connect must fail loudly on bad tokens. Empty catalog after connect, preview conflicts when rows drifted, and half-connected states are first-class — not silent success.
How it works
- 01
Connect
Try the demo store or connect Shopify with a Storefront token. Connection status stays explicit — demo path and live store are separate entry paths, not one ambiguous “connected” badge.
- 02
Preview
Re-sync from Shopify, review what would change in your Framer CMS collection, then apply. Editorial gets a gate before live rows move.
- 03
Publish
Style code components on canvas with bindings visible; checkout and card data stay on Shopify. Export, duplicate, and handoff look like normal Framer CMS work.
Integrations hub
Connect → Preview → Publish — Framer CMS sync, Storefront API, and preview gate on one surface.
01 · Connect
Framer project + Shopify Storefront
Demo store path or live connect with a Storefront token only — no Admin secrets in the plugin. Status stays split: Framer authorisation and Shopify credentials are separate steps, not one green check.
- Storefront API
- Demo vs live
- Explicit connection states
Owned collection
Framer CMS
Catalog rows land in a collection the buyer owns — field mapping is explicit before apply.
- Field mapping
02 · Preview
Preview-before-apply
Re-sync from Shopify, review the diff against live CMS rows, then commit. Campaign seasons do not get silently overwritten.
- Diff review
- Drift visible
Commerce boundary
Shopify checkout
Variants, inventory, prices, and card data stay on Shopify — the plugin never holds checkout scope.
- Checkout on Shopify
03 · Publish
Canvas components + handoff
Style code components with bindings visible; export and duplicate like normal Framer CMS work. Producers install; engineers extend the plugin when needed.
- Code components
- Prepare / insert
- Setup skill for agents
Versus the usual workarounds
| Status quo | Shop Canvas | |
|---|---|---|
| Buyer-owned Framer CMS collection | Status quo: no | Shop Canvas: yes |
| Preview diff before apply | Status quo: no | Shop Canvas: yes |
| Storefront API token only in plugin (no Admin secrets) | Status quo: no | Shop Canvas: yes |
| Producer-facing install path (not engineer-only scripts) | Status quo: no | Shop Canvas: yes |
| Demo / sample path before live credentials | Status quo: no | Shop Canvas: yes |
| Repeatable harness for agencies refreshing catalogs | Status quo: no | Shop Canvas: yes |
| Managed vendor-hosted collection as default | Status quo: yes | Shop Canvas: no |
| Leave Framer for theme or custom stack to “finish” commerce | Status quo: yes | Shop Canvas: no |
Collaboration
Bouguessa taught me how Shopify ops actually behaves — campaigns, variants, checkout reality — even though Shop Canvas targets Framer, not Liquid themes. I did not invent a pilot customer list for this page; the collaboration beat I can stand behind is the setup skill as a contract with future collaborators and agents.
The skill documents two connections (Framer project authorisation and Shopify inside the plugin) so a coding agent does not “helpfully” skip the human step where credentials attach. Same discipline I use on client stacks: legible boundaries for the next person — or model — who touches the repo.
Connect path
Two surfaces, one contract — Framer project authorisation and Shopify inside the plugin.
Framer
Project + CMS
Shop Canvas
Plugin UI
- Demo store path
- Live connect + status
- Storefront token only
Shopify
Storefront API
Setup skill
Agent-native handoff contract
Illustrative thread from the setup skill — boundaries for collaborators and coding agents.
Outcome and evidence
Shop Canvas is live — product story, component reference, plugin flow. The implementation is open at View repo. Evidence today is architectural: owned CMS sync, preview gate, component kit, and checkout handoff to Shopify — the same ownership split Bouguessa needed, packaged for Framer buyers.
I am not claiming revenue, App Store or marketplace approval, or conversion lifts. Those gates are still ahead. What a hiring reader can inspect is the system and the judgments above.
Reflection
Founder work forced me to name tradeoffs I could hand-wave on client engagements: who owns the collection, what happens on a bad sync, where PCI scope stops. Shop Canvas is smaller than an enterprise design system, but the design-engineering bar is the same — make the happy path obvious and the failure paths honest.
If I were joining a team tomorrow, this is the story I’d tell: I saw a repeated commerce + design split, killed the usual bridges for good reasons, shipped infrastructure I’d want to buy, and stayed honest about what is not proven yet.
Live: Shop Canvas · Repo: View repo
Let's talk about your project.
Avnzor