Inspiration
Five years ago I was a kid in rural Nepal who was interested in computers and didn't own one.
There was a government school not far from me that taught computer science, and it was free. I only found out because someone happened to mention it. Studying there is a big part of why I'm doing a computer science bachelor's now.
That "someone happened to mention it" is the whole problem. I got lucky. Most students don't, and the schools sit there half empty while the kids who'd want them never hear the name.
Nepal's government already funds technical streams in hundreds of secondary schools. Computer engineering, civil, electrical, plant science, animal science. They start from Grade 9 and they cost nothing. The information exists too, sitting in a program implementation booklet as a table in an annex, as a PDF. If you know the document number you can find it. If you're a 14-year-old in a village who wants to learn to code, you never will, and neither will your parents or your teacher.
What it does
TechPaila puts every government technical and vocational secondary school in Nepal on a map.
You open it and get an ordinary map with Nepal highlighted. Click your province, it zooms in. Click your district, the schools appear. There's a directory you can filter by program and location, with names in English and Nepali, and the interface switches between both with one tap.
The part I care about most is the recommendation flow. Pick a program, share your location or choose a district, and it ranks the schools that teach it: your own district first, then the ones within about 30 km. Each result says why it's on the list, so a student sees the reasoning instead of trusting a black box.
The dataset is 537 schools covering computer engineering, civil, electrical, plant science, animal science, and agriculture.
It's built for students in Grades 8 to 12 who are choosing what to study next, and for the parents, teachers, and counsellors advising them. The people I had most in mind are students in rural districts, the ones with the interest and nobody around to tell them the option exists.
How we built it
Next.js 16 with the App Router, React 19, TypeScript, Tailwind 4, and Leaflet for the map, deployed on Zerops.
Browser
├── MapExplorer (province / district / municipality state)
│ ├── MapView (Leaflet + GeoJSON layers)
│ ├── Controls (dropdowns)
│ └── Schools (filtered list)
└── Recommend (widget)
├── program pick → geolocation / district fallback
└── rank by district + ~30 km
Data
├── schools.json
├── place-names.json (EN/NE labels)
├── district / municipality centroids
└── public/geo/*.geojson
In map, I use Leaflet with OpenStreetMap tiles so neighbouring countries render normally and only Nepal is highlighted and clickable. Leaflet paints the GeoJSON boundaries as SVG paths anyway, so I got the interactive behaviour without writing projection or pan-zoom code myself.
The map and the dropdown filters share a single piece of state, which is why they stay in sync. Clicking a district on the map and choosing it from the dropdown are the same action as far as the app is concerned.
There's no database. School and boundary data are read-only, so they're static files filtered in the browser. That keeps it fast, keeps hosting near zero, and leaves almost nothing to secure. It also means whoever inherits this later doesn't inherit infrastructure.
Challenges we ran into
Getting the data at all. I transcribed 537 rows of Devanagari from a government booklet by hand. Somewhere past row 500, the source document swaps two of its own columns, putting school names under the local-level heading. I only caught it by reading the values.
Bilingual search was harder. A student might type in Nepali or English, so every school needed a romanized name alongside the Devanagari. Transliteration gets you close but not to official spellings, so a school comes out "Suryoday" when its signboard says "Suryodaya".
Ranking by distance without coordinates was the interesting one. The booklet lists districts and local levels, not latitude and longitude. So the ranking matches a school's municipality against the GeoJSON centroids where it can, and falls back to the district centroid where it can't. It's approximate, and getting real coordinates is the first thing on the roadmap.
Accomplishments that we're proud of
537 schools that were locked in a PDF are now searchable by anyone with a phone.
It works in Nepali, in the search itself rather than as a translation layer bolted on at the end, so the language a student actually thinks in is the language they can type.
On the design side, I went with a neo-brutalist interface: heavy borders, flat blocks of colour, nothing subtle. This has to be legible on a cheap phone, on a slow connection, to someone who has never used a tool like this. Bold and obvious beats elegant here. The map gets a fullscreen mode with the recommendation button tucked away, because on a small screen the map is the whole point and everything else is in the way.
What we learned
I went in focused on computer engineering because that's my own story. Plant science turns out to be the largest category by a wide margin, at 204 schools against 109 for computer engineering, and agriculture-adjacent programs account for 251 of the 537. For a country where most people still work the land, that makes sense. It changed who I think this tool is for.
I also learned that the boring architectural choice was the right one. I didn't set up a database and an API. In JSON, I had a read-only dataset of a few hundred rows.
What's next for TechPaila
Right now the app tells a student which schools exist near them. It can't tell them much about one.
The next layer is depth on every school: phone number, email, website, how many seats each program takes, and eventually feedback from students who've actually studied there. A school listing is only useful if a family can call it before spending a day travelling to it.
Then accuracy. What I have came from one booklet from one year, transcribed from images. I want to work with the Ministry of Education to get the current list directly, along with real locations for every school. Alongside that, I want a group of volunteers verifying entries on the ground, checking that a school still runs the program listed, that the number still connects, that the name is spelled the way the signboard spells it.
And then the handover. The Ministry doesn't publish anything like this. I want to build it properly and give it to them, so it becomes a public tool rather than a hackathon project with an expiry date. That's the real reason there's no database and no complicated infrastructure. Something simple is something someone else can actually take on.
The number I'm working toward is 5,000 students reached in five years. Students who found a school through this and enrolled in a program they'd never have heard of otherwise.
Built With
- next.js
- typescript
- zerops
Log in or sign up for Devpost to join the conversation.