Four widgets, rendered and maintained by 906 Dashboard from NOAA and National Weather Service data. One line of HTML on your page; nothing to install, nothing to update, and nothing to keep accurate yourself.
Base depth, what fell overnight, and what is forecast at the hill. For lodging, rentals and anyone whose winter guests ask "is there snow yet".
Install the ski widget →Whether tonight is worth going out, from NOAA space-weather data and NWS cloud cover. Honest on a quiet night.
Install the aurora widget →A live countdown to the close of legal light for any UP county, with what is in season today.
Install the hunting widget →A moose or a porch goose who dresses for today's weather, with the temperature and local time. The friendliest thing on your homepage.
Install the weather buddy →Every widget installs the same way. Paste the placeholder where the widget should appear and the loader script anywhere on the page — it finds the placeholder itself, and one script handles any number of widgets.
<div data-906-widget="ski" data-client="your-id"></div> <script async src="https://widgets.906dashboard.com/widget.js"></script>
Your client id carries your brand colours, your default location and your preferred size, so the snippet above is usually the whole job. The per-widget sections below list the attributes worth overriding.
frame-ancestors header on our side. Until your hostname is on
that list the widget renders as blank space — send us the address and it is
a one-line change. Include any staging or preview host too:
frame-ancestors applies to every frame in the chain, so
a CMS page-builder preview that wraps your page needs listing as well as the
live site.
Some templates escape <script> inside a content block. If
the snippet renders as visible text instead of a widget, use an iframe
instead — same widget, no script tag. Swap ski.html for
aurora.html, hunting.html or buddy.html as needed.
One trade-off worth knowing: without the script there is nothing to report
the widget's height back to your page, so this version is a
fixed-size card rather than the automatic band-on-desktop,
card-on-mobile. It is pinned to size=card deliberately — a card
is the size that works at every width.
<iframe src="https://widgets.906dashboard.com/ski.html?client=your-id&size=card"
title="Snow report — 906 Dashboard"
width="100%" height="400" loading="lazy"
referrerpolicy="strict-origin-when-cross-origin"
style="border:0;max-width:360px"></iframe>
The headline is the base depth, because "is there anything to ski" is what decides whether somebody makes the drive. Below it: what fell in the last 24 hours, what is forecast over the next three days, and the temperature and wind at the hill.
<div data-906-widget="ski" data-client="your-id"></div> <script async src="https://widgets.906dashboard.com/widget.js"></script>
| Attribute | Values | What it does |
|---|---|---|
data-region |
up nlp |
up is the Upper Peninsula, reported against Marquette.
nlp is northern Lower Michigan, reported against Gaylord.
|
data-area |
a hill or trail id | Pins the forecast to one ski area — ten downhill and seven Nordic systems per region. Omit it for the regional roll-up. Ask us for the id for your hill; it is usually the obvious short name. |
data-size |
auto card strip panel |
See Sizes below. auto suits most pages. |
Out of ski season the widget says CLOSED rather than reporting a truthful zero that reads as bad news about a mountain nobody is trying to ski. It returns on its own in November.
Whether tonight is worth going out, combining NOAA's space-weather forecast with NWS cloud cover for a specific town. A pinned widget reports that town's own sky and names the viewing spot people should drive to.
<div data-906-widget="aurora" data-client="your-id"></div> <script async src="https://widgets.906dashboard.com/widget.js"></script>
| Attribute | Values | What it does |
|---|---|---|
data-spot |
mqt cph wfp mun irw grm pcm all |
Pin the forecast to one town, or all for the whole UP.
Telling a guest already in Marquette that Copper Harbor is clearer does
them no good, so a pinned widget never does it.
|
data-size |
auto card strip panel |
See Sizes below. |
| Code | Forecast for | Viewing spot named |
|---|---|---|
mqt | Marquette | Presque Isle Park |
cph | Copper Harbor | Brockway Mountain |
wfp | Whitefish Point | Whitefish Point |
mun | Munising | Sand Point |
irw | Ironwood | Little Girl's Point |
grm | Grand Marais | Grand Marais Harbor |
pcm | Porcupine Mountains | Union Bay |
If your own pages already recommend viewing locations, we can point the widget at yours instead, or drop the row entirely so it does not offer a second opinion beside your copy.
On a quiet night it says QUIET, in grey, honestly. Aurora activity is spiky — long stretches of nothing, then an enormous night. A widget that manufactured excitement on a Kp 1 evening would send your guests out for nothing.
The question a hunter in the woods actually has: can I shoot right now, and for how long? A live countdown to the close of legal light for any of the fifteen UP counties, with what is in season today and current field conditions.
<div data-906-widget="hunting" data-client="your-id"></div> <script async src="https://widgets.906dashboard.com/widget.js"></script>
| Attribute | Values | What it does |
|---|---|---|
data-county |
any of the fifteen UP counties | Which county's legal light to count down. Four UP counties sit in Central Time and the widget handles that for you. |
data-size |
auto card strip panel |
See Sizes below. |
A character, not a data table. The moose is the Upper Peninsula's and the porch goose is northern Lower Michigan's. They put on a winter coat when it snows, a raincoat when it rains, flannel when it is brisk and sunglasses when it is not, over a scene that turns to night after sunset. Beside them: the live temperature, the sky, and the local time.
<div data-906-widget="buddy" data-client="your-id" data-character="moose"></div> <script async src="https://widgets.906dashboard.com/widget.js"></script>
| Attribute | Values | What it does |
|---|---|---|
data-character |
moose goose |
Which buddy, and which towns they know. The moose covers ten UP towns from Copper Harbor to Menominee; the goose covers twelve across northern Lower, from Traverse City to Mackinac Island. |
data-city |
a town, e.g. marquette traversecity |
Pins the buddy to one town. Left out, visitors get a dropdown and the widget remembers their pick. |
data-picker |
0 |
Hides the dropdown and shows the town's name instead. For a lodge that only cares about its own weather. |
data-size |
auto card panel |
card is the compact scene for a sidebar; panel
is the full one. auto picks on the width it is given.
There is no strip — a character does not fit in a band.
|
The buddy reads the National Weather Service directly, from the visitor's browser, so there is no data feed of ours to go down. If NWS has a bad minute the buddy keeps showing the last reading for up to three hours, then says it is unavailable rather than dressing for weather that has passed.
| Value | Shape | Use it when |
|---|---|---|
auto | Band at 700 px and wider, card below | The usual choice. It switches on the width the widget is actually given, so a narrow sidebar on a desktop gets the card too. |
card | Fixed card, max 360 px | A sidebar, or anywhere you want a predictable block. |
strip | Full-width band | Under a page header, or across the top of a landing page. |
panel | Two-column card | A wide content column where a band would look stretched. |
This sits on your homepage, so a dead upstream should be our problem rather than your phone call. Three tiers, in order: live data; then the last good reading that visitor saw, stamped Last known with a timestamp; then a complete, correctly-branded component saying conditions are unavailable. Never a broken box or an empty frame. It recovers on its own.
Load your page and confirm:
If you see an empty space where the widget should be, your domain almost
certainly is not on the allowlist yet — the browser console will say so
explicitly, naming frame-ancestors. The question we will ask is
not "what is your domain" but what is in the address bar when you see it
fail, because a CMS preview answers that differently from the live page.