Home gym for cheap | Consumer Reports
When you wanna exercise without paying for *** gym membership, *** home gym can save you money, but how do you know what you really need and how much to spend? Consumer Reports tested equipment and found you don’t have to spend *** lot to get fit. Anna Termina has been working out at home for years. So I have dumbbells ranging from 3 from 2 pounds to 30 pounds. I have bands. I have ankle weights. I have sliders. I have resistance bands. She says it helps her save money on gym memberships and gets *** great workout without needing tons of space or equipment. Now that I do it from home, I feel like you really don’t need *** lot of space. Consumer Reports says one of the smartest home gym purchases is *** set of adjustable dumbbells. Instead of buying multiple weights, adjustable dumbbells let you change the resistance with *** quick adjustment, saving money and space. Consumer Reports evaluated these dumbbells for things like ease of adjustment, comfort, versatility, and overall workout performance. Our testers paid close attention to comfort, evaluating not only how the dumbbells felt in the hand, but also how comfortable they were to rest on your legs, like you might want to do if you were sitting on *** bench between repetitions. Two of the top rated are the Nordic Track 55 pound select *** weight dumbbells and the core home fitness adjustable dumbbell set that goes. Up to 50 pounds. Both sell for under $400. Resistance bands are another affordable option. They are *** lightweight, space saving alternative to traditional weights, and experts say they can be just as effective for building strength, power, and muscular endurance. Consumer Reports recommends looking for bands that feel sturdy and checking them regularly for signs of wear and tear. Resistance bands are one of the most versatile pieces of exercise equipment you can buy because they’re lightweight. They tend to be. Inexpensive, and they can be used by people at many different fitness levels. What if Fit resistance bands are *** CR’s smart buy. 5 bands sell for about $28. And if music keeps you moving, Consumer Reports recommends workout headphones that stay secure, resist sweat, and sound great. The Apple AirPods Pro can even track your heart rate, while the Beats Fit Pro feature flexible wing tips designed to stay put during exercise. Consumer Reports found during recent testing that some Home Pro Gym resistance bands could fail during use. You’re looking at them on your screen. If you own the company’s purple 60 pound or gray 70 pound band, stop using them and check the recall.
Updated: 4:45 PM EDT Jul 16, 2026
Editorial Standards ⓘ
Home gym for cheap | Consumer Reports
Updated: 4:45 PM EDT Jul 16, 2026
Editorial Standards ⓘ
If you’re looking to get fit without paying for a pricey gym membership, creating a simple home gym can save you money. But what do you really need for a workout, and how much do you have to spend? Consumer Reports tested home gym equipment to reveal the versatile essentials for at-home fitness. Ana Termyna has been working out at home for years. She says it helps her save money on gym memberships, and she gets a great workout without needing tons of space or equipment. Consumer Reports says one of the smartest home gym purchases is a set of adjustable dumbbells. Instead of buying multiple weights, adjustable dumbbells let you change the resistance with a quick adjustment, saving money and space. Consumer Reports evaluated the dumbbells for things like ease of adjustment, comfort, versatility, and overall workout performance. Testers paid close attention to comfort, evaluating not only how the dumbbells felt to hold during a workout, but also how comfortable they were to rest on your legs when seated on a bench and when transitioning between exercises. Two of the top-rated options are the NordicTrack 55-pound Select-A-Weight Dumbbells and the Core Home Fitness Adjustable Dumbbell Set that goes up to 50 pounds. Both sell for under $400. Resistance bands are another affordable option. They are a lightweight, space-saving alternative to traditional weights. And experts say they can be just as effective for building strength, power, and muscular endurance. Consumer Reports recommends looking for bands that feel sturdy and checking them regularly for signs of wear and tear. Resistance bands are one of the most versatile pieces of fitness equipment you can buy. They’re relatively inexpensive and can be used by people at many different fitness levels. Whatafit Resistance Bands are a CR Smart Buy. 5 bands sell for about $28. And if music helps you keep moving, Consumer Reports recommends workout headphones that stay secure, resist sweat, and sound great. The Apple AirPods Pro can even track your heart rate, while the Beats Fit Pro feature flexible wingtips designed to stay put during exercise. Consumer Reports found during recent testing that some HomeProGym resistance bands could fail during use. If you own the company’s purple 60-pound or gray 70-pound bands, stop using them and check the recall. And before you buy, compare prices. Consumer Reports says shopping sales can help you save even more.
If you’re looking to get fit without paying for a pricey gym membership, creating a simple home gym can save you money. But what do you really need for a workout, and how much do you have to spend? Consumer Reports tested home gym equipment to reveal the versatile essentials for at-home fitness
Ana Termyna has been working out at home for years. She says it helps her save money on gym memberships, and she gets a great workout without needing tons of space or equipment
Consumer Reports says one of the smartest home gym purchases is a set of adjustable dumbbells. Instead of buying multiple weights, adjustable dumbbells let you change the resistance with a quick adjustment, saving money and space
Consumer Reports evaluated the dumbbells for things like ease of adjustment, comfort, versatility, and overall workout performance. Testers paid close attention to comfort, evaluating not only how the dumbbells felt to hold during a workout, but also how comfortable they were to rest on your legs when seated on a bench and when transitioning between exercises
Two of the top-rated options are the NordicTrack 55-pound Select-A-Weight Dumbbells and the Core Home Fitness Adjustable Dumbbell Set that goes up to 50 pounds. Both sell for under $400
Resistance bands are another affordable option. They are a lightweight, space-saving alternative to traditional weights. And experts say they can be just as effective for building strength, power, and muscular endurance. Consumer Reports recommends looking for bands that feel sturdy and checking them regularly for signs of wear and tear
Resistance bands are one of the most versatile pieces of fitness equipment you can buy. They’re relatively inexpensive and can be used by people at many different fitness levels. Whatafit Resistance Bands are a CR Smart Buy. 5 bands sell for about $28
And if music helps you keep moving, Consumer Reports recommends workout headphones that stay secure, resist sweat, and sound great. The Apple AirPods Pro can even track your heart rate, while the Beats Fit Pro feature flexible wingtips designed to stay put during exercise
Consumer Reports found during recent testing that some HomeProGym resistance bands could fail during use. If you own the company’s purple 60-pound or gray 70-pound bands, stop using them and check the recall. And before you buy, compare prices. Consumer Reports says shopping sales can help you save even more
Weather Information
‘
+ ‘
‘;
var gptLayer = window.gptLayer;
if (gptLayer && typeof gptLayer.insertAds === ‘function’) {
var slotsBefore = gptLayer.adSlots ? gptLayer.adSlots.length : 0;
gptLayer.insertAds();
if ((gptLayer.adSlots ? gptLayer.adSlots.length : 0) > slotsBefore) {
if (typeof gptLayer.callAdSlots === ‘function’) {
gptLayer.callAdSlots(‘imm’);
}
}
}
}
}
function closeRadarOverlay(containerId) {
var overlay = document.getElementById(containerId + ‘-radar-overlay’);
if (!overlay) return;
overlay.classList.remove(‘is-open’);
overlay.setAttribute(‘aria-hidden’, ‘true’);
document.body.classList.remove(‘weather-radar-overlay-active’);
var adSlot = overlay.querySelector(‘.weather-radar-overlay__ad-slot’);
if (adSlot) {
adSlot.innerHTML = ”;
}
}
function trackRadarOverlayInteraction(containerId) {
var now = Date.now();
var key = ‘radar_overlay_last_interaction_’ + containerId;
if (!window[key] || now – window[key] > 10000) {
window[key] = now;
dispatchWeatherGA4Event(‘radar_overlayinteraction’, ‘interaction’, containerId);
}
}
function isMobileOrTabletViewport(breakpoint = 980) {
const w = window.innerWidth || document.documentElement.clientWidth || 0;
return w < breakpoint;
}
function removeUnusedWeatherModule() {
const desktopClass = ‘sidelist-weather’;
const mobileClass = ‘mobile-weather’;
if (isMobileOrTabletViewport()) {
console.log(‘[WEATHER-BOX] Mobile/tablet viewport detected, removing desktop weather module if it exists’);
const desktopModule = document.querySelector(‘.’ + desktopClass);
if (desktopModule) {
console.log(‘[WEATHER-BOX] Removing desktop weather module’);
desktopModule.remove();
}
} else {
console.log(‘[WEATHER-BOX] Desktop viewport detected, removing mobile weather module if it exists’);
const mobileModule = document.querySelector(‘.’ + mobileClass);
if (mobileModule) {
console.log(‘[WEATHER-BOX] Removing mobile weather module’);
mobileModule.remove();
}
}
}
document.addEventListener(‘DOMContentLoaded’, function() {
removeUnusedWeatherModule();
function generateForecastItem(data) {
var ariaLabel = data.timeLabel + ‘, ‘ + data.primaryTemp + ‘ degrees, ‘ +
data.secondaryInfo + ‘ percent chance of precipitation’;
return `
`;
}
function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=’ + Date.now();
}
}
function initializeWeatherBox(container) {
var containerId = container.getAttribute(‘data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;
function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});
clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);
container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});
var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}
function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}
var location = { zip: window.DEFAULT_ZIPCODE };
try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}
var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;
if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}
function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;
var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);
if (weatherData.alerts_count > 0) {
weatherWatchHeader.className = ‘weather-watch-header has-alerts’;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, ‘/alerts’);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘mobile-weather’, ‘/alerts’);”);
}
} else {
weatherWatchHeader.className = ‘weather-watch-header’;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}
function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;
var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}
var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className = ‘weather-grid–current-icon weather-current-icon icon icon-weather-‘ + weatherData.current.icon_name;
}
var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}
var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}
var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}
updateWeatherBackground(weatherData.current.icon_name);
}
}
function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage = ‘url(‘ + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}
function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;
if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html = ”;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);
for (var i = 0; i < maxHours; i++) {
var hour = weatherData.hourly[i];
html += generateForecastItem({
timeLabel: hour.hour_display,
iconName: hour.icon_name,
primaryTemp: hour.temp_f,
secondaryInfo: hour.precip_chance + ‘%’
});
}
hourlyContainer.innerHTML = html;
}
}
if (weatherData.daily) {
var dailyContainer = container.querySelector(‘.weather-daily-forecast’);
if (dailyContainer) {
var html = ”;
var maxDays = Math.min(visibleItems, weatherData.daily.length);
for (var i = 0; i < maxDays; i++) {
var day = weatherData.daily[i];
var dayName = getShortDayName(day.day);
html += generateForecastItem({
timeLabel: dayName,
iconName: day.icon_name,
primaryTemp: day.high_f,
secondaryInfo: day.precip_chance + ‘%’
});
}
dailyContainer.innerHTML = html;
}
}
}
function getShortDayName(dayName) {
switch (dayName) {
case ‘Today’:
return ‘Today’;
case ‘Tomorrow’:
return ‘Tmrw’;
case ‘Sunday’:
return ‘Sun’;
case ‘Monday’:
return ‘Mon’;
case ‘Tuesday’:
return ‘Tue’;
case ‘Wednesday’:
return ‘Wed’;
case ‘Thursday’:
return ‘Thu’;
case ‘Friday’:
return ‘Fri’;
case ‘Saturday’:
return ‘Sat’;
default:
return dayName;
}
}
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
var isActive = tab.classList.contains(‘open’);
tab.setAttribute(‘tabindex’, ‘0’); // Both tabs focusable for VoiceOver
tab.setAttribute(‘role’, ‘tab’);
tab.setAttribute(‘aria-selected’, isActive);
tab.addEventListener(‘keydown’, function(e) {
var tabs = Array.from(container.querySelectorAll(‘[data-tab-id]’));
var currentIndex = tabs.indexOf(this);
switch(e.key) {
case ‘ArrowLeft’:
e.preventDefault();
var prevIndex = currentIndex > 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex < tabs.length – 1 ? currentIndex + 1 : 0;
tabs[nextIndex].focus();
break;
case ‘Enter’:
case ‘ ‘:
e.preventDefault();
var tabId = this.getAttribute(‘data-tab-id’);
switchWeatherTab(tabId, this);
if (tabId === ‘hourly’) {
dispatchWeatherGA4Event(‘click_hourly’, ‘click’, containerId);
} else if (tabId === ‘daily’) {
dispatchWeatherGA4Event(‘click_daily’, ‘click’, containerId);
}
break;
}
});
tab.onclick = function() {
var tabId = this.getAttribute(‘data-tab-id’);
switchWeatherTab(tabId, this);
if (tabId === ‘hourly’) {
dispatchWeatherGA4Event(‘click_hourly’, ‘click’, containerId);
} else if (tabId === ‘daily’) {
dispatchWeatherGA4Event(‘click_daily’, ‘click’, containerId);
}
return false;
};
});
loadWeatherData();
window.addEventListener(‘pageshow’, function(event) {
if (event.persisted) {
// Fix for weather radar iframe appearing gray after browser back/forward navigation
// When user navigates back, the page loads from browser cache but the iframe
// content doesn’t restore properly, showing a gray screen instead of the radar map
// This forces a fresh reload of the iframe by adding a timestamp parameter
setTimeout(function() {
refreshWeatherIframe(containerId);
}, 300);
}
});
}
document.querySelectorAll(‘.weather-sidebar’).forEach(function(weatherBox) {
initializeWeatherBox(weatherBox);
});
});
![]()

Make WESH a preferred source on Google


