Map tiles failed to load — check your connection.
Sightings are unavailable right now.

About this site

What this is

A live map of recent whale, seal, and porpoise sightings around the Salish Sea (Washington and southern British Columbia). It combines community reports from Acartia with research-grade observations from iNaturalist, refreshed continuously.

Why it exists

To make it easy to see where marine mammals have recently been reported around the Salish Sea. It's a small, non-commercial project (not run by any agency or conservation group), built out of curiosity about the wildlife that shares these waters.

How to read it

Each marker is a sighting: a dot for a visual report, a horn icon for an acoustic one, colored by how recently it happened (see the age legend, bottom-left). Click any marker for details, and use the legend or the Sources control to filter what's shown. Coverage is roughly the last 7 days.

What it isn't

It's not a navigation tool or a scientific dataset, and you shouldn't use it to go looking for marine mammals. See "About this data" for why. It only shows what people choose to report, so it's never a complete picture of what's actually out there.

About this data

Acknowledgments & sources

Sightings come from Acartia (CC BY 4.0) and iNaturalist. Each one names its original contributor, and photos stay the copyright of the photographer who took them, shown only where their licence allows it, always with credit.

How this map changes the data

This map modifies the source data. It merges reports that appear to describe the same animal into one marker, and it adds inferred killer-whale ecotype labels (Bigg's, Southern Resident) that aren't part of the original report. How that works, and where AI is involved, is described in the "AI usage" tab.

Location accuracy

iNaturalist deliberately obscures the location of threatened species before this map ever sees them, so the true position can be off by tens of kilometres. Those markers are drawn with a dashed outline instead of a solid one, and their popup says: "Location obscured to protect this species — true position may differ by tens of kilometres."

Not for navigation

Don't use this map for navigation or anything related to safety at sea. Its bathymetry comes from the GEBCO grid, and GEBCO's licence explicitly rules out that use. It covers roughly the last 7 days, isn't a scientific dataset, and shouldn't be used to go looking for marine mammals. Follow the Be Whale Wise guidelines instead.

Map tile credits

Base map tiles are © OpenStreetMap contributors (ODbL), © OpenTopoMap (CC-BY-SA), and Powered by Esri (Esri, Vantor, Earthstar Geographics, GEBCO, NOAA NGDC, Garmin, and other contributors).

Privacy

This site sets no cookies, runs no analytics, and collects nothing about you. Map tiles, the mapping library, and photographs load directly from OpenStreetMap, Esri, OpenTopoMap, unpkg, iNaturalist, Acartia, and Amazon S3 (Acartia's photo host). Each of those sees your IP address when your browser requests something from it.

AI usage

What AI does here

Two things, both about tidying up other people's reports: it helps decide when two sightings (one from Acartia, one from iNaturalist) are the same animal so they show as one marker, and it reads killer-whale descriptions to estimate the ecotype (Bigg's or Southern Resident).

When AI is used

Most reports never go near AI. For ecotype labels, plain keyword rules run first, and the model is only asked when they turn up nothing, and only for killer-whale reports with a written description. For matching, simple distance-and-time rules narrow the field to a few candidate pairs, and the model is then asked to confirm or reject each one; it can also overrule a rule-based match. If the model is unavailable, those plain rules decide on their own. Once a report or pair has been settled, the answer is remembered and not sent again.

Which model, and what's sent

The site uses Anthropic's Claude (the Haiku model) through the Claude API. For matching, it sends both reports' description, species, count, coordinates, timestamp, and contributor name. For ecotype reading, it sends only the species and the observer's description. Nothing about you, the viewer, is ever sent. Observers' words are always shown on the map exactly as written.

Where it happens

All of this runs server-side, in the pipeline that prepares the map's data. Your browser never contacts the AI.

Read-only, and no training

The model only reads a report to reach a conclusion. Nothing here trains a model, and Anthropic does not train on the data the site sends.

How to tell when AI was involved

A label reads "(inferred)" when a plain keyword match produced it, or "(AI-inferred)" when the model did. A merged marker says "match confirmed by AI" when the model made that call. Anything the model concludes is shown as this site's inference, never the observer's, so treat an ecotype label as a hint, not a fact.

If the AI is unavailable

The map still works. The plain rules run on their own, some duplicates may show as two markers, and some ecotype labels are simply left off. Nothing breaks.

Recent AI decisions

The AI-assisted calls behind the sightings shown right now. It updates as the map refreshes and covers only what's currently on the map.

  • No AI-assisted decisions among the sightings shown right now.