Data analyst with seven years across Business Intelligence and Data Analytics, now building
production LLM systems end to end — retrieval, grounding gates, governed agent execution and
automated evaluation. I decide with measurements rather than vendor claims, and the three
systems below are the evidence.
My experience, presented by the companion agent from the AI Console — narrated,
animated and rendered by the engine in section 02. Not a talking head, and not pretending to
be one. Every figure in it is on the CV.
Available for contract work
Three things I get hired to do
Available now, full time. Remote from Ho Chi Minh City — a full working day with Asia and Australia, and the whole European morning. Scoped builds, fixed-price audits, ongoing by the month.
Make an LLM system trustworthy
Retrieval that finds the right passage, a grounding gate that refuses claims the source does not support, and an evaluation harness that tells you when a prompt change made things worse — instead of a customer telling you.
79% → 93% retrieval accuracy, measured 3,600 decisions in one evaluation
Put agents to work safely
Coding and ops agents running real tasks under written rules: forbidden actions stop and ask a human, work happens on an isolated branch, and nothing lands without a reviewed diff.
8 active projects governed 117 test modules, TDD
Turn data into decisions
Seven years of it: pipelines over terabytes a day, dashboards people actually open, and churn / LTV / segmentation models pointed at a number someone is accountable for.
−80% average cost per install +30% monthly game revenue
7 years at VNG Corporation30+ game titlesterabytes/daySEA market
Run cost is a design constraint, not an afterthought. Everything here runs on a subscription you already pay for or on models running locally — not a per-token bill that grows with your success. That is a measurement habit rather than a preference: benchmark the free option against the paid one and pick on the result. 8.8% word error rate, chosen voice. 79% → 93% retrieval accuracy, measured.
A local control plane that runs one person's whole engineering loop. It is not a research tool
with an agent bolted on: research is step one of five. The console crawls and reads, routes each
finding to the project it belongs to, turns a goal into an approved plan, then hosts the
coding agents itself — streaming their work, holding any call the project's written
constitution forbids, and reviewing the diff before it merges. Eight active projects run
under it — the two below among them.
STEP 1ReadCrawls sources nightly; an LLM reads each repo and returns a verdict, not a link.
STEP 2RouteEach finding matches a project by that project's own rules, and the rule stays visible.
STEP 3PlanA goal becomes an ordered task list with a role per task. One human approval, in writing.
STEP 4BuildAgents run in-process in a git worktree, under a constitution that can stop them mid-turn.
STEP 5PublishThe artefact leaves the machine — a report, a page, a merged commit.
About a minute, narrated by the console's own companion voice. Client
names are pseudonymised at capture time.
1,253repositories evaluated
79% → 93%retrieval accuracy, measured
117test modules, TDD
~33klines of Python
$0per-token API spend
Governed agent execution. Sessions run inside the app, several at once, each in its
own git worktree. A per-project constitution classifies every tool call before it happens;
a forbidden one parks the session and waits for a human answer — relayed to a phone — instead
of proceeding. Nothing merges without a reviewed diff.
Plan-and-approve as the governance surface. A goal is drafted into ordered tasks,
each with a role and a parallel-safe marker, with underspecified points raised as explicit
questions rather than guessed. The human approves once; execution stays inside the
constitution from there.
Grounding and evaluation layer. Schema-constrained model output with retries, and an
automated judge that blocks ungrounded claims before they reach a report.
Retrieval raised from 79% to 93% by replacing keyword search with hybrid
keyword-plus-embedding, measured against a hand-labelled set rather than assumed.
Root-caused a silent data-quality defect where four of five ingestion sources supplied
a fabricated popularity metric the model then reasoned from — a repository with 38,586 stars
was being scored as if it had none. Fixed at the single seam, regression-tested, back-filled.
No per-token bill. It runs on a flat subscription, with retrieval embeddings and
speech-to-text served by local models rather than metered APIs. The running cost does not
rise when the work does — which is the difference between a tool a small team keeps and one
it switches off after the trial.
The rest of the instrument: a narrating companion with generated speech that says
what is waiting on you, per-project match rules and applied/dismissed history, a SQL explorer
over each project's databases, dev-server health, subscription-window tracking, and a
security scan over the agent configuration itself.
A seven-tier applied-AI curriculum authored once and rendered into narrated video, illustrated
comics and speech, in English and Vietnamese. Nothing is filmed: HTML and SVG become video, so
a re-render costs nothing and never falls behind the source.
About a minute. Every video on this page was produced by this engine.
8.8%word error rate, chosen voice
4speech engines benchmarked
2languages kept in step
$0marginal render cost
HTML/SVG-to-video renderer producing narrated explainers with no camera, editor or
per-minute render bill.
Illustrated comic generation using reference-image conditioning so a cast holds its
appearance across panels.
Quality gates for layout, lettering and teaching order that block a failing page rather
than shipping it.
Benchmarked four Vietnamese text-to-speech engines on word error rate and real-time factor
and selected on the measurement; a build test fails when the Vietnamese falls behind the
English.
A scheduled pipeline that collects Vietnamese immigration news into a medallion warehouse,
scores each item for relevance, and writes posts grounded in the retrieved article body rather
than the headline.
About a minute. Bronze, silver and gold layers, running nightly and unattended.
3,600decisions in one evaluation
12relevance topics tracked
Nightlyunattended runs
Medallion architecture (bronze / silver / gold) in DuckDB with scheduled LLM classification
and generation.
Generation anchored to retrieved article text, never to a link stub — the difference
between a summary and a fabrication.
Evaluated a proposed keyword pre-filter over 3,600 labelled decisions and rejected it on the
measured result, avoiding a change that would have cost recall.
PythonDuckDBmedalliongroundingscheduled pipelines
04 — The day job
Where the numbers at the top come from
Seven years as a Data Analyst Specialist at VNG Corporation, in game publishing for the SEA
market. ETL pipelines processing terabytes daily, BI integration across 30+ titles, and machine
learning for churn, LTV and segmentation — plus social-channel crawling for sentiment and
competitor analysis on live titles. The user-acquisition and revenue results in the offer above
came out of that work: predictive models pointed at spend decisions, and dashboards the people
making those decisions actually opened.
SQLAirflowSparkHadoopPostgreSQLTrinoTableauLookerPower BI