GET STARTED

The Team Behind Utah’s
Most Talked About Landscapes

The Team Behind Utah’s Most Talked About

Landscapes

Exceptional landscaping starts with obsession-worthy attention to detail. At Worx, we deliver timeless landscapes for Utah’s most distinctive homes and commercial properties.

Problem Solving
Resourceful & Adaptable
One Team
Loyal & seek the greater good of the company
Worx Values
Get it Done
Accountable, Taker Ownership, Reliable
Strive for Excellence
Understanding the value of reputation & professionalism

Our Happy Clients

Worx has earned a top reputation in its field, thanks to glowing client reviews that praise the team’s creativity, professionalism, and attention to detail. Customers consistently highlight on-time delivery, friendly service, and impressive results—making every project a smooth and rewarding experience.

Your Property. Your Legacy. Our Obsession.

Luxury Landscaping for Salt Lake City and the Wasatch Front

At Worx Landscaping & Snow Removal, we don’t just install landscapes. We engineer timeless outdoor environments tailored for Utah’s most discerning homeowners and commercial developers. From modern retreats to large-scale commercial spaces, we deliver high-end landscape design, construction, and year-round maintenance with unmatched craftsmanship, creativity, and local expertise. Serving Salt Lake City, Park City, Draper, and the entire Wasatch Front, we’re the trusted partner for clients who demand excellence and expect results that last.

Residential Landscaping That Reflects Your Lifestyle

Your outdoor space should reflect the same intention and sophistication as the rest of your home. Whether it’s a sleek xeriscape in Park City, a fire-lit patio in Cottonwood Heights, or an outdoor kitchen in Draper, we turn your vision into a custom-designed reality. Every detail is tailored to your lifestyle and Utah’s unique climate. We deliver 3D renderings within five business days and use materials chosen for lasting performance.

Commercial Spaces That Make a Statement

From HOA communities and retail centers to office parks and public spaces, we help commercial clients create landscapes that enhance brand image and long-term property value. Whether it’s tree care in Herriman, turf installation in Lehi, or snow and ice management in Millcreek, every service is delivered with professionalism, precision, and code compliance in mind.

Worx crew member smiling

Landscaping Services for Salt Lake City and the Wasatch Front

A Full Suite of

Worx Landscaping & Snow Removal delivers premium landscaping solutions for residential and commercial properties across Salt Lake City, Park City, Draper, and surrounding communities along the Wasatch Front. Whether you're envisioning a serene backyard escape, increasing curb appeal, or managing the needs of a commercial site, our team brings experience, craftsmanship, and a deep understanding of Utah’s unique terrain and climate.

Ready to Make Your Yard Unforgettable?

Ready to Make Your
Yard Unforgettable?

Worx Landscaping: Built For Utah. Backed by Results.

Let’s skip the fluff. You want a yard that makes people stop and stare. Whether you’re dreaming up an outdoor living space with soul, need commercial landscaping that makes your brand look buttoned up, or just want your weekends back from lawn chores, we’ve got the crew, the gear, and the grit to pull it off. We’ve transformed backyards in The Avenues, wowed clients in Park City, and kept driveways snow-free in Draper before most folks pour their coffee. That’s just what we do.

If you’re ready to stop Googling and start building, we’re here to make it happen. Tell us a bit about your project, and we’ll take it from there. Your dream outdoor space starts with a simple conversation. Fill out our contact form to get started on your project.

(function() {
  class WordRotate {
    constructor(element) {
      this.element = element;
      this.originalText = element.innerText;
      this.words = (element.getAttribute('data-word-rotate-words') || '').split(',').map(word => word.trim());
      this.duration = parseInt(element.getAttribute('data-word-rotate-duration') || 2500, 10);
      this.animationSpeed = parseInt(element.getAttribute('data-word-rotate-speed') || 350, 10);
      this.animationType = element.getAttribute('data-word-rotate-type') || 'fade';
      
      if (this.words.length <= 1) return;
      
      this.setupStyles();
      this.createStructure();
      this.startRotation();
    }
    
    setupStyles() {
      const styleId = 'word-rotate-styles';
      if (!document.getElementById(styleId)) {
        const style = document.createElement('style');
        style.id = styleId;
        const baseTransition = `${this.animationSpeed}ms cubic-bezier(0.45, 0, 0.15, 1)`;
        
        style.textContent = `
          .word-rotate-wrapper {
            display: inline-block;
            position: relative;
            overflow: hidden;
            vertical-align: top;
          }
          
          .word-rotate-item {
            display: block;
            position: absolute;
            left: 0;
            top: 0;
            white-space: nowrap;
            opacity: 0;
            width: 100%;
          }
          
          .word-rotate-item.active {
            position: relative;
            opacity: 1;
          }
          
          .word-rotate-item[style*="background-clip: text"],
          .word-rotate-item[style*="background-image"] {
            padding-bottom: 5px;
          }
          
          .word-rotate-fade .word-rotate-item {
            transform: translateY(0);
            transition: opacity ${baseTransition};
          }
          
          .word-rotate-slide-up .word-rotate-item:not(.active) {
            transform: translateY(30px);
            transition: transform ${baseTransition}, opacity ${baseTransition};
          }
          
          .word-rotate-slide-up .word-rotate-item.active {
            transform: translateY(0);
            transition: transform ${baseTransition}, opacity ${baseTransition};
          }
          
          .word-rotate-slide-up .word-rotate-item.previous {
            transform: translateY(-30px);
            transition: transform ${baseTransition}, opacity ${baseTransition};
          }
          
          .word-rotate-slide-down .word-rotate-item:not(.active) {
            transform: translateY(-30px);
            transition: transform ${baseTransition}, opacity ${baseTransition};
          }
          
          .word-rotate-slide-down .word-rotate-item.active {
            transform: translateY(0);
            transition: transform ${baseTransition}, opacity ${baseTransition};
          }
          
          .word-rotate-slide-down .word-rotate-item.previous {
            transform: translateY(30px);
            transition: transform ${baseTransition}, opacity ${baseTransition};
          }
          
          .word-rotate-slide-left .word-rotate-item:not(.active) {
            transform: translateX(30px);
            transition: transform ${baseTransition}, opacity ${baseTransition};
          }
          
          .word-rotate-slide-left .word-rotate-item.active,
          .word-rotate-slide-right .word-rotate-item.active {
            transform: translateX(0);
            transition: transform ${baseTransition}, opacity ${baseTransition};
          }
          
          .word-rotate-slide-left .word-rotate-item.previous {
            transform: translateX(-30px);
            transition: transform ${baseTransition}, opacity ${baseTransition};
          }
          
          .word-rotate-slide-right .word-rotate-item:not(.active) {
            transform: translateX(-30px);
            transition: transform ${baseTransition}, opacity ${baseTransition};
          }
          
          .word-rotate-slide-right .word-rotate-item.previous {
            transform: translateX(30px);
            transition: transform ${baseTransition}, opacity ${baseTransition};
          }
        `;
        document.head.appendChild(style);
      }
    }
    
    createStructure() {
      const computedStyle = window.getComputedStyle(this.element);
      const hasGradient = 
        computedStyle.backgroundImage.includes('gradient') && 
        (computedStyle.backgroundClip === 'text' || 
         computedStyle.webkitBackgroundClip === 'text' ||
         computedStyle.color === 'rgba(0, 0, 0, 0)' ||
         computedStyle.color === 'transparent');
      
      this.wrapper = document.createElement('span');
      this.wrapper.className = `word-rotate-wrapper word-rotate-${this.animationType}`;
      
      if (hasGradient) {
        this.wrapper.style.paddingBottom = '5px';
      }
      
      this.words.forEach((word, index) => {
        const wordElement = document.createElement('span');
        wordElement.className = `word-rotate-item ${index === 0 ? 'active' : ''}`;
        wordElement.innerHTML = word;
        
        if (hasGradient) {
          this.applyGradientStyles(wordElement, computedStyle);
        }
        
        this.wrapper.appendChild(wordElement);
      });
      
      this.element.innerHTML = '';
      this.element.appendChild(this.wrapper);
      
      this.setWrapperDimensions();
      this.resizeHandler = this.setWrapperDimensions.bind(this);
      window.addEventListener('resize', this.resizeHandler);
    }
    
    applyGradientStyles(element, computedStyle) {
      element.style.color = 'transparent';
      element.style.backgroundImage = computedStyle.backgroundImage;
      element.style.backgroundSize = computedStyle.backgroundSize;
      element.style.backgroundPosition = computedStyle.backgroundPosition;
      element.style.backgroundRepeat = computedStyle.backgroundRepeat;
      element.style.webkitBackgroundClip = 'text';
      element.style.backgroundClip = 'text';
      
      if (computedStyle.webkitTextFillColor) {
        element.style.webkitTextFillColor = computedStyle.webkitTextFillColor;
      }
      
      element.style.paddingBottom = '5px';
    }
    
    setWrapperDimensions() {
      let maxWidth = 0;
      let maxHeight = 0;
      const wordElements = this.wrapper.querySelectorAll('.word-rotate-item');
      const computedStyle = window.getComputedStyle(this.element);
      const hasGradient = 
        computedStyle.backgroundImage.includes('gradient') && 
        (computedStyle.backgroundClip === 'text' || 
         computedStyle.webkitBackgroundClip === 'text');
      
      wordElements.forEach(element => {
        const prevOpacity = element.style.opacity;
        const prevPosition = element.style.position;
        element.style.opacity = '1';
        element.style.position = 'static';
        
        const rect = element.getBoundingClientRect();
        maxWidth = Math.max(maxWidth, rect.width);
        maxHeight = Math.max(maxHeight, rect.height);
        
        element.style.opacity = prevOpacity;
        element.style.position = prevPosition;
      });
      
      this.wrapper.style.minWidth = `${maxWidth}px`;
      this.wrapper.style.height = `${maxHeight + (hasGradient ? 6 : 0)}px`;
    }
    
    startRotation() {
      this.interval = setInterval(() => {
        const items = this.wrapper.querySelectorAll('.word-rotate-item');
        const current = this.wrapper.querySelector('.word-rotate-item.active');
        const currentIndex = Array.from(items).indexOf(current);
        
        current.classList.remove('active');
        current.classList.add('previous');
        
        setTimeout(() => {
          current.classList.remove('previous');
        }, this.animationSpeed);
        
        const nextIndex = (currentIndex + 1) % items.length;
        items[nextIndex].classList.add('active');
      }, this.duration);
    }
    
    destroy() {
      if (this.interval) {
        clearInterval(this.interval);
      }
      
      this.element.innerHTML = this.originalText;
      window.removeEventListener('resize', this.resizeHandler);
    }
  }
  
  // Inicialización y manejadores de eventos
  const initWordRotate = () => {
    document.querySelectorAll('[data-word-rotate]').forEach(element => {
      if (!element._wordRotate) {
        element._wordRotate = new WordRotate(element);
      }
    });
  };
  
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', initWordRotate);
  } else {
    setTimeout(initWordRotate, 100);
  }
  
  window.addEventListener('resize', () => setTimeout(initWordRotate, 200));
  
  if (typeof window.bricksIsFrontend !== 'undefined') {
    document.addEventListener('bricks/layout_rendered', () => setTimeout(initWordRotate, 200));
  }
})();