EZIADS HUB OBJECTIVE-AWARE DASHBOARD V1.1.0
BUILD 2026-09-06.001
================================================

WHY
---
The previous dashboard calculated:
Total Spend / Total Leads = Blended CPL.

That mixes Awareness spend with Lead spend, which makes CPL misleading.

Example from current TikTok 30-day data:
- Total spend: RM566.42
- Lead campaign spend: RM198.18
- Awareness spend: RM368.24
- Leads: 11

Old "Blended CPL":
RM566.42 / 11 = RM51.49

Correct Lead CPL:
RM198.18 / 11 = RM18.02

WHAT V1.1 DOES
--------------
Dashboard becomes objective-aware.

Top KPI:
- Total Ad Spend
- Lead Spend
- Leads
- Lead CPL
- Awareness Spend
- Awareness CPM
- Clicks
- Overall CTR
- Overall CPC
- Overall CPM
- Conversions
- ROAS

New tables:
1. Objective Performance
2. Platform Performance (objective-aware)
3. Campaign Performance with Objective classification

GENERIC / SELLABLE DESIGN
-------------------------
No formula depends on Meta or TikTok names.

Generic objective classes:
- LEAD
- AWARENESS
- SALES
- TRAFFIC
- ENGAGEMENT
- OTHER

Classification reads objective_name first and campaign naming as fallback.

INSTALL
-------
Upload and OVERWRITE only:

hub_dashboard.php

No database migration.
No connector rerun required.
No cron changes.
No Meta/TikTok production changes.

Then refresh:
https://eziads.ezi2travel.com/hub_dashboard.php

EXPECTED CURRENT TIKTOK 30-DAY VIEW
-----------------------------------
Approx:
Total Ad Spend    RM566.42
Lead Spend        RM198.18
Leads             11
Lead CPL          RM18.02
Awareness Spend   RM368.24

The exact Awareness CPM comes from the imported awareness impressions.

ROAS
----
ROAS shows N/A while revenue attribution is not populated.
This is more accurate than showing 0.00x when revenue tracking has not
been configured yet.

SAFETY
------
READ-ONLY dashboard.
No API write actions.
No budget/status/publish changes.
