Space Speaker Studio

Longley Road - Groton, Massachusetts

waysidekitchens

A Coastal-Inspired Culinary Retreat

Project Highlights

Full kitchen renovation in Groton MA

Wall removal and floor plan redesign

Shiloh inset cabinetry in Polar White and Niebla Azul

Custom kitchen island with seating for 4

White Pearl marble countertops and tile backsplash

Farmhouse sink and upgraded window design

New sliding glass door for enhanced natural light

Open-concept layout perfect for entertaining

Outcome

Let's Connect

"); jQuery(window).on('scroll', function() { if (jQuery(window).scrollTop() > headerbarOffsetTop) { jQuery('.header__holder').css('height', headerbarHeight); headerbar.addClass('header--fixed'); } else { headerbar.removeClass("header--fixed"); jQuery('.header__holder').css('height', 0); } }); }); } catch (error) { console.log(error); } })(jQuery); (function($) { "use strict"; var html_body = jQuery('html, body'); try { var slick_object = jQuery('.js-slick-wrapper'); slick_object.each(function() { var that = jQuery(this); var slick_content = that.find('.js-slick-content'); var arrow_left = that.find('.js-slick-prev'); var arrow_right = that.find('.js-slick-next'); var option = { accessibility: true, adaptiveheight: false, autoplay: false, autoplayspeed: 5000, arrows: false, asnavfor: null, appendarrows: jQuery(this), appenddots: jQuery(this), prevarrow: '', nextarrow: '', centermode: false, centerpadding: '50px', cssease: 'ease', dots: false, dotsclass: 'slick-dots', draggable: true, fade: false, focuson: false, speed: 800, pauseonhover: false, xl: 1, lg: this.xl, md: this.lg, sm: this.md, xs: this.sm, vertical: false, loop: true, thumb: false, customnav: false, variablewidth: false, variableheight: false, swipetoslide: true }; for (var k in option) { if (option.hasOwnProperty(k)) { if (jQuery(this).attr('data-slick-' + k) != null) { option[k] = jQuery(this).data('slick-' + k); } } } if (option.customnav === true) { option.appendarrows = that.find('.slick__arrows'); option.appenddots = that.find('.slick__dots'); } var slickAPI = slick_content; var animationInString = '[data-animation], [data-animation-in]'; var animationOutString = '[data-animation-out]'; slickAPI.on('init reinit', function() { var elementAnimate = jQuery(this).find(animationInString); elementAnimate.css("visibility", "hidden"); var firstAnimatingElements = jQuery(this).find('.slick-current [data-animation], .slick-current [data-animation-in]'); doAnimations(firstAnimatingElements); }); if (option.thumb) slickAPI.slick({ accessibility: option.accessibility, adaptiveHeight: option.adaptiveheight, autoplay: option.autoplay, autoplaySpeed: option.autoplayspeed, arrows: option.arrows, asNavFor: option.asnavfor, appendArrows: option.appendarrows, appendDots: option.appenddots, prevArrow: option.prevarrow, nextArrow: option.nextarrow, centerMode: option.centermode, centerPadding: option.centerpadding, cssease: option.cssease, dots: option.dots, dotsClass: option.dotsclass, draggable: option.draggable, pauseOnHover: option.pauseonhover, fade: option.fade, focusOnSelect: option.focuson, vertical: option.vertical, slidesToShow: option.xl, slidesToScroll: option.xl, infinite: option.loop, swipeToSlide: option.swipetoslide, speed: option.speed, variableWidth: option.variablewidth, variableHeight: option.variableheight, customPaging: function(slick, index) { var portrait = jQuery(slick.$slides[index]).data('thumb'); return 'waysidekitchens'; }, responsive: [{ breakpoint: 1201, settings: { slidesToShow: option.lg, slidesToScroll: option.lg } }, { breakpoint: 993, settings: { slidesToShow: option.md, slidesToScroll: option.md, variableWidth: false } }, { breakpoint: 769, settings: { slidesToShow: option.sm, slidesToScroll: option.sm, centerPadding: "50px", variableWidth: false } }, { breakpoint: 576, settings: { slidesToShow: option.xs, slidesToScroll: option.xs, fade: false, centerPadding: "50px", variableWidth: false } }] }); else slickAPI.slick({ accessibility: option.accessibility, adaptiveHeight: option.adaptiveheight, autoplay: option.autoplay, autoplaySpeed: option.autoplayspeed, arrows: option.arrows, asNavFor: option.asnavfor, appendArrows: option.appendarrows, appendDots: option.appenddots, prevArrow: option.prevarrow, nextArrow: option.nextarrow, centerMode: option.centermode, centerPadding: option.centerpadding, cssease: option.cssease, dots: option.dots, dotsClass: option.dotsclass, draggable: option.draggable, pauseOnHover: option.pauseonhover, fade: option.fade, focusOnSelect: option.focuson, vertical: option.vertical, slidesToShow: option.xl, slidesToScroll: option.xl, infinite: option.loop, swipeToSlide: option.swipetoslide, speed: option.speed, variableWidth: option.variablewidth, variableHeight: option.variableheight, responsive: [{ breakpoint: 1201, settings: { slidesToShow: option.lg, slidesToScroll: option.lg } }, { breakpoint: 993, settings: { slidesToShow: option.md, slidesToScroll: option.md, variableWidth: false } }, { breakpoint: 769, settings: { slidesToShow: option.sm, slidesToScroll: option.sm, centerPadding: "50px", variableWidth: false } }, { breakpoint: 576, settings: { slidesToShow: option.xs, slidesToScroll: option.xs, fade: false, centerPadding: "20px", variableWidth: false } }] }); slickAPI.on('afterChange', function(e, slick, currentSlide) { var $animatingElements = jQuery(this).find('[data-slick-index="' + currentSlide + '"]').find(animationInString); doAnimations($animatingElements); }); slickAPI.on('beforeChange', function(e, slick, currentSlide, nextSlide) { var $animatingElements = jQuery(this).find('[data-slick-index="' + nextSlide + '"]').find(animationInString); if (!(jQuery(this).find('[data-slick-index="' + currentSlide + '"]').find(animationOutString).length === 0)) { var $elementAnimateCurrent = jQuery(this).find('[data-slick-index="' + currentSlide + '"]').find(animationOutString); doAnimationsOut($elementAnimateCurrent); return; } doAnimations($animatingElements); }); function doAnimations(elements) { var animationEndEvents = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend'; elements.each(function() { elements.css("visibility", "visible"); var $animationDelay = jQuery(this).data('animation-delay'); var $animationType = 'animated ' + jQuery(this).data('animation'); if (jQuery(this).data('animation') === undefined) $animationType = 'animated ' + jQuery(this).data('animation-in'); jQuery(this).css({ 'animation-delay': $animationDelay, '-webkit-animation-delay': $animationDelay }); jQuery(this).addClass($animationType).one(animationEndEvents, function() { jQuery(this).removeClass($animationType); }); }); } function doAnimationsOut(elements) { var animationEndEvents = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend'; elements.each(function() { var $animationDelay = "0s"; var $animationType = 'animated ' + jQuery(this).data('animation-out'); jQuery(this).css({ 'animation-delay': $animationDelay, '-webkit-animation-delay': $animationDelay }); jQuery(this).addClass($animationType).one(animationEndEvents, function() { jQuery(this).removeClass($animationType); }); elements.css("visibility", "hidden"); }); } arrow_left.on('click', function() { slick_content.slick('slickPrev'); }); arrow_right.on('click', function() { slick_content.slick('slickNext'); }); }); } catch (err) { console.log(err) } try { jQuery('.js-center-arrow').each(function() { var that = jQuery(this); var arrow = that.find('.slick-arrow'); var heightImg = that.find('.js-img').outerHeight(); var heightArrow = that.find('.slick-arrow').outerHeight(); var offsetTop = heightImg / 2 - heightArrow / 2; arrow.css('top', offsetTop); }); } catch (err) { console.log(err); } })(jQuery);