bolu@portfolio: bash

$ whoami

bolu-ajayi, Full Stack Software Engineer (backend-heavy)

$ cat location.txt

Leeds, UK · open to remote

$ ./stack.sh --core

Python · FastAPI · TypeScript · React · RabbitMQ · Kubernetes · AWS

$

Bolu Ajayi

Bolu Ajayi

@boluwatifeajayi · Full Stack Software Engineer

I build complete products — the API, the data model, the infrastructure and the interface on top — and I design them backend first. Most of my recent work is Python and FastAPI: geospatial scoring platforms, LLM-backed analysis pipelines and services inside distributed systems, with React and Next.js frontends I ship myself. 6+ years across early-stage companies, mostly as the person accountable for the backend and the production system underneath it.

pythonfastapitypescriptreactnode.jskubernetesaws
Download Resume
public repos
followers
following
on GitHub since

// skills.json

Tech Stack

97 entries across 10 areas — all of it backed by shipped work rather than exposure. Grouped by what the tooling is for, because that is closer to how the decisions actually get made.

Languages

PythonTypeScriptJavaScriptGoCC#JavaSQL

Backend

FastAPIPydanticSQLAlchemyNode.jsExpressFastifyGinREST API designGraphQLOpenAPIWebSocketsSocket.ioJWT & OAuthZodPrisma

Frontend & mobile

ReactNext.jsReact NativeExpoVue.jsTailwind CSSViteMapLibre GLTanStack Query

Distributed systems

MicroservicesEvent-driven architectureRabbitMQSaga patternTransactional outboxInbox / idempotencyDead letter queuesCircuit breakersRetry & backoffSchema versioningRate limiting

Data

PostgreSQLMongoDBMongoDB geospatialRedisPandasETL pipelinesDatabase migrations

// about.md

About Me

I'm a full-stack engineer who designs backend first. I started out writing frontend interfaces, first at Black Copper, then at Falcon Aerospace, where I grew into full-stack engineering: building the backend APIs and admin tooling behind the products I was shipping, not just the screens on top of them. Somewhere in that stretch, the part I found most interesting stopped being the UI and became what was happening underneath it. How services talk to each other. How state stays consistent when three things can fail independently. How a system behaves at 2am when nobody's watching. I never stopped shipping the frontend — I just stopped treating it as the whole job.

Most of my recent work is Python. At CGLS I was lead engineer on SmartSustain, a FastAPI platform with a geospatial data model, ETL pipelines over millions of government records and a four-pillar scoring engine — and I built the map-driven React frontend on top of it. My MSc dissertation, TD Agent, is a Python analysis pipeline benchmarking LLM technical-debt detection against SonarQube. In Fetch, my distributed-systems build, the payments and driver-matching services are FastAPI, deliberately polyglot alongside the Node side so the service boundaries have to be real contracts. Before that, at Auqli, I owned the backend architecture of a live-shopping marketplace running at up to 50,000 concurrent users.

These days my focus sits at the intersection of Python backends, distributed systems, cloud infrastructure and AI-powered software — with enough frontend range that "who builds the UI?" has never been a blocker on anything I've owned. I'm doing an MSc in Software Engineering, building Wevna — a local-first runtime dashboard that shows you what your Node.js backend is actually doing — and sending fixes upstream to the projects I depend on, including the AWS CDK.

Backend — where I lead

Python and FastAPI first, TypeScript and Node.js alongside it. REST and event-driven APIs, distributed systems, RabbitMQ, payments, WebSockets, observability.

Frontend & product

React, Next.js, React Native, MapLibre, Tailwind. I ship the interface on top of my own APIs rather than handing the schema over.

Cloud & DevOps

AWS, Azure, Docker, Kubernetes, Terraform, CI/CD. Provisioned from first commit and operated in production.

Data & AI

Pandas and ETL pipelines, geospatial data models, and LLMs wired in as grounded, tool-using, auditable production components.

// experience.log

Experience

Six years across early-stage companies, mostly as the person accountable for the backend — the architecture, the production system underneath it, and increasingly the technical direction of the team around it. Recently that backend has been Python and FastAPI, and on most of it I shipped the frontend too.

  • ·Lead engineer on an Innovate UK funded platform used by planning assessors across five West Yorkshire councils — Leeds, Bradford, Wakefield, Calderdale and Kirklees.
  • ·Architected the entire backend in Python and FastAPI: async route handlers, Pydantic models on every request and response boundary, dependency-injected services, and background tasks for the long-running jobs that must not block a request.
  • ·Designed the geospatial data model on MongoDB with 2dsphere indexing, so nearest-neighbour lookups, polygon intersections and catchment queries run as spatial queries in the database rather than as computation in application code.
  • ·Built the ETL layer in Python — a loader per dataset plus a domain processor per concern — unifying millions of postcode, flood risk, air quality, road noise, deprivation, crime, EPC, transport and land registry records into queryable spatial collections, with Pandas doing the heavy reshaping.
  • ·Engineered the scoring engine producing weighted 0–100 indices across environmental, economic, social and regulatory pillars for 700+ candidate sites, backed by live spatial queries rather than precomputed snapshots.
  • ·Made every score defensible: an explain endpoint decomposes each calculation into its inputs, weights and per-metric contributions, and missing data is flagged explicitly instead of being silently scored as zero.
  • ·Built an LLM-backed assistant in Python that answers natural-language questions about a site grounded in that same decomposition, so an answer is always traceable back to the data behind it rather than generated free-hand.
  • ·Profiled and optimised the expensive spatial computations, adding geospatial indexing and a Redis caching layer targeted at the geometry itself, so a score stays live and correct while the costly work underneath it is reused.
  • ·Automated planning-grade PDF report generation in Python, cutting manual reporting effort by roughly 70%.
  • ·Provisioned and operated the full AWS deployment — EC2, S3, CloudFront, TLS and CI/CD — from first commit to production.
  • ·Delivered the map-driven React frontend too: MapLibre GL, TanStack Query and Tailwind, consuming the same APIs I designed, so the contract between the two halves was never a negotiation.
PythonFastAPIPydanticPandasMongoDB geospatialRedisReactMapLibre GLTypeScriptAWS

built here

also

Backend engineering for DOT Solutions on a school management platform, and product work across Villaja — delivered as reviewed, merged pull requests rather than as a job title.

// projects/

Selected Work

Four pinned projects, chosen for what they demonstrate rather than what they are: a funded Python platform with real users, a researched LLM analysis pipeline, a distributed system built to fail correctly, and a developer tool shipped as a product. The Python work leads because that is where most of my recent engineering sits. Each one has its architecture drawn out.

15 system-design diagrams21 projects documented

Pinned

SmartSustain

01
PlatformIn productiondiagrams

CGLS Technology · lead engineer · Innovate UK funded

An Innovate UK funded Python and FastAPI platform that scores the sustainability of housing development sites, used by planning assessors across five West Yorkshire councils — backend, geospatial data model, scoring engine, AWS and the React frontend, all mine.

700+

sites scored

5

councils served

~70%

less manual reporting effort

FastAPI backend with Pydantic boundaries and async background jobs · MongoDB with 2dsphere geospatial indexing · per-dataset Python loaders and domain processors with Pandas · weighted 4-pillar scoring engine with an explain endpoint · Redis caching over expensive spatial computations · LLM assistant grounded in scored data · automated PDF reporting · React + MapLibre GL frontend · AWS EC2/S3/CloudFront

PythonFastAPIPydanticMongoDBMongoDB geospatialRedisPandasReactTypeScript+2
Python2025 – 2026

TD Agent

02
AI EngineeringResearchdiagrams

MSc dissertation · Leeds Beckett University

A Python LLM-based technical-debt analyser, scored in the same unit as SonarQube so the two are directly comparable — the empirical core of an MSc dissertation, benchmarked across ten repositories.

10

repositories benchmarked

10

debt categories scored

~73%

above SQALE on the same codebase

Python analysis pipeline · Git history sampling at configurable intervals · per-file churn and hotspot analysis · token-budget-aware prioritisation within an 80-file / 400k-character budget · Gemini analysis behind a free-tier rate limiter · FastAPI background jobs with live progress polling · Pandas over the results for longitudinal analysis · Next.js dashboard · CSV export and standalone HTML reports

PythonFastAPIGeminiPandasGitPythonNext.jsTypeScriptTailwind CSS
Python2026

Fetch

03
Distributed SystemsActive developmentdiagrams

Personal engineering · open source

A polyglot microservices food delivery platform — Python/FastAPI and Node.js/TypeScript services side by side — built to solve distributed-systems problems properly: distributed transactions, exactly-once effects over at-least-once delivery, and failure isolation that does not cascade.

6

services, 2 languages

11

event types over one exchange

5

provisioned dashboards

6 services across Python/FastAPI and Node.js/TypeScript · database-per-service PostgreSQL · RabbitMQ saga with outbox, inbox, retry queues and DLQs · hand-written OpenTelemetry tracing to Jaeger in both languages · Prometheus + 5 provisioned Grafana dashboards · Kubernetes with HPA/VPA · Terraform for kind and EKS

PythonFastAPIPydanticSQLAlchemyTypeScriptNode.jsExpressPostgreSQLRabbitMQ+8
Python2026

Wevna

04
Developer ToolActive developmentdiagrams

Open source · TypeScript monorepo at 1.0

A local-first runtime dashboard for Node.js backends: every HTTP request, SQL query, Redis command and console.log, streamed live and correlated back into the request that caused it.

6

packages, one frozen protocol

0

bytes of network egress

1.0

with a published stability contract

pnpm + Turborepo monorepo, 6 packages · frozen @wevna/protocol contract · AsyncLocalStorage correlation context · opt-in pg/redis/fetch instrumentation behind a stable plugin API · Fastify server with WebSocket transport · deterministic performance analysis (no LLM) · React dashboard · session record and replay

TypeScriptNode.jsFastifyWebSocketsReactTurborepopnpmBiome
TypeScript2026

Also built

SDKdiagrams

A Python SDK giving one consistent storage interface across AWS S3, Google Cloud Storage and Cloudflare R2 — swap providers by changing a single string.

Pythonboto3AWS S3GCSCloudflare R2
Platformdiagrams

The backend of a social live-shopping marketplace — orders, payments, wallets, logistics and real-time auctions — architected and owned end to end at up to 50,000 concurrent users.

Node.jsExpressJavaScriptMongoDBWebSockets
Platform

A services marketplace built end to end: a 23-module TypeScript backend with an agentic AI assistant, plus web, admin and React Native clients.

TypeScriptNode.jsExpressMongoDBZod
Platform

A school management platform — academic sessions, timetables, class and subject assignment, student records and lesson notes — delivered ticket by ticket through review.

TypeScriptNode.jsMongoDBpnpmAWS SES
AI Engineering

An AI-powered Nigerian real estate intelligence platform, built so the model reasons over live market data instead of hallucinating prices.

Node.jsExpressTypeScriptMongoDBOpenAI
Developer Tool

A near-zero-dependency CLI that turns .env files from tribal knowledge into a schema a team can validate, audit and generate types from.

TypeScriptNode.jsnpm
Developer Tool

A typed TypeScript CLI and library that scrapes and parses Google, Bing and DuckDuckGo into clean structured JSON.

TypeScriptNode.jsJest
Distributed Systems

A fitness platform decomposed into five independently deployable TypeScript services: auth, user, workout, payment and notification.

TypeScriptNode.jsMicroservices
Platform

Internal platforms for a private aviation business: an HR system, flight scheduling and crew rostering, and the customer-facing booking product.

Next.jsReactNode.jsTypeScriptVue.js
Platform

An e-commerce marketplace shipped across web and mobile, with published apps on both the App Store and Google Play.

JavaScriptTypeScriptReactReact NativeNode.js
AI Engineering

An open AI tool suite for online sellers: bulk catalogue conversion with automatic category mapping, plus AI copywriting and product discovery.

TypeScriptNext.jsOpenAI
Systems

An ARM processor implemented in software in C — fetching, decoding and executing real machine code, with a disassembler on the side.

CARM Assembly

// apps/

Apps on the Store

4 React Native apps shipped and live on the App Store. Two of them run on backends I architected myself, which is the part I care about: designing the API and then being the one who has to consume it on a phone, on a bad network, in front of a real user.

React Native · iOS4 published listings
Javeln app icon

Javeln

Social marketplace for independent service providers

BusinessSocial Networkinglive on App Store
Javeln screenshot 1
Javeln screenshot 2
Javeln screenshot 3

A free social marketplace for hairdressers, barbers, nail technicians and other independent service providers: post your work, take bookings and payments from the post itself, and manage inventory and clients in one place. I architected and built the whole product — the 23-module TypeScript backend, the agentic AI assistant, the web and admin consoles, and this React Native app.

  • ·Booking flow straight off a post — browse the feed, pick a slot, pay, without switching apps.
  • ·Real-time chat between provider and client over Socket.io, sharing the backend’s messaging module.
  • ·Wallet, transaction history and Stripe Connect payouts surfaced natively for vendors.
  • ·Social feed and stories, so a provider’s existing following becomes their booking funnel.
React NativeExpoTypeScriptSocket.ioStripe
v1.01released July 2026JAVELN LTD
Auqli: Live & Shoppable Videos app icon

Auqli: Live & Shoppable Videos

Live shopping and shoppable video marketplace

ShoppingPhoto & Videolive on App Store
Auqli: Live & Shoppable Videos screenshot 1
Auqli: Live & Shoppable Videos screenshot 2
Auqli: Live & Shoppable Videos screenshot 3

Live shopping and short shoppable videos — join a seller’s livestream, ask questions in real time, and buy during the stream, or scroll product videos and tap to buy. Every screen in this app is served by the marketplace backend I architected: the order lifecycle, wallet, multi-carrier logistics, and the WebSocket layer behind live auctions and bidding, built alongside the mobile engineers consuming it.

  • ·Live streaming and in-stream purchase, backed by the session management and server-side video processing I built.
  • ·Real-time auction bidding over WebSockets with a REST fallback, so a dropped socket on a flaky network never costs a bid.
  • ·Buyer wallet — balances, top-ups, held funds and transaction history — surfaced natively.
  • ·Order tracking across three payment and logistics providers, with the state machine behind it designed end to end.
  • ·Ran at up to 50,000 concurrent users at peak.
React NativeWebSocketsAgoraNode.jsMongoDB
v2.1.0released April 2025Auqli

// github.live

GitHub

Pulled in real time from the public GitHub API for @boluwatifeajayi.

contributions in the last year

Achievements

Pro
Pair Extraordinaire×2Pull Shark×3QuickdrawYOLO

Organizations

commercejetelitesgenVillajaFalconAeroAuqliDOT-Solutions-Ltdatletix-microserviceswevna
Recently pushed

Languages

stars given

followers

// open-source/

Open Source

Fixes and features sent upstream to projects I actually use. Most of it is Python — the OpenAPI spec generator inside APIFlask, and a scraping library's logging behaviour — plus work on the AWS Cloud Development Kit, a Node scheduler and a storage SDK. Every status badge below is fetched live from GitHub, so nothing here can quietly go stale or overstate itself.

PR

apiflask/apiflask

#760

A lightweight Python web API framework

Register nested Pydantic schemas used in parameter locations

Nested Pydantic schemas used in parameter locations were not being registered, so they went missing from the generated OpenAPI document. Fixed in the spec-generation path so the document reflects the shape the API actually accepts. Merged upstream.

PR

apiflask/apiflask

#761

A lightweight Python web API framework

Support response headers in @app.doc(responses={...})

Extended the documentation decorator so a route can declare response headers alongside response bodies, closing a gap between what an API actually returns and what its OpenAPI spec describes.

PR

bisohns/search-engine-parser

#191

Search engine result scraping for Python

fix: suppress noisy fake-useragent warning logs

The library emitted third-party warning logs on every call, polluting the output of anything embedding it. Suppressed at the source rather than pushing the workaround onto consumers.

PR

aws/aws-cdk

#38401

AWS Cloud Development Kit

feat(rds): add SqlServerEngineVersion constants for engine v17

SQL Server 2025 (engine v17) became available on RDS with no corresponding constants in SqlServerEngineVersion. Opened through issue discussion, carried through design decisions and AWS maintainer review, including follow-up compatibility discussion around the new SQL Server Developer editions.

PR

haydenbleasel/files-sdk

#128

A unified storage SDK for object and blob backends

Infer content type from the key when listing S3-compatible buckets

Listing an S3-compatible bucket returned objects with no usable content type, because the list API does not include one. Fixed by inferring it from the object key, so listed objects carry the same type information as fetched ones.

PR

kelektiv/node-cron

#1075

Cron for Node.js

fix(crontime): fall back to UTC when resolved timezone is invalid

An invalid or unresolvable IANA timezone string broke schedule resolution outright instead of degrading. Now falls back to UTC, so a bad config value costs you the timezone rather than the scheduler.

Packages of my own

Libraries and tools built to be used by other people, with the documentation, typed surfaces and test suites that implies.

// contact.json

Let's Work Together

Always interested in discussing Python backends, distributed systems, cloud infrastructure, and interesting technical problems. Currently open to full-stack, backend and platform engineering opportunities.

contact.json

{

"email": "bolu4good@gmail.com",

"phone": "+44 7350 169537",

"location": "Leeds, UK",

"availability": "open to remote opportunities",

"socials": {

"github": "@boluwatifeajayi",

"linkedin": "@bolu-ajayi",

"twitter": "@boluajy"

}

}

available for work