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

app

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); })(); History | app

app

Skip to main content

History

Record Holders (current course)

Men

Rick Koubek - 16:03

Women

Betsy Frens - 17:15

Handcycle

Nicholas Nieboer - 11:22

Previous Winners

YearMale WinnerTimeFemale WinnerTimeCorporate Challenge WinnerSchool Challenge WinnerHandcycleVirtual Race
1990Mike Kwantes15:39Kathleen Broekhuizen18:47--
1991Mike Kwantes15:26Laura Vroon18:09--
1992Dave Vander Kooy16:45Laura Vroon18:14--
1993Brian Diemer15:13Ellen Dykstra18:52--
1994Craig Spoelhof15:34Laura Vroon18:26--
1995Ryan Le Fleur15:28Kristen Hulst19:53--
1996Paul Diekema16:03Deb Lenters19:23--
1997Jason Washler15:49Michelle Rauch17:56--
1998David Riemersma15:33Valerie Hendrickson19:02--
1999Rob Bouws16:14Kristen Brown19:19--
2000Scott Belland16:03Kathy Walden20:29--
2001Scott Belland16:18Amy Wing17:54--
2002Jimi Minnema16:05Rebecca Monroe21:00--
2003Jimi Minnema16:35Betsy Frens17:15-Oakdale Christian
2004Paul Rollet15:58Diane DeBoer-Bunn18:28-Oakdale Christian
2005Jimi Minnema16:10Laura Vroon19:10-Oakdale Christian
2006Jimi Minnema16:33Laura Vroon18:59-Oakdale Christian
2007Daniel Komen16:01Laura Vroon19:19-Millbrook Christian
2008Rob Hyde16:32Rebecca Wiltjer19:41-Millbrook Christian
2009Brian Paff16:17Samantha Westveer19:12-Byron Center Christian
2010Zach Nowicki17:30Jana Baatenburg18:55-Byron Center Christian
2011Matt McSween16:27Koby Hagen18:33RanirByron Center Christian
2012Alex Wrobel16:04Gretchen Braymer18:41Hoekstra LandscapingGrand Rapids Christian
2013Rob Hyde16:26Tracy Oostema19:54RanirGrand Rapids Christian
2014Rob Hyde16:56Alyssa McElheny17:50RanirByron Center ChristianTom Weaver
15:38
2015Dan Vanden Akker16:27Betsy Frens17:15GentexByron Center ChristianRob Seng
12:53
2016Nathaniel Dick16:13Martha Shomsky19:56CoriumByron Center ChristianJared Hart
12:28
Andrew Dykhuis, Heather Fader
2017Rob Hyde16:59Madelyn Frens20:02CoriumByron Center ChristianJeff Yonker
12:42
2018Nathaniel Dick16:20Hope Gaffner18:39app SeminaryByron Center ChristianTom Weaver
13:02
2019J Bailey16:48Camryn Bodine20:04CoriumByron Center ChristianNicholas Nieboer
11:22
2020Owen Kalsbeek18:16Katherine Shomsky22:15N/AN/AN/A
2021Jesse McCurdy17:46Sarah Bartz20:58CoriumN/APierre Camy
13:37
2022J Bailey17:33Jennifer Adams19:34CoriumN/ANicholas Nieboer
11:32
2023Rick Koubek16:03Jillian Lewakowski19:48Dutton ChristianN/ATom Weaver
12:23
Doug Jipping
2024Jesse McCurdy16:53Callie Delaney20:12GE Aerospace-Tom Weaver 12:32

Classic Timeline

1992 -First time race opened up beyond alumni, first time officially named "app Spring Classic"

1997 - Lakeshore Chapter joined GR Chapter

1999 - Family Fun Run added

2000 - Champion Chip Timing started

2004 - First Race through new East Campus

2008 - Event held at Prince Conference Center due to Wellness Center construction; Fun Run renamed Karen Muyskens Family Fun Run

2009 - New D-Ring disposable timing device. Had timing mat at both start and finish line for first time
Event held at newSpoelhof Fieldhouse complex, fun run held on indoor track

2011 - New timing system incorporated into runner's bib; 1,150 participants

2012 - became the first “title sponsor” of the Classic

2013 - 1,316 participants (current app Classic record)

2014 - President's Shoe Challenge and Handcycle division added

2016 - Virtual Race added

2020 - app Classic moved to the fall to correspond with Homecoming and Family Weekend. Also the year the race was completely virtual due to Covid-19. Eenhoorn LLC became the Title sponsor.

2021 - First in-person race held during Homecoming and Family Weekend. Youth Fun Run moved outdoors to the Zuidema field and outdoor track facility.