I turned a public-domain government CSV into a searchable index of every port and airport on Earth A developer built The Port Index, a free, searchable index of 3,804 seaports and 9,640 airports from public-domain government CSV data. The project uses Next.js to pre-render ~14,000 static pages, includes depth-to-vessel-class and runway-to-aircraft-class inference, and features a cross-modal graph linking ports to nearby airports. The developer also shares lessons on avoiding Google's thin-content penalties when doing programmatic SEO. For a side project I needed something that turned out to be weirdly hard to find: a free, clean list of the world's seaports — real depths, coordinates, and the codes ships actually use. Everything out there was paywalled, login-walled, or a table that looked untouched since 2005. So I built the thing I wanted. Then it grew: The Port Index — 3,804 seaports and 9,640 airports, free, no signup, and the whole dataset No scraping, no licensing fees. Three public-domain sources do the heavy lifting: Public data is everywhere; the value is in making it usable . The "just parse a CSV" part is where all the interesting bugs live: split '\n' shreds it into garbage. You need a real CSV parser that respects quoting. 0 for "not reported." Trust it blindly and you'll confidently render "0 m channel depth" for half the world.A depth of 14.5 m is boring. A depth that tells you "this berth can take a Panamax but not a Capesize" is useful. So I built a small inference layer: depth → vessel class for ports, and its aviation twin, runway length → aircraft class for airports. The part I'm most into is the cross-modal graph : every port page lists its nearest airports, and every airport page lists its nearest seaports — computed at build time with a simple spatial grid. That linked structure is where a directory stops being a lookup table and starts being something you can explore. The whole thing is Next.js, fully static . generateStaticParams runs over the entire dataset and pre-renders ~14,000 pages at build time. No database, no server, no runtime cost — it deploys to a CDN and is basically free to run and very fast. If you're building a programmatic site, here's a trap I hit face-first: dump 14,000 templated pages into Google's index and it flags you for "scaled / thin content." I learned this the hard way with an AdSense rejection. The fix that worked: a lean core . Only the ~400 highest-quality pages per vertical are indexable and in the sitemap; the long tail stays fully live for users but is marked noindex, follow . You earn Google's trust with a small, genuinely-good set first, then expand the indexable core as the domain gains authority. If you're doing programmatic SEO, bake this in from day one instead of discovering it later. All of it is built on public-domain data — use it for whatever you like. I'd love feedback, especially from anyone in shipping, logistics, or aviation: what data or features would actually be useful to you? And for the builders — what would you make with a clean, global port + airport dataset?