Seven source datasets, governed marketing metrics and an interactive browser dashboard for a fictional UK direct-to-consumer fashion business.
Independent portfolio work using a fixed synthetic 2025 dataset in GBP. The results demonstrate engineering and validation; they do not represent measured commercial impact or a live production data feed.
Connect marketing spend to consistently defined outcomes.
The project connects campaign spend, website activity and customer orders so performance can be explored by month, channel and campaign. The modelling challenge is preserving each source's grain while applying consistent attribution and metric rules across reporting and semantic queries.
Monthly campaign analytics support comparisons of spend, attributed outcomes and efficiency over the fixed reporting period. Filters, KPI cards, trends and campaign reporting make the models accessible through the browser.
02 / ARCHITECTURE
From seven raw sources to governed browser reporting.
Seven source datasets
Campaigns, ad performance, web sessions, customers, orders, order items and products form the fixed synthetic input.
dbt + DuckDB
Typed seeds, staging, attribution and marketing marts transform the raw records into tested analytics tables.
Wren AI governance
Semantic models define grains, relationships and metrics, with validated read-only queries and reproducible exports.
Browser dashboard
Fixed Parquet snapshots are queried with DuckDB WebAssembly. JavaScript powers interactive reporting without a dashboard backend.
Governed seven-day last-non-direct attribution
Eligible touches are identified paid sessions with a valid campaign in the 168 hours before an order, excluding the order timestamp. The latest eligible touch wins; session ID breaks timestamp ties. Direct and campaignless Organic visits cannot overwrite a qualifying paid touch.
Unattributed orders remain explicit. The rule does not infer identities or establish a causal marketing effect.
Monthly campaign analytics
Campaign-by-month reporting supports time-based comparisons alongside channel and overall monthly views. Metric definitions, commercial eligibility and attribution are applied in the governed models.
Reporting months use Europe/London dates; attribution windows use UTC instants.
03 / VALIDATION
Evidence at the data, metric and filter levels.
363 DBT TESTS
Data-quality validation
Key and relationship checks, source-to-model reconciliation, monetary arithmetic, attribution boundaries and model-grain checks protect the reporting layer.
25,200 FILTER CASES
Dashboard query validation
Dashboard calculations are compared with independent physical-mart SQL across 12 start months × 12 end months × 7 channel choices × 25 campaign choices. These validate calculations; they are not 25,200 manual browser tests.
VERIFIED EXAMPLES
Reproducible answers
Saved example questions and checked answers demonstrate governed marketing analysis in the public demo. These are fixed examples rather than arbitrary live AI responses.
These are project-reported validation results for the fixed synthetic snapshot and reporting logic. They do not establish production reliability or business uplift.
04 / DEMO ACCESS
Explore the public dashboard or run local AI services.
Public static demo
The public demo supports the interactive static dashboard and Verified examples using exported data. Those features need no locally running backend.
Optional Ask Marketing AI
Arbitrary questions require the documented local services, including Wren and the Python question service, plus local Codex CLI authentication. This optional workflow is not hosted by the public static demo.
Local AI availability depends on the authenticated environment. Follow the repository setup and validation instructions; public-demo access alone does not enable live AI questions.