Back to work

2025 · Data Engineer · Builder · Open source

World Bank Data Browser

A web app that syncs the World Bank Indicators catalogue into PostgreSQL and serves a dashboard to browse, query, and download global development data.

Python 3.12FastAPISQLAlchemy (async)PostgreSQL 16AlembicDocker

Overview

The World Bank publishes thousands of development indicators — GDP, population, health, education, climate — but the raw Indicators API is awkward to explore and slow to query at scale. World Bank Data Browser fixes that: it syncs the entire catalogue into a local PostgreSQL database, then serves a clean dashboard to browse sources, indicators, and countries, and to query and download the time-series behind them.

It’s a compact, end-to-end data platform — ingestion, modeling, storage, and serving — built in the same shape as production systems.

What it does

  • Catalogue sync — on first boot it pulls the full World Bank catalogue (sources, indicators, countries) into Postgres automatically.
  • Browse & search — explore sources and indicators, with fuzzy text search powered by Postgres pg_trgm.
  • Query & download — pull the time-series for any indicator/country and export it for downstream use.
  • Dark-mode dashboard — a server-rendered UI, no heavyweight frontend build.

Under the hood

  • FastAPI serves both the API routes and the Jinja2-rendered pages.
  • Async SQLAlchemy + Alembic model the data and manage migrations, which run automatically when the container starts.
  • Resilient ETL — the World Bank client uses httpx with tenacity for retries and backoff, so transient API failures don’t break a sync.
  • PostgreSQL 16 with the pg_trgm extension for fast fuzzy search.
  • Dockerized end to end via Docker Compose, with a GitHub Actions pipeline running lint and tests against the same image used in production.

Why it’s here

This project is the clearest single picture of how I work on the data side: take a messy external source, make it resilient to ingest, model it properly, and put a usable interface on top. It’s also the technical groundwork for the AI and productivity tools I’m building next on tools.cyv.me — same FastAPI foundation, new surface.