Hey, I'm Kea.
I build backends.

I'm a software developer in Gauteng. I mostly work on APIs and the databases behind them.

backend_profile.json
{
  "role": "Software developer",
  "based_in": "Kempton Park, Gauteng",
  "languages": ["Java", "Python", "TypeScript"],
  "data": "PostgreSQL",
  "cloud": ["AWS", "Azure"]
}

Some things I've built

Hackathon projects, written up from the backend side.

Mint Uptime Exchange

Flags machines that are likely to fail and gets the repair approved and booked before production stops.

The backend works out what a breakdown would cost and gets sign-off from ops and finance. Then it reserves the parts and assigns a technician. Every repair runs through a 14-step workflow saved in the database, and Server-Sent Events push updates to the frontend.

Data
Everything lives in PostgreSQL, from the machines and alerts to the work orders and the audit trail.
Control
Logins use JWTs. Each role's permissions come from the database and get checked on every request.
  • TypeScript
  • Express
  • Prisma
  • PostgreSQL
  • SSE
  • Vitest

WattWise

Tracks household electricity use and links it to municipal fault reports and technician call-outs.

An Arduino reads the meter and a small Python script sends the readings to a FastAPI service, which saves them in PostgreSQL. Residents, municipal teams and technicians each get their own flow in the API. If the hardware isn't connected, the frontend switches to mock data.

Pipeline
The Python bridge keeps the serial hardware code out of the web API. It just forwards readings over HTTP.
Access
There's a USSD-style flow too, so you can report a fault without a smartphone.
  • Python
  • FastAPI
  • PostgreSQL
  • Arduino
  • React
  • TypeScript

CivicLens AI

Take a photo of something like road damage and it drafts a report for the municipality.

A FastAPI endpoint checks the photo, sends it to Gemini and makes sure the answer matches a Pydantic model. If Gemini fails or isn't set up, the app falls back to demo data and labels it as demo data.

Boundary
Reports are drafts for a person to check. The app doesn't send anything to the municipality itself.
Failure mode
I can still demo it when Gemini is down, and nobody mistakes the fallback data for a real result.
  • Python
  • FastAPI
  • Pydantic
  • Gemini
  • Cloud Run
  • Pytest

Experience

  1. Backend Developer (Team Lead)

    Gimsoi (Pty) Ltd, Cape Town (remote)

    Led the backend team on a production business app. I guided the technical decisions and the team's day-to-day work. Node.js, PostgreSQL, Docker and GitHub Actions.

  2. Systems Development

    Dynamic DNA, Johannesburg

    Trained in C# and object-oriented programming, from requirements all the way to testing and release. I also did AI-assisted development and prompt engineering, plus Azure and networking fundamentals.

Competitions

Most of my projects start at hackathons. These are the results I'm proudest of.

  1. 1st

    Dynatrace AWS GameDay

    Team win, Johannesburg, 2026

  2. Won 3×

    Youth Tech Expo G13 Hackathon

    Most recently in 2026

  3. 4th

    Zindi Data Challenge

    Johannesburg, 2026

  4. 4th

    Entelect Hackathon

What I work with

Tools I use, by area
AreaTools
LanguagesJava, Python, JavaScript, TypeScript, SQL, C#, C++
BackendSpring Boot, FastAPI, Node.js, Express, REST API design, Prisma, PostgreSQL
Cloud & DevOpsAWS, Microsoft Azure, Docker, Docker Compose, GitHub Actions, CI/CD, Zoho Catalyst, Linux, Git
SecurityJWT authentication, role-based access control, CSRF protection, rate limiting, input validation
OtherNetworking fundamentals, AI-assisted development, prompt engineering, API testing with Postman

I started coding at 16

My first lines of code were HTML, CSS and Java on SoloLearn. These days I'm doing a BSc in Computing at UNISA and building backend projects on the side.

The bit I enjoy most is working close to the data, and figuring out why something broke when it does.

Let's talk

I'm open to backend roles, and always happy to connect with other devs.