Target interaction specification

Swimmable Cities

What do we actually know about this place, how current is that knowledge, and where do I check today before entering the water?

Swimmable Cities may present official historical assessments and clearly labelled seeded context, but it must never dress a seasonal baseline as a live safety status. Source, data age, official-versus-seeded provenance, and the path to the current local notice must remain part of the primary interaction.

Case-study thesis

What the finished product should prove.

This is the behavior to build toward. The implementation receipts below remain the record of what exists today.

The interaction is a trust handoff from a map to evidence. The most important state is often not good or bad, but old, unknown, seeded, or check today elsewhere.

State model

The interface has to make these states real.

If two states would look identical to the person, the implementation is not finished.

01

Nearby places

Managed swim places can be found even if map tiles, geolocation, or rich media fail.

02

Official baseline

A sourced classification is shown with season, date, jurisdiction, and history.

03

Seeded context

A prototype or manually seeded place is visibly different from an official assessment.

04

Source detail

The person can open the agency, measurement basis, classification history, and data age.

05

Current notice available

The interface provides the authoritative local path for today without paraphrasing it into its own safety claim.

06

Current notice unavailable

The absence of a live local notice is explicit and does not fall back to the seasonal baseline as if it were current.

07

Out of season or stale

Old assessments remain useful context but are visually downgraded as current decision support.

08

Map unavailable

The place list and evidence remain accessible when tile services or tokens fail.

Edge cases

The boring failures are part of the product.

  • A user checks the spot outside the official bathing season
  • Heavy rain or another local event may make the seasonal baseline less relevant
  • The current local notice cannot be reached
  • Two agencies publish conflicting or differently dated information
  • A seeded place later gains an official source
  • Geolocation is denied
  • Mapbox or another tile provider is unavailable

Definition of done

The future case study needs these receipts.

  • Every official classification exposes source, season, date, and jurisdiction on the primary spot flow
  • Seeded places cannot visually or semantically masquerade as official assessments
  • The interface never turns a seasonal baseline into the statement safe to swim today
  • If a current notice is unavailable, that absence is a first-class state rather than a hidden broken link
  • The place list and source information remain usable without map tiles or geolocation
HAAM products

HAAM product edition · Where the water is kept open

Swimmable Cities

Official 2025 bathing-water grades for Estonia and Finland. Taiwan places are prototypes, not live safety advice.

Swimmable Cities Tallinn view with the EEA 2025 baseline and the map waiting on a Mapbox token.
EEA 2025 baselineLocal notice before you enter

EU season

2025

Estonia and Finland spots carry EEA classifications under the Bathing Water Directive.

indicators

E. coli

Official assessments use E. coli and intestinal enterococci. History stays on the spot.

Taiwan

Seeded

Taiwan spots are labelled as seeded. The app does not invent official grades for them.

non-advisory

Copy

Tests forbid “safe to swim today.” Check the official local notice before you enter the water.

The job

A spot card you can read at the water’s edge.

Official bathing-water portals are authoritative and hard to use when you are already standing at the railing. I wanted a spot card with data age, an official grade or a seeded label, nearby context, and a city action brief.

At the water

Find the place. Read the baseline. Check today’s notice.

01

Find a managed place

The map is first. Closest spots, city, country, and a season label sit on the card before any promise about today.

02

Read official or seeded

EU spots must carry an officialAssessment. Taiwan spots must be seeded. The UI keeps those labels distinct.

03

Open sources

The sources panel cites the European Environment Agency and the Swimmable Cities movement workstreams. Data age stays visible.

04

Check the local notice

Copy tests keep the app from saying it is safe to swim today. The last step is still the city’s own notice.

Design decisions

Decisions.

Data contract

Official and seeded cannot share a costume.

If an Estonia or Finland spot is on the map, it has an official assessment. If a Taiwan spot is on the map, it is seeded and labelled. Tests enforce the split so a later edit cannot blur it.

Language

The caveat is part of the product.

I did not want a sources footnote that a hurried reader could miss. Copy tests and the sources panel keep the non-advisory sentence in the interface.

Map

The places exist even when tiles do not.

A missing Mapbox token should not erase the spots. The prototype renders without tiles; interactivity waits on a public pk. token.

The working stack

Built with.

Data

swimData.ts

EEA 2025 classifications for Estonia and Finland. Seeded Taiwan. Tests for the split.

Copy

Non-advisory contract

copy.test.ts and SourcesPanel. The UI must not say safe to swim today.

Map

Mapbox

Tiles only. Token in .env. Prototype works without it.

Host

swim.haam.co

Vercel Vite/React map prototype. Movement name: Swimmable Cities.

In evidence

Evidence.

01Official EU 2025 baselines on Estonia and Finland spots

02Taiwan spots labelled as seeded

03A sources caveat that tests will fail if it disappears

04A map that still lists places when tiles are missing

Where it stops

The baseline is last season. Today is still the city’s.

There is no live sample engine and no rain-triggered CSO in this pass. Mapbox tiles on the public host need a token. Native swim logic is deferred.

Do not say safe to swim today. Do not call it a live water-quality product. Accessibility audit not recorded.

HAAM’s role

I kept the official baseline, and I kept today in the city’s hands.

Baseline versus today, seeded versus official labels, city action brief, Mapbox prototype, EEA 2025 data, and copy tests. Direct work, 2026.

Research

Compared public swimming notices with water-quality and pollution data.

Help improve this website?

Optional analytics. Google Analytics and Clarity load only if allowed; form, email, and chat content are excluded.