What it is
Species Lens turns the Global Biodiversity Information Facility (GBIF) — a live index of more than three billion occurrence records — into a single search box. Type any organism, pick it from a taxon-aware suggestion list, and its worldwide observation footprint resolves in seconds: a density heat surface of the entire record corpus at every zoom, the latest 300 georeferenced occurrences as clickable points, and a live statistical read on how, when, and where the species has been recorded.
What makes it distinctive is that every number is queried live at selection time. The header count, the records-by-year bar chart, and the basis-of-record chips are all pulled from GBIF the moment you choose a species, so they reflect the current corpus and drift upward as GBIF grows — there is no baked-in snapshot pretending to be current. The density surface is served straight from GBIF's own tile CDN, so it scales to billions of points without the browser ever holding them.
The audience is anyone who needs to see biodiversity data spatially without standing up a GIS: field ecologists and conservation planners scoping a species' range, educators and science communicators, natural-history museums, and consultancies preparing environmental baselines. It is a fast, credential-free way to answer "where has this been seen, and how well is it documented?"
The experience
On boot the app lands on the Atlantic puffin (Fratercula arctica), its density heat glowing over the North Atlantic — an immediate, legible example of what the tool does.
- Type-ahead search. The search field queries GBIF's species/suggest endpoint, debounced at 250 ms so keystrokes never hammer the API. Because GBIF returns taxa at every rank, each suggestion shows its rank and kingdom so you can distinguish a genus from a species at a glance. Enter selects the first result.
- The randomize dice. One click jumps to a curated charismatic species — a low-friction way to browse the tool's range.
- Density surface. Selecting a taxon swaps in a fresh GBIF map-API tile layer showing the full occurrence density in the purpleYellow point style, chosen for contrast against the dark-gray vector basemap.
- Occurrence points. The latest 300 georeferenced records reveal as cyan points once you zoom to level 4 or deeper. Click one for a glass detail card with country, year, basis of record, and a deep link to the exact record on GBIF.org.
- Live statistics. A header chip shows the total record count; a dependency-free canvas bar chart renders records-by-year from the GBIF year facet; basis-of-record appears as a row of chips (human observation, preserved specimen, and so on).
The data — where it comes from
All data comes from GBIF and an anonymous Esri basemap. Nothing is paid, and nothing requires a key.
| Source | What it provides | Refresh | Cost | Attribution |
|---|---|---|---|---|
| GBIF species/suggest | Taxon-aware type-ahead (key, name, rank, kingdom) | On keystroke (debounced 250 ms) | Free / public | GBIF.org |
| GBIF occurrence/search | Record count, year & basis facets, latest 300 points | On species selection (cached per taxonKey) | Free / public | GBIF.org |
| GBIF map API tiles | Occurrence density surface (tile.gbif.org) | Served & cached by GBIF's tile CDN | Free / public | GBIF.org |
| Esri dark-gray vector basemap | Anonymous cartographic base | Static | Free (no LP cost) | Esri |
How it was assembled
Species Lens is a Calcite Design System application on the ArcGIS Maps SDK for JavaScript, built with Vite and strict TypeScript.
Engineering decisions worth calling out
- Zero-credential design. The app runs with an empty .env. Every service is either an anonymous Esri basemap or a public CORS-enabled API, so there are no keys to provision, rotate, or leak. An optional Location Platform basemap upgrade is documented in .env.example but never required.
- Swap tiles by creating a new layer, not mutating one. Each taxon gets a brand-new WebTileLayer inserted at index 0; the previous one is removed only after the new one resolves, avoiding a blank flash. Mutating urlTemplate on a live layer does not refetch tiles.
- Stale-async guarding. A slow stats fetch can resolve after the user has already picked a different species. The code compares the resolved taxonKey against the current selection before painting, so a late response never overwrites a newer one.
- Zoom-gated points. Occurrence points are toggled via a reactiveUtils watch on view.zoom that flips layer visibility rather than re-adding graphics — cheaper and flicker-free.
- GBIF politeness. Per-taxon stats are two requests cached in-app per taxonKey, so re-selecting a species costs nothing; the density surface rides GBIF's own CDN cache.