Contents

Every chart on this site that answers "what is happening right now" — sixty pages, two hundred and eighty-two rows, ten datasets, one grammar.

A tracker is not an article with a picture of a chart in it. The bars are built from a dataset and committed; the line marking today is drawn per request, and the list above each chart — what is moving, fruiting, open or pickable this week — is computed when you load the page. Nothing on a tracker page says "as of August" and then quietly rots.

The one grammar, in three shapes

All ten datasets describe the same object: a name, a stretch of the year, and sometimes a peak inside it. What differs is what the bar is allowed to mean.

Shape What a bar means Peak tick Used by
Migration a passage — arriving, present, leaving yes, two of them birds, bats, butterflies, moths, dragonflies
Bloom one window, ramping to a best fortnight yes flowers, mushrooms, u-pick
Season flat — on, or off, with no middle no game laws, farmers markets

The season shape exists because some things do not ramp. A deer season is shut on 25 September and open on 26 September, and is exactly as open on 7 February as it was in November; a farmers market is exactly as open on its last Saturday as its first. A triangle would be telling a reader something false about a statute in one case and about opening hours in the other, and in both the reader could act on it.

Birds

Nine guilds that peak nine weeks apart, so they get nine seats rather than one.

Mammals and insects

One chart each. These are the groups whose members move together closely enough that splitting them would be resolution nobody asked for.

Flowers

Fungi

The only chart on this site with a group that peaks in December. Oyster mushrooms and velvet shank fruit in the January thaws, in the fortnight everything else here is dark.

Game seasons

Thirty-eight pages, one per species, and the only place on the site where a tracker page is a single animal rather than a group. That is not a taxonomy argument: squirrel opens on 1 September and beaver on 26 December, and a "furbearers" bar would be averaging a law, which is not a thing that can be averaged.

These are calendars and not licences. Nothing on them replaces the regulations booklet, the zone maps, the bag limits or the permit rules.

Deer and turkey (2)

White-tailed Deer · Wild Turkey

Small game (8)

American Crow · Chukar · Eastern Cottontail · Fox Squirrel · Gray Squirrel · Northern Bobwhite · Red Squirrel · Ring-necked Pheasant

Furbearers (10)

American Beaver · American Mink · Gray Fox · Long-tailed Weasel · Muskrat · Raccoon · Red Fox · River Otter · Striped Skunk · Virginia Opossum

Waterfowl and migratory birds (14)

American Black Duck · American Coot · American Woodcock · Blue-winged Teal · Canada Goose · Common Gallinule · Green-winged Teal · Mallard · Mourning Dove · Snow Goose · Sora · Virginia Rail · Wilson's Snipe · Wood Duck

Frogs and turtles — taken on a fishing licence (4)

American Bullfrog · Green Frog · Snapping Turtle · Softshell Turtle

Food

The two newest trackers, and the first that are not about wild Ohio.

Each has a companion page carrying the map and the addresses rather than the calendar: Columbus Farmers Markets and Central Ohio U-Pick Farms.

What is on the breadcrumb strip, and what is not

Fifty-six of these sixty pages sit behind a mark on the passage strip under the breadcrumb trail — the row of small gauges that light as their subject comes into season. Press a mark and it lands on its page.

Four pages have no mark. Two are whole-taxon overviews whose guilds already hold the seats (Ohio Bird Migration and Ohio Flower Bloom Times). The other two are the food trackers, and that is deliberate: the strip is an instrument about wild Ohio, and a farmers market is not wild. They are loaded by the server so their charts render, and they take no seat.

Adding a tracker

Four steps, in this order, and none of them is optional:

  1. Write data/migration/<id>.mjs — the dataset, its mode, its guilds, its words, and a header comment naming the source every date came from.
  2. Add the id to TAXA in scripts/build-migration.mjs and run it. It writes the chart SVGs and the JSON bundle into public/migration/.
  3. Add the id to the loader list in main.js, or the marker will render "No migration data".
  4. Put <!-- migration: <id> --> on the page above the H1 — headings here are collapsible and hidden until hover, so a chart under one is a chart nobody sees.

Give it a seat on the passage strip only if it belongs there. That is a separate edit in main.js, and PASSAGE_TRACKER_PAGES is a contract with the page's path — rename a page that holds a mark and the link dies silently, rendering as a live link to a 404.