← WorkChoroplethPersonal · Code only

Covisual

COVID-19 statistics for Poland, mapped by voivodeship, fed by my own scraper.

Type
Data visualisation
Role
Design and development, data pipeline
Year
2021–2023
For
Personal project
Stack
Next.js 13 · TypeScript · MongoDB · Chart.js · Leaflet · Puppeteer

02

Context

In 2021 official Polish COVID-19 data was published on dashboards, not as an API. To visualise it, I first had to collect it.

03

Role

Personal project. I built both the scraper and the visualisation; both are public.

04

Idea

Collect first, then draw.

A daily scraper turned two government dashboards into a database. The app turned that database into a map.

ZPPMWMPDLBWPKPMZDSOPLDSKLUSLMAPK
Drawing: sixteen voivodeships as tiles. Pattern only, not real data.

05

Experience

  • A map of the 16 voivodeships coloured by total infections, with detail charts per region.
  • Global statistics from an external API in a sidebar, revalidated every hour.

06

System

  1. CollectionNode.js + Puppeteer crawling two dashboards dailyValidation before writing, no duplicates
  2. DataMongoDB via Mongoose
  3. APINext.js route handler over MongoDBExternal global statistics API
  4. InterfaceNext.js 13 App RouterLeaflet choropleth, Chart.js

07

Details

Checking the scrape

The scraper validated each day’s result for corruption before writing, and only wrote days that were not already in the database.

08

Output

Two public repositories: the app and the scraper. The app is no longer deployed.

09

Reflection

A project that depended on someone else’s dashboards - it taught me to treat every external source as something that will change.