6.52° N, 3.38° E

I build AI and backends. Mostly because I can't help it.

I hate saying “I'm a software engineer.” It's true, it just feels like a box. I'm a builder. If I get an idea, I can't sleep until there's a prototype.

// Four years of it. No regrets, not even the all-nighters.

ApproveHR · the assistant's query engine

Ask it about someone's salary. It depends who's asking.

The AI never gets to decide who sees what. It only gets the fields the person asking is allowed to see. So even if it wanted to spill your salary, it can't. It never had it.

Ask as:

“How much does Ada earn?”

What the model is given

What it answers

An illustration with made-up people. The real catalogue is built from the asker's own permissions, per request, before the model sees anything.

47tests on the engine
2token budgets per org: daily and monthly
4trace levels, because traces hold pay data

Also in production: a public-holiday engine that works out Nigeria's holidays from their rules and checks the news for the Federal Government's Eid declaration.

ApproveHR · fairness check

Your manager rated you a 2. Your work says 4. Now someone notices.

This is my favourite thing on ApproveHR, and it's so beautiful. It looks at what people actually did, not who their manager likes, and flags ratings that don't match. No favouritism, whether it's your gender, your age, your department or just your manager.

Look at:

6ways to group people, from gender to department
5people minimum before a group is shown
0names sent to the model

The maths flags it, not the AI. The mismatch comes from evidence the manager doesn't control: measured objectives, peer feedback and past cycles. The AI only writes the note, and every flagged rating needs a decision before it's published.

Kowane · text-to-SQL evals

A query can run, return a number, and still be wrong.

Kowane answers a bank's questions about its own books. If it answers one wrong, confidently, I'm cooked. That's literally the whole product. Most AI apps get to say “AI can make mistakes.” This one doesn't, so I stopped relying on the AI alone and put tests and maths around it.

A case from the suite:

The tempting answer

What passes

34cases through the real agent
14categories, incl. refusal and safety
resultsare compared, not SQL text

And it runs on purpose: repeat runs to catch flaky answers, a baseline that fails the run on any regression, and a workflow to trigger before a prompt change or a model upgrade.

EDMS · document AI

Scanned paper in. A summary out.

EDMS is a document system for big organisations and government. The part I loved building: you upload a scan, OCR pulls the text out of it, and Gemini writes the summary in the background while you get on with your day.

Made-up memo.

1 · The scan

INTERNAL CIRCULAR 14/2026RECEIVED

2 · What OCR reads

INTERNAL CIRCULAR 14/2026
Resumption of Office Hours
All staff are to resume at 8:00am
from Monday, 2 November 2026.
Arrivals after 8:3O am will be
logged by the HR unit. Heads of
department to confirm rosters by
Friday, 30 0ctober.

3 · What Gemini writes

Office hours start at 8:00 from Monday 2 November. Late arrivals after 8:30 get logged by HR. Heads of department confirm rosters by Friday 30 October.

OCR → AITextract, then a BullMQ worker, then Gemini
swappablemodel provider, behind one interface
75endpoints under role-based access

Also on EDMS: I set up the codebase and its CI, built the access control across 6 roles, and an audit trail where every entry carries the hash of the one before, so a quiet edit breaks the chain.

Android · my proudest one

I stopped relying on willpower. So I built an app that runs my phone.

I wanted a system that gives me freedom but still keeps me disciplined. Not a cage. It's a device-owner app, so it really runs the phone: it keeps my sleep, my reading and my mornings on track, logs my hours without me checking the time, and nudges me about the people I'm meant to check on.

I've ranted about it to my whole family and all my friends. I even made a tiny version for my grandpa's phone, so he could sleep.

The hardest part: the phone kept deleting my alarms.

20:00:00.112 ScheduleReceiver run: next alarm 21:00 20:00:00.231 ScheduleReceiver alarm set 20:00:05.004 Hiber/hiber proxy alarm (uid=…, pkgName=com.tolu.dpc) 21:00:00.000 …………………………………… (nothing)

Reconstructed log. The Hiber line is the real one: TECNO's battery saver, quietly removing my alarms.

Range

Where I've shipped.

AI and backend are the spine. Tap a name to see the work.

Product

HR · fintech · edtech · government · hospitality · trading

Also built

One line each.

Schull LMS

Sole backend from the first commit: courses, quizzes, certificates and Paystack checkout, with signature-verified webhooks.

in production · AWS
Spotlight Creative Hub

Bookings, event tickets and food orders. One Paystack webhook, verified and idempotent, settles all four. Live

Django
Trade Height Sweden

Bilingual site with live metal and diamond prices cached in Redis, and a blog editor. Live

React · Express
Safescrow

Full-stack escrow: a six-state lifecycle, a wallet ledger, and a Paystack webhook that checks signature and source IP.

FastAPI · React
Scene Rec

Type a line, find the films where it's spoken, across 7,656 films. Next: embeddings, measured against the lexical baseline. GitHub

NLP
ChunkIt

Telegram bot that splits big files without recompressing them. Built because I couldn't send my uncle a video. GitHub

live · real users

Writing

Four I wrote up properly.

Experience

Where I've been.

Sep 2025 – now1 yr 2 mos
Schulltech · Software Engineer

AI and backend across ApproveHR, EDMS and Schull LMS.

Jan 2025 – Jun 20261 yr 6 mos
Freelance · Sole developer

Spotlight Creative Hub and Trade Height Sweden, both live.

Apr 2024 – Aug 20251 yr 5 mos
Safeboxx · Software Engineer

Automated savings billing on Celery and Redis, 500+ transactions a month. What the founder said ↓

Jan – May 20245 mos
JIA Outdoor Services · Contract

A Django marketplace API for billboard advertisers, load-tested with Locust.

2023
HNG IX · Backend finalist

Top 1% of 22,000+.

About

I'm Tolu.

I like to think of myself as a product engineer. When I started working with bigger teams, I was honestly baffled that a lot of engineers wait for a product manager to tell them what a good experience is. I think about the person using the thing while I'm building it. Complex engineering should feel simple to them.

I also have a knack for studying. I love getting deep into something until I actually understand it, and then I love it.

This year, outside the IDE

  • Study-maxxing. I want to go really deep on a few things this year.
  • Reading books again. I want to be intellectual again.
  • Gaining weight. I'm skinny and I'm working on it. Slowly.
  • My friends, my friends. They mean the world to me.
  • Revamping Àṣàrò for my friends. They didn't ask, but they'll thank me.
  • Going outside more.

People I've worked with

What they said.

We worked well together, so I will definitely refer you when someone next asks me for a backend guy.

Stanley OnwukaCTO, The Noti Company

This blew my mind. You've done an excellent job. I don't know what I was expecting, but I wasn't expecting this at all.

Chukwuemeka AwereFounder, Safeboxx

You did this?! This is incredible work.

Jane M.Operations Manager

Your quote goes here.

Contact

Let's build something. Or just talk.

Got an AI problem you're not sure can be done? Those are my favourite. Backend work too, I've built plenty of those.