AirQo Website API
Backend infrastructure for the AirQo website
// featured build
AirQo Website API
Designed with a product mindset and implemented across the stack.
Build profile
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.