DPWH Site Map
A public map of 248,000 DPWH infrastructure contracts, drillable from region down to city, with charts that follow every filter.
- Type
- Personal
- Year
- 2026
- Role
- Solo Developer
Overview
A web map of every DPWH (Department of Public Works and Highways) contract from 2016 to 2025 that has a site coordinate. You drill from the whole country to a region, a province, then a city or municipality, and click any dot to read that contract: amount, contractor, status, progress, and dates. A side panel charts whatever area is selected: value by year, what gets built, contract periods, and how concentrated the contractors are.
It grew out of a data visualization course project on whether public works money goes where it is needed. That project did the data cleaning; this one turns it into something anyone can open in a browser instead of a Tableau file.
What I built
All filtering happens in the browser. The 248,220 contracts ship as a ~6.5 MB file of column-major typed arrays, so every chart responds to every filter at every level. I first planned a precomputed data cube, but the contract-period histogram and the contractor concentration (HHI) can't be pre-aggregated under arbitrary filters without the cube exploding.
The geography is built with a Python/GeoPandas pipeline: 214,000 sites are joined to 1,642 cities and municipalities, offshore sites within 2 km are snapped to the coast, and borders are simplified so neighboring towns never gap or overlap. Contracts with no usable coordinate are never guessed onto the map. They are still counted in their province, and the panel always says how many are counted but not drawn.
I also added a flagged-sites layer for places with 10 or more contracts in one ~111 m cell, or the same project description repeated at one spot. It is framed as "worth a look", never as evidence of wrongdoing. The map colors were checked for color-blind readers, dark mode has its own palette instead of an inversion, and the whole site is static files, set up to deploy to Cloudflare Pages.



