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.

ApproveHR · assistant

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.

My part: the assistant's query engine · TypeScript, Prisma · approvehr.io ↗

Musa · employee

ApproveHR assistant telling an employee it has no salary information

Fatima · HR manager, with payroll access

ApproveHR assistant giving an HR manager the same salary

Real screens: the same question, "How much does Ngozi Eze earn?", on a demo company. For Musa, the salary was never given to the model.

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

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.

My part: the idea and the build · TypeScript, Prisma · approvehr.io ↗

ApproveHR fairness check review queue showing a mark 22 points below its evidence
Real screen: the review queue on demo company data. Every flagged mark needs a decision before it's published.
6ways to group people, from gender to department
5people minimum before a group is shown
0names sent to the model

Kowane · 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.

My part: all of it · Python, LangGraph, React · kowane.com ↗

A case from the suite:

The tempting answer

What passes

34cases through the real agent
14categories, incl. refusal and safety
3tries to fix a bad query, then it says so

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 an LLM writes the summary in the background while you get on with your day.

My part: lead backend · TypeScript, BullMQ, Textract · a private client system

Demo, with a 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 the model 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.

75endpoints under role-based access
6roles, with confidentiality tiers
120kcharacters at most, sent to the model per summary

Android · device-owner app

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

My proudest one. 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.

My part: all of it · Kotlin, Android device-owner APIs

The app's Now screen during Work and Free time
From the design file: the app's Now screen during Work and Free time.
5safter each run, the phone froze the app
4standard fixes tried, none of them held
1thing the freezer respects: a widget

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. schull.io ↗

TypeScript · Express · AWS
Spotlight Creative Hub

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

Django · Paystack
Trade Height Sweden

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

React · Express · MySQL
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 ↗

Python · spaCy
ChunkIt

Telegram bot that splits big files without recompressing them. Built because I couldn't send my uncle a video. Live, with real users. GitHub ↗

Python · Telegram

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'm a builder first. Give me a problem and I'll want the backend, the AI and the screen it all ends up on.

What I care about that a lot of engineers skip is the person using it. When I started working with bigger teams, I was honestly baffled that some engineers wait for a product manager to tell them what a good experience is. Complex engineering should feel simple to whoever uses it.

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.