Pukar Ghimire
All work

Mapping 26,000 Nepali schools from scattered public data

No single public source shows where Nepal's schools are or who runs them. I merged a school directory with OpenStreetMap, checked every school against the official boundaries, and built a 3D map, search and insights on top.

eduatlas.pukar10.com.np
Role
Designed and built
Company
Independent project
Stack
Next.js, PostgreSQL, Python, MapLibre, deck.gl, Claude Code
Outcome
26,115 schools across all 753 local levels, 99.9% placed on the map

The problem

School data in Nepal is spread across annual reports, spreadsheets, private directories and volunteer maps. Each holds a piece, they disagree, and none can answer where schools are missing or how schooling spread over time.

Without one place to look, parents, journalists and planners can't easily see basic patterns, like how few rural schools are private or where +2 schools stop.

Constraints

No official open dataset to start from: a directory of about 4,000 schools and OpenStreetMap's 25,000 had to be merged, and they overlap and disagree.

Many fields are sparse: founding years exist for only 9% of schools and enrolment for about the same.

The site had to resist bulk scraping, since the merged dataset is the valuable part.

The decision

A Python pipeline places every school in its province, district and local level using the Survey Department's boundaries, links the two sources one-to-one, and skips ambiguous matches rather than guessing.

Fill gaps from Nepali naming conventions ("Ma. Vi.", "Shree" plus a level word) only where the rule was checked against known labels, and flag every inferred value so it can be excluded from analysis.

Serve everything through a Next.js app on Postgres, with every API call behind a bot check, a signed session and rate limits, and no endpoint that returns records in bulk.

The trade-off

Precision over recall in matching: some real duplicates stay unlinked, in exchange for never merging two different schools.

The insights page keeps a caveat under each chart, unlike the rest of the site. Figures such as hill districts looking almost entirely community-run would mislead without them.

Outcome

26,115 schools with 99.9% on the map, a quality report on every build, and an insights page with patterns: 70% of schools in metropolitan cities are private against 2.4% in rural municipalities.

The next step is linking to the Ministry of Education's school register, which would confirm the gaps and add enrolment.

NextFrom Jira ticket to pull request, with an agent doing the typing