91³Ô¹ÏÍø

Watch CBS News

Eastbound I-80 closure in San Francisco snarls traffic, slows business

One of San Francisco's busiest freeways remained shut down Saturday, creating major traffic delays and dampening business for some local restaurants and shops.

All eastbound lanes of Interstate 80 just before the Bay Bridge are closed as crews work around the clock to rehabilitate the roadway. The 55-hour shutdown, which began on Friday night, is scheduled to last until Monday morning in time for the commute.

The closure has forced drivers onto detour routes, leading to heavy congestion for those trying to reach the East Bay, including Oakland and Berkeley. 

The impact is being felt beyond the roadways.

At MoMo's, a restaurant across from Oracle Park, staff found business noticeably slower.

"A little bit more mellow than usual. We usually see a little bit more foot traffic, a little bit more people on Saturdays," said Daniel Bermudez, executive chef at MoMo's.

Bermudez believes the freeway closure may be discouraging visitors from coming into the city this weekend, despite favorable weather.

"The weather is beautiful today. It's nice and sunny. So we have plenty of tables outside," he said.

With the San Francisco Giants playing an away game, the restaurant had hoped fans would still gather to watch, but turnout during game time remained light.

"This is kind of like our off-season Saturday. A lot slower than our baseball weekend," said Casandra Alarcon, general manager at MoMo's.

Other small businesses in the Mission Bay and South of Market neighborhoods reported similar trends, saying most of their customers are regulars who live nearby rather than visitors.

"A little bit slower for sure. Before, we had tourists come and walk to the baseball park," said Ajaree Safron, manager at Brickhouse Cafe & Bar.

Caltrans has shut down eastbound lanes between 17th and 4th streets to repave the 71-year-old roadway. The goal is to extend the life of the Bayshore Freeway by another decade.

City and transportation officials said the timing of the closure was intentional, noting fewer major events scheduled in San Francisco this weekend, aside from the Cherry Blossom Festival.

Westbound lanes remain open, and officials said traffic heading into San Francisco from the East Bay has not been significantly affected.

"Getting into the city, it wasn't too bad.  Regular [traffic], what we expect on a Saturday morning," said visitor Andrea Inouye.

While the closure has posed challenges for businesses, some workers said they are taking it in stride.

"Hopefully, it's not for too long and we get past it, and get back to our normal routine," Bermudez said.

Despite early concerns about widespread gridlock, transportation officials said the region has avoided the worst-case scenario. Traffic remains heavy in areas near detours, but the anticipated "carmageddon" has not materialized, in part because many drivers chose to avoid the area or take public transit.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });