Skip to content
SA
Software Engineer · Open to work

I build AI systems that automate real business workflows.

17-year-old developer from South Africa, specialising in AI agents, RAG systems, automations, and full-stack applications.

12 projects built9 live in productionFull-stack, front to back
Current focus

What I'm building right now

Not a list of skills. These are the actual problems I'm working through this month, and why they're the part that takes the thinking.

Building01 / 03

Agents that operate real tools, with a hand on the brake

An agent runtime that can read mail, move calendar events, and edit docs on your behalf. It sits behind an approval layer, so nothing irreversible happens without a human saying yes. The interesting part isn't the model call. It's the permission boundary around it.

  • TypeScript
  • LLM tool use
  • Node.js
  • Zod schemas
Refining02 / 03

Retrieval that answers from your sources, and shows its work

A RAG layer built for small knowledge bases where a wrong answer costs trust. It grounds every reply in retrieved passages and cites them, so you can check the source instead of taking the model's word for it. Right now I'm tuning chunking and re-ranking to cut hallucinations on messy internal docs.

  • Embeddings
  • Vector search
  • Re-ranking
  • Python
Shipping03 / 03

Turning brittle automations into typed, testable pipelines

Moving the workflows I first prototyped in n8n into plain code where the LLM makes the judgment call and typed functions do the actual work. Each step is testable on its own, so a change in one place can't quietly break the pipeline three steps down.

  • TypeScript
  • Workflow design
  • Queues
  • Postgres
Featured work

Three builds, taken apart

Each one solved a specific problem for real users. For each, here's what it fixed, how it's built, and the part that was genuinely hard to get right.

All projects
AI Quote Generator interfaceLive
AI AutomationDesigner & engineer2026

AI Quote Generator

Turns a customer's WhatsApp message into a professional quote in under a minute.

Problem
Service businesses lose jobs to slow quotes.
Architecture
InputServerOutput
The hard part
Messy real-world messages. Customer messages are vague and all over the place. Careful prompting and a fixed output shape turned that into quotes you can trust.
  • Next.js
  • TypeScript
  • OpenAI / model API
  • Server Routes
  • Tailwind CSS
FitCoach AI interfaceLive
AI AgentsFull-stack engineer & designer2026

FitCoach AI

A chat-based fitness coach that builds a real plan around your situation.

Problem
Most fitness apps give everyone the same plan, and a real coach costs more than most people are willing to pay every month.
Architecture
ClientServerEngagement
The hard part
Personal, not generic. The whole value is in the fit. Front-loading the questions is what made the plans feel like coaching instead of a lookup table.
  • Next.js
  • React
  • TypeScript
  • OpenAI / model API
  • Server Routes
  • Tailwind CSS
gAIns Budget Planner interfaceLive
Frontend EngineeringFull-stack engineer & designer2026

gAIns Budget Planner

A guided budgeting app that turns three questions into a money plan.

Problem
Most budgeting advice is either useless or expensive.
Architecture
ClientServerAI
The hard part
Advice that fits the place. Framing the income bands and tips for South African households is what stopped the output feeling generic.
  • Next.js
  • React 19
  • TypeScript
  • OpenRouter / OpenAI
  • Server Routes
  • i18n
How I work

A bias toward understanding, then shipping

I keep the probabilistic part and the deterministic part separate: the model makes judgment calls, plain code does the work. Everything below follows from that.

01

Understand the workflow first

Before I write anything, I want to see the actual job being done: the messy steps, the copy-paste, the thing everyone works around. Most of the real problem lives in details nobody thought to mention.

02

Design before I build

I sketch the data model and the boundaries between parts up front. Deciding what talks to what, and what's allowed to fail, is far cheaper on paper than halfway through the code.

03

Build quickly, in thin slices

I get one narrow path working end to end before widening it. A rough version you can actually click through tells you more in a day than a spec tells you in a week.

04

Iterate with the people using it

The first version is a question, not an answer. I put it in front of real users early and let what they actually do, rather than what they say, decide what changes next.

05

Ship, then harden

Getting it live is the start, not the finish. The errors, rate limits, timeouts, and monitoring are what separate a demo that works once from something you can depend on every day.

Build log

What I've been building, in order

A running record of what shipped and what I learned along the way. The most recent work is at the top.

  1. Shipped

    AI Quote Generator went live for a real business

    Paste a customer's WhatsApp message, get a branded quote back in under a minute. The hard part was pulling reliable job details out of messy free text, reliable enough to put a price in front of a paying customer.

  2. Shipped

    FitCoach AI reached production

    A coaching chat that gathers your situation before it advises, plus an XP layer built to get people past week one. Learned that the engagement loop mattered as much as the model behind it.

  3. Built

    A 3D product site that loads fast

    Built Robotext a brand site with real-time 3D that still hits its performance budget. Most of the work was making WebGL behave on mid-range phones, not making it look good on my machine.

  4. Built

    An executive assistant that touches real inboxes

    An agent that triages mail and schedules against a live calendar. This is where the approval-layer pattern I now reuse everywhere first earned its place.

  5. Learned

    Semantic search that answers from source

    Built an embedding-based search foundation so answers point back to real documents. This became the retrieval backbone under the assistants that came after it.

  6. Learned

    The schema-first tool-calling pattern clicked

    After a run of self-directed agent projects, I landed on giving the model a strict, typed tool schema and letting plain code do the work. Every agent I've built since starts from that boundary.

  7. Built

    Scrapers and browser automation that recover

    Wrote data pipelines and Puppeteer automations designed to retry and recover instead of falling over on the first timeout. Unglamorous, and exactly the part that decides whether a tool survives contact with the real web.

On GitHub

The work, in public

Live data pulled straight from GitHub: repositories, recent commits, and a year of activity.

@TenthRifle
15Public repos
0Stars earned
1Followers
2024On GitHub since
40 contributions in the last year

Open to work · South Africa · Remote

Have a workflow worth automating?

If you're building something that needs an agent, a retrieval system, or a full-stack app around it, tell me what you're dealing with. I'll give you an honest read on whether I can help.

saadally038@gmail.com