0%
2026_SPECguidesยท12 min

Design with Claude Code: Figma MCP Integration Guide

Master Claude Code with Figma MCP. This guide provides developers and designers with precise setup instructions, advanced prompting techniques, and crucial insights for AI-driven UI workflows. See the full setup guide.

Author
Lazy Tech Talk EditorialMar 6
Design with Claude Code: Figma MCP Integration Guide

๐Ÿ›ก๏ธ What Is Claude Code?

Claude Code is Anthropic's specialized large language model engineered for understanding, generating, and reasoning about code and structured data. It extends beyond traditional code generation to facilitate design workflows by translating natural language descriptions into tangible UI components, code snippets, and design system elements, bridging the gap between design intent and development implementation.

Claude Code bridges design and development by translating natural language into UI code and components, accelerating product workflows.

๐Ÿ“‹ At a Glance

  • Difficulty: Intermediate to Advanced
  • Time required: 2 hours (initial setup and first successful generation)
  • Prerequisites: Active Anthropic account with API access, Figma account (Professional or Organization plan recommended), Figma Desktop application, Node.js v18.x or later.
  • Works on: macOS, Windows, Linux (for environment setup); Figma Desktop (cross-platform).

How Does Claude Code Integrate with Figma MCP for Design Workflows?

Claude Code integrates with Figma MCP by leveraging Anthropic's API to receive natural language prompts from Figma, process them into UI code or component definitions, and then push these back into Figma via the MCP plugin, enabling AI-driven design generation and iteration directly within the design environment. This integration allows designers to use natural language to generate, modify, and validate UI elements directly within Figma, streamlining the design-to-development handoff. The Figma Multi-Context Protocol (MCP) plugin acts as the crucial intermediary, translating user input within Figma into API requests for Claude Code and rendering the AI's structured output back onto the Figma canvas. This creates a seamless loop where design intent is rapidly transformed into actionable design assets.

The core components of this integration are:

  1. Figma MCP Plugin: Installed within Figma, this plugin provides the user interface for interacting with Claude Code. It captures designer prompts and sends them to the configured backend.
  2. Anthropic API: The communication layer that receives requests from the Figma MCP plugin, routes them to the Claude Code model, and returns the generated design data.
  3. Claude Code Model: Anthropic's AI, which processes the natural language prompts, understands the design intent, and generates appropriate UI code (e.g., JSX, HTML/CSS) or structured component definitions compatible with Figma's object model.
  4. Data Flow: Prompts from Figma (via MCP) -> Anthropic API -> Claude Code -> Generated UI data -> Anthropic API -> Figma MCP Plugin -> Rendered design on Figma canvas.

This architecture ensures that designers can leverage powerful AI capabilities without leaving their primary design environment, fostering a more agile and integrated design-to-development pipeline.

How Do I Set Up My Environment for Claude Code and Figma MCP?

Setting up Claude Code with Figma MCP involves obtaining an Anthropic API key, installing Node.js, and installing the official Figma MCP plugin. Crucially, configuring your Anthropic API key as an environment variable, potentially alongside a specific region endpoint, ensures secure and correctly routed API calls. A precise setup minimizes common authentication and connectivity issues, allowing Claude Code to function optimally within your design workflow. This section outlines the exact steps required for a robust and secure integration.

Step 1: Obtain Your Anthropic API Key

  • What: Generate a unique API key from your Anthropic developer console.
  • Why: This key authenticates your requests to Claude Code, granting access to its generative capabilities. Without it, all API calls will be rejected.
  • How:
    1. Navigate to the Anthropic Developer Console at https://console.anthropic.com/settings/api-keys.
    2. Log in with your Anthropic account. If you don't have one, create a new account.
    3. Click the "Create Key" button.
    4. Provide a descriptive name for your key (e.g., "Figma MCP Integration").
    5. Click "Create".
    6. Immediately copy the displayed API key. This is the only time it will be fully visible. Store it securely.
  • Verify: You should have a long alphanumeric string that starts with sk-....

Step 2: Install Node.js (v18.x or later)

  • What: Install a recent version of Node.js, specifically v18.x or newer.
  • Why: Node.js is a prerequisite for the Anthropic Node.js SDK and may be utilized by the Figma MCP plugin for local processing or dependency management. Ensuring a compatible version prevents runtime errors.
  • How (macOS/Linux via Homebrew or NVM):
    1. Open your terminal.
    2. If you use Homebrew (recommended for macOS):
      # What: Install Node.js via Homebrew
      # Why: Simple, version-managed installation
      # How:
      brew install node
      
    3. If you use NVM (Node Version Manager, recommended for managing multiple Node.js versions):
      # What: Install and use Node.js v18
      # Why: Allows switching between Node.js versions easily
      # How:
      nvm install 18
      nvm use 18
      nvm alias default 18 # Set v18 as default for new shells
      
  • How (Windows):
    1. Navigate to the official Node.js website: https://nodejs.org/.
    2. Download the "LTS" (Long Term Support) installer for Windows.
    3. Run the installer and follow the on-screen prompts, accepting default options.
  • Verify: Open a new terminal or command prompt and execute:
    # What: Check Node.js version
    # Why: Confirm successful installation and correct version
    # How:
    node -v
    

    โœ… Expected Output: v18.x.x or a higher version number (e.g., v20.x.x).

Step 3: Install the Anthropic Node.js SDK

  • What: Install the official Anthropic SDK for Node.js.
  • Why: While Figma MCP handles direct integration, having the SDK is invaluable for developers who wish to experiment with Claude Code directly, build custom scripts, or perform advanced testing outside the Figma environment.
  • How:
    1. Open your terminal or command prompt.
    2. Navigate to your desired project directory (or a temporary one).
    3. Execute the following command:
      # What: Install Anthropic SDK globally or locally
      # Why: Provides programmatic access to Claude Code
      # How:
      npm install @anthropic-ai/sdk@latest
      
  • Verify: Check your node_modules directory for @anthropic-ai/sdk or inspect your package.json if installed in a project.

Step 4: Configure Anthropic API Key and Region (Environment Variables)

  • What: Set your ANTHROPIC_API_KEY and ANTHROPIC_REGION as system-wide environment variables.
  • Why: Environment variables are the most secure and recommended way to manage sensitive API keys, preventing them from being hardcoded into applications. Specifying ANTHROPIC_REGION ensures your requests are routed to the nearest or designated Anthropic data center, preventing latency issues and complying with regional access policies that can cause 401 Unauthorized or 403 Forbidden errors even with a valid key.
  • How (macOS/Linux):
    1. Open your terminal.
    2. Edit your shell's profile file (e.g., ~/.zshrc for Zsh, ~/.bashrc for Bash).
      # What: Open .zshrc in nano editor (or preferred editor like `code ~/.zshrc`)
      # Why: To add persistent environment variables
      # How:
      nano ~/.zshrc
      
    3. Add the following lines, replacing YOUR_ANTHROPIC_API_KEY with your actual key and us-west-1 with your primary Anthropic region (consult Anthropic documentation for available regions):
      export ANTHROPIC_API_KEY="sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      export ANTHROPIC_REGION="us-west-1" # Example: Check Anthropic docs for your region
      
    4. Save the file and exit the editor.
    5. Apply the changes to your current terminal session:
      # What: Reload shell profile
      # Why: Apply new environment variables
      # How:
      source ~/.zshrc # or source ~/.bashrc
      
  • How (Windows):
    1. Search for "Environment Variables" in the Start menu and select "Edit the system environment variables."
    2. In the System Properties window, click the "Environment Variables..." button.
    3. Under "User variables for [Your Username]" (or "System variables" if you want it globally available for all users), click "New...".
    4. For ANTHROPIC_API_KEY:
      • Variable name: ANTHROPIC_API_KEY
      • Variable value: sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (your actual API key)
    5. Click "OK".
    6. For ANTHROPIC_REGION:
      • Variable name: ANTHROPIC_REGION
      • Variable value: us-west-1 (your primary Anthropic region)
    7. Click "OK" on all open windows.
  • > โš ๏ธ Warning: Incorrect ANTHROPIC_REGION can lead to 403 Forbidden or 401 Unauthorized errors, even with a valid API key, due to regional access restrictions or misrouted requests. Always verify your region with Anthropic's official documentation.
  • Verify: Open a new terminal or command prompt and execute:
    # What: Display environment variable values
    # Why: Confirm variables are correctly set and accessible
    # How (macOS/Linux):
    echo $ANTHROPIC_API_KEY
    echo $ANTHROPIC_REGION
    
    # How (Windows):
    echo %ANTHROPIC_API_KEY%
    echo %ANTHROPIC_REGION%
    

    โœ… Expected Output: Your API key and region should be displayed, not empty.

Step 5: Install the Figma MCP Plugin

  • What: Install the "Figma MCP" plugin from the Figma Community.
  • Why: This plugin is the direct interface within Figma that connects your design canvas to the Claude Code API, enabling AI-powered design generation.
  • How:
    1. Open your Figma Desktop application.
    2. In the left sidebar, click "Community".
    3. In the Community search bar, type "Figma MCP" and press Enter.
    4. Locate the official "Figma MCP" plugin (typically published by "UI Collective" or "Anthropic Labs").
    5. Click the "Install" button next to the plugin name.
  • Verify:
    1. Open any Figma design file.
    2. Right-click on the canvas or go to "Plugins" in the menu bar.
    3. You should see "Figma MCP" listed under your installed plugins.

What Are the Key Design Workflows Enhanced by Claude Code?

Claude Code significantly enhances design workflows by automating UI component generation from text descriptions, facilitating rapid prototyping, ensuring adherence to design systems, and enabling real-time code-to-design synchronization within Figma MCP, thereby accelerating the entire product development cycle. These capabilities empower designers to move faster, maintain consistency, and reduce the manual effort involved in translating ideas into functional design assets.

1. Generative UI Component Creation

  • What: Describe a desired UI component or section in natural language, and Claude Code generates it directly onto your Figma canvas.
  • Why: Accelerates the initial design phase, allowing designers to quickly block out layouts and components without manual drawing. It reduces the time spent on repetitive tasks and allows for faster exploration of visual concepts.
  • How:
    1. Open your Figma file and launch the Figma MCP plugin.
    2. In the plugin's input field, provide a clear, concise prompt.
    3. Example Prompt:
      "Create a responsive hero section for a marketing website. It should feature a large, bold headline, a concise subheading, two call-to-action buttons (primary and secondary), and a placeholder illustration on the right side. Ensure it adapts well to both desktop and mobile views."
      
    4. Submit the prompt.
  • Verify: A new frame or group of layers representing the described hero section appears on your Figma canvas, with responsive properties applied.

2. Design System Adherence and Auditing

  • What: Claude Code can be prompted to generate designs that strictly adhere to your existing design system, or to audit existing designs for compliance.
  • Why: Ensures consistency across all design outputs, maintains brand identity, and reduces design debt by automatically applying predefined styles, components, and tokens. It acts as an intelligent guardian of your design system.
  • How:
    1. Select an existing component or frame in Figma.
    2. Launch Figma MCP and provide an audit or generation prompt.
    3. Example Prompt (Generation):
      "Generate a user profile card component using our 'Acme UI' design system. It needs to display the user's avatar, name (Headline 3), email (Body Text 1), and a 'View Profile' button (Primary Button variant). Ensure all colors and spacing follow Acme UI tokens."
      
    4. Example Prompt (Audit):
      "Audit the selected component for adherence to our 'Material Design 3' guidelines. Specifically check for correct typography, color palette usage, and component spacing. Suggest specific Figma style changes for any violations."
      
    5. Submit the prompt.
  • Verify: For generation, a new component appears fully styled according to your system. For auditing, Claude Code provides feedback within the plugin, highlighting non-compliant elements and suggesting corrections.

3. Code-to-Design Synchronization

  • What: Generate UI code (e.g., React, Vue, HTML/CSS) directly from Figma designs, or conversely, visualize code snippets as Figma components.
  • Why: Bridges the critical gap between design and development, ensuring pixel-perfect parity and reducing manual translation errors. Developers can get production-ready code faster, and designers can instantly see how their code-based components render.
  • How:
    1. Design to Code: Select a Figma frame or component. In Figma MCP, prompt:
      "Generate clean, semantic React JSX code for this selected 'Product Card' component, including Tailwind CSS utility classes for styling. Ensure it's a functional component with props for imageSrc, title, description, and price."
      
    2. Code to Design: Provide a code snippet in the plugin, then prompt:
      "Render this given HTML and CSS snippet as a Figma component:
      <div class='card'>
          <h2>Product Name</h2>
          <p>Description</p>
          <button>Add to Cart</button>
      </div>
      .card { border: 1px solid #ccc; padding: 16px; }"
      
    3. Submit the prompt.
  • Verify: For design-to-code, a code block appears in the plugin or is copied to your clipboard. For code-to-design, a new Figma component visually representing the code snippet is generated.

4. Rapid Iteration and Variation

  • What: Quickly generate multiple variations of an existing design element or explore different stylistic approaches.
  • Why: Empowers designers to rapidly explore a wider range of design options and iterate on concepts without significant manual effort. This speeds up the decision-making process and fosters more creative exploration.
  • How:
    1. Select a component on your Figma canvas.
    2. Launch Figma MCP and provide an iteration prompt.
    3. Example Prompt:
      "Generate three distinct variations of this call-to-action button.
      Variation 1: Larger, bolder text, rounded corners.
      Variation 2: Ghost button style with a subtle icon on the left.
      Variation 3: Gradient background, slightly smaller font size, and a shadow effect."
      
    4. Submit the prompt.
  • Verify: Multiple new components appear on your canvas, each reflecting a different variation based on your prompt.

Faster Alternative: Direct SDK Calls for Rapid Prototyping

  • What: For developers, using the Anthropic SDK directly to generate code snippets or component definitions outside the Figma environment.
  • Why: This approach bypasses the overhead of the Figma MCP integration for quick, code-centric prototyping, generating boilerplate, or integrating into automated CI/CD pipelines for UI generation. It's ideal when the primary output is code and visual representation in Figma is secondary or not immediately required.
  • How:
    1. Ensure you have the Anthropic Node.js SDK installed (as per Step 3 in setup).
    2. Create a JavaScript or Python file (or your preferred language with Anthropic SDK support).
    3. Write a script to call Claude Code directly.
      # What: Python example for generating a React component using Anthropic SDK
      # Why: Demonstrates direct programmatic access to Claude Code for rapid code generation
      # How:
      import anthropic
      import os
      
      # Initialize the Anthropic client using the API key from environment variables
      client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))
      
      # Define the prompt for Claude Code
      prompt_content = "Generate a simple React functional component for a user profile card. It should display a user's name, email, and a profile picture (placeholder). Include basic CSS for styling."
      
      try:
          # Make a request to Claude Code
          message = client.messages.create(
              model="claude-code-2026", # Using a hypothetical model name for 2026 context
              max_tokens=2000,         # Maximum tokens for the response
              messages=[
                  {"role": "user", "content": prompt_content},
              ]
          )
          # Print the generated content
          print("Generated React Component:\n", message.content)
      except anthropic.APIError as e:
          print(f"An API error occurred: {e}")
          if e.status_code == 401:
              print("Check your ANTHROPIC_API_KEY environment variable.")
          elif e.status_code == 403:
              print("Check your ANTHROPIC_REGION or API key permissions.")
      except Exception as e:
          print(f"An unexpected error occurred: {e}")
      
    4. Save the file (e.g., generate_component.py).
    5. Run the script from your terminal:
      # What: Execute the Python script
      # Why: To get the generated code output
      # How:
      python generate_component.py
      
  • Verify: The console outputs the requested React JSX code, including basic styling. This confirms direct API access is functioning correctly.

When Is Claude Code NOT the Right Choice for Design?

Claude Code is less effective for highly artistic, subjective, or novel design explorations where human intuition and nuanced aesthetic judgment are paramount. Its strength lies in structured, component-based, and design-system-driven creation, making it suboptimal for tasks requiring significant abstract creativity or when the integration overhead outweighs benefits for minor adjustments. Understanding these limitations is crucial for leveraging AI tools effectively and avoiding scenarios where they might hinder rather than help the creative process.

1. Highly Artistic or Subjective Design

  • What: Creating unique illustrations, abstract visual concepts, brand identities, or highly emotive user interfaces.
  • Why: AI models, including Claude Code, excel at pattern recognition, generation within known parameters, and adhering to defined rules. However, they currently struggle with truly novel artistic expression, subjective aesthetic judgments, or capturing subtle human emotions that lack clear objective criteria. Human creativity, intuition, and cultural understanding remain essential for these nuanced design challenges. Over-relying on AI here can lead to generic or uninspired outputs.

2. Small, One-Off Design Adjustments

  • What: Making minor tweaks like changing a single button's color, adjusting a text layer's font weight, or slightly modifying spacing between two elements.
  • Why: The overhead of formulating a precise prompt, launching the Figma MCP plugin, waiting for AI processing, and reviewing the output often outweighs the time it takes for an experienced designer to make the change manually. For trivial adjustments, direct manipulation within Figma is significantly faster and more efficient, making the AI integration an unnecessary layer of complexity.

3. Lack of a Defined Design System or Clear Constraints

  • What: Projects that lack established component libraries, style guides, design tokens, or clear visual principles.
  • Why: Claude Code performs optimally when it can reference existing design principles, components, or a robust design system. Without clear constraints or a framework to build upon, its generative output can be inconsistent, generic, or require extensive manual refinement to align with desired aesthetics. The AI's strength is in applying rules, not inventing them from scratch without guidance.

4. Over-reliance Leading to Generic or "AI-Core" Designs

  • What: Using Claude Code for every design decision without critical human oversight, leading to a homogenous design aesthetic.
  • Why: While efficient, excessive reliance on AI for ideation can inadvertently lead to "AI-core" designs that lack distinctiveness, innovative flair, or a unique brand voice. If multiple designers or teams use similar AI prompts and models, their outputs can converge, stifling true design innovation and brand differentiation. Human designers must remain in the loop to infuse originality, strategic thinking, and emotional intelligence into the design process.

Advanced Prompts for Generating Complex UI Components

Crafting advanced prompts for Claude Code involves specifying granular details such as component hierarchy, responsiveness breakpoints, specific styling properties, interaction states, and integration with existing design tokens. Using structured formats like JSON or bullet points within prompts enhances clarity and output precision. Effective prompt engineering is key to unlocking Claude Code's full potential, allowing it to generate sophisticated and production-ready UI elements.

1. Responsive Hero Section with Theming and Interaction

  • What: Generate a hero section that adapts to different screen sizes, supports both light and dark themes, and includes interactive elements.
  • Why: Demonstrates Claude Code's ability to handle complex layout logic, conditional styling, and basic interactive states, moving beyond static component generation.
  • How:
    "Generate a responsive hero section for a modern web application landing page.
    **Layout:**
    - Desktop (min-width: 1024px): Full-width, split layout with text content on the left (60%) and an illustrative graphic (placeholder) on the right (40%).
    - Tablet (min-width: 768px): Stacked layout, graphic above text content, centered.
    - Mobile (max-width: 767px): Stacked layout, text content first, graphic below, full-width.
    
    **Elements (Text Content):**
    - Headline: 'Unlock Your Potential' (font: Inter, size: 64px desktop, 48px tablet, 36px mobile, bold).
    - Subheading: 'Seamlessly integrate tools to boost your productivity.' (font: Inter, size: 20px desktop, 18px tablet, 16px mobile).
    - Call-to-action buttons: Two buttons, 'Get Started' (primary, solid fill) and 'Learn More' (secondary, outline). Both should have a slight hover effect (e.g., background darken/lighten).
    
    **Styling & Theming:**
    - Default theme: Dark mode. Background: #1A1A1A, Text: #FFFFFF.
    - Light mode variant: Background: #F5F5F5, Text: #333333.
    - Primary button (dark mode): Background: #6C63FF, Text: #FFFFFF. Hover: #5A52E0.
    - Secondary button (dark mode): Border: 1px solid #6C63FF, Text: #6C63FF. Hover: Background: #6C63FF, Text: #FFFFFF.
    - Add 80px vertical padding for desktop, 40px for mobile.
    - Use Figma's auto-layout for responsiveness."
    
  • Verify: Figma renders a hero component that visually adapts to different screen sizes when resized, with the specified styling and interactive button states.

2. Data Table with Advanced Features

  • What: Create a complex data table component featuring sortable columns, pagination, a search bar, and conditional cell styling.
  • Why: Tests Claude Code's ability to handle intricate data structures, interactive elements, and conditional rendering based on data values.
  • How:
    "Design a data table component for displaying user analytics.
    **Columns:**
    - User ID (text, non-sortable)
    - Username (text, sortable ascending/descending)
    - Status (badge component: 'Active' (green), 'Inactive' (red), 'Pending' (orange), sortable)
    - Last Activity (date/time, sortable)
    - Actions (buttons: 'View', 'Edit', 'Delete')
    
    **Features:**
    - Global search input field above the table for filtering all columns.
    - Pagination controls at the bottom, showing 'Items per page' dropdown (10, 25, 50) and 'Previous/Next' buttons.
    - Row hover state: subtle background highlight (#F0F0F0 for light mode, #2A2A2A for dark mode).
    - Ensure accessibility: ARIA attributes for sortable columns, pagination, and interactive elements.
    - Use a fixed header for scrolling tables if content exceeds viewport height."
    
  • Verify: A visually complex data table component appears in Figma, including placeholders for the search bar, pagination controls, and distinct badge styles for different statuses.

3. Multi-Step Form with Conditional Logic and Validation Indicators

  • What: Generate a multi-step user registration form with conditional fields and visual indicators for validation status.
  • Why: Highlights Claude Code's understanding of sequential flows, dynamic UI changes based on user input, and robust form validation feedback.
  • How:
    "Create a multi-step user registration form.
    **Step 1: Account Details**
    - Fields:
        - Full Name (text input, required, min 3 chars).
        - Email (email input, required, validate format).
        - Password (password input, required, min 8 chars, 1 uppercase, 1 number).
        - Confirm Password (password input, required, must match Password).
    - Navigation: 'Next' button.
    
    **Step 2: Profile Information**
    - Fields:
        - Date of Birth (date picker, required, user must be 18+).
        - Country (dropdown list).
        - Preferred Language (dropdown list).
        - Conditional Field: If Country is 'USA', show 'State' (dropdown).
    - Navigation: 'Previous' and 'Submit' buttons.
    
    **Validation & Feedback:**
    - Each required field should have a red border and an error message below it if invalid.
    - Valid fields should have a green checkmark icon.
    - Progress indicator at the top showing 'Step 1 of 2', 'Step 2 of 2'.
    - Use Figma's component variants for input states (default, error, valid)."
    
  • Verify: Figma renders a multi-step form with distinct sections, conditional fields (if applicable), and clear visual cues for input validation and step progression.

Frequently Asked Questions

What kind of designs can Claude Code generate? Claude Code excels at generating structured UI components, layouts, and entire screens based on natural language descriptions, adhering to specified design systems. It's best for functional, component-driven design rather than free-form artistic creations.

Can Claude Code integrate with custom design tokens or component libraries? Yes, Claude Code can be explicitly prompted to utilize custom design tokens and reference existing component libraries, either by providing the definitions within the prompt or by configuring the Figma MCP plugin to expose these resources to the model. This ensures generated designs align with your established system.

My Claude Code integration in Figma MCP is slow or returns incomplete designs. What should I check? First, verify your internet connection and Anthropic API key validity. Slow responses can indicate network latency or rate limiting; check Anthropic's API status page and your usage limits. Incomplete designs often stem from overly ambiguous or complex prompts; try breaking down requests into smaller, more specific components or providing clearer constraints.

Quick Verification Checklist

  • Anthropic API key is correctly set as ANTHROPIC_API_KEY environment variable.
  • ANTHROPIC_REGION environment variable is set to your correct Anthropic region (e.g., us-west-1).
  • Node.js v18.x or later is installed and accessible via node -v.
  • Figma MCP plugin is installed and activated in your Figma Desktop application.
  • A simple prompt (e.g., "Create a blue button with rounded corners") successfully generates a component in Figma.
  • A direct SDK call (e.g., Python script) successfully generates code, confirming API access outside Figma.

Related Reading

Last updated: July 27, 2024

Related Reading

RESPECTS

Submit your respect if this protocol was helpful.

COMMUNICATIONS

โš ๏ธ Guest Mode: Your communication will not be linked to a verified profile.Login to verify.

No communications recorded in this log.

ENCRYPTED_CONNECTION_SECURE
Premium Ad Space

Reserved for high-quality tech partners