Design · video · paid social · Da Nang, Vietnam

Phan Trọng Hùng

E-commerce Operator — research, video & store, run as pipelines

I take a product from “nobody has heard of it” to a live store with ads running — every stage of it myself, and I automate the parts that repeat.

Phan Trong Hung, e-commerce operator, Da Nang

01 Customer research

  • 50–500 real quotes per product — Amazon, Reddit, TikTok, YouTube
  • Apify scrapers and yt-dlp comment pulls, ranked by like count
  • Persona built on jobs and trigger moments, never demographics
  • Every quote string-matched to source — no phrase an AI invented survives
  • One language file downstream must quote from — inventing copy is a blocked step

02 Image & video

  • Photoshop, 1 yr — ad images and banners from scratch
  • Own 77-format library; 366 competitor hooks in a searchable bank
  • Competitor video decoded into 9 measured parts; hook scored /12
  • PySceneDetect + OpenCV cut whole actions; ffmpeg does the cutting
  • Perceptual-hash dedup, OCR text sweep, provenance manifest

03 Quality gate

  • A model watches the finished video against 19 blocking checks
  • Each failure carries a code that re-runs only the broken stage
  • 2fps frame sweep + OCR catches price conflicts across the whole timeline
  • Product fidelity on 5 axes; hard health claims and logo overlays refused
  • Spend caps live in code, not in a promise the model makes to itself

04 Store & ads

  • Seven store stages chained: copy → advertorial → brand → images → Liquid → CRO → launch — one approval in, one out
  • Shopify theme code — Liquid sections, Admin API; Firebase, Firestore
  • Tuned on AR × AOV × LTV, not on how the page looks
  • Meta Ads~2B VND over two years, gates anchored to gross margin

What makes me different — I do not run this work by hand; I built the machine that runs it

  • 85 agent workflows and 27 Python scripts, written by me
  • Research is a pipeline — the words are mined, not invented
  • Video is a pipeline — detect, cut, label, dedupe, score
  • QC is a pipeline — it fails a video and reruns the broken stage
  • The store is a pipeline — seven stages, two approvals, one live page
  • So the loop runs more times a week without more people
11Product lines run through research and creative
366Competitor ad hooks decoded into a bank
~USD 77KMeta ad spend managed, two years
2 yrsSole media buyer — no team, no agency

Creative automation what I actually built, not “AI-assisted”

I wrote 85 reusable agent workflows and 27 Python scripts that run the boring half of the work — the research half and the video half — so the hours go into judgement instead of file handling.

The research pipeline — who the buyer is, in their own words

  • 1 · Mine. Amazon reviews split 2–3★ for pain and 5★ for desire, Reddit sorted into five buckets, and TikTok / YouTube comments pulled with Apify and yt-dlp, ranked by like count. Floor of 50 verbatim quotes per product, up to ~500.
  • 2 · Verify. The model may label a quote; it may not write one. Every line is string-matched back to the source file and deleted if it does not match — the fix for an AI that invents a plausible customer.
  • 3 · Portrait. The persona is built on the job the product is hired for and the moment the pain peaks, plus awareness and sophistication scored as numbers — not age and income, which never explain why anyone buys.
  • 4 · Language. Everything lands in one file, _NGON-NGU-KHACH.md: pain, desire and swipe-worthy lines, ranked by frequency, with the customer’s own jargon kept unpolished.
  • 5 · Enforce. That file is the only source of words downstream. Hooks, voiceover, captions, product pages and FAQs all read from it, and writing a phrase from imagination is a blocked step, not a style note.

Why it is built this way: a headline borrowed verbatim from a review beats one I invented, and the failure mode of every AI writing tool is a customer who does not exist. The string-match is the guardrail.

The b-roll pipeline — 8 stages, source video to scored library

  • 1–2 · Detect and cut. PySceneDetect finds shot boundaries, OpenCV measures each shot, and clips are grouped into whole actions — an unboxing is never cut mid-motion. ffmpeg does the cutting.
  • 3 · Label. Every clip gets scene type, job, strengths, weaknesses and dynamic tags (subject, action, mood, product, format), so the library is searchable in plain language.
  • 4 · Dedup. Perceptual hashing with a Hamming-distance threshold removes near-duplicates the eye would keep.
  • 5 · Score. Each clip scored /12 on six axes and sorted into nine groups, so picking a shot for a script beat is a lookup, not a scroll.
  • 6 · Text scan. OCR sweeps the whole library for competitors’ baked-in text and reports how much of the frame it covers — a machine check, because the eye misses it.
  • 7–8 · Manifest and provenance. Every file traces back to its source and licence tier, so nothing ships that I cannot account for.

Result on one product line: 540 clips cut and labelled from 103 source videos, 216 kept after scoring. The same shape runs the hook bank — 366 competitor hooks decoded into a searchable taxonomy.

The quality gate — the part that makes automation safe to run

  • The machine watches the video. A model plays the finished cut and scores it against 19 blocking checks and 4 offer checks — a face that holds one expression for the whole video, a flat ungraded colour, a talking head that never moves, a story missing its mechanism beat.
  • A failure names the stage that caused it. Every check emits a reason code that routes the fix back to editing, or scripting, or b-roll — so one stage re-runs, not the whole video. That is the difference between a loop that converges and a loop that burns credit.
  • Prices are checked by sweep, not by eye. Frames are pulled at ~2fps and OCR’d across the entire timeline, then every number found is compared to the offer on file. It caught three contradictory prices stacked in one video that four people had already watched.
  • Compliance is a gate, not a note. Hard health claims are blocked on the FTC net-impression standard, invented “was” prices on 16 CFR 233, and the product itself is compared to a reference on five axes so a generated hand never holds a warped device.
  • The budget lives in code. Retry caps and spend limits sit outside the model’s reasoning, because a model that grades its own work and promises to stop is not a control.

This is the piece people skip. Generating assets quickly is easy; the hard part is a stop condition you can trust — and trusting it is what lets the rest of the pipeline run unattended.

Design & creative 1 yr design · 77 formats · 366 hooks decoded

I am the designer as well as the buyer. Nothing here was briefed out — the person who decides the angle is the person who makes the file.

What I make

  • Photoshop, one year as a designer. Ad images and banners built from scratch: layout, type, colour, layers — plus cut-out, compositing, retouching and per-channel export.
  • Repairing AI-generated images by hand is part of the job, not an afterthought: hands, baked-in text, watermarks and wrong detail get fixed in Photoshop before anything ships.
  • Own library of 77 ad formats, chosen by a router across four axes — format, layout, idea mechanism, type/colour/material — with five anti-repetition rules enforced by a script, so a batch of ten never becomes the same ad ten times.
  • Fixed order, never reshuffled: angle → copy → format → visual. Copy comes verbatim from a customer-language file built out of real reviews. I do not write ad copy from my own head.
  • Short-form video: hooks assembled from 6 separable layers — visual, effect, on-screen text, spoken line, sound, lighting recipe — then cut in ffmpeg to specs I measured rather than guessed (hook shots 1.1–1.8s, audio −14 LUFS ±0.4).

Competitor winners are used for one thing only: the visual vocabulary of the angle — which object, posture or moment makes a pain visible. Never their layout, type or asset.

Store & web Liquid · Python · Firebase · Firestore

Built and shipped, not just configured

  • Shopify theme code36 Liquid sections, 22 templates, 8 snippets written by hand. Shipped a product live end to end through the Admin API (7 colourways × 6 image slots, inventory tracked, 3 channels, a 10-point QC gate).
  • Static sites, built and deployed by me — borderpaid.com and this CV: Python build pipeline, templates, Firebase Hosting, custom domain and DNS, cache and security headers.
  • Landing pages for a client — booking and sales pages, mobile-first, including drag-and-drop builders where the client had to keep editing them afterwards.
  • A data-entry app on Firestore — not a static page: real records, real reads and writes, used by the client’s staff.
  • Measurement wired from day one — GA4, Search Console, sitemap, structured data, server-side events. I rebuilt one client’s conversion tracking after finding the booking form had never fired an event.

Media buying the rules I run on

Written down, so decisions repeat

  • Breakeven ROAS = 1 ÷ gross margin. Graduate at breakeven, scale at breakeven + 1. The number comes from the margin, not from a feeling about the day.
  • CPM diagnoses, it never kills. A high CPM is a symptom to read, not a reason to pause.
  • A winner never gets paused. Budget moves onto sets already clearing threshold, instead of waiting for a monthly review.
  • Creative volume is the input. Roughly 1 in 10 to 1 in 20 tests becomes something worth scaling — which is why the pipeline above exists.
  • An attribution sanity check before scaling: platform ROAS is not revenue, and for a business where the money lands at the counter it is fiction.

All of it lives in one written threshold file that every workflow reads from — so the rules do not drift with my mood.

Work problem → approach → result

2026 — Present 6 months · Da Nang, Vietnam

E-commerce Operator — Dropshipping

Self-employed · own stores

Problem
No brand, no budget, no team. The only edge available is finding out faster than everyone else which products people actually want — and killing the ones they do not before those eat the month.
Approach
One repeatable loop, every stage run by me: demand research → angle → offer → store → creative → traffic → kill or scale. Thresholds written into one shared file so the decisions stop being a mood, and the repetitive parts — harvesting, decoding, asset generation, reporting — handed to Python and agent pipelines so the loop runs more times a week without more people.
Result
11 product lines carried through research, competitor teardown and creative; 366 competitor hooks and 25 full videos decoded into a reusable bank; a 540-clip labelled b-roll library; 36 Liquid sections written for one store theme; and a product shipped live through the Shopify Admin API past a ten-point QC gate. Run solo, across the whole funnel.
2024 — Present 2 years · Da Nang, Vietnam

Senior Marketing

Foxy M.D Clinic · dermatology clinic · Da Nang

Problem
A business where the money lands at the counter, not on the website. Meta can count messages and form fills, but it can never see who walked in and paid — so platform ROAS is fiction and someone has to run the account on a number that is not fiction.
Approach
Ran the account solo end to end and judged it against the clinic’s own revenue books instead of platform attribution. Produced the creative in-house so a losing angle could be replaced within the day. Rebuilt the conversion tracking after finding the booking form had never been wired to fire an event.
Result
~2B VND (~USD 77K) of Meta spend over two years, peaking at ~150M VND in a single month, held to a written blended ad-cost target that was checked against the clinic’s own revenue books rather than platform attribution — and hit every month I ran it.
2026 — Present Remote

Founder & Editor

BorderPaid · borderpaid.com

Problem
Cross-border payment fees are documented badly in English and worse in Vietnamese, and most of what ranks is copied from the provider’s own marketing.
Approach
Built the site end to end — static site generator in Python, Firebase Hosting, GA4 behind an opt-in consent gate, Search Console, technical SEO. Every published figure traced to the provider’s own page, linked and dated.
Result
Live, indexed and measuring — the same discipline I bring to a store, applied to a site I own.
2023 — 2024 Da Nang, Vietnam

Marketing Intern

Khai Hoan Net

Did
Designed and built landing pages, researched customer insight to steer content, and wrote conversion copy for the website and campaigns. Where the design habit started.

Stack tools I use weekly, not tools I have heard of

Design
Photoshop (1 yr — ad images and banners: layout, type, compositing, retouch, cut-out, per-channel export) · Canva · Figma · static ad design across a 77-format library
Video
ffmpeg (cut, grade, two-pass loudness, beat-synced edits, drawtext, OCR text patching) · Premiere for frame-exact work · b-roll libraries with per-clip metadata · faster-whisper for transcripts
AI production
Claude Code — 85 agent workflows and 27 Python scripts I wrote · Google Flow and Nano Banana (image and video generation) · Higgsfield · Freepik · Magnific (upscale) · ElevenLabs (voice) · HeyGen (UGC video)
Code
Python (PySceneDetect, OpenCV, Pillow, perceptual hashing, yt-dlp, Playwright) · Liquid and Shopify theme architecture · HTML/CSS/JS · REST APIs and OAuth scopes
Web
Shopify (theme code, Admin API, product and inventory publishing) · Firebase Hosting and Firestore · Supabase · static site build pipelines · custom domains, DNS, cache and security headers
Paid media
Meta Ads · Ad Library teardown at scale · ABO structure and angle testing · kill and scale gates anchored to gross margin · budget pacing and spend concentration caps · Google Ads Search
Measurement
Pixel and server-side conversion tracking · event match quality · blended efficiency against real revenue books · GA4 · Search Console · technical SEO and structured data
Languages
Vietnamese (native) · English (professional working)