/* https://github.com/peledies/google-places */ (function($) { var namespace = 'googlePlaces'; $.googlePlaces = function(element, options) { var defaults = { placeId: 'ChIJ5c6eMQWJ44kR8ILAoBjDIjw' // placeId provided by google api documentation , render: ['reviews'] , min_rating: 0 , max_rows: 0 , map_plug_id: 'map-plug' , rotateTime: false , shorten_names: true , schema:{ displayElement: '#schema' , type: 'Store' , beforeText: 'Google Users Have Rated' , middleText: 'based on' , afterText: 'ratings and reviews' , image: null , priceRange: null } , address:{ displayElement: "#google-address" } , phone:{ displayElement: "#google-phone" } , staticMap:{ displayElement: "#google-static-map" , width: 512 , height: 512 , zoom: 17 , type: "roadmap" } , hours:{ displayElement: "#google-hours" } }; var plugin = this; plugin.settings = {} var $element = $(element), element = element; plugin.init = function() { plugin.settings = $.extend({}, defaults, options); plugin.settings.schema = $.extend({}, defaults.schema, options.schema); $element.html("
"); // create a plug for google to load data into initialize_place(function(place){ plugin.place_data = place; // Trigger event before render $element.trigger('beforeRender.' + namespace); if(plugin.settings.render.indexOf('rating') > -1){ renderRating(plugin.place_data.rating); } // render specified sections if(plugin.settings.render.indexOf('reviews') > -1){ renderReviews(plugin.place_data.reviews); if(!!plugin.settings.rotateTime) { initRotation(); } } if(plugin.settings.render.indexOf('address') > -1){ renderAddress( capture_element(plugin.settings.address.displayElement) , plugin.place_data.adr_address ); } if(plugin.settings.render.indexOf('phone') > -1){ renderPhone( capture_element(plugin.settings.phone.displayElement) , plugin.place_data.formatted_phone_number ); } if(plugin.settings.render.indexOf('staticMap') > -1){ renderStaticMap( capture_element(plugin.settings.staticMap.displayElement) , plugin.place_data.formatted_address ); } if(plugin.settings.render.indexOf('hours') > -1){ renderHours( capture_element(plugin.settings.hours.displayElement) , plugin.place_data.opening_hours ); } // render schema markup addSchemaMarkup( capture_element(plugin.settings.schema.displayElement) , plugin.place_data ); // Trigger event after render $element.trigger('afterRender.' + namespace); }); } var capture_element = function(element){ if(element instanceof jQuery){ return element; }else if(typeof element == 'string'){ try{ var ele = $(element); if( ele.length ){ return ele; }else{ throw 'Element [' + element + '] couldnt be found in the DOM. Skipping '+element+' markup generation.'; } }catch(e){ console.warn(e); } } } var initialize_place = function(c){ var map = new google.maps.Map(document.getElementById(plugin.settings.map_plug_id)); var request = { placeId: plugin.settings.placeId }; var service = new google.maps.places.PlacesService(map); service.getDetails(request, function(place, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { c(place); } }); } var sort_by_date = function(ray) { ray.sort(function(a, b){ var keyA = new Date(a.time), keyB = new Date(b.time); // Compare the 2 dates if(keyA < keyB) return -1; if(keyA > keyB) return 1; return 0; }); return ray; } var filter_minimum_rating = function(reviews){ for (var i = reviews.length -1; i >= 0; i--) { if(reviews[i].rating < plugin.settings.min_rating){ reviews.splice(i,1); } } return reviews; } var renderRating = function(rating){ var html = ""; var star = renderAverageStars(rating); html = "

"+star+"

"; $element.append(html); } var shorten_name = function(name) { if (name.split(" ").length > 1) { var xname = ""; xname = name.split(" "); return xname[0] + " " + xname[1][0] + "."; } } var renderReviews = function(reviews){ reviews = sort_by_date(reviews); reviews = filter_minimum_rating(reviews); var html = ""; var row_count = (plugin.settings.max_rows > 0)? plugin.settings.max_rows - 1 : reviews.length - 1; // make sure the row_count is not greater than available records row_count = (row_count > reviews.length-1)? reviews.length -1 : row_count; for (var i = row_count; i >= 0; i--) { var stars = renderStars(reviews[i].rating); var date = convertTime(reviews[i].time); if(plugin.settings.shorten_names == true) { var name = shorten_name(reviews[i].author_name); } else { var name = reviews[i].author_name + ", "; }; html = html+"
"+name+""+date+"
"+stars+"

"+reviews[i].text+"

" }; $element.append(html); } var renderHours = function(element, data){ if(element instanceof jQuery){ var html = ""; element.append(html); } } var renderStaticMap = function(element, data){ if(element instanceof jQuery){ var map = plugin.settings.staticMap; element.append( ""+ ""); } } var renderAddress = function(element, data){ if(element instanceof jQuery){ element.append(data); } } var renderPhone = function(element, data){ if(element instanceof jQuery){ element.append(data); } } var initRotation = function() { var $reviewEls = $element.children('.review-item'); var currentIdx = $reviewEls.length > 0 ? 0 : false; $reviewEls.hide(); if(currentIdx !== false) { $($reviewEls[currentIdx]).show(); setInterval(function(){ if(++currentIdx >= $reviewEls.length) { currentIdx = 0; } $reviewEls.hide(); $($reviewEls[currentIdx]).fadeIn('slow'); }, plugin.settings.rotateTime); } } var renderStars = function(rating){ var stars = "
"; return stars; } var renderAverageStars = function(rating){ var stars = "
"; return stars; } var convertTime = function(UNIX_timestamp){ var a = new Date(UNIX_timestamp * 1000); var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; var time = months[a.getMonth()] + ' ' + a.getDate() + ', ' + a.getFullYear(); return time; } var addSchemaMarkup = function(element, placeData) { if(element instanceof jQuery){ var schema = plugin.settings.schema; var schemaMarkup = ''; if(schema.image !== null) { schemaMarkup += generateSchemaItemMarkup('image', schema.image); } else { console.warn('Image is required for some schema types. Visit https://search.google.com/structured-data/testing-tool to test your schema output.'); } if(schema.priceRange !== null) { schemaMarkup += generateSchemaItemMarkup('priceRange', schema.priceRange); } schemaMarkup += generateSchemaItemMarkup('url', location.origin); schemaMarkup += generateSchemaItemMarkup('telephone', plugin.place_data.formatted_phone_number ); schemaMarkup += generateSchemaAddressMarkup(); schemaMarkup += generateSchemaRatingMarkup(placeData, schema); schemaMarkup += ''; element.append(schemaMarkup); } } var generateSchemaAddressMarkup = function() { var $address = $('
', { itemprop: "address" , itemscope: '' , itemtype: "http://schema.org/PostalAddress" }).css('display', 'none'); $address.append(plugin.place_data.adr_address); $address.children('.street-address').attr('itemprop', 'streetAddress'); $address.children('.locality').attr('itemprop', 'addressLocality'); $address.children('.region').attr('itemprop', 'addressRegion'); $address.children('.postal-code').attr('itemprop', 'postalCode'); $address.children('.country-name').attr('itemprop', 'addressCountry'); return $address[0].outerHTML; } var generateSchemaRatingMarkup = function(placeData, schema) { var reviews = placeData.reviews; var lastIndex = reviews.length - 1; var reviewPointTotal = 0; for (var i = lastIndex; i >= 0; i--) { reviewPointTotal += reviews[i].rating; }; var averageReview = reviewPointTotal / ( reviews.length ); return schema.beforeText + ' ' + placeData.name + ' ' + '' + '' + averageReview.toFixed(2) + '/5 ' + schema.middleText + ' ' + reviews.length + ' ' + schema.afterText + '' } var generateSchemaItemMarkup = function(name, value) { return '' } plugin.init(); } $.fn.googlePlaces = function(options) { return this.each(function() { if (undefined == $(this).data(namespace)) { var plugin = new $.googlePlaces(this, options); $(this).data(namespace, plugin); } }); } })(jQuery);

- plant based -

fresh and tasty

Vegan Soup Image

- FRESH & BIO -

MEAT IS A JOY

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Vegan Soup Image

since 2000

Vegan Soup Image

fresh dayly

Vegan Soup Image

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Vegan Soup Image

get in touch

- since 2000 -

Our Story

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

James Huddleston profile pictureJames Huddleston
19:26 14 Aug 24
If you're looking for a reliable and trustworthy HVAC or solar company, Comfortmax Energy Solutions is the way to go. From the knowledgeable sales team to the courteous technicians, they deliver an exceptional customer experience.
Landon Grwinski profile pictureLandon Grwinski
15:07 14 Aug 24
ComfortMax Energy Solutions is truly the best! I'm from Richmond, VA, but I had the pleasure of working with them on a job site in Massachusetts. Their exceptional service, expertise, and professionalism left a lasting impression. I wish I could bring them to VA - haha! But seriously, I highly recommend ComfortMax Energy Solutions to anyone in need of top-notch energy solutions.
Mylena Ferreira profile pictureMylena Ferreira
12:51 14 Aug 24
I had the pleasure of working with Comfortmax Energy Solutions, and I couldn't be more impressed! Comfortmax Energy Solutions exceeded my expectations. Their technicians were knowledgeable, courteous, and ensured a seamless experience. The quality of their work and attention to detail are truly exceptional.

I highly recommend Comfortmax Energy Solutions for any HVAC needs. Their commitment to excellence and customer satisfaction is genuine, and I look forward to a long-term partnership with them.
Amelia profile pictureAmelia
20:41 13 Aug 24
I had a fantastic experience with Comfortmax Energy Solutions. Marcelo was great at explaining all the rebate options for my HVAC system. The installation team was punctual and respectful. I’m thrilled with my new energy-efficient setup. Highly recommend!
Jonathan Chery profile pictureJonathan Chery
02:49 20 Jun 24
I am writing this review to express my deep appreciation for ComfortMax. I hired them to install a mini split system using the MassSave program and I must say, their flexibility, communication, and overall process were nothing short of exceptional. They handled everything from start to finish with utmost professionalism and efficiency. They never hesitated to communicate with me about the next steps. I felt well-informed and included in the process due to their open and clear communication. That said, I highly recommend ComfortMax. I was not disappointed moving forward with them.
Adithya Sharma profile pictureAdithya Sharma
18:46 13 Jun 24
I'm so impressed with the service I received from ComfortMax!
Mark M profile pictureMark M
14:21 09 Jun 24
I can't say enough good things about ComfortMax! Highly Recommended!
Dry it quick profile pictureDry it quick
00:49 08 Jun 24
ComfortMax is truly a top-notch HVAC and Solar services provider! From their friendly customer service to their expert technicians, I couldn't be more satisfied with the service I received. Highly recommend them!
Tiago Matuzinho profile pictureTiago Matuzinho
23:01 07 Jun 24
They were quick to respond to provided an realistic quote, and completed the job in a time. Super recommended !
David Feliciano Jr. profile pictureDavid Feliciano Jr.
15:37 08 May 24
I couldn’t be happier with Comfortmax Energy Solutions! Their customer service and product knowledge exceeded my expectations. Unlike other companies, they made me feel comfortable and were never pushy. I highly recommend them to anyone in need of solar services.
Jonathan Madrona profile pictureJonathan Madrona
01:00 08 May 24
I recently had the pleasure of experiencing the outstanding services provided by Comfortmax Energy Solutions. They were tasked with handling my HVAC work and also offered me the opportunity to transition to solar energy. I must say, I am thoroughly impressed with their professionalism, expertise, and commitment to customer satisfaction.
monalisa macedo profile picturemonalisa macedo
20:11 01 May 24
Services: Installation, Install AC
Positive: Professionalism, Punctuality, Quality, Responsiveness, Value

The entire team were great.
Marcelo helped us through the options and saved us money by letting us know that our existing HVAC unit was already provisioned to accept an A/C connection. The indoor coil just needed a few modifications that they could make in their shop, and then we could connect right into it with a brand new outdoor unit they had in stock.

Installation was quick, clean, and professional.
Highly recommend.
Depilar Hair Removal profile pictureDepilar Hair Removal
16:09 30 Apr 24
Thank you ComfortMax for all the work you did.
For some years my company did not have an efficient air conditioning and heating system, and now we finally have a super effective system, bringing much more comfort to our customers.
The price is amazing for the quality of the service.
And what's more, I got a 10k rebate at the end of the service. I LOVED it and I recommend ComfortMax to everyone.