GRAND RAPIDS, Mich. (WOOD) — A Grand Rapids stalwart is about to celebrate a milestone — Schuler Books will mark 40 years of service at all three locations this weekend.

All day Saturday, Schuler will host celebrations at all of its locations in Grand Rapids, Okemos and Ann Arbor. They will operate from 9:00 a.m. store opening time until 8:00 p.m. closing time.

“We have a full day of events at the store,” said Alana Haley, marketing coordinator at Schuler Books.

There will be prizes, activities, cookies and of course, books.

Several months ago, the bookstore recently went viral on Tik Tok, leading them to ship books throughout the community and around the world. But Haley believes the store’s success comes from its roots.

“Our owners never strayed from their original vision when they opened the store, and it’s to be a bookstore that welcomes all readers,” said Alana Haley, Marketing Coordinator at Schuler Books. “So we’re that safe third place where everyone can come and enjoy and just be happy.”

Visit for the full schedule.

` ) ); // Embed Facebook script (function (d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); = id; js.src=”″; fjs.parentNode.insertBefore(js, fjs); }(document, ‘script’, ‘facebook-jssdk’)); // Twitter script integration (function (d, s, id) { var js, tjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); = id; js.setAttribute(‘async’, ”); js.src=””; tjs.parentNode.insertBefore(js, tjs); }(document, ‘script’, ‘twitter-js’)); } // Simplify some things iframe var iframes = $(‘iframe’); iframes .filter( ‘.responsive’ ) .each( function( _, frame ) { // 16×9 ratio responsive iframes var $frame = $(frame); $( frame ).css({ position: ‘absolute’, top: 0, left: 0, right: 0, width: ‘100%’, height: ‘100%’, }).parent().addClass( ‘wood-responsive-container wood-responsive-container-16×9’ ); } ); var lazyFrames = iframes.filter(‘[data-lazy-src]’); function woodMakeLazyFrame( selector ) { var observer; var options = { root: null, rootMargin: ‘0px’, threshold: 0, }; function handler(inputs, observer) { inputs.forEach(function(input) { var ioR = entry.intersectionRatio; if(ioR > 0) { =; observer.unobserve( input .target); } }); } observer = new IntersectionObserver( handler, options ); observe. observe( selector ); } lazyFrames. each( ( _, frame ) => woodMakeLazyFrame( frame ) ); }); }(jQuery))