From framer-pack
Builds Framer CMS plugins to create managed collections and sync external API data using React/TSX. For primary Framer integrations.
How this skill is triggered — by the user, by Claude, or both
Slash command
/framer-pack:framer-core-workflow-aThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Build a Framer plugin that syncs external data into CMS Managed Collections. Managed Collections are plugin-controlled — your plugin creates the schema and populates items. This is the primary integration pattern for connecting Framer to external CMSes, databases, or APIs.
Build a Framer plugin that syncs external data into CMS Managed Collections. Managed Collections are plugin-controlled — your plugin creates the schema and populates items. This is the primary integration pattern for connecting Framer to external CMSes, databases, or APIs.
framer-install-auth setup// src/App.tsx — CMS sync plugin
import { framer } from 'framer-plugin';
import { useState } from 'react';
framer.showUI({ width: 340, height: 400, title: 'Content Sync' });
export function App() {
const [status, setStatus] = useState('');
const syncCollection = async () => {
setStatus('Fetching data...');
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
const posts = await response.json();
setStatus('Creating collection...');
const collection = await framer.createManagedCollection({
name: 'Blog Posts',
fields: [
{ id: 'title', name: 'Title', type: 'string' },
{ id: 'body', name: 'Body', type: 'formattedText' },
{ id: 'author', name: 'Author', type: 'string' },
{ id: 'slug', name: 'Slug', type: 'slug', userEditable: false },
],
});
setStatus(`Syncing ${posts.length} items...`);
const items = posts.slice(0, 20).map((post: any) => ({
fieldData: {
title: post.title,
body: `<p>${post.body}</p>`,
author: `User ${post.userId}`,
slug: post.title.toLowerCase().replace(/[^a-z0-9]+/g, '-').slice(0, 50),
},
}));
await collection.setItems(items);
setStatus(`Synced ${items.length} posts`);
framer.notify(`Synced ${items.length} blog posts`);
};
return (
<div style={{ padding: 16 }}>
<h3>Blog Post Sync</h3>
<button onClick={syncCollection} style={{ width: '100%', padding: 8 }}>Sync Now</button>
{status && <p style={{ marginTop: 8, fontSize: 13, color: '#666' }}>{status}</p>}
</div>
);
}
// Framer CMS field types reference
const fields = [
{ id: 'title', name: 'Title', type: 'string' as const },
{ id: 'content', name: 'Content', type: 'formattedText' as const },
{ id: 'price', name: 'Price', type: 'number' as const },
{ id: 'featured', name: 'Featured', type: 'boolean' as const },
{ id: 'publishDate', name: 'Published', type: 'date' as const },
{ id: 'heroImage', name: 'Hero', type: 'image' as const },
{ id: 'category', name: 'Category', type: 'enum' as const, cases: [
{ id: 'tech', name: 'Technology' },
{ id: 'design', name: 'Design' },
]},
{ id: 'slug', name: 'Slug', type: 'slug' as const, userEditable: false },
];
async function incrementalSync(collection: ManagedCollection, newData: any[]) {
const existing = await collection.getItems();
const existingMap = new Map(existing.map(i => [i.fieldData.slug, i]));
const toUpsert = newData.map(item => {
const match = existingMap.get(item.slug);
return match ? { ...item, id: match.id } : item;
});
await collection.setItems(toUpsert);
}
// Read from user-created CMS collections (not plugin-managed)
const collections = await framer.getCollections();
for (const col of collections) {
if (col.type === 'unmanaged') {
const items = await col.getItems();
console.log(`${col.name}: ${items.length} items`);
}
}
| Error | Cause | Solution |
|---|---|---|
Collection exists | Duplicate name | Use getManagedCollection() first |
Invalid field type | Wrong type string | Use: string, formattedText, number, boolean, date, image, enum, slug |
Image upload failed | URL not public | Ensure images are publicly accessible |
setItems timeout | Too many items | Batch into chunks of 100 |
For code components and overrides, see framer-core-workflow-b.
npx claudepluginhub ia23a-lachnita/claude-code-plugins-plus-fix-skills --plugin framer-pack7plugins reuse this skill
First indexed Jul 10, 2026
Showing the 6 earliest of 7 plugins
Builds Framer CMS plugins to create managed collections and sync external API data using React/TSX. For primary Framer integrations.
Execute the primary Webflow workflow — CMS content management: list collections, CRUD items, publish items, and manage content lifecycle via the Data API v2. Use when working with Webflow CMS collections and items, managing blog posts, team members, or any dynamic content. Trigger with phrases like "webflow CMS", "webflow collections", "webflow items", "create webflow content", "manage webflow CMS", "webflow content management".
Guides collaborative design exploration before implementation: explores context, asks clarifying questions, proposes approaches, and writes a design doc for user approval.