From Canvas to Code
How I transformed a design vision into a production-ready Framer plugin using AI tools, WebGL, and iterative development
As a designer working in Framer, I kept finding myself wanting something that didn't exist: an easy way to create beautiful, dynamic mesh gradients directly in Framer. The trending aesthetic of smooth, flowing color transitions is found everywhere in modern UI designs, brand identities, and creative projects, but the tools to create them in Framer were limited.
I wanted to make mesh gradients as easy as picking colors and dragging points. But first, I needed to understand what was actually possible.
Understanding the Landscape
Before building anything, I dove into research to understand the gradient landscape and technical constraints.
The CSS Limitation
My first instinct was to use CSS gradients. They're native to the web, widely supported, and don't require additional libraries. But I quickly hit a wall: CSS gradients don't easily animate smoothly.
You can transition between predefined gradient states, but you can't animate the individual color stops, positions, or create the fluid, organic
movement that makes mesh gradients feel alive. CSS treats gradients as static background images, not as dynamic, interpolatable values.
This was a fundamental limitation. If I wanted smooth, real-time animation, CSS wasn't going to cut it.
Exploring Existing Solutions
I researched what others had built:
Outside Framer:
Kevin Hufnagl's Stripe-style gradient features beautiful WebGL-based mesh gradients with smooth animation. His implementation showed that the visual effect I wanted was achievable, and pointed me toward WebGL as the solution
Within Framer:
Shader Gradients by Yongmin Ruucm and Seungmee Lee was the gold standard. It's a sophisticated, highly customizable gradient tool built specifically for Framer. It's an impressive solution with extensive controls and beautiful presets.
Shader Gradients proved that Framer users wanted gradient tools, and showed what was possible with shaders. But it also revealed a gap: what if someone wanted something simpler? A more focused tool for creating mesh gradients specifically, without the learning curve of shader programming?
The Decision
I decided to build a focused tool that would:
Use WebGL for performance and animation capability
Start as a Framer code component for direct canvas integration
Evolve into a Framer plugin to make customization easier
Offer an intuitive interface for designers who just want beautiful gradients
The opportunity was clear: Framer's plugin ecosystem was growing, designers craved these effects, and I could build something both powerful and approachable.
I wasn't a WebGL expert, but I had a clear vision and AI as my co-pilot. Time to build.
The Vision
After initially testing out an validating my ideas, I mapped out what this plugin needed to be:
Core Value Proposition: Make professional mesh gradients accessible to every Framer user, regardless of coding ability.
Key Features:
Intuitive color point addition and positioning
Real-time preview of gradient changes
Customizable radius controls for each point
One-click addition to Framer canvas
Randomization for quick experimentation
Clean, designer-friendly interface
Technical Foundation: WebGL for performance, React for the UI, and seamless integration with Framer's plugin API.
Building with AI: The Reality
Let me be honest: building with AI wasn't magic. It was messy, iterative, and required constant problem-solving. But it made something possible that would have taken me months (or never happened at all) otherwise.
Phase 1: CSS Experiments
I started by trying to prove my research wrong. Maybe there was a clever CSS trick I'd missed?
I built prototypes using pure CSS with multiple radial-gradient layers, attempting to animate them with transitions and CSS variables. The results were... disappointing. Gradients would snap between states, color transitions looked muddy, and performance tanked with more than a few color stops.
Key learning: Sometimes research is right. CSS wasn't going to work for what I envisioned. Time to move to WebGL.
Phase 2: Making a Framer Component
I started with Claude, describing what I wanted to build:
"Create a react js mesh gradient component."
This was the beginning of a journey that took me down multiple research paths, projects, implementations, and solutions that other creators made.
The AI gave me foundational knowledge about WebGL shaders, basic radial gradient blending logic, and a rendering loop. The first version was rough, but when I saw multiple colored circles bleeding into each other smoothly, I knew the core concept was viable.
Key learning: Start with the hardest technical challenge first. If the WebGL rendering didn't work, nothing else mattered.
My first working version was a Framer code component. It worked, but had a problem: every time you wanted to change a color or adjust positioning, you had to edit code properties.
Phase 3: The Framer Plugin Interface
The Framer Code Component on its own was not ideal for designers. This is when I decided to build a plugin interface. Plugins in Framer let you build custom UI panels with controls, live previews, and adding the code component directly to the canvas manipulation. This is perfect for what I needed.
The transition required:
Extracting the WebGL gradient logic into a reusable library
Building a React-based plugin UI with color pickers and position controls
Creating a bridge between the plugin controls and the canvas rendering
Now I needed a UI that designers would actually want to use. I designed the interface in Figma first, then worked with AI to implement it in React:
Key UI Elements:
Live preview canvas
Gradient point handles
Color picker for canvas color
Color pickers for for each color point
Re-orderable color controls (X, Y coordinates)
"Add to Canvas" action button
Randomize button for instant inspiration
Phase 4: Publishing and Iteration
I published version 1 to the Framer Marketplace with minimal features. The response was immediate: 1,000+ users in the first few weeks
Phase 5: The Monorepo Structure
As the codebase grew, I needed better organization. I asked AI to help me set up a monorepo (check it out on Github):
/packages/mesh-gradient- Core WebGL library published as a npm package/apps/framer-plugin- Framer plugin with UI controls/apps/demo- Standalone demo for testing outside Framer
This structure meant I could:
Test the core gradient logic independently
Use the same engine in both the component and plugin
Potentially publish the core library to npm for others to use
The Technical Stack
Core Technology:
WebGL via
twgl.jsfor high-performance renderingChroma.js for color manipulation and interpolation
React JS for the plugin UI
TypeScript for type safety
Development Tools:
Claude/AI for code generation and debugging
Figma for UI design and prototyping
Git for version control
GitHub for repository hosting
Publishing:
NPM for the core library
Framer Marketplace for plugin distribution
Framer Components for direct code component access
Key Metrics
From zero to production-ready plugin:
Development time: ~6 weeks (part-time)
Lines of code: ~2,000 (including shaders)
Total users: 3,500+
Versions released: 3 major updates based on user feedback
Active Weekly Users: ~80 users per week
Reflections
Building Mesh Gradient Maker taught me that AI doesn't replace creativity or vision, but it amplifies your ability to execute on them.
It was easier. I got stuck many times. Some features took days to get right. But each obstacle taught me something new about WebGL, React, or something I’m not familiar with.
It was faster. What might have required hiring a developer or spending months learning became weeks of focused work. All with AI as a sounding board for my ideas.
It was worth it. Seeing designers create beautiful gradients with my tool that they couldn't have made otherwise. This make every late night and debugging session worth it!
Try It Yourself
Framer Plugin: Mesh Gradient Maker on Framer Marketplace
React Component: Framer Component
Source Code: GitHub Repository
NPM Package: npm install mesh-gradient
If you're building something creative with AI, I'd love to hear about it. The tools are here. The only question is: what will you build?




