| name | frontend-design |
| description | Create distinctive, production-grade Puree UI interfaces with high design quality. Use this skill when the user asks to build UI panels, dashboards, toolbars, or Blender addon interfaces. Generates creative, polished YAML/SCSS/Python code that avoids generic AI aesthetics. |
| user-invocable | true |
| argument-hint | Describe what to build (e.g. "settings panel with dark theme", "render queue dashboard") |
This skill guides creation of distinctive, production-grade Puree UI interfaces for Blender that avoid generic "AI slop" aesthetics. Implement real working YAML/SCSS/Python code with exceptional attention to aesthetic details and creative choices.
Tech stack: YAML (structure) + SCSS (styling) + Python (interactivity). Runs inside Blender via GPU-accelerated rendering (ModernGL compute shaders) with Taffy/Stretchable flexbox/grid layout.
Context Gathering Protocol
Design skills produce generic output without project context. You MUST have confirmed design context before doing any design work.
Required context â every design skill needs at minimum:
- Target audience: Who uses this addon and in what workflow?
- Use cases: What jobs are they trying to get done?
- Brand personality/tone: How should the interface feel?
Individual skills may require additional context â check the skill's preparation section for specifics.
CRITICAL: You cannot infer this context by reading the codebase. Code tells you what was built, not who it's for or what it should feel like. Only the creator can provide this context.
Gathering order:
- Check current instructions (instant): If your loaded instructions already contain a Design Context section, proceed immediately.
- Check docs/.impeccable.md (fast): If not in instructions, read
docs/.impeccable.md from the project root. If it exists and contains the required context, proceed.
- Run teach-impeccable (REQUIRED): If neither source has context, you MUST run the teach-impeccable skill NOW before doing anything else. Do NOT skip this step. Do NOT attempt to infer context from the codebase instead.
Design Direction
Commit to a BOLD aesthetic direction:
- Purpose: What problem does this interface solve? Who uses it in Blender?
- Tone: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
- Constraints: Puree's supported properties (flexbox/grid layout, transitions on color/opacity only, px/% units only).
- Differentiation: What makes this UNFORGETTABLE? What's the one thing someone will remember?
CRITICAL: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both workâthe key is intentionality, not intensity.
Then implement working code that is:
- Production-grade and functional (valid YAML structure, compilable SCSS, working Python scripts)
- Visually striking and memorable
- Cohesive with a clear aesthetic point-of-view
- Meticulously refined in every detail
- Correct for Puree (use only supported properties â see Puree documentation PUREE_VS_CSS.md)
Puree Aesthetics Guidelines
Typography
â Consult typography reference for scales, pairing, and font loading.
Choose fonts that are beautiful, unique, and interesting. Place font files in the fonts/ directory and reference them via the YAML font: attribute.
DO: Use a modular type scale with distinct size steps in px
DO: Vary font weights and sizes to create clear visual hierarchy
DO: Load display and body fonts from the fonts/ directory
DON'T: Use overused fonts when distinctive alternatives are available in the project
DON'T: Use monospace typography as lazy shorthand for "technical/developer" vibes
DON'T: Put large icons above every headingâthey rarely add value and make interfaces look templated
Color & Theme
â Consult color reference for palettes, SCSS variables, and theming.
Commit to a cohesive palette. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
DO: Use SCSS variables for a maintainable, consistent palette ($primary, $surface, $text)
DO: Use hex, rgba(), rgb(), hsl() for color values â these are what Puree's color parser supports
DO: Tint your neutrals toward your brand hueâeven a subtle hint creates subconscious cohesion
DON'T: Use gray text on colored backgroundsâit looks washed out; use a shade of the background color instead
DON'T: Use pure black (#000) or pure white (#fff)âalways tint; pure black/white never appears in nature
DON'T: Use the AI color palette: cyan-on-dark, purple-to-blue gradients, neon accents on dark backgrounds
DON'T: Use gradient text for "impact"âespecially on metrics or headings; it's decorative rather than meaningful
DON'T: Default to dark mode with glowing accentsâit looks "cool" without requiring actual design decisions
Layout & Space
â Consult spatial reference for grids, rhythm, and spacing systems.
Create visual rhythm through varied spacingânot the same padding everywhere. Embrace asymmetry and unexpected compositions. Break the grid intentionally for emphasis.
DO: Create visual rhythm through varied spacingâtight groupings, generous separations
DO: Use display: flex and display: grid for layout (Puree supports both via Taffy)
DO: Use asymmetry and unexpected compositions; break the grid intentionally for emphasis
DO: Use gap for consistent sibling spacing in flex/grid containers
DON'T: Wrap everything in cardsânot everything needs a container
DON'T: Nest cards inside cardsâvisual noise, flatten the hierarchy
DON'T: Use identical card gridsâsame-sized cards with icon + heading + text, repeated endlessly
DON'T: Center everythingâleft-aligned text with asymmetric layouts feels more designed
DON'T: Use the same spacing everywhereâwithout rhythm, layouts feel monotonous
Visual Details
DO: Use intentional, purposeful decorative elements that reinforce brand
DO: Use border-image: linear-gradient() for accent borders
DO: Use box-shadow for subtle depth (one shadow per element)
DON'T: Use rounded elements with thick colored border on one sideâa lazy accent that almost never looks intentional
DON'T: Use rounded rectangles with generic drop shadowsâsafe, forgettable, could be any AI output
Motion
â Consult motion reference for timing and easing.
Puree supports transition on background-color, color, border-color, and opacity. Use these four animatable properties to create responsive, alive-feeling interfaces.
DO: Use transitions to convey state changesâhover feedback, active states, visibility shifts
DO: Use ease-out for elements appearing, ease-in for elements fading
DO: Combine multiple transitions: transition: background-color 0.2s ease, opacity 0.3s linear
DON'T: Expect @keyframes, transform, or animation to work â Puree only supports transition
DON'T: Use bounce or elastic easingâPuree supports ease, linear, ease-in, ease-out, ease-in-out
Interaction
â Consult interaction reference for events, hover/active states, and Python scripting.
Make interactions feel fast and responsive. Use Python event handlers to update UI state.
DO: Use progressive disclosureâstart simple, reveal sophistication through interaction
DO: Design empty states that teach the interface, not just say "nothing here"
DO: Make every interactive surface feel intentional with :hover and :active SCSS states
DO: Always call mark_dirty() after changing properties at runtime
DON'T: Repeat the same informationâredundant headers, intros that restate the heading
DON'T: Make every button primaryâuse ghost buttons, text links, secondary styles; hierarchy matters
Adaptive Layout
â Consult responsive reference for @media queries in Puree.
DO: Use @media (min-width: Npx) and @media (max-width: Npx) to adapt to different panel sizes
DO: Adapt the interface for different Blender panel widthsâdon't just shrink it
DON'T: Hide critical functionality at narrow widthsâadapt the layout, don't amputate it
UX Writing
â Consult ux-writing reference for labels, errors, and empty states.
DO: Make every word earn its place
DON'T: Repeat information users can already see
The AI Slop Test
Critical quality check: If you showed this interface to someone and said "AI made this," would they believe you immediately? If yes, that's the problem.
A distinctive interface should make someone ask "how was this made?" not "which AI made this?"
Review the DON'T guidelines aboveâthey are the fingerprints of AI-generated work from 2024-2025.
Implementation Principles
Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate SCSS with rich color palettes, gradient borders, and layered transitions. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details.
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices across generations.
Puree-Specific Reminders
- YAML node names must use underscores, not hyphens (
sidebar_panel, not sidebar-panel)
- SCSS variables inside
-- extension properties need interpolation: --text-align-v: #{$var};
- Component params use
"{{param_name, 'default_value'}}" syntax
- Always
return app from script.py's main() function
- Always call
mark_dirty() after runtime property changes
- Only px and % units are supported â no
rem, em, vw, vh, fr
- Supported color formats: hex,
rgb(), rgba(), hsl(), named colors
- Unsupported:
oklch(), color-mix(), light-dark(), calc(), clamp(), @keyframes, transform, z-index, pseudo-elements
Remember: the model is capable of extraordinary creative work. Don't hold backâshow what can truly be created when thinking outside the box and committing fully to a distinctive vision.