A visual essay on who could speak Irish in each of Ireland's 32 counties, in every census from 1851 to 2022.
Live site: irishlanguagemap.org
It is a scrollytelling page. You scroll through chapters with animated maps and charts, answer the census question yourself, guess the numbers for your own county, and compare the north and south of the island.
- SvelteKit with
adapter-static. Every page is pre-rendered to plain HTML at build time, so there is no server at runtime. - Svelte 5, with a small shared state module in
src/lib/state.svelte.js. - D3 for the charts and the map camera, GSAP for motion, and rough.js for the hand-drawn annotations.
- No map library. The county map is a plain SVG, and the camera that flies to each step's counties is a D3 zoom tween on a single transform.
You need Node 22 or newer.
npm install
npm run dev| Command | What it does |
|---|---|
npm run dev |
Starts the dev server |
npm run build |
Builds the static site into build/ |
npm run preview |
Serves the production build locally |
npm run shapes |
Regenerates the county SVG paths (runs automatically before dev and build) |
geo/ County boundaries (GeoJSON)
scripts/ build-shapes.js: thins and projects the boundaries into SVG paths
static/ Fonts, images, favicon, CNAME
src/
routes/ Home page, About, Methodology, sitemap, robots
lib/
components/ One component per chapter, plus Nav, Footer, Seo
data/ Census figures (ability.json) and the census question text
styles/ Global stylesheets
*.js Chart, map, colour and scroll helpers
.github/workflows/ GitHub Pages deployment
The chapters are Opener, CensusYou, StoryChart, MapChapter, NorthSouth, People, Guess and Conclusion. Scrolly.svelte is the shared scrollytelling section: the pinned graphic, the steps, and the caption box on phones.
- Republic of Ireland: Central Statistics Office.
- Northern Ireland: compiled by Phelim Birch.
- County boundaries: Ordnance Survey Ireland and Ordnance Survey of Northern Ireland.
The methodology page explains how the figures were put together and what changed between censuses.
Pushing to main runs .github/workflows/pages.yml, which builds the site and publishes it to GitHub Pages. The custom domain is set in static/CNAME.
MIT © Alessio Coci