Foo Fang Rhui

Hi, I am

FooFang Rhui

AI Software EngineerAI Automation Engineer

I build AI systems for jobs where being wrong is expensive. The limits are written into the code itself, and nothing spends money or goes public until a person says yes.

Scroll
01 — About

The through-line

Summary

Twenty-five systems, built for companies, for competitions and for myself. Nearly all of them do the same thing in a different setting. Something messy goes to a group of AI specialists. Each one looks at a single part. Their answers are pulled into one conclusion you can defend. A supplier’s bid becomes a scored comparison. A support call becomes a solved ticket. A share price move becomes an explanation of what caused it.

The work is in everything built around the AI. Nothing goes live or spends money on its own. Adverts are created switched off, replies wait for approval, and spending limits sit in ordinary code that no clever wording can talk past. Every source is checked again before it is quoted. Every image and video shows what it cost in ringgit, and anything paid has a free fallback.

When a system does not know something, it says so, instead of inventing an answer that merely sounds right.

0
AI systems
built
0
Companies
built for
0
Competition
projects
0
Tests on one
project alone
02 — Selected work

Three systems, in depth

Three projects in full. Each one opens up to show the problem, the choices behind it and what was given up: the part you cannot see from the code alone.

01
6 agents
self-rewriting rules

Self-Learning Marketing Agent

In productionRakyat FintechPython · TypeScript691 files

Six AI workers in a line: one studies competitors, one plans, one writes posts, one makes adverts, one budgets and schedules, and the last one learns. It reads what rival companies are doing and finds the gaps. It writes ready-to-publish posts and adverts, then prices and schedules them against a budget. Finally it checks how they performed and rewrites its own rules for next time.

691
Files running live
6
Steps in the chain
0
Fake-data modes
Read the case study
Context

Rakyat Fintech, from July 2026, live and in daily use. I am the only engineer on it: the server side, the search behind it, the incoming data, the cost tracking and the dashboard the team works from.

The problem

A small marketing team needs to know what competitors are doing, and needs a steady stream of adverts and posts. AI tools give you the second without the first: the writing comes out polished and convincing but connected to nothing that actually worked. Meanwhile the advertising budget is the one thing that drains quietly and cannot be got back. Two dangers had to be designed out before anything else was built. Spending money without a person choosing to, and the system learning from writing it made up itself.

Key decisions
  1. Six separate steps, not one big instruction. Each step takes different information in and hands different work out. Asking one instruction to do all six blurs the joins where a person needs to step in, and those joins are exactly where approval belongs.
  2. Nothing publishes or spends on its own. Every advert is created switched off, every image and video shows what it really cost in ringgit, and the whole process stops at a draft. The system is allowed to propose, and nothing more.
  3. No practice data anywhere. Made-up test data would end up in the same store the system later reads from, quietly teaching it to trust its own inventions. Using only real data removes that route completely instead of trying to police it.
  4. Two kinds of learning, kept apart. One looks at what was published and rewrites the plan: what to talk about. The other scores each finished video for how likely it is to spread, and takes one reusable filming technique from every example it studies: how to shoot it. Mixed together they produce advice too vague to use.
Where it stands

277 Python files, 112 screen components and 122 written design documents. Alongside the main process there is Studio, a chat where you make or fix one advert at a time. It follows the same brand rules, and when you ask for a change it works out whether you meant the words, the picture or both, rather than remaking everything.

PythonFastAPIFAISSMCP ReactMeta Ads APIDockerFly.io
X25519ML-KEM
02
Hybrid PQC
self-attacking

QShield — Quantum-Safe Vault

HackathonCodex Hackathon 2026 · Kuala LumpurPython · Next.js

You can change a leaked password. You cannot change your Malaysian IC number. QShield locks those numbers away using two independent kinds of encryption at once, removes personal details before any AI reads them, and then keeps attacking itself to prove the protection still holds.

22k+
Lines of code
53
Separate functions
0
ID numbers left readable
Read the case study
The problem

After a break-in you can change a password. You cannot change a Malaysian IC number. It is issued once and identifies you for life. That changes who you are defending against. A stolen encrypted record is still worth having to someone who can only unlock it fifteen years from now. Normal encryption is a bet that the lock outlasts the value of what is inside, and here the value never runs out.

Key decisions
  1. Two locks, not one. A new kind of encryption built to resist future quantum computers is combined with the well-proven kind used today, so the data stays private unless both are broken. The new method is young and not yet battle-tested; the old one is trusted but expected to fall to quantum computers eventually. Picking either alone bets everything on a single assumption.
  2. The AI is never in the way of a live request. Four guards run constantly, blocking bulk data theft, spotting unusual behaviour, controlling what leaves the system, and overseeing the rest. All four are plain, predictable code. Anything that needs an AI to answer is something an attacker can slow down, confuse, or make expensive to run.
  3. Personal details are removed before anything is stored, not after. A readable ID number is never written anywhere a later search could reach it.
  4. It attacks itself, and the result is evidence rather than opinion. One AI tries to break into a sealed copy of the vault, but whether it succeeded is decided by a simple, unarguable check, not by the attacker’s own account. An AI marking its own work would fill the records with confident fiction.
  5. A source that does not check out is treated as an error. In a security tool an invented reference is worse than no answer at all, so it fails loudly instead of quietly carrying on.
Outcome

No readable personal data is held anywhere in the system. The part that matters most runs with no AI involved at all: taking a file in, finding the sensitive details, scoring the risk, locking it and unlocking it. The critical path has nothing that can make things up.

ML-KEM-768ML-DSA-65X25519 HPKE FastAPINext.js 16SupabaseDocker
03
16 specialists
9 knowledge stores

finance-agent — The Analyst Mind

IndependentPython402 files77 commits

A share-research system that explains why a price moved and studies a company the way a professional analyst would. The most important thing about it is what it refuses to do: it never suggests which shares to buy. You choose the companies. It tells you what caused the move, how confident it is, how much you could safely hold, and where every claim came from. If you ask it to pick for you, it says no, in writing.

1,400+
Tests, no internet
92%
Of the code tested
17
Design documents
Read the case study
The problem

Ask an AI why a share price moved and it will always give you an answer, usually a confident story about that one company, on a day the whole market happened to fall. The problem is not missing information. It is that polished writing looks exactly like real analysis by the time someone reads it, and where money is involved that gap is expensive. Anything supporting real decisions has to be able to say I cannot explain this one.

Key decisions
  1. It refuses to pick shares, and says so plainly. No list of suggestions, no ranking. A system that both proposes ideas and argues for them will always find an argument – removing the proposing removes the temptation.
  2. The numbers are separated before any story is told. Every price move is split into the part caused by the whole market, the part caused by that industry, and whatever is left over. It also reports how much it could not explain. That prevents the most common mistake in the field: blaming a company for a fall everybody had.
  3. The limits sit outside the AI. How money is shared out, and five separate caps on how much of one thing you can hold, are ordinary code. Limits written as instructions to an AI are suggestions that clever wording wears down; limits written as arithmetic simply refuse.
  4. Every prediction has a deadline and cannot be marked before it arrives. That keeps the scorecard honest, rather than a record of lucky guesses cashed in early.
  5. The tests run with no internet and no accounts. A simple stand-in replaces the AI. Tests that call a real AI service are slow, unreliable and cost money, so people switch them off, and a test nobody runs protects nothing.
Outcome

At least 92% of the code must be covered by tests before any change is accepted. That runs automatically on both Windows and Linux and on two versions of Python, alongside style checks, type checks, deliberately hostile inputs and a start-up health check.

Python 3.11/3.12PydanticFastAPIMCP Neo4jQdrantTimescaleDBpyright
03 — Portfolio

Everything else

Work delivered for companies, built at competitions, and made on my own, from 2025 to 2026.

Tender Evaluation Agent

SRKK AI Berhad · Client

Eight AI reviewers working together: two read every bid independently, then their scores are combined, compared, summarised and written up.

More

The scoring criteria come from the tender document itself rather than a fixed template, and every score points back to the exact line it came from. The result lands in an editor the team can change before sending.

Document Drafting Assistant

Energy utility · Client

A Microsoft Word add-in that reads a project’s decision documents and drafts the paperwork around them, so engineers stop retyping the same figures between files.

More

Five steps: plan, pull out the facts, check them, write, review. It can pause partway for a person to step in, then carry on where it left off.

IT Support Helpdesk Voice Agent

SRKK AI Berhad · Client

Picks up real IT support calls, solves what it can and passes the rest to a technician with the ticket already written.

More

It works out what the caller wants correctly 93% of the time across 19 kinds of request, and a supervisor can approve, edit or reject every reply before the caller hears it.

L&C Compliance Copilot

Medical devices · Client

Compliance staff ask a policy question in their own language and get back the exact rule that applies.

More

It works out which company and country you mean, finds the right policy, flags where two policies disagree, and answers in the language you asked in. Used across the Asia-Pacific region.

HealthLens AI

Microsoft AI Dev Days 2026

Photograph a food label and seven AI specialists each give a verdict, then a final one decides.

More

The seven are a doctor, a nutritionist, a food chemist, a fitness coach and others. Safety comes first: if the doctor or the halal check raises a problem, the answer is Avoid no matter how good the nutrition looks. Results appear on your phone one specialist at a time.

Google Ads Monitor + Agent

Rakyat Fintech · Production

A rebuild of Google’s own campaign dashboard, with an assistant that suggests changes to your adverts.

More

Every change is rehearsed first and needs a person to approve it. Where Google does not provide the data for a panel, the screen says so rather than showing a made-up number.

YokoYoko AI

MyHack 2026 · GDG KL · Team of 3

Matches mentors to start-ups in an accelerator programme and explains why each pairing scored the way it did.

More

It reads CVs from PDF files and listens to short introduction videos to build each profile. It then weighs up five things: industry, the help needed, how far along the company is, language, and how much time the mentor has.

MarioEval

Google DeepMind Featured Hackathon

A test that drops leading AI models into randomly built maze games where they can only see what is nearby.

More

It measures how well they plan ahead, remember what they have seen, and resist hidden instructions planted to trick them. Seven levels of difficulty.

Haze Agent

Open Agent Hackathon 2026 · Track 02 · TypeScript

Investigates why the air is bad over a Malaysian town, and shows the evidence behind every figure it gives.

More

Five specialists sit behind a manager that picks only the ones a question needs. One retrieves evidence, one judges how well the evidence supports a plan, one checks the sums independently, and one compiles the damage in physical, financial and social terms. The checker is not allowed to review its own work, and nothing falls back to stand-in data when a source is missing. Gaps in coverage are reported rather than filled. Built on LangGraph with Zetaris and NVIDIA Nemotron, 753 source files, 200 test files and 239 written design documents.

FraudShield

Personal project · Python + React

Scam-email detection built into a school’s Outlook mailboxes.

More

Before the AI reads anything, the system checks the technical signs of a forged sender and looks for web addresses designed to imitate real ones. When staff correct a wrong decision, it learns overnight and adjusts how cautious it should be.

Catalog Agent

SRKK AI Berhad · R&D

Ask about products in plain language and get real answers.

More

If your question could mean two things, it asks which you meant instead of guessing. It remembers where you left off, can replay how it reached an answer, and will alert you when a price changes.

SPM Tuition Tutors

SRKK AI Berhad · R&D

Malaysian SPM students ask a question and it goes to the right subject tutor: chemistry, physics, maths or biology.

More

Each tutor has real working tools, including a chemistry calculator and a physics motion solver, and a separate examiner sets practice papers based on what the student has already covered.

Shopee Review Analyst

Personal project · Python

Turns online marketplace reviews into competitor research.

More

It scans a whole product category cheaply and ranks items by how much they sell. Only the best sellers get their reviews read in depth. The bill follows the shortlist rather than the whole catalogue, and stops at a set limit.

UOW Buddy

Personal project · Next.js + Azure

A campus app for my own university: timetables, bookings, lost and found, wayfinding and an assistant that answers from real campus information.

More

Seventeen features for the Glenmarie campus, including events, announcements, transport, reminders and a wellbeing companion. Three separately registered institutions share that campus and each has its own handbook, so the design pins down who may see what before any of it was built. 103 design documents and decision records came first, and every open question carries a written default rather than a guess. The app itself is 748 source files with 301 test files, on Azure sign-in, Cosmos DB and blob storage.

Study Assistant Platform

Independent · Azure AI Search

Five tutors that answer only from a student’s own notes and slides, and can set quizzes and full mock exams then mark them.

More

If a paid service is unavailable, every feature falls back to a free version rather than breaking.

TalentBank Learning Wallet

TalentBank Hackathon 2026 · Team of 2

Badges earned at real events are recorded permanently on a blockchain.

More

A student gets proof of what they have done that cannot be faked or handed to someone else. Signing in with Google is enough, so there is no long secret phrase to lose. A phone app for students, a web dashboard for organisers.

SQL Database Agent

SRKK AI Berhad · R&D

Ask a database a question in plain English and get a real, working query back rather than a description of one.

More

It learns the shape of the database and a set of correct examples first. Built with a simple web page so people who do not write code can use it.

SQL Expenses Agent

SRKK AI Berhad · R&D

Ask questions about a spending table, or change it, just by typing normally.

More

It runs entirely on the computer in front of you, with no cloud service and no accounts, and firm limits on what it is allowed to change.

Life Expectancy Prediction

Python · Dec 2025

Predicting life expectancy in Malaysia from historical data, with the underlying maths written from scratch rather than taken from a library.

More

The training was checked to confirm it really settled on a good answer.

View repo →

Loan Default Prediction

Jupyter · Dec 2025

Predicting which borrowers are likely to miss repayments, comparing three different methods.

View repo →

Customer Churn Prediction

Jupyter · Dec 2025

Predicting which customers are about to leave, measured on catches and false alarms rather than raw accuracy.

More

They are judged on how well they separate risky from safe borrowers rather than on raw accuracy. When the thing you are looking for is rare, plain accuracy flatters a bad model.

View repo →

AI Content Detector

Python · Dec 2025

Tells AI-written text apart from human writing and shows how confident it is, through a simple web page.

View repo →
04 — Experience

Where I've shipped

Jul 2026 — PresentMalaysia · Hybrid

AI Software Engineer

Rakyat Fintech Sdn Bhd
  • Run a marketing system that learns from its own results, start to finish and live in production. That covers the server side, the search behind it, the data coming in from several sources, the cost tracking and the dashboard the team works from.
  • Joined up the whole cycle: study the competition, produce the adverts and posts, then feed the real results back so the next round is better.
  • Built our own Google Ads control panel with an assistant that proposes changes. Every change is rehearsed first and signed off by a person before it touches the live account.
PythonFastAPIFAISS MCPReactMeta Ads APIGoogle Ads API
Jan — May 2026Internship · Selangor

AI Automation Engineer

SRKK AI Berhad
  • Built and shipped more than ten live AI assistants for large companies in energy, healthcare, legal and technology.
  • Built systems that turn plain English questions into database queries. Also voice assistants that answer real calls with a person checking their replies, correct 93% of the time across 19 kinds of request.
  • Automated the clean-up of tens of thousands of company files for an electronics manufacturer across Asia-Pacific. The job could resume safely if interrupted, and every deletion was verified. Nothing was lost.
  • Used the company’s secure sign-in on every project, so no passwords or keys were ever written into the code.
LangGraphAzure AI FoundryCopilot Studio PythonTypeScriptEntra ID
2024 — 2027Expected

Bachelor in Computer Science, Major in Data Science

University of Wollongong Malaysia
  • Reading for the degree alongside full-time engineering work. The systems above were built in parallel with coursework.
05 — Skills

The toolkit

Running AI agentsCore
LangGraphLangChainAzure AI Foundry MCPCopilot StudioMicrosoft Agent Framework Multi-agent HITLVertex AI
Finding informationSearch
FAISSChromaDBAzure AI Search QdrantNeo4j graphNL2SQL SQLite FTS5Citation validation
LanguagesDaily
PythonTypeScriptJavaScript SQLPowerShellBash
Server sideServices
FastAPIasyncioPydanticNode.js WebSocketSSEPostgreSQL Cosmos DBSupabase
What people seeScreens
ReactNext.jsReact Native / Expo Tailwindshadcn/uiTiptapOffice.js
Security& encryption
ML-KEM-768ML-DSA-65HPKE / X25519 PII redactionJWT authSupabase RLS Prompt-injection defence
Cloud & sign-inPlatform
Azure OpenAIEntra ID SSOManaged Identity MSALMicrosoft GraphGCP Vertex AI Document AIBigQueryDocker
Machine learningApplied
scikit-learnpandasNumPy CalibrationThreshold tuningBenchmark design
06 — Practice

How I work

Measured on the projects where the care is easiest to see.

Evidence
1,400+
Tests that need
no internet
92%
Of the code
covered by tests
2×2
Systems and versions
tested on
0
Passwords written
into the code

On the share-research project every test runs without an internet connection. A stand-in replaces the AI, so the tests never need an account, a key or a bill. Before any change is accepted the whole set runs automatically on both Windows and Linux. It checks style, types, how much of the code is covered, a full end-to-end run and a batch of deliberately hostile inputs.

The habit running through all of it is deciding what happens when things go wrong before building what happens when they go right. A missing account, a blurry photo, a spent budget, data a service simply does not provide, or a prediction that is not due yet.

Let's build
something exact.

Most of this work lives in private repositories. I am happy to walk through any of it live, or grant read access on request.