Waaban Village

Upper Peninsula, Michigan


Wild. Water. Woods. Wonder.

Welcome to Waaban.


(*it's a slightly wild nature-based lodging retreat!)


[email protected]

THE PLACE

Into Waaban

A little wild. Intentionally so.

Waaban Village grew from the imagination of a career archaeologist who has spent decades thinking about people, places, and the stories landscapes carry. Here in northern Michigan, that story includes the Ojibwe people, whose connection to this land reaches from time immemorial into the present. Waaban Village does not pretend to tell that story for anyone. It simply begins with respect for it. Waaban is our small effort to live thoughtfully within that much bigger story: to care for the woods and water, make room for adventure, drink good coffee, spend time fishing and wandering and sitting around a fire, and give families and friends the chance to slow down together.
The plan is simple: create something meaningful, care for it well, and pass it on. Make memories in the creation, make memories in the sharing, and make room for others to make their own memories.

Rise and Shine with Waaban.

A small, wild-hearted lodging village in Michigan’s Upper Peninsula. Opening 2027

THE VISION

At Waaban, you can paddle out, cast a line, take a swim, hike until you forget what time it is, gaze at the stars, burn some marshmallows, play cornhole or a round of disc golf, practice your yoga, snorkel for crawdads, or disappear into a hammock. The point is not to pack every minute. It’s to make the minutes count.

RIGHT NOW AT WAABAN
UPPER PENINSULA, MICHIGAN
--°·checking the sky...
SUNRISE--
SUNSET--
MOON--
DAYLIGHT--
CHECKING EASTERN U.P. CONDITIONS...
(function () { /* GENERALIZED EASTERN U.P. REFERENCE POINT. NOT THE WAABAN PROPERTY LOCATION. */ const LAT = 46.25; const LON = -85.50; const TZ = "America/Detroit"; const $ = id => document.getElementById(id); function degToRad(x) { return x * Math.PI / 180; } function radToDeg(x) { return x * 180 / Math.PI; } function normalize360(x) { return ((x % 360) + 360) % 360; } function normalize24(x) { return ((x % 24) + 24) % 24; } function michiganDateParts() { const parts = new Intl.DateTimeFormat("en-US", { timeZone: TZ, year: "numeric", month: "2-digit", day: "2-digit" }).formatToParts(new Date()); const out = {}; parts.forEach(p => { if (p.type !== "literal") out[p.type] = Number(p.value); }); return { year: out.year, month: out.month, day: out.day }; } function localDateKey(date) { const parts = new Intl.DateTimeFormat("en-US", { timeZone: TZ, year: "numeric", month: "2-digit", day: "2-digit" }).formatToParts(date); const out = {}; parts.forEach(p => { if (p.type !== "literal") out[p.type] = p.value; }); return `${out.year}-${out.month}-${out.day}`; } function targetDateKey(y, m, d) { return ( String(y).padStart(4,"0") + "-" + String(m).padStart(2,"0") + "-" + String(d).padStart(2,"0") ); } function dayOfYear(y, m, d) { const start = Date.UTC(y, 0, 1); const current = Date.UTC(y, m - 1, d); return Math.floor( (current - start) / 86400000 ) + 1; } function solarEvent(y, m, d, sunrise) { const N = dayOfYear(y, m, d); const lngHour = LON / 15; const t = sunrise ? N + ((6 - lngHour) / 24) : N + ((18 - lngHour) / 24); const M = (0.9856 * t) - 3.289; let L = M + (1.916 * Math.sin(degToRad(M))) + (0.020 * Math.sin(degToRad(2 * M))) + 282.634; L = normalize360(L); let RA = radToDeg( Math.atan( 0.91764 * Math.tan(degToRad(L)) ) ); RA = normalize360(RA); const Lquadrant = Math.floor(L / 90) * 90; const RAquadrant = Math.floor(RA / 90) * 90; RA = RA + (Lquadrant - RAquadrant); RA = RA / 15; const sinDec = 0.39782 * Math.sin(degToRad(L)); const cosDec = Math.cos(Math.asin(sinDec)); const cosH = ( Math.cos(degToRad(90.833)) - (sinDec * Math.sin(degToRad(LAT))) ) / ( cosDec * Math.cos(degToRad(LAT)) ); if (cosH > 1 || cosH < -1) return null; let H = sunrise ? 360 - radToDeg(Math.acos(cosH)) : radToDeg(Math.acos(cosH)); H = H / 15; const T = H + RA - (0.06571 * t) - 6.622; const UT = normalize24(T - lngHour); const hour = Math.floor(UT); const minuteFloat = (UT - hour) * 60; const minute = Math.floor(minuteFloat); const second = Math.round( (minuteFloat - minute) * 60 ); /* Try neighboring UTC dates and select the one that corresponds to the requested Michigan date. */ const wanted = targetDateKey(y, m, d); for ( let offset = -1; offset <= 1; offset++ ) { const candidate = new Date( Date.UTC( y, m - 1, d + offset, hour, minute, second ) ); if ( localDateKey(candidate) === wanted ) { return candidate; } } return new Date( Date.UTC( y, m - 1, d, hour, minute, second ) ); } function formatTime(date) { if (!date) return "--"; return new Intl.DateTimeFormat( "en-US", { hour: "numeric", minute: "2-digit", timeZone: TZ } ).format(date); } function daylightLength(start, end) { if (!start || !end) return "--"; let ms = end - start; if (ms < 0) ms += 86400000; const mins = Math.round(ms / 60000); const hrs = Math.floor(mins / 60); const rem = mins % 60; return `${hrs}h ${rem}m`; } function moonPhaseName() { /* Known new moon: January 6, 2000 at 18:14 UTC */ const knownNewMoon = Date.UTC( 2000, 0, 6, 18, 14 ); const synodicMonth = 29.530588853; const days = (Date.now() - knownNewMoon) / 86400000; let phase = (days % synodicMonth) / synodicMonth; if (phase < 0) phase += 1; if ( phase < .0625 || phase >= .9375 ) return "New moon"; if (phase < .1875) return "Waxing crescent"; if (phase < .3125) return "First quarter"; if (phase < .4375) return "Waxing gibbous"; if (phase < .5625) return "Full moon"; if (phase < .6875) return "Waning gibbous"; if (phase < .8125) return "Last quarter"; return "Waning crescent"; } function updateSky() { try { const d = michiganDateParts(); const sunrise = solarEvent( d.year, d.month, d.day, true ); const sunset = solarEvent( d.year, d.month, d.day, false ); $("wn-sunrise").textContent = formatTime(sunrise); $("wn-sunset").textContent = formatTime(sunset); $("wn-daylight").textContent = daylightLength( sunrise, sunset ); $("wn-moon").textContent = moonPhaseName(); } catch (error) { console.error( "Waaban astronomy error:", error ); } } async function updateWeather() { try { const pointURL = `https://api.weather.gov/points/${LAT},${LON}`; const pointResponse = await fetch(pointURL, { headers: { "Accept": "application/geo+json" } }); if (!pointResponse.ok) throw new Error( "NWS point lookup failed" ); const point = await pointResponse.json(); let temperature = null; let condition = null; let observationTime = null; /* FIRST TRY: nearest actual observation station */ try { const stationsResponse = await fetch( point.properties .observationStations ); if (stationsResponse.ok) { const stations = await stationsResponse.json(); const station = stations.features && stations.features[0]; if (station) { const obsResponse = await fetch( station.id + "/observations/latest" ); if (obsResponse.ok) { const obs = await obsResponse.json(); const c = obs.properties .temperature.value; if ( Number.isFinite(c) ) { temperature = Math.round( (c * 9 / 5) + 32 ); } condition = obs.properties .textDescription; if ( obs.properties.timestamp ) { observationTime = new Date( obs.properties .timestamp ); } } } } } catch (stationError) { console.log( "Using forecast fallback." ); } /* FALLBACK: current NWS hourly forecast */ if ( temperature === null || !condition ) { const hourlyResponse = await fetch( point.properties .forecastHourly ); if (!hourlyResponse.ok) throw new Error( "NWS forecast failed" ); const hourly = await hourlyResponse.json(); const current = hourly.properties.periods[0]; if (temperature === null) temperature = current.temperature; if (!condition) condition = current.shortForecast; if (!observationTime) observationTime = new Date(); } $("wn-temp").textContent = `${temperature}°`; $("wn-condition").textContent = condition || "weather moving through"; if (observationTime) { const stamp = new Intl.DateTimeFormat( "en-US", { hour: "numeric", minute: "2-digit", timeZone: TZ, timeZoneName: "short" } ).format( observationTime ); $("wn-updated").textContent = `EASTERN U.P. CONDITIONS · UPDATED ${stamp} · NOAA/NWS`; } } catch (error) { console.error( "Waaban weather error:", error ); $("wn-temp").textContent = "--°"; $("wn-condition").textContent = "weather moving through"; $("wn-updated").textContent = "EASTERN U.P. WEATHER DATA TEMPORARILY UNAVAILABLE"; } } /* Run astronomy and weather separately. If one fails, the other still works. */ updateSky(); updateWeather(); setInterval( updateWeather, 900000 ); setInterval( updateSky, 3600000 ); })();

Waaban

/wä-ˈbän/
noun

Origin: Anishinaabemowin (Ojibwe)Original definition:
sunrise; dawn; the east; the light of a new day; new beginnings.
Definition:
~A place of serenity and joy.
~A place to make unplugged memories.
~A feeling, a rhythm, a vibe where peace, presence, and simple wonder live together.
~A reminder to begin again.

The Stay

LEVEL U.P.

Lodging at Waaban Village is about getting back to what matters. Sleep in a yurt, or an A-frame, or a tiny house- wake with the loons, fish before breakfast, drink your coffee outdoors, paddle or hike somewhere, and play long enough to see the stars. We built lightly and with low impact, we stay curious about the land, water, wildlife, and people who shape this place, and believe the best adventures are shared. There is comfort here, but not excess. A little effort, a lotta exploration, plenty of freedom, and room to be fully present.

THE FISH

LINES IN

In the U.P., fishing is less a pastime than a way of life. This place has earned an outsized role in American angling lore, from Ernest Hemingway and Michigan’s Mightiest Piscator to friends today chasing brookies, muskies, smallies, and lakers through cedar swamps and beaver ponds and out into the big water. Of course, fishing has always been central to Anishinaabe (Ojibwe) life, with communities established along lakes and rivers and fishing traditions carried forward across generations.At Waaban, you can join the timeless fish tales in the simplest possible way. Grab one of our loaner rods, choose a lure, and go. Fish hard, or barely fish at all. Sit on the bank. Grab a kayak. Listen to the reel click. Watch the current. For some of us, fishing is meditation with muddy boots, a way to quiet the mind and come back a little steadier and maybe less hungry.

The poles are coming. The water is waiting. It's almost time to fish Waaban Village.

THE STORY

DEEP TIME


Every trail and every camp has a backstory. Long before roads or towns appeared on the map, people were moving through the forests and along the waters of the Upper Peninsula. Archaeological evidence in the U.P. reaches back to the Paleoindian period, followed by thousands of years of Archaic and Woodland life shaped by changing lakes, rivers, forests, fish, game, and the seasons. Research in the eastern U.P. shows that by Late Woodland times people moved skillfully between Great Lakes shorelines and interior landscapes, fishing when the runs were right, gathering wild foods, hunting, storing what could be saved, and knowing exactly where to be and when.That story never simply ended. The Anishinaabe, including Ojibwe communities whose descendants remain here today, have lived in the Great Lakes for millennia. Their relationship with these lands and waters continued through French contact, the fur trade, British and American rule, treaties, displacement, and profound change. The 1836 Treaty of Washington included the Upper Peninsula in lands ceded to the United States while reserving important hunting and fishing rights that remain meaningful today.Then came voyageurs and trading posts, the American Fur Company, sawmills and river drives, railroad grades, logging camps, homesteads, and towns built around timber and water. At Waaban, archaeology is our excuse to keep looking closer. A stone projectile point, an old grade through the woods, a cedar stump, a forgotten foundation, even the bend of a river can be a clue.We invite you to wander, wonder, ask questions, and discover that the place beneath your feet has been part of human stories for a very, very long time. Enjoy your time. Welcome to Waaban.


THE PATH

Waaban Is Coming

See You Up North

2027

We’re getting the trails marked.
Maps, booking, and contact details are on the way.
Check back soon.

Holy Wah!

BE FIRST TO WAKE UP AT WAABAN

Opening in 2027. Leave your email and we'll send occasional updates and first notice when stays become available. You may even win a free stay or some Waaban swag!

FOLLOW THE BUILD

From Dream to Destination