PROJECT 03 · CURRENT ROLE

One person's marketing,
split into six roles

Digital operations for a Taiwanese kitchenware e-commerce brand. Social, paid media, search, landing pages and reporting to the owner — all of it mine.

This case study is de-identified: no brand name, no partners, no absolute revenue figures. Only structure and relative relationships are shown.

6
function modules
3
data sources pulled automatically
180
calculations independently recomputed
5
data defects found and fixed
PROBLEM

Five workstreams that couldn't see each other

The constraint was never output volume. It was that the posts didn't know what paid media was pushing, paid media didn't know what was ranking in search, and the one-page summary the owner wanted had to be reassembled from scratch every time.
When one person does five jobs, the expensive part isn't the work — it's rebuilding context between each switch.

APPROACH

Split by function — and define what each one doesn't own

Overlapping ownership produces contradictory output. So every module's spec states its exclusions as explicitly as its remit.

Paid media
Reads daily performance, returns specific calls: scale, pause, or replace the creative Does not write copy and does not touch the ad account directly — it produces recommendations.
Social
calendar
Produces the weekly publishing calendar with a buffer between proposal and publication Does not do performance analysis.
Content
review
Scores existing posts, names the problem, rewrites Does not write from scratch — it edits.
Search
Monthly keyword opportunities and competitor content teardown, with titles and outlines Does not build pages — it hands keywords and outlines to the page module.
Landing
pages
Ships deployable campaign and sales pages Does not set budget.
Coordination
Sequences the other five into one funnel and sets the checkpoints Does not execute — it directs.
DATA

Three sources, one flow

Collection is fully automated, so all six modules read the same fresh dataset instead of each transcribing their own.

Sources
Ad platform API, search console, web analytics Pulled automatically each morning. No manual CSV exports.
Consolidation
One unified data file Single source of truth for all six modules and the dashboard.
Output
Operations dashboard plus a daily decision brief Six scheduled jobs, staggered and ordered by dependency: data lands first, analysis runs after.
Two
versions
Full internal brief and a one-page decision version A decision-maker needs to decide at a glance; an operator needs to know why. Same data, two registers.
QUALITY

I didn't trust the dashboard until I'd validated it

Three layers, before any of it informed a decision.

Rendered
Scraped every figure actually displayed on screen, via browser automation Confirms that what is shown matches what was computed.
Computed
Independently recomputed all 180 calculations Wrote a second implementation rather than trusting the first.
Source
Re-pulled the source APIs read-only and compared cell by cell Closed periods had to match 100%; the acceptable drift on rolling windows was documented separately.
Defect 1

The leaderboard only ranked the first 50 records

A row limit was being passed to the API before sorting, so "top 8 of the year" was really "top 8 of the first 50 fetched". The genuine second-place entry had never appeared.

Defect 2

A hard-coded classification list missed new partners

174 records were falling into "other". The consequence wasn't untidy reporting — the best-performing campaign of the period was invisible in the report. Budget decisions made from it would have gone to the wrong place.

Defect 3

A hard-coded year in date handling

Previous years' posts were being counted into the current period: 7 of the "13 posts this period" were not from this period at all.

All five were fixed, verified and shipped. What outlasted the fix, though, was the rule that came out of it.

RULE

Define the basis of a number before it informs a decision

"Revenue" can mean three different things inside the same report: the ad platform's attributed value, the web analytics figure, and the order system's actual total. They corroborate each other at the order-of-magnitude level, but they are not interchangeable.

That rule has already prevented one bad call: one sales channel's numbers, used directly to calculate return on ad spend, would have understated overall performance badly — because that channel is only a small fraction of actual revenue.

Every figure now carries its basis, its source and its coverage. No more reports derailed by "where did this number come from?"

OUTCOME

What it left behind

Cadence
All six modules run on a schedule The decision brief went from "assembled on request" to sitting there every morning, always on current data.
Confidence
Core figures validated across three layers Closed periods reconcile 100% against source. Five defects fixed and shipped.
Transferability
Every module's remit, output format and data source is written down Not tacit knowledge held by one person — there is something for a successor to follow.
Channel
insight
Organic search contributes roughly 4× per visitor what paid social does Direct traffic higher still. Resource was shifted toward search and brand rather than continuously raising ad spend.
Previous
Self-built AI agent