Webflow Code Component:Component Audit logo

Webflow Code Component:Component Audit

Organization
webflow
webflow-code-component:component-audit

Audit Webflow Code Components for architecture decisions - prop exposure, state management, slot opportunities, and Shadow DOM compatibility. Focused on Webflow-specific patterns, not generic React best practices.

Overview

Publisherwebflow
Repositorywebflow-skills
Skill namewebflow-code-component:component-audit
Stars
122
Forks
18
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by webflow on GitHub. Read the source before you install it.

Installation

Install the Webflow Code Component:Component Audit AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/webflow/webflow-skills.git /tmp/webflow-skills
mkdir -p .claude/skills
cp -r /tmp/webflow-skills/plugins/webflow-skills/skills/component-audit .claude/skills/webflow-webflow-code-component-component-audit
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Webflow Code Component:Component Audit in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Webflow Code Component:Component Audit on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Webflow Code Component:Component Audit is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Component Audit

Audit existing code components for Webflow-specific architecture decisions. This skill focuses on how well components integrate with Webflow Designer, not generic React best practices.

When to Use This Skill

Use when:

  • User wants to improve how their components work in Webflow Designer
  • Reviewing whether the right things are exposed as props vs hardcoded
  • Checking if state management patterns are Webflow-compatible
  • Looking for opportunities to make components more designer-friendly
  • Component isn't rendering or behaving as expected in Webflow

Do NOT use when:

  • Validating before deployment (use pre-deploy-check instead)
  • Creating new components (use component-scaffold instead)
  • Converting a React component (use convert-component instead)
  • Generic code quality review (use a linter)

Core Philosophy

This audit answers three questions:

  1. Designer Control: Are the right things exposed as props for designers to customize?
  2. Webflow Compatibility: Does the component work within Webflow's constraints (Shadow DOM, SSR, isolated React roots)?
  3. Component Architecture: Is this the right level of granularity, or should it be split/combined?

Instructions

Phase 1: Discovery

  1. Find all components:

    • Locate webflow.json
    • Find all .webflow.tsx files
    • Read corresponding React components
  2. Understand intent: Ask user what the components are for and any specific concerns

Phase 2: Analysis

For each component, analyze these Webflow-specific areas:

A. Prop Exposure Analysis

Goal: Identify what designers SHOULD be able to control but currently can't.

Look ForRecommendation
Hardcoded text stringsExpose as props.Text()
Text that designers should edit on canvasExpose as props.RichText()
Hardcoded values from a fixed set of optionsExpose as props.Variant({ options: [...] })
Hardcoded image URLsExpose as props.Image()
Hardcoded link URLsExpose as props.Link()
Hardcoded HTML id attributesExpose as props.Id()
Conditional rendering with booleanExpose as props.Boolean() or props.Visibility()
Internal state that affects appearanceConsider exposing initial value as prop
children not using SlotConvert to props.Slot()

Aliases: props.String = props.Text, props.Children = props.Slot. Treat these as equivalent during audit.

Questions to ask:

  • "What would a designer want to change?"
  • "What requires a code change that shouldn't?"
B. State Management Architecture

Goal: Identify patterns that won't work in Webflow.

Anti-PatternWhy It FailsAlternative
React Context for cross-component stateEach component has isolated React rootUse nano stores, custom events, or URL params
Prop drilling through SlotsSlot children are separate React appsUse nano stores or custom events
Shared state via module-level variablesMay cause SSR issuesUse browser storage or nano stores
Global event listeners without cleanupMemory leaks, SSR issuesUse useEffect with cleanup

Refactoring recommendations:

  • If components need to communicate → suggest cross-component state pattern
  • If using Context internally only → that's fine, document it
  • If components are tightly coupled → suggest decomposition
C. Slot Opportunities

Goal: Identify hardcoded content that should be designer-controlled.

Current PatternBetter Pattern
Hardcoded button inside cardSlot for actions area
Hardcoded icon componentSlot or Image prop
Fixed header/footer structureSlots for header and footer
Hardcoded list itemsConsider if this should be multiple components

When NOT to use Slots:

  • When content has specific behavioral requirements
  • When content needs to interact with component state
  • When the structure is truly fixed and not customizable
D. Shadow DOM Compatibility

Goal: Ensure styles work in isolation.

IssueDetectionFix
Using site/global CSS classesClass names like .container, .btnUse CSS Modules or component-scoped styles
CSS-in-JS not configuredstyled-components/Emotion without decoratorAdd globals.ts with styledComponentsShadowDomDecorator (styled-components) or emotionShadowDomDecorator (Emotion/MUI)
Missing style importsStyles defined but not imported in .webflow.tsxAdd import statement
Relying on inherited stylesExpecting parent styles to cascadeUse explicit styles or CSS variables
Needs tag selectors (h1, p, etc.)Tags not styled inside Shadow DOMEnable applyTagSelectors: true in component options

SSR Note: When using styled-components or Emotion, you must also configure the server renderer in webflow.json for SSR to work correctly:

  • styled-components: "library": { "renderer": { "server": "@webflow/styled-components-utils/server" } }
  • Emotion: "library": { "renderer": { "server": "@webflow/emotion-utils/server" } }
E. SSR Safety

Goal: Identify browser-only code that runs during render.

PatternProblemSolution
window.innerWidth in renderSSR errorUse useEffect or set ssr: false
document.getElementById in renderSSR errorUse useEffect or refs
localStorage.getItem outside useEffectSSR errorWrap in useEffect with useState
Third-party library that requires windowSSR errorDynamic import or ssr: false
F. Component Granularity

Goal: Determine if component is at the right level of abstraction.

Signs a component should be SPLIT:

  • Too many props (>10) making Designer UI cluttered
  • Multiple distinct sections that could be independent
  • Designers want to use parts separately
  • Component handles multiple unrelated concerns

Signs components should be COMBINED:

  • Always used together
  • Tightly coupled state that's awkward to sync
  • Small components with no standalone use

Phase 3: Report

Generate actionable report with:

  1. Summary: Quick overview of findings
  2. By Component: Specific issues and recommendations for each
  3. Architecture Recommendations: Cross-cutting concerns
  4. Priority Actions: What to fix first

Audit Checklist

Designer Control (Most Important for Webflow)

CheckQuestion
Prop completenessCan designers customize everything they'd want to?
Prop typesAre the right Webflow prop types used?
Default valuesDo props have sensible defaults?
Prop namingAre names clear for non-developers?
Slot usageIs nested content handled via Slots?
Visibility propsCan sections be shown/hidden?

Webflow Compatibility

CheckQuestion
SSR safeDoes component render without browser APIs?
Style isolationDo styles work in Shadow DOM?
State independenceDoes component work without Context from parent?
No function propsAre there callback props that won't work?

Architecture

CheckQuestion
Single responsibilityDoes component do one thing well?
Right granularityIs this the right size for Designer use?
Cross-component stateIf needed, is it implemented correctly?

Example

User prompt:

Audit my ProductCard component

Response:

markdown
## Audit: ProductCard

### Component Overview

```typescript
// Current props
props: {
  title: props.Text(),
  price: props.Number(),
  imageUrl: props.Text()  // ⚠️ Should be Image
}

A. Prop Exposure Analysis

FindingSeverityRecommendation
imageUrl is Text, not ImageWarningChange to props.Image() for proper asset handling
"Add to Cart" button text is hardcodedSuggestionExpose as prop: addToCartText: props.Text()
Sale badge is conditionally rendered but not controllableSuggestionAdd showSaleBadge: props.Boolean()
Badge color is hardcoded redSuggestionAdd badgeVariant: props.Variant({ options: ["sale", "new", "featured"] })

Hardcoded Content Found:

typescript
// Line 24 - hardcoded, should be prop
<button>Add to Cart</button>

// Line 18 - hardcoded, should be prop or removed
{onSale && <span className="badge">SALE</span>}

Recommended Props to Add:

typescript
props: {
  // ...existing
  addToCartLabel: props.Text({
    name: "Button Label",
    defaultValue: "Add to Cart"
  }),
  showBadge: props.Boolean({
    name: "Show Badge",
    defaultValue: false
  }),
  badgeType: props.Variant({
    name: "Badge Type",
    options: ["sale", "new", "featured"],
    defaultValue: "sale"
  })
}

B. State Management

FindingSeverity
Uses localStorage for cart countWarning
No React Context dependenciesOK

Issue: localStorage in render

typescript
// Line 8 - will break SSR
const cartCount = localStorage.getItem('cart');

Fix:

typescript
const [cartCount, setCartCount] = useState(0);
useEffect(() => {
  setCartCount(parseInt(localStorage.getItem('cart') || '0'));
}, []);

C. Slot Opportunities

CurrentRecommendation
Hardcoded buttonConsider: actions: props.Slot() for flexible CTAs

If designers need to put different content (button, link, custom element) in the action area:

typescript
props: {
  actions: props.Slot({
    name: "Actions"
  })
}

// Component
<div className={styles.actions}>
  {actions}
</div>

However, if button behavior is tied to cart logic, keep it hardcoded.


D. Shadow DOM Compatibility

CheckStatus
Styles imported in .webflow.tsx✅ OK
CSS Modules used✅ OK
No global class references✅ OK

E. SSR Safety

CheckStatus
window usage✅ None
document usage✅ None
localStorage usage⚠️ Needs guard (see fix above)

F. Component Granularity

Current size: 4 props (will be 7 after recommendations) Verdict: Good granularity - single purpose, manageable props


Summary

CategoryStatus
Designer Control⚠️ Needs work - 4 hardcoded items found
State Management⚠️ localStorage needs SSR guard
Shadow DOM✅ Good
SSR Safety⚠️ One issue
Granularity✅ Good

Priority Actions:

  1. Fix localStorage SSR issue (blocks deployment)
  2. Change imageUrl from Text to Image prop
  3. Expose badge controls as props
  4. Consider exposing button label

## Guidelines

### What This Audit Does NOT Check

This is not a generic code quality audit. Skip:
- Generic React performance patterns (let users use React DevTools)
- Generic accessibility (let users use axe or similar)
- Code formatting (let users use Prettier/ESLint)
- Generic TypeScript best practices

Focus only on Webflow-specific concerns.

### Prop Exposure Heuristics

**Should be a prop:**
- Any text visible in the UI
- Any image or media
- Any color or size that might vary
- Any boolean that controls visibility
- Any value that changes per-use

**Should NOT be a prop:**
- Internal implementation details
- State that changes during interaction
- Values derived from other props
- Animation timing/easing (unless explicitly customizable)

### When to Recommend Slots vs Props

**Use Slot when:**
- Designer wants to put arbitrary Webflow elements inside
- Content structure is flexible
- Nested content doesn't need to interact with component state

**Use Props when:**
- Content is simple (text, image, link)
- Component needs to process/transform the content
- Specific structure is required

### State Pattern Recommendations

If components need to share state, recommend in this order:
1. **URL parameters** - if state should be shareable/bookmarkable
2. **Nano stores** - for real-time sync between components
3. **Custom events** - for fire-and-forget communication
4. **Browser storage** - for persistence across sessions

Frequently asked questions

What does the Webflow Code Component:Component Audit AI skill do?

Audit Webflow Code Components for architecture decisions - prop exposure, state management, slot opportunities, and Shadow DOM compatibility. Focused on Webflow-specific patterns, not generic React best practices.

Why use Webflow Code Component:Component Audit on TypingMind?

Because you install it once and use it with any model. Webflow Code Component:Component Audit is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Webflow Code Component:Component Audit in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/webflow/webflow-skills/tree/main/plugins/webflow-skills/skills/component-audit. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Webflow Code Component:Component Audit?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Webflow Code Component:Component Audit?

As many as you like. As long as a model supports skills, you can use Webflow Code Component:Component Audit with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Webflow Code Component:Component Audit AI skill free?

Yes. It is published on GitHub by webflow under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇