Data and GIS

Bilingual survey map

A map and data tool that presents a cross-border youth survey for 51 municipalities, in Swedish and Norwegian.

See the demo

When
Aug – Oct 2026
Status
Working version delivered for the research team’s review
Source
Private source; live site belongs to the project
Stack
  • Python
  • JavaScript
  • Leaflet
  • GeoJSON
  • Playwright
  • axe

Problem and idea

A research team had its survey results in one large workbook: 162 measures across five themes, broken down by municipality, gender and group, for municipalities on both sides of a national border. They wanted people outside the team to explore the results on a map, in both languages, without a server to run and without any risk of the numbers drifting from the source.

The idea: convert the workbook once through a checked Python pipeline, publish the result as a small static site, and test every measure in a real browser before and after each release.

How it works

  1. WorkbookFive sheets from the researchers
  2. Python importSchema checks, documented corrections, geodata preparation
  3. Static bundleJSON, GeoJSON and Leaflet, 0.84 MB, no server
  4. Release gateE2E and accessibility tests must pass
  5. Live checkThe same tests rerun on the published site

Demo

Map of municipalities on both sides of the Sweden–Norway border, shaded by average score, with a side panel comparing one municipality to the country totals.
Map view. Choose a measure, read each municipality’s value, and compare it with the totals for each country. The project’s branding is hidden for this portfolio.
The same tool at phone width: topic and area selectors above the map.
At 390 px the selectors stack above the map; the tests cover 320 and 390 px phones.

The live site belongs to the research project, so it is not linked here. I can walk through it on request.

What I built

  • The Python import that reads the workbook, validates it against a schema, applies the researchers’ documented corrections and prepares the geography.
  • The map, table, occupational profile and multi-municipality comparison, with shareable links that keep every selection.
  • Swedish and Norwegian text throughout, keyboard support and a phone layout.
  • The release workflow: tests before publishing, then the same tests against the live address, plus a manifest of file hashes.
  • Rounds of feedback and accessibility review with the researchers.

Stack

  • Python
  • shapely
  • pyproj
  • pyshp
  • JavaScript (ES modules)
  • Leaflet
  • GeoJSON
  • Playwright
  • axe-core
  • GitHub Actions
  • Static hosting

Quality evidence

  • All 8,262 municipal source cells, 486 totals and 450 standard deviations reconciled against the original workbook with an independent reader.
  • 12 unit test groups and 16 browser E2E groups, covering every measure on the map and in the table.
  • Automated WCAG A/AA checks with axe, keyboard and focus tests, and layouts at 320, 390, 1280 and 1366 px.
  • Each release records the exact version and a hash for every published file.

Current limits

  • Some municipal values are withheld until the researchers confirm them.
  • Part of the Norwegian data and metadata is waiting for the researchers’ final confirmation.
  • The cohort study data has not been delivered yet, so that view is empty.
  • A manual screen-reader review and a formal accessibility statement are still to do.