, but this code // executes before the first paint, when

is not yet present. The // classes are added to so styling immediately reflects the current // toolbar state. The classes are removed after the toolbar completes // initialization. const classesToAdd = ['toolbar-loading', 'toolbar-anti-flicker']; if (toolbarState) { const { orientation, hasActiveTab, isFixed, activeTray, activeTabId, isOriented, userButtonMinWidth } = toolbarState; classesToAdd.push( orientation ? `toolbar-` + orientation + `` : 'toolbar-horizontal', ); if (hasActiveTab !== false) { classesToAdd.push('toolbar-tray-open'); } if (isFixed) { classesToAdd.push('toolbar-fixed'); } if (isOriented) { classesToAdd.push('toolbar-oriented'); } if (activeTray) { // These styles are added so the active tab/tray styles are present // immediately instead of "flickering" on as the toolbar initializes. In // instances where a tray is lazy loaded, these styles facilitate the // lazy loaded tray appearing gracefully and without reflow. const styleContent = ` .toolbar-loading #` + activeTabId + ` { background-image: linear-gradient(rgba(255, 255, 255, 0.25) 20%, transparent 200%); } .toolbar-loading #` + activeTabId + `-tray { display: block; box-shadow: -1px 0 5px 2px rgb(0 0 0 / 33%); border-right: 1px solid #aaa; background-color: #f5f5f5; z-index: 0; } .toolbar-loading.toolbar-vertical.toolbar-tray-open #` + activeTabId + `-tray { width: 15rem; height: 100vh; } .toolbar-loading.toolbar-horizontal :not(#` + activeTray + `) > .toolbar-lining {opacity: 0}`; const style = document.createElement('style'); style.textContent = styleContent; style.setAttribute('data-toolbar-anti-flicker-loading', true); document.querySelector('head').appendChild(style); if (userButtonMinWidth) { const userButtonStyle = document.createElement('style'); userButtonStyle.textContent = `#toolbar-item-user {min-width: ` + userButtonMinWidth +`px;}` document.querySelector('head').appendChild(userButtonStyle); } } } document.querySelector('html').classList.add(...classesToAdd); })(); Peeling the revitalization onion - News & Stories | 鶹

Skip to main content

Spark

Peeling the revitalization onion

Fri, Dec 01, 2017

“Neighborhood revitalization is like an onion. You peel back one layer and you find another underneath.”

Fifteen years into directing LINC UP, a community-based economic and real estate development organization in southeast Grand Rapids, Jeremy DeRoo ’01 is taking on another layer of the onion.

The organization has invested $60 million in building and revitalizing residential and commercial spaces in several Grand Rapids-area neighborhoods. In every project, LINC UP creates opportunities for neighborhood people. That means hiring construction companies with neighborhood ties. But with three new houses underway and $9 million more in construction work planned for the next year, LINC UP topped the capacity of local builders. The need for more construction help gave DeRoo and his team an idea for addressing another layer of the revitalization onion.

“Unemployment in our largely African-American and Latino neighborhoods runs about 10 times the rate of the region as a whole,” he explained. “And while those groups are 20 percent of the overall population, they make up only 2 percent of the workforce in the booming construction industry. We saw a way to address that systemic exclusion.”

That way is a unique partnership with Grand Rapids Community College. Residents in LINC UP neighborhoods can enroll tuition-free in the school’s Workforce Training program to work with local contractors building a new LINC UP house. They receive about 500 hours of hands-on instruction, residential construction certification and the help of Grand Rapids Community College job coaches to land a construction job at the end of the 16-week course. The W.K. Kellogg Foundation primarily funds the program.

“The practical experience students get is critical to getting hired,” DeRoo said. “Contractors want to hire people who can start tomorrow.”

To learn more, visit .