Foo Fang Rhui

Hi, I am

FooFang Rhui

AI Software EngineerAI Automation Engineer

I build AI systems for jobs where being wrong is expensive — so 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-three systems built for companies, for competitions and for myself — and nearly all of them do the same thing in a different setting: take something messy from the real world, give it to a group of AI specialists that each look at one part, then pull their answers into a single 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 actually caused it.

What sets the work apart is everything built around the AI. Nothing goes live or spends money on its own: adverts are created switched off, replies wait for someone to approve them, and the spending limits sit in ordinary code that no clever wording can talk its way past. Every source is checked again before it is quoted, every image and video shows what it cost in ringgit, and anything that charges money has a free alternative for when the budget runs out.

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, finds the gaps, writes ready-to-publish posts and adverts, prices and schedules them against a budget, then checks how they actually 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, and the part that matters most – taking a file in, finding the sensitive details, scoring the risk, locking it and unlocking it – runs with no AI involved at all. 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 — and it says no, in writing, if you ask it to pick for you.

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 – and it 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, checked 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. 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

Sarawak Energy Berhad · 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. Five steps – plan, pull out the facts, check them, write, review – and 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. 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

Terumo APAC · Client

Compliance staff ask a policy question in their own language and get back the exact rule that applies. 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 – a doctor, a nutritionist, a food chemist, a fitness coach and others – each give a verdict, then a final one decides. 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. 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. It reads CVs from PDF files and listens to short introduction videos to build each profile, 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, then measures how well they plan ahead, remember what they have seen, and resist hidden instructions planted to trick them. Seven levels of difficulty.

FraudShield

Personal project · Python + React

Scam-email detection built into a school’s Outlook mailboxes. 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. 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. 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. It scans a whole product category cheaply, ranks items by how much they sell, then only pays to read reviews in depth for the best sellers – so the bill follows the shortlist rather than the whole catalogue, and stops at a set limit.

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. 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, so a student has proof of what they have done that cannot be faked or handed to someone else. Signing in with Google is enough – 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. 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. It runs entirely on the computer in front of you – no cloud service and no accounts – with 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, and the training 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 and judging them on how well they separate risky from safe borrowers rather than on raw accuracy.

View repo →

Customer Churn Prediction

Jupyter · Dec 2025

Predicting which customers are about to leave, measured on how many it catches and how often it raises a false alarm – because 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 – 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, and 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 JVCKENWOOD across Asia-Pacific, with the job able to resume safely if interrupted and every deletion 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, checking 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 — happy to walk through any of it live, or grant read access on request.