← All Work

AirQo Website API

Backend infrastructure for the AirQo website

PythonDjangoDjango REST FrameworkPostgreSQLRedis
DjangoREST APIsContent platforms
project overview

// featured build

AirQo Website API

Designed with a product mindset and implemented across the stack.

Build profile

Python
Django
Django REST Framework
PostgreSQL
Shipped

What it is

The backend API powering the AirQo website — a content management and delivery layer that serves pages, research publications, events, team information, and organizational content. Built with Django REST Framework to keep the website fast, maintainable, and easy to extend.

The Problem

The AirQo website needed a clean, well-structured backend to manage and deliver content across pages, blog posts, research publications, events, and team profiles. The existing setup lacked proper API versioning, consistent data structures, and the developer-friendly tooling needed to iterate quickly.

My Role

Built the V2 API layer including content endpoints for pages, publications, events, and team data. Implemented caching, pagination, slug-based routing, and OpenAPI documentation to make the backend easy to consume and extend.

Approach

Django REST Framework with a content-first architecture. Each content type (pages, publications, events, team) follows a consistent endpoint pattern with slug-based lookups, multi-level caching with 5-10 minute TTLs via Redis, and cursor/page-based pagination. OpenAPI docs via drf-spectacular keep the API self-documenting. Privacy-friendly slug-based URLs instead of numeric IDs for SEO and editor usability.

Hardest Decision

Designing a universal slug system across all content models. This required backward-compatible migrations while switching from numeric IDs to human-readable slugs for every resource — improving SEO and making URLs meaningful for editors and content authors.

Status

Powers the AirQo website (airqo.net), delivering content to communities, researchers, and policymakers across Africa.

What I'd Change

Would add a headless CMS integration for non-technical editors, implement content preview endpoints for draft review, and add GraphQL as an alternative for more flexible content querying.

Stack

PythonDjangoDjango REST FrameworkPostgreSQLRedis