Seven years turning game-publishing data into decisions: cost per install cut by 80%, monthly revenue up 30%. Now I build the AI systems that do the same job — answers grounded in your own documents, software that does real work without going off-script, and a measured number behind every claim. Everything below is running, and you can click into it.
My experience, presented by the companion agent from the AI Console — narrated,
animated and rendered by the engine in section 03. 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.
Turn your 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
Stop the AI making things up
Answers grounded in your own documents, a gate that refuses any claim the source does not support, and a test harness that catches a bad prompt change before your customers do.
79% → 93% retrieval accuracy, measured 3,600 decisions in one evaluation
Automate the work without losing control
AI doing real tasks under rules you write: anything forbidden stops and asks a person, work happens on a copy, and nothing goes live until someone has read the change.
8 active projects governed 100+ test modules, TDD
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.
How it usually starts. A fixed-price week: I look at what you have,
and you get a written finding at the end of it — what is worth building, what it would take, and
what I would not build. That document is yours whether or not we go further.
Data Analyst Specialist at VNG Corporation, publishing mobile games into South East Asia.
A layered warehouse on AWS Athena behind 30+ live titles, fed from attribution and game servers
and read by the dashboards, weekly briefings and executive reports the business ran on. Machine
learning for churn, LTV and segmentation, pointed at spend decisions rather than at a slide.
Cost per install cut by four fifths, proven in a month
The situation. A game launch was acquiring players at about $5 per install. At that price the launch budget buys an audience too small to judge the title on, and every downstream number — retention, revenue per user, payback — is read off a cohort that is not worth reading.
What I did. Ran it as an experiment with a budget split rather than a campaign with an opinion. Two weeks on 20% of a $10,000 budget to test creative, channel and audience against cost per install; two weeks on the remaining 80% to confirm the winner held at volume rather than at sample size.
The result. Cost per install settled between $0.80 and $1.00 for the launch phase, roughly a fifth of where it started — the same money buying about five times the players, on a figure that had already survived a confirmation round.
−80% average cost per install · $5 → $0.80–1.00 per install at launch, before and after · one month
A market review that took months, answered in a fortnight
The situation. Evaluating a game for acquisition meant assembling competitor benchmarks by hand. The review cycle ran for months, which is longer than the window in which a title is available to bid on.
What I did. Built a watcher over the shared request file the product teams already used: it picks up each new request, pulls the benchmark set for that title from Sensor Tower, and writes a finished workbook back. Debounced against sync lag, locked to one machine, with per-row state so a failed row is retried and a done row is never rebuilt.
The result. The review cycle fell from months to one or two weeks, and the benchmark set stopped varying with whoever assembled it. Product teams requested reviews directly instead of queueing.
Channel diagnostics, run on generated data:
TikTok →Facebook →Google Ads →Why a channel buys installs that never register, traced to the setting that causes it.
02 — Agent orchestration
AI Console “Desoul Console” on screen
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,000+repositories evaluated
140+sources applied to a project
79% → 93%retrieval accuracy, measured
100+test modules, TDD
30k+lines 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.
Open the studio →Four tabs of the production tool — the pipeline, the roadmap, the library, and the
node canvas one episode is built on.
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.
Open the product →The real interface, running with no server — open the calendar, read a draft and its
seed comments. One market, sample stories.
Or the walkthrough →Seven markets, the editorial rules, and what one generated post contains.
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.