Portfolio · Updated October 2026

Socheat Chea

AI Builder

Siem Reap, Cambodiasocheatsac7@gmail.comlinkedin.com/in/socheat-chea-6582a176

I build production software with AI coding agents, and I run it myself. Claude Code writes the code, Codex audits it independently, and I write the specs, set the guardrails, make the decisions and do every deploy. In 2026 this process put five systems into production, from a real-time crypto trading platform to a loyalty program used by a salon’s customers.

Before this I spent eight years in business roles: B2B sales for a corporate e-learning company, market research for clients around the world, digital marketing, and hotel online sales. I hold an MBA in International Business. That is why my AI work starts from a real business problem and ends with something people can use every day.

5systems live in production
1,000+commits across 7 product repos
6,500+automated test functions
200+independent AI audit verdicts

How I work

One AI builds, another AI audits, and I stay in charge

Every change starts as a written plan and passes two independent checks before it reaches real users.

  1. 1

    Write the card.Me
    Scope, what must not change, and the bar it has to pass. Written before any code.

  2. 2

    Pre-build audit.Codex
    Reads the real code and the card, then returns PASS PASS WITH CONDITIONS or FAIL.

  3. 3

    Build.Claude Code
    Implements the change switched off by default, adds tests, and hands back a diff with a report.

  4. 4

    Post-build audit.Codex
    Checks the diff and every claim in the report. A FAIL sends it back to step 3.

  5. 5

    Deploy and watch.Me
    I deploy and switch features on by hand, then check the live data.

  • The auditor can’t edit code.Codex can only write to a folder outside every repository. It’s a sandbox setting, not a request.
  • The builder can’t touch production.Claude Code is blocked from pushing code, logging into servers, restarting services or reading secret files.
  • Agreement isn’t proof.Two AIs agreeing is two opinions. Changes to live behaviour are proven with real forward data.

Real examples from the review record

  • FAIL Claude’s tests mocked out the code under testSo a real crash never ran during testing. Its report also made a false claim. Fixed and passed in round 2.
  • FAIL A safety limit failed open after a restartDuring a database outage the limit stopped working, even though all 69 tests were green. Fixed before release.
  • FAIL A payment QR code broke on one Python versionCaught because the tests run on two Python versions. Production used the one that broke.

More than half of first-round audits come back FAIL. That is the process working. Used on 3 projects with 130+ planned changes in total.

Selected work

Six systems, five of them live

Search memory for AI coding agents (RAG)

Working, measuredOct 2026720 documents · 55 test questions · 458 tests

A private search engine over 720 of my own documents, so Claude Code and Codex find past decisions before they build. Five search methods, measured on 55 questions frozen before the engine’s search code.

  • Measured on held-out questions. On 9 English in-scope questions held out from tuning, the chosen method matched the answer key in its top 5 section groups for 7 of them (77.8%). The target was 8.
  • Five search methods compared: meaning search, keyword search (BM25), the two merged by rank, a router that uses the merged list when a question names an ID, and a cross-encoder reranker, chosen by a rule written before the first run.
  • Local and private. PostgreSQL with pgvector on my own PC; no cloud database and no outside embedding API. Before storage, pattern-based rules leave out files that look like credentials or customer records and blank out recognised secrets; they can miss things.
  • Audited at every step. Codex audited each of the six build cards: 13 rounds, 11 FAIL and 2 PASS. Each FAIL ended in a fix or a decision I recorded.

Hardest problem

Tuning on the questions I report on made search look better than it is. Improving search raised the top-5 score on the 29 open questions from 79.3% to 86.2%, with more text in each result. On 9 questions held out from tuning it scored 77.8%: close to the untuned run, but on different questions, and one short of my target. Without the sealed set, I would have reported 86.2%.

Tech: Python, PostgreSQL + pgvector, bge-m3, BM25, bge-reranker-v2-m3, pytest

Read the case study

K+ crypto trading platform

Live, real moneyMar–Sep 2026480 commits · ~111k lines · ~4,000 tests

Three services that stream live order data from four crypto exchanges (Binance, Bybit, OKX, Hyperliquid), score it with a rule engine, and place real trades on Bybit. A demo copy runs the same code, so every change is tested on demo before it goes live.

  • Data collector for 7 live exchange feeds and 6 coins, updated every 5 seconds and served over a signed private API.
  • Signal engine that checks every trade idea against a chain of rules. Restructured from one 3,858-line file into six packages, with parity tests checking that its decisions stayed identical.
  • Trade executor with safety first: every entry is followed straight away by its stop-loss, with a market close as the planned response if the stop is rejected, plus a kill switch and checks against the exchange every 30 seconds.
  • A/B test harness that pairs demo and live trades and compares them with a proper statistical test.

Hardest problem

The data collectors were silently dropping trades. Five of seven feeds kept only the last trade in each batch from the exchange. I had counters added first to measure it: 65–81% of trading volume on two exchanges was being lost. After the fix, all older data was marked as pre-fix and kept out of any recalibration.

Tech: Python (asyncio), WebSockets, FastAPI, SQLite, pandas, Bybit API, PM2, cron, Telegram alerts

Read the case study

LinkedIn content agent

Live, weeklySep 2026, 10 days to launch44 commits · 100 tests

An AI agent that drafts LinkedIn posts teaching Cambodian business leaders how to use AI in real work. It writes each post and its image, checks them, and sends them to me in Telegram. Nothing is published until I approve it. My LinkedIn posts about AI at work are drafted by this agent.

  • Structured output. The model must return a strict JSON format, and every answer is validated before use.
  • Automatic quality checks. Rules catch made-up stories, promised results and sales language. A failed draft goes back to the model with the exact problems, up to three tries.
  • Facts with sources. Every number in a post is matched against a list of sourced facts and shown to me before I approve.
  • Contained AI. The model runs locked down, with no internet tools and no access to publishing passwords.

Tech: Python, Pydantic, Codex CLI (first version on the Claude API), Telegram Bot API, SQLite, Typefully

Read the case study

Salon loyalty bot

ខ្មែរ · EN

Live with customersAug–Sep 2026, live within six weeks303 commits · 4,124 tests

A Telegram loyalty program that replaced paper stamp cards for a salon in Cambodia. Staff give points at the counter. Customers check their points, rewards and a personal QR code in Khmer or English.

  • A points record that can’t be edited. The database itself blocks changes and deletions, and corrections are added as new entries, like accounting.
  • A simple staff flow: enter the amount, preview, confirm.
  • Khmer first. All Khmer text is written and approved by the owner.
  • Tested hard. Deliberate bugs are planted after each change to prove the tests catch them. The last two changes caught 77 of 77 and 34 of 34.

Tech: Python, aiogram, PostgreSQL, SQLAlchemy, Alembic, pytest, GitHub Actions

Read the case study

Ball Khmer football bot

ខ្មែរ · EN

LiveFeb–Aug 2026201 commits · 845 tests

A Telegram bot for Cambodian football fans with live scores, fixtures, a prediction game, match alerts and a paid VIP tier, in Khmer and English.

  • Prediction game with points, streaks, badges, a monthly leaderboard and referral codes.
  • Live alerts checked every 60 seconds during matches and sent when a score changes, and a morning preview in each user’s language.
  • Prediction tracking. Match predictions come from an outside ML service. The bot saves them before kickoff and records results after, so accuracy can be measured honestly over time.

Hardest problem

When the data provider failed, the bot kept the empty answer, so a busy day could show “No matches today” and the 8 AM preview could reach every user without its predictions. Now it says the data is unavailable instead of guessing, and the audit caught two more timing bugs before release.

Tech: Python, python-telegram-bot, SQLAlchemy, SQLite, Redis, APScheduler

Read the case study

Crypto news brief

LiveSep–Oct 202637 commits · 283 tests

A private Telegram news service: two daily digests plus 24/7 alerts on hacks, exchange outages and US regulation, collected from 11 free sources with a source attached to every item.

  • No AI where it isn’t needed. Simple rules handle selection today. An AI model will be added only when a test shows it improves the result enough to justify the cost.
  • Tested on real output. When a review of live digests failed on quality, version 3 fixed it by merging duplicate reports of the same incident into one story.

Tech: Python, SQLite, systemd timers, Telegram

How I test ideas

Plan the test first, keep the “no” answers

Before changing a live system I write down the test in advance: what I expect, how I’ll measure it, and what result would prove me wrong. Most answers were “no”, and keeping them stopped bad changes from going live.

QuestionMethodResult
Can smarter profit targets fix exits?121 rules tested on separate past and future data0 of 121 passed
Is stop-loss placement the problem?Studied every winning and losing trade, replayed 7 rulesStops were fine
Does the one rule that survived hold up live?Ran it on demo with an automatic kill switch, then A/B against liveRetired
Do entries come too late after a market shift?Statistical timing test on 162 signalsNo effect

Experience

Business roles before building with AI

  • Jan 2022 – now

    Founder

    The Knowledge Plus · Cambodia

    Crypto market education: daily videos, chart explanations and training. Since 2026, I’ve also built and run the K+ trading platform and the bots above.

  • Jan 2023 – now

    Digital Specialist

    Ti-Phsar · Cambodia

    Websites, social media, paid ads and hotel yield management for clients.

  • Jan 2020 – Apr 2025

    Freelance Market Researcher

    Ravenry · Cambodia

    Competitor research, data gathering, marketing analysis and content writing for clients around the world.

  • Nov 2019 – Nov 2020

    Business Development Representative

    Speexx · Thailand

    B2B sales for a corporate e-learning company. Found decision-makers, set up meetings with company leaders, and handled negotiation using HubSpot, SalesLoft and LinkedIn Sales Navigator.

  • Jan 2018 – Sep 2019

    Market Research Analyst (part-time and internship)

    Canvassco · Thailand

    Desk research, competitor and trend reports in English, and data analysis in Excel and PowerPoint.

  • Jun 2017 – Nov 2018

    Social Media and Online Marketing Assistant Manager

    Chan Angkor Boutique · Siem Reap

    Online and seasonal promotions, and hotel booking channels (Expedia, Booking.com, Agoda, Airbnb).

Education

Degrees and training

  • MBA, International BusinessPanyapiwat Institute of Management, Thailand · 2020–2022
  • BBA, International BusinessDhurakij Pundit University, Thailand · 2016–2019
  • Information Technology trainingUniversity of South-East Asia · 2015–2016
  • English for General EducationAustralian Centre for Education · 2014–2016

Languages

I work in English

  • EnglishFull professional
  • Khmer (ខ្មែរ)Native
  • ThaiElementary

Skills

What I work with

AI coding agents
Claude Code, Codex CLI, project instructions (CLAUDE.md, AGENTS.md), custom skills, sandbox and permission setup, builder–auditor review loops
LLM applications
Structured JSON output, automatic validation and retry, human approval steps, prompt caching, running models safely
Backend
Python, FastAPI, Telegram bots (aiogram, python-telegram-bot), PostgreSQL, SQLite, Redis, SQLAlchemy, REST and WebSocket APIs
Operations
Linux servers, PM2, systemd, cron, GitHub Actions, backups, monitoring and alerts
Testing and data
pytest, mutation testing, A/B testing, statistics, pandas, Excel, market research
Business
B2B sales and negotiation, digital marketing, customer relationships, staff training

Contact

Let’s talk

I’m open to AI Engineer roles, and to working with businesses that want AI to take real work off their team. Email is the fastest way to reach me.

Email
socheatsac7@gmail.com
LinkedIn
linkedin.com/in/socheat-chea-6582a176
GitHub
github.com/socheatcambodia
Based in
Siem Reap, Cambodia (UTC+7)