Visa Explorer

2026 • Active • TypeScript, Astro

Visa Explorer

Planning international travel usually starts with a question: "Do I need a visa for this country?" The answer depends on what passport you hold, where you're going, and what type of travel you're planning. Checking every destination manually against government visa portals is tedious, and the information changes frequently enough that any PDF guide is outdated by the time you read it.

Visa Explorer solves this in one search. Select your passport country and instantly see visa-free, visa-on-arrival, eVisa, eTA, and visa-required destinations worldwide — displayed on an interactive world map with color-coded countries. The map is the interface, blue means go, yellow means visa-on-arrival, red means you need to plan ahead. Click any country for details on entry requirements, allowed stay duration, and official sources.

The data pipeline is the core of the product. Visa requirements are compiled from official government portals and IATA databases, processed through a series of build scripts that generate the country list, visa requirement matrix, airport routes, and exchange rates. Running `npm run data` triggers five separate data pipelines and produces verified JSON files that the app consumes at build time.

Built with Astro 6 and React 19, deployed on Cloudflare Workers. The frontend uses shadcn/ui components with Tailwind CSS 4, the interactive map renders with d3-geo and topojson-client for country boundaries. Each passport has its own page (`/country/india`, `/country/japan`) for SEO and direct linking, making it easy to share results.

The design philosophy is that travel information should be immediately scannable. A text table of visa requirements is hard to parse, a color-coded world map makes the answer obvious in under a second. The map interaction is deliberate, you don't need to read, you just look. Data is compiled and verified from official sources, with each entry linking to the relevant government portal so users can verify before they book.

Built with

TypeScriptAstroReactTravel

Features

  • Interactive world map, color-coded visa requirements on a d3-geo rendered world map, blue for visa-free, yellow for visa-on-arrival, red for visa-required
  • Passport-based search, select your passport country and get personalized visa information for every destination worldwide
  • Comprehensive data, visa-free, visa-on-arrival, eVisa, eTA, and visa-required status for all countries, with allowed stay duration and official sources
  • Automated data pipeline, five build scripts compile visa requirements from government portals and IATA databases into verified JSON
  • SEO-optimized passport pages, individual pages for every passport country for direct linking and search engine discovery
  • Astro + React architecture, static site generation with server-side rendering via Cloudflare Workers for fast global loads
  • Additional travel tools, airport route maps and currency exchange rate data alongside visa information

Challenges

The hardest part of Visa Explorer was the data. Government visa portals are notoriously inconsistent, some publish machine-readable data, others have PDF scans of handwritten tables. The data pipeline had to handle multiple formats, manual verification steps, and a fallback chain where each data source is cross-referenced against at least two others. A single incorrect visa entry could send someone to the wrong airport with the wrong paperwork, so data integrity was non-negotiable. The solution was a multi-stage pipeline: scrape → cross-verify → flag conflicts for manual review → compile → test against known travel routes.

What I learned

Visa Explorer confirmed something I've suspected for a while: the best consumer internet products aren't necessarily the ones with the most sophisticated technology, they're the ones that make complex, frequently-changing information instantly accessible in a visual format. The map interaction is technically simple, but it transforms a data problem (which countries require visas?) into a visual answer that takes less than a second to parse. The hard work was all in the data pipeline, not the frontend.