Digital Haus โ Campaign System
:root {
–red: #E24B4A;
–red-light: #FCEBEB;
–red-dark: #A32D2D;
–gold: #EF9F27;
–gold-light: #FAEEDA;
–gold-dark: #633806;
–green: #639922;
–green-light: #EAF3DE;
–green-dark: #27500A;
–blue: #378ADD;
–blue-light: #E6F1FB;
–blue-dark: #0C447C;
–purple: #7F77DD;
–purple-light: #EEEDFE;
–purple-dark: #3C3489;
–bg: #0A0A0B;
–bg2: #111114;
–bg3: #18181C;
–bg4: #1F1F24;
–border: rgba(255,255,255,0.07);
–border2: rgba(255,255,255,0.12);
–text: #F0EFE8;
–text2: #9A9991;
–text3: #5A5953;
–font-display: ‘Syne’, sans-serif;
–font-body: ‘DM Sans’, sans-serif;
–radius: 10px;
–radius-lg: 14px;
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
background: var(–bg);
color: var(–text);
font-family: var(–font-body);
font-size: 14px;
line-height: 1.6;
min-height: 100vh;
overflow-x: hidden;
}
/* โโ SCROLLBAR โโ */
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: var(–bg); }
::-webkit-scrollbar-thumb { background: var(–bg4); border-radius: 3px; }
/* โโ SIDEBAR โโ */
.sidebar {
position: fixed;
top: 0; left: 0;
width: 220px;
height: 100vh;
background: var(–bg2);
border-right: 1px solid var(–border);
display: flex;
flex-direction: column;
z-index: 100;
overflow-y: auto;
}
.logo {
padding: 24px 20px 20px;
border-bottom: 1px solid var(–border);
}
.logo-mark {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 4px;
}
.logo-icon {
width: 30px; height: 30px;
background: var(–red);
border-radius: 7px;
display: flex; align-items: center; justify-content: center;
font-size: 14px;
flex-shrink: 0;
}
.logo-name {
font-family: var(–font-display);
font-size: 15px;
font-weight: 700;
letter-spacing: -0.02em;
color: var(–text);
}
.logo-sub {
font-size: 11px;
color: var(–text3);
padding-left: 40px;
}
.nav-section {
padding: 16px 12px 8px;
font-size: 10px;
font-weight: 600;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(–text3);
}
.nav-item {
display: flex;
align-items: center;
gap: 9px;
padding: 8px 12px;
margin: 1px 8px;
border-radius: 8px;
font-size: 13px;
color: var(–text2);
cursor: pointer;
transition: all 0.15s;
text-decoration: none;
border: none;
background: none;
width: calc(100% – 16px);
text-align: left;
}
.nav-item:hover { background: var(–bg3); color: var(–text); }
.nav-item.active { background: var(–bg4); color: var(–text); }
.nav-item.active .nav-dot { background: var(–red); }
.nav-dot {
width: 6px; height: 6px;
border-radius: 50%;
background: var(–bg4);
flex-shrink: 0;
margin-left: auto;
transition: background 0.15s;
}
.nav-icon { font-size: 15px; flex-shrink: 0; }
.sidebar-footer {
margin-top: auto;
padding: 16px 12px;
border-top: 1px solid var(–border);
}
.phase-pill {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 4px 10px;
border-radius: 20px;
font-size: 11px;
font-weight: 500;
background: var(–green-light);
color: var(–green-dark);
margin-bottom: 6px;
}
.phase-dot { width: 5px; height: 5px; border-radius: 50%; background: var(–green); }
/* โโ MAIN โโ */
.main {
margin-left: 220px;
min-height: 100vh;
}
.page { display: none; padding: 36px 40px; }
.page.active { display: block; }
/* โโ PAGE HEADER โโ */
.page-header {
margin-bottom: 32px;
padding-bottom: 24px;
border-bottom: 1px solid var(–border);
}
.page-eyebrow {
font-size: 11px;
font-weight: 600;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(–red);
margin-bottom: 6px;
}
.page-title {
font-family: var(–font-display);
font-size: 28px;
font-weight: 700;
letter-spacing: -0.03em;
color: var(–text);
line-height: 1.2;
}
.page-desc {
font-size: 14px;
color: var(–text2);
margin-top: 6px;
}
/* โโ STAT CARDS โโ */
.stats-row {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
gap: 12px;
margin-bottom: 28px;
}
.stat-card {
background: var(–bg3);
border: 1px solid var(–border);
border-radius: var(–radius-lg);
padding: 16px;
}
.stat-num {
font-family: var(–font-display);
font-size: 28px;
font-weight: 700;
color: var(–text);
line-height: 1;
margin-bottom: 4px;
}
.stat-num.red { color: var(–red); }
.stat-num.gold { color: var(–gold); }
.stat-label { font-size: 12px; color: var(–text3); }
/* โโ CARDS โโ */
.card {
background: var(–bg3);
border: 1px solid var(–border);
border-radius: var(–radius-lg);
padding: 20px;
}
.card + .card { margin-top: 12px; }
.card-title {
font-family: var(–font-display);
font-size: 13px;
font-weight: 600;
letter-spacing: 0.01em;
color: var(–text);
margin-bottom: 14px;
display: flex;
align-items: center;
gap: 8px;
}
.grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 14px; }
.grid-3 { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px; }
/* โโ BADGES โโ */
.badge {
display: inline-block;
font-size: 10px;
font-weight: 600;
letter-spacing: 0.04em;
padding: 3px 8px;
border-radius: 20px;
}
.b-red { background: var(–red-light); color: var(–red-dark); }
.b-gold { background: var(–gold-light); color: var(–gold-dark); }
.b-green { background: var(–green-light); color: var(–green-dark); }
.b-blue { background: var(–blue-light); color: var(–blue-dark); }
.b-purple { background: var(–purple-light); color: var(–purple-dark); }
.b-gray { background: var(–bg4); color: var(–text2); }
/* โโ HOOK CARDS โโ */
.hooks-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
.hook-card {
background: var(–bg3);
border: 1px solid var(–border);
border-radius: var(–radius-lg);
padding: 18px;
position: relative;
transition: border-color 0.2s, transform 0.2s;
cursor: default;
}
.hook-card:hover { border-color: var(–border2); transform: translateY(-1px); }
.hook-num {
font-family: var(–font-display);
font-size: 11px;
font-weight: 700;
color: var(–red);
margin-bottom: 6px;
letter-spacing: 0.06em;
}
.hook-text {
font-size: 13px;
color: var(–text2);
line-height: 1.6;
font-style: italic;
margin-top: 8px;
}
.token-pill {
display: inline-block;
font-size: 10px;
background: var(–bg4);
color: var(–gold);
border: 1px solid rgba(239,159,39,0.25);
padding: 1px 6px;
border-radius: 4px;
font-family: monospace;
margin: 2px 2px 0 0;
}
/* โโ CTA ACCORDION โโ */
.accordion-item {
border-bottom: 1px solid var(–border);
}
.accordion-trigger {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 14px 0;
background: none;
border: none;
cursor: pointer;
text-align: left;
gap: 12px;
color: var(–text);
}
.accordion-trigger:hover .acc-label { color: var(–text); }
.acc-label { font-size: 13px; font-weight: 500; color: var(–text2); transition: color 0.15s; }
.acc-chevron {
font-size: 14px;
color: var(–text3);
transition: transform 0.2s;
flex-shrink: 0;
}
.accordion-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease;
}
.accordion-content.open { max-height: 500px; }
.acc-chevron.open { transform: rotate(180deg); }
.cta-variant {
padding: 10px 14px;
background: var(–bg4);
border-radius: var(–radius);
margin-bottom: 8px;
}
.cta-variant:last-child { margin-bottom: 14px; }
.cta-var-label { font-size: 10px; color: var(–text3); font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; margin-bottom: 4px; }
.cta-text { font-size: 13px; color: var(–text2); line-height: 1.55; }
/* โโ IMAGE ADS โโ */
.img-ad-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; }
.img-ad-card {
background: var(–bg3);
border: 1px solid var(–border);
border-radius: var(–radius-lg);
padding: 18px;
text-align: center;
transition: border-color 0.2s, transform 0.15s;
}
.img-ad-card:hover { border-color: var(–border2); transform: translateY(-2px); }
.img-icon {
width: 44px; height: 44px;
border-radius: var(–radius);
display: flex; align-items: center; justify-content: center;
margin: 0 auto 12px;
font-size: 18px;
}
.img-ad-name { font-size: 13px; font-weight: 500; color: var(–text); margin-bottom: 6px; }
.img-ad-desc { font-size: 12px; color: var(–text3); line-height: 1.5; }
/* โโ TARGETING โโ */
.ig-card {
background: var(–bg3);
border: 1px solid var(–border);
border-radius: var(–radius-lg);
overflow: hidden;
}
.ig-header {
padding: 12px 16px;
background: var(–bg4);
border-bottom: 1px solid var(–border);
display: flex;
align-items: center;
justify-content: space-between;
}
.ig-body { padding: 12px 16px; }
.tag-list { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.tag {
font-size: 11px;
padding: 3px 9px;
border-radius: 20px;
background: var(–bg4);
color: var(–text2);
border: 1px solid var(–border);
}
/* โโ STRUCTURE โโ */
.framework-row {
display: grid;
grid-template-columns: repeat(3, 1fr);
border: 1px solid var(–border);
border-radius: var(–radius-lg);
overflow: hidden;
margin-bottom: 24px;
text-align: center;
}
.fw-col {
padding: 24px 16px;
border-right: 1px solid var(–border);
}
.fw-col:last-child { border-right: none; }
.fw-num {
font-family: var(–font-display);
font-size: 40px;
font-weight: 800;
line-height: 1;
margin-bottom: 6px;
}
.fw-label { font-size: 12px; font-weight: 500; color: var(–text); }
.fw-sub { font-size: 11px; color: var(–text3); margin-top: 3px; }
/* โโ CALENDAR โโ */
.cal-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(155px, 1fr)); gap: 10px; margin-bottom: 24px; }
.cal-col {
background: var(–bg3);
border: 1px solid var(–border);
border-radius: var(–radius-lg);
overflow: hidden;
}
.cal-week {
padding: 10px 14px;
background: var(–bg4);
border-bottom: 1px solid var(–border);
font-size: 12px;
font-weight: 600;
font-family: var(–font-display);
}
.cal-week span { color: var(–red); }
.cal-week em { font-style: normal; font-size: 10px; color: var(–text3); display: block; margin-top: 1px; font-family: var(–font-body); }
.cal-body { padding: 10px; }
.cal-item {
padding: 6px 8px;
border-radius: 6px;
margin-bottom: 5px;
font-size: 11px;
line-height: 1.4;
color: var(–text);
}
.ci-red { background: rgba(226,75,74,0.15); border-left: 2px solid var(–red); }
.ci-gold { background: rgba(239,159,39,0.12); border-left: 2px solid var(–gold); }
.ci-blue { background: rgba(55,138,221,0.12); border-left: 2px solid var(–blue); }
.ci-green { background: rgba(99,153,34,0.12); border-left: 2px solid var(–green); }
.ci-purple { background: rgba(127,119,221,0.12); border-left: 2px solid var(–purple); }
.ci-gray { background: var(–bg4); border-left: 2px solid var(–text3); color: var(–text2); }
/* โโ KPI TRACKER โโ */
.kpi-inputs {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 12px;
margin-bottom: 20px;
}
.kpi-field label {
display: block;
font-size: 11px;
color: var(–text3);
font-weight: 500;
margin-bottom: 5px;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.kpi-field input {
width: 100%;
padding: 9px 12px;
background: var(–bg4);
border: 1px solid var(–border);
border-radius: var(–radius);
color: var(–text);
font-size: 13px;
font-family: var(–font-body);
transition: border-color 0.15s;
outline: none;
}
.kpi-field input:focus { border-color: var(–red); }
.kpi-field input::placeholder { color: var(–text3); }
.kpi-outputs {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;
margin-bottom: 20px;
}
.kpi-out {
background: var(–bg4);
border-radius: var(–radius);
padding: 14px;
text-align: center;
border: 1px solid var(–border);
transition: border-color 0.3s;
}
.kpi-out.good { border-color: rgba(99,153,34,0.4); }
.kpi-out.warn { border-color: rgba(239,159,39,0.4); }
.kpi-out.bad { border-color: rgba(226,75,74,0.4); }
.kpi-value {
font-family: var(–font-display);
font-size: 22px;
font-weight: 700;
color: var(–text);
margin-bottom: 3px;
}
.kpi-name { font-size: 11px; color: var(–text3); }
.kpi-status { font-size: 10px; font-weight: 600; margin-top: 4px; }
.kpi-out.good .kpi-status { color: var(–green); }
.kpi-out.warn .kpi-status { color: var(–gold); }
.kpi-out.bad .kpi-status { color: var(–red); }
.perf-table { width: 100%; border-collapse: collapse; }
.perf-table th {
font-size: 10px;
font-weight: 600;
letter-spacing: 0.07em;
text-transform: uppercase;
color: var(–text3);
padding: 8px 12px;
text-align: left;
border-bottom: 1px solid var(–border);
background: var(–bg4);
}
.perf-table td {
font-size: 12px;
color: var(–text2);
padding: 10px 12px;
border-bottom: 1px solid var(–border);
}
.perf-table tr:last-child td { border-bottom: none; }
.perf-table tr:hover td { background: var(–bg4); }
/* โโ KANBAN โโ */
.kanban-board {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 12px;
margin-top: 16px;
}
.kanban-col {
background: var(–bg3);
border: 1px solid var(–border);
border-radius: var(–radius-lg);
overflow: hidden;
min-height: 300px;
}
.kanban-col-hdr {
padding: 10px 14px;
background: var(–bg4);
border-bottom: 1px solid var(–border);
display: flex;
align-items: center;
justify-content: space-between;
font-size: 12px;
font-weight: 600;
font-family: var(–font-display);
color: var(–text);
}
.kanban-cards { padding: 8px; min-height: 200px; }
.kanban-card {
background: var(–bg2);
border: 1px solid var(–border);
border-radius: var(–radius);
padding: 10px 12px;
margin-bottom: 7px;
cursor: grab;
transition: border-color 0.15s, transform 0.15s;
font-size: 12px;
color: var(–text);
line-height: 1.4;
}
.kanban-card:hover { border-color: var(–border2); transform: translateY(-1px); }
.kanban-card:active { cursor: grabbing; }
.kanban-card.drag-over { background: var(–bg3); }
.card-meta {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 7px;
}
.priority {
font-size: 10px;
padding: 2px 7px;
border-radius: 20px;
font-weight: 600;
}
.p-high { background: var(–red-light); color: var(–red-dark); }
.p-med { background: var(–gold-light); color: var(–gold-dark); }
.p-low { background: var(–green-light); color: var(–green-dark); }
.remove-task {
background: none;
border: none;
cursor: pointer;
color: var(–text3);
font-size: 13px;
padding: 0 2px;
transition: color 0.15s;
}
.remove-task:hover { color: var(–red); }
.kanban-col.drag-target { background: var(–bg4); }
/* โโ FATIGUE MONITOR โโ */
.fatigue-check {
display: flex;
align-items: flex-start;
gap: 12px;
padding: 12px 0;
border-bottom: 1px solid var(–border);
cursor: pointer;
transition: opacity 0.15s;
}
.fatigue-check:last-child { border-bottom: none; }
.fatigue-check:hover { opacity: 0.85; }
.check-box {
width: 18px; height: 18px;
border-radius: 5px;
border: 1.5px solid var(–border2);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
margin-top: 1px;
transition: all 0.15s;
}
.check-box.checked { background: var(–red); border-color: var(–red); }
.check-box.checked::after { content: ‘โ’; color: #fff; font-size: 11px; font-weight: 700; }
.check-label { font-size: 13px; font-weight: 500; color: var(–text); }
.check-desc { font-size: 12px; color: var(–text3); margin-top: 2px; line-height: 1.5; }
.fatigue-alert {
display: none;
margin-top: 16px;
padding: 14px 16px;
background: rgba(226,75,74,0.12);
border: 1px solid rgba(226,75,74,0.3);
border-radius: var(–radius);
font-size: 13px;
font-weight: 500;
color: #F09595;
}
/* โโ ROW โโ */
.row-item {
display: flex;
align-items: flex-start;
gap: 10px;
padding: 10px 0;
border-bottom: 1px solid var(–border);
font-size: 13px;
color: var(–text2);
}
.row-item:last-child { border-bottom: none; }
.row-item strong { color: var(–text); }
/* โโ CHECKLIST โโ */
.check-item {
display: flex;
align-items: flex-start;
gap: 10px;
padding: 10px 0;
border-bottom: 1px solid var(–border);
cursor: pointer;
}
.check-item:last-child { border-bottom: none; }
.check-item .cb {
width: 18px; height: 18px;
border-radius: 5px;
border: 1.5px solid var(–border2);
display: flex; align-items: center; justify-content: center;
flex-shrink: 0;
margin-top: 1px;
transition: all 0.15s;
}
.check-item.done .cb { background: var(–green); border-color: var(–green); }
.check-item.done .cb::after { content: ‘โ’; color: #fff; font-size: 11px; font-weight: 700; }
.check-item.done .ci-text { color: var(–text3); text-decoration: line-through; }
.ci-text { font-size: 13px; color: var(–text2); line-height: 1.5; }
/* โโ BUTTONS โโ */
.btn {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 8px 16px;
background: var(–bg4);
border: 1px solid var(–border2);
border-radius: var(–radius);
font-size: 12px;
font-weight: 500;
color: var(–text2);
cursor: pointer;
font-family: var(–font-body);
transition: all 0.15s;
}
.btn:hover { background: var(–bg3); color: var(–text); border-color: var(–border2); }
.btn-red { background: var(–red); border-color: var(–red); color: #fff; }
.btn-red:hover { opacity: 0.88; color: #fff; }
/* โโ NAMING TABLE โโ */
.naming-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
}
.naming-cell {
background: var(–bg4);
border-radius: var(–radius);
padding: 10px 14px;
}
.naming-key { font-size: 10px; color: var(–text3); font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 4px; }
.naming-val { font-size: 14px; font-weight: 600; color: var(–text); font-family: monospace; }
/* โโ ADD TASK MODAL โโ */
.modal-overlay {
display: none;
position: fixed;
inset: 0;
background: rgba(0,0,0,0.6);
z-index: 200;
align-items: center;
justify-content: center;
}
.modal-overlay.open { display: flex; }
.modal {
background: var(–bg3);
border: 1px solid var(–border2);
border-radius: var(–radius-lg);
padding: 24px;
width: 380px;
max-width: calc(100vw – 40px);
}
.modal-title { font-family: var(–font-display); font-size: 16px; font-weight: 600; color: var(–text); margin-bottom: 16px; }
.modal input, .modal select {
width: 100%;
padding: 9px 12px;
background: var(–bg4);
border: 1px solid var(–border);
border-radius: var(–radius);
color: var(–text);
font-size: 13px;
font-family: var(–font-body);
outline: none;
margin-bottom: 10px;
}
.modal input:focus, .modal select:focus { border-color: var(–red); }
.modal select option { background: var(–bg4); }
.modal-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 4px; }
/* โโ MOBILE NAV โโ */
.mobile-nav {
display: none;
position: fixed;
bottom: 0; left: 0; right: 0;
background: var(–bg2);
border-top: 1px solid var(–border);
padding: 8px 0 12px;
z-index: 100;
overflow-x: auto;
}
.mobile-nav-inner { display: flex; gap: 4px; padding: 0 8px; width: max-content; }
.mob-btn {
padding: 6px 12px;
background: none;
border: 1px solid var(–border);
border-radius: var(–radius);
color: var(–text2);
font-size: 12px;
cursor: pointer;
font-family: var(–font-body);
white-space: nowrap;
transition: all 0.15s;
}
.mob-btn.active { background: var(–red); border-color: var(–red); color: #fff; }
@media (max-width: 768px) {
.sidebar { display: none; }
.main { margin-left: 0; }
.page { padding: 20px 16px 80px; }
.mobile-nav { display: block; }
.kanban-board { grid-template-columns: repeat(2, 1fr); }
.kpi-outputs { grid-template-columns: repeat(2, 1fr); }
.framework-row { grid-template-columns: 1fr; }
.fw-col { border-right: none; border-bottom: 1px solid var(–border); }
.fw-col:last-child { border-bottom: none; }
}
/* โโ ANIMATIONS โโ */
@keyframes fadeIn {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.page.active { animation: fadeIn 0.25s ease; }
/* โโ SCROLLBAR IN SIDEBAR โโ */
.sidebar::-webkit-scrollbar { width: 3px; }
.sidebar::-webkit-scrollbar-thumb { background: var(–bg4); }
๐ Launch strategy
Phase 1Launch 3 videos + 2 images simultaneously
RotationRotate on fatigue or overspend signals
VersioningNew creative in same category โ suffix v2
StorageCentral asset folder connected to ClickUp
๐ฏ 1-5-3 framework
1 CampaignAuto detailing โ PPF + Ceramic + Tint
5 Ad groups4 creatives each (2 video + 2 image)
3 IG bucketsCars, Services, Brand name tested
PlacementNews Feed + Stories only
๐ Hook themes
Urgency
New car window ยท Promo spots ยท Limited bookings ยท Season peak
Education
UV molecular damage ยท Clear-coat science ยท Investment framing
Incentive
$700 off PPF combo ยท 30% off tint ยท Model-year callout
๐ Creative guidelines
๐ Geo personalisation โ Lead with city name in headline: “Oakland Drivers” or “West LA Drivers”
๐ค Visual contrast โ Dark overlays with high-contrast white text outperform light backgrounds in feeds
๐ Asset storage โ Upload all finals to client folder. Raw assets in central folder. Connect to ClickUp.
๐ข Limit per group โ Max 4 creatives per interest group (2 video + 2 image)
๐งช Test plan
Mix & matchNew campaign using best-performing individual ads
IG A/BIG1 (all brands) vs IG2 (luxury) vs IG5 (services)
PlacementExclude Audience Network and partner placements
โก Budget priority
HighIG5 โ Services (highest purchase intent)
MedIG2 โ Luxury brands (high LTV)
TestIG3 โ Non-luxury (volume play)
1
Campaign
Auto detailing โ PPF + Ceramic + Tint
5
Ad groups
4 creatives each (2V + 2I)
3
Interest groups
Cars, Services, Brand name
๐ Rollout rules
๐ด Phase 1 Launch 3 videos + 2 images first. Hold others in reserve.
๐ Phase 2 Roll out reserve creatives on fatigue or overspend.
๐ท Versioning Same category โ Video #8 v2. Keeps ad set history clean.
๐ Assets 6 image + 6 video total. Upload โ client folder โ ClickUp.
๐จ Phase legend
Production โ asset creation, localisation, folder setup
Launch โ go-live, placement config, initial tracking
Optimise โ budget shifts, pausing losers, scaling winners
Test โ new variations, geo tests, mix & match
โฐ Key trigger dates
Fatigue check Every 7 days
Client report Every 7 days
Budget reallocation Week 3 + 5
Full campaign audit Week 6
๐ Creative performance log
| Creative |
CTR |
CPL |
Spend |
Status |
โ Pause immediately if…
CTR drops more than 40% week-over-week
CPL exceeds 2ร target for 3+ consecutive days
Frequency above 4.0 in a 7-day window
๐ Scale budget if…
CTR holding above 2% after day 7
CPL is 30%+ below target consistently
ROAS above 4ร for 5+ consecutive days