Patterns

Multi-element behaviours: search input, view toggle, filter chips, empty / error states, sticky sidebar.

Search input (landing hero)

Distinctive composite control on the landing page: search icon + input + submit button, all inside a single bordered wrapper that highlights on focus-within.

<LandingSearch ... /> focus-within ring in --primary

View toggle (Gallery / List / Map)

Always present on results pages regardless of result composition. URL captures the current view.

347 specimens
<ResultsHeader ... view="gallery"> role="tablist" aria-selected

Filter chips (active filters)

Active filter representation on search-result pages. Each chip has a remove button with a clear aria-label.

Region: Jura Period: Lower Devonian Type: Fossil
<Chip ... removeLabel="...">

Empty states

Typographic, calm, action-oriented. Never illustrations. Never patronising microcopy.

Get started: download the template

Once you've filled the template from your existing data and uploaded it, your collection appears here.

curator empty dashboard

No specimens match your filters.

Try removing one or more filters, or browse all 12,800 published records.

Clear all filters →
empty search results

Error states (page-level)

Calm, informative, museum-register on public surfaces. Semantic HTTP status codes returned by the server.

404 — never existed

No specimen here

The record you're looking for doesn't exist. It may have been moved or never existed.

Search specimens →
HTTP 404 no animated cartoons

410 — withdrawn (PID still valid)

Withdrawal is not deletion. The persistent identifier remains valid; the public view is just unavailable.

This record has been withdrawn

The persistent identifier handle:geoda/specimen/abc123 remains valid but the record is not currently published. Contact Pia Stieger · SCNAT Portal Admin for details.

HTTP 410 Gone PID still resolves