2026-05-12 15:18:16 +08:00
<!doctype html>
< html lang = "en" >
< head >
< meta charset = "utf-8" />
< meta name = "viewport" content = "width=device-width, initial-scale=1" />
2026-07-10 17:41:47 +08:00
< title > Run a Metrics Standup like a Data-Driven Ops Lead - Data, KPI & finance</ title >
2026-05-12 15:18:16 +08:00
< style >
2026-06-16 16:41:04 +08:00
@ import url ( 'https://fonts.googleapis.com/css2?family=Archivo:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap' ) ;
/* tokens: off-black ground, single emerald accent, status-report mono */
2026-05-12 15:18:16 +08:00
: root {
2026-06-16 16:41:04 +08:00
--bg : #121417 ;
--ink : #edefe9 ;
--muted : #a3aaa1 ;
--line : rgba ( 237 , 239 , 233 , 0.14 );
--line-strong : rgba ( 237 , 239 , 233 , 0.34 );
--accent : #3ecf8e ;
--accent-deep : #0e8a55 ;
--accent-ink : #0c1410 ;
--display : 'Archivo' , - apple-system , BlinkMacSystemFont , 'Segoe UI' , sans-serif ;
--mono : 'JetBrains Mono' , ui-monospace , SFMono-Regular , Menlo , monospace ;
--ease : cubic-bezier ( .16 , 1 , .3 , 1 );
2026-05-12 15:18:16 +08:00
}
* { box-sizing : border-box ; }
2026-06-16 16:41:04 +08:00
html , body { margin : 0 ; padding : 0 ; background : var ( -- bg ); color : var ( -- ink ); font-family : var ( -- display ); -webkit- font-smoothing : antialiased ; }
2026-05-12 15:18:16 +08:00
body { overflow : hidden ; }
. deck {
display : flex ;
width : 100 vw ; height : 100 vh ;
overflow-x : auto ;
overflow-y : hidden ;
scroll-snap-type : x mandatory ;
scroll-behavior : smooth ;
scrollbar-width : none ;
}
. deck :: -webkit-scrollbar { display : none ; }
. slide {
flex : 0 0 100 vw ; height : 100 vh ;
display : flex ; align-items : center ; justify-content : center ;
2026-06-16 16:41:04 +08:00
padding : 56 px 96 px ;
2026-05-12 15:18:16 +08:00
scroll-snap-align : start ;
position : relative ;
}
. slide-inner { width : 100 % ; max-width : 1100 px ; }
. crumb {
2026-06-16 16:41:04 +08:00
position : absolute ; top : 28 px ; left : 40 px ;
2026-05-12 15:18:16 +08:00
font-family : var ( -- mono ); font-size : 11 px ; color : var ( -- muted );
2026-06-16 16:41:04 +08:00
text-transform : uppercase ; letter-spacing : 0.14 em ;
2026-05-12 15:18:16 +08:00
}
2026-06-16 16:41:04 +08:00
. crumb :: before { content : '' ; display : inline-block ; width : 18 px ; height : 1 px ; background : var ( -- accent ); vertical-align : middle ; margin-right : 10 px ; }
2026-05-12 15:18:16 +08:00
. pageno {
2026-06-16 16:41:04 +08:00
position : absolute ; bottom : 28 px ; right : 40 px ;
font-family : var ( -- mono ); font-size : 11 px ; color : var ( -- muted ); letter-spacing : 0.06 em ;
2026-05-12 15:18:16 +08:00
}
. nav {
2026-06-16 16:41:04 +08:00
position : fixed ; bottom : 30 px ; left : 50 % ; transform : translateX ( -50 % );
display : flex ; gap : 7 px ; z-index : 5 ;
2026-05-12 15:18:16 +08:00
}
. nav . dot {
2026-06-16 16:41:04 +08:00
width : 16 px ; height : 2 px ; border-radius : 0 ; background : var ( -- line - strong );
cursor : pointer ; transition : background .2 s var ( -- ease );
2026-05-12 15:18:16 +08:00
}
2026-06-16 16:41:04 +08:00
. nav . dot : hover { background : var ( -- muted ); }
2026-05-12 15:18:16 +08:00
. nav . dot . active { background : var ( -- accent ); }
2026-06-16 16:41:04 +08:00
/* entrance: transform+opacity only, staggered, reduced-motion safe */
@ keyframes rise { from { opacity : 0 ; transform : translateY ( 18 px ); } to { opacity : 1 ; transform : none ; } }
. slide-inner > * { animation : rise .6 s var ( -- ease ) both ; }
. slide-inner > * : nth-child ( 2 ) { animation-delay : .07 s ; }
. slide-inner > * : nth-child ( 3 ) { animation-delay : .14 s ; }
. slide-inner > * : nth-child ( 4 ) { animation-delay : .21 s ; }
@ media ( prefers-reduced-motion : reduce ) { . slide-inner > * { animation : none ; } }
2026-05-12 15:18:16 +08:00
/* Cover */
2026-06-16 16:41:04 +08:00
. cover { display : flex ; flex-direction : column ; gap : 30 px ; }
. cover . badge { display : inline-flex ; align-items : center ; gap : 10 px ; padding : 7 px 12 px ; border : 1 px solid var ( -- line - strong ); align-self : flex-start ; font-family : var ( -- mono ); font-size : 11 px ; text-transform : uppercase ; letter-spacing : 0.12 em ; color : var ( -- muted ); }
. cover . badge . dot { width : 6 px ; height : 6 px ; background : var ( -- accent ); }
. cover h1 { font-size : clamp ( 56 px , 8 vw , 112 px ); margin : 0 ; line-height : 0.96 ; letter-spacing : -0.035 em ; font-weight : 700 ; }
2026-05-12 15:18:16 +08:00
. cover h1 em { font-style : normal ; color : var ( -- accent ); }
2026-06-16 16:41:04 +08:00
. cover . meta { display : flex ; gap : 40 px ; color : var ( -- muted ); font-family : var ( -- mono ); font-size : 12 px ; text-transform : uppercase ; letter-spacing : 0.07 em ; border-top : 1 px solid var ( -- line ); padding-top : 22 px ; }
2026-05-12 15:18:16 +08:00
/* Headline */
2026-06-16 16:41:04 +08:00
. headline { display : grid ; grid-template-columns : 1 fr 1 fr ; gap : 48 px ; align-items : center ; }
. headline-num { font-size : clamp ( 120 px , 17 vw , 210 px ); line-height : 0.9 ; letter-spacing : -0.045 em ; font-weight : 700 ; color : var ( -- accent ); font-variant-numeric : tabular-nums ; }
. headline-num small { display : block ; font-size : 12 px ; color : var ( -- muted ); font-weight : 400 ; letter-spacing : 0.1 em ; margin-top : 18 px ; font-family : var ( -- mono ); text-transform : uppercase ; }
. headline-text h2 { font-size : 42 px ; line-height : 1.08 ; letter-spacing : -0.025 em ; margin : 0 0 18 px ; font-weight : 600 ; }
. headline-text p { color : var ( -- muted ); font-size : 17 px ; max-width : 38 ch ; line-height : 1.6 ; margin : 0 ; }
2026-05-12 15:18:16 +08:00
/* Section title */
2026-06-16 16:41:04 +08:00
. section-title { font-size : clamp ( 32 px , 4 vw , 54 px ); margin : 0 0 40 px ; line-height : 1.05 ; letter-spacing : -0.025 em ; font-weight : 600 ; }
2026-05-12 15:18:16 +08:00
. section-title em { font-style : normal ; color : var ( -- accent ); }
2026-06-16 16:41:04 +08:00
/* Lists of items: hairline ledger rows, no cards */
. item-list { display : flex ; flex-direction : column ; border-top : 1 px solid var ( -- line - strong ); }
. item { display : grid ; grid-template-columns : 56 px 1 fr auto ; gap : 24 px ; align-items : center ; padding : 24 px 0 ; border-bottom : 1 px solid var ( -- line ); }
. item-num { font-family : var ( -- mono ); font-size : 12 px ; color : var ( -- accent ); }
. item-title { font-size : 21 px ; font-weight : 500 ; letter-spacing : -0.01 em ; line-height : 1.3 ; }
. item-meta { font-family : var ( -- mono ); font-size : 11 px ; color : var ( -- muted ); text-transform : uppercase ; letter-spacing : 0.08 em ; }
2026-05-12 15:18:16 +08:00
. av-row { display : flex ; }
2026-06-16 16:41:04 +08:00
. av { width : 30 px ; height : 30 px ; border : 1 px solid var ( -- line - strong ); background : var ( -- bg ); margin-left : -9 px ; font-family : var ( -- mono ); font-size : 10 px ; font-weight : 500 ; color : var ( -- muted ); display : inline-flex ; align-items : center ; justify-content : center ; }
2026-05-12 15:18:16 +08:00
. av : first-child { margin-left : 0 ; }
2026-06-16 16:41:04 +08:00
. av-2 { background : #1b1f23 ; color : var ( -- ink ); }
. av-3 { background : #15211b ; color : var ( -- accent ); border-color : rgba ( 62 , 207 , 142 , 0.4 ); }
2026-05-12 15:18:16 +08:00
2026-06-16 16:41:04 +08:00
/* Blocked / problem statement: accent rule, no gradient card */
. blocked-block { padding : 8 px 0 8 px 36 px ; border-left : 3 px solid var ( -- accent ); }
. blocked-block h3 { font-size : 32 px ; margin : 0 0 14 px ; letter-spacing : -0.02 em ; font-weight : 600 ; line-height : 1.15 ; }
. blocked-block p { color : var ( -- muted ); margin : 0 0 26 px ; font-size : 17 px ; line-height : 1.6 ; max-width : 62 ch ; }
. blocked-ask { display : inline-flex ; padding : 12 px 22 px ; background : var ( -- accent ); color : var ( -- accent - ink ); font-weight : 600 ; font-size : 14.5 px ; letter-spacing : -0.005 em ; }
2026-05-12 15:18:16 +08:00
2026-06-16 16:41:04 +08:00
/* Charts: hairline columns, flat strokes, single accent */
. chart-grid { display : grid ; grid-template-columns : 1 fr 1 fr ; border-top : 1 px solid var ( -- line - strong ); }
. chart { padding : 30 px 36 px 8 px 0 ; }
. chart + . chart { border-left : 1 px solid var ( -- line ); padding-left : 36 px ; padding-right : 0 ; }
. chart h4 { margin : 0 0 6 px ; font-size : 15 px ; font-weight : 600 ; letter-spacing : -0.01 em ; }
. chart . sub { font-family : var ( -- mono ); font-size : 11 px ; color : var ( -- muted ); text-transform : uppercase ; letter-spacing : 0.08 em ; }
. chart svg { width : 100 % ; height : 200 px ; display : block ; margin-top : 18 px ; border-bottom : 1 px solid var ( -- line ); }
. chart svg polyline { stroke : var ( -- accent ); vector-effect : non-scaling-stroke ; }
. chart svg circle { fill : var ( -- accent ); }
. chart svg line { stroke : var ( -- line ); vector-effect : non-scaling-stroke ; }
. big-num { font-size : 68 px ; font-weight : 700 ; letter-spacing : -0.035 em ; line-height : 1 ; color : var ( -- ink ); margin-top : 22 px ; font-variant-numeric : tabular-nums ; }
. delta { font-family : var ( -- mono ); font-size : 12 px ; color : var ( -- accent ); margin-top : 10 px ; letter-spacing : 0.02 em ; }
2026-05-12 15:18:16 +08:00
2026-06-16 16:41:04 +08:00
/* Asks / outputs: hairline quadrant, no cards */
. asks { display : grid ; grid-template-columns : 1 fr 1 fr ; border-top : 1 px solid var ( -- line - strong ); }
. ask { padding : 30 px 36 px 30 px 0 ; display : flex ; flex-direction : column ; gap : 12 px ; border-bottom : 1 px solid var ( -- line ); }
. ask : nth-child ( even ) { border-left : 1 px solid var ( -- line ); padding-left : 36 px ; padding-right : 0 ; }
. ask . who { display : flex ; align-items : center ; gap : 12 px ; font-family : var ( -- mono ); font-size : 11 px ; color : var ( -- accent ); text-transform : uppercase ; letter-spacing : 0.1 em ; }
. ask . who . av { width : 26 px ; height : 26 px ; margin-left : 0 ; }
. ask h3 { font-size : 21 px ; line-height : 1.25 ; margin : 0 ; letter-spacing : -0.015 em ; font-weight : 600 ; }
. ask p { margin : 0 ; color : var ( -- muted ); font-size : 14.5 px ; line-height : 1.55 ; max-width : 44 ch ; }
2026-05-12 15:18:16 +08:00
2026-06-16 16:41:04 +08:00
/* Closer: the deck's single deliberate inversion */
. invert { background : var ( -- ink ); color : var ( -- bg ); }
. invert . crumb , . invert . pageno { color : rgba ( 18 , 20 , 23 , 0.72 ); }
2026-05-12 15:18:16 +08:00
. closer { display : flex ; flex-direction : column ; gap : 28 px ; align-items : flex-start ; }
2026-06-16 16:41:04 +08:00
. closer h2 { font-size : clamp ( 44 px , 6 vw , 84 px ); margin : 0 ; line-height : 1.02 ; letter-spacing : -0.035 em ; font-weight : 700 ; }
. closer h2 em { font-style : normal ; color : var ( -- accent - deep ); }
. closer p { color : rgba ( 18 , 20 , 23 , 0.74 ); font-size : 18 px ; max-width : 56 ch ; line-height : 1.6 ; margin : 0 ; }
. closer . signature { display : flex ; align-items : center ; gap : 16 px ; padding-top : 26 px ; border-top : 1 px solid rgba ( 18 , 20 , 23 , 0.22 ); width : 100 % ; }
. closer . signature . av { width : 44 px ; height : 44 px ; font-size : 14 px ; background : var ( -- accent - deep ); border : none ; color : var ( -- ink ); font-weight : 600 ; }
. closer . signature strong { display : block ; font-size : 16 px ; letter-spacing : -0.01 em ; }
. closer . signature span { color : rgba ( 18 , 20 , 23 , 0.68 ); font-size : 13 px ; font-family : var ( -- mono ); }
2026-05-12 15:18:16 +08:00
@ media ( max-width : 760px ) {
. slide { padding : 48 px 28 px ; }
. headline { grid-template-columns : 1 fr ; }
. chart-grid , . asks { grid-template-columns : 1 fr ; }
2026-06-16 16:41:04 +08:00
. chart + . chart , . ask : nth-child ( even ) { border-left : none ; padding-left : 0 ; }
2026-05-12 15:18:16 +08:00
}
</ style >
</ head >
< body >
< div class = "deck" id = "deck" >
<!-- 1. Cover -->
< section class = "slide" >
2026-07-10 17:41:47 +08:00
< span class = "crumb" > Data, KPI & Finance · standup</ span >
2026-05-12 15:18:16 +08:00
< div class = "slide-inner cover" >
2026-07-10 17:41:47 +08:00
< div class = "badge" >< span class = "dot" ></ span > Week of Jul 6 · Ops & Growth standup</ div >
< h1 > One number, < em > one decision</ em > .</ h1 >
2026-05-12 15:18:16 +08:00
< div class = "meta" >
2026-08-18 07:09:45 +00:00
< span > Metrics standup · OpenDesign growth & activation</ span >
2026-07-10 17:41:47 +08:00
< span > Prepared for Ops & Growth · Jul 9, 2026</ span >
2026-05-12 15:18:16 +08:00
</ div >
</ div >
< span class = "pageno" > 01 / 08</ span >
</ section >
<!-- 2. Headline number -->
< section class = "slide" >
2026-07-10 17:41:47 +08:00
< span class = "crumb" > Headline answer</ span >
2026-05-12 15:18:16 +08:00
< div class = "slide-inner headline" >
2026-07-10 17:41:47 +08:00
< div class = "headline-num" > 41%< small > Signup → first-render conversion, − 6pp WoW</ small ></ div >
2026-05-12 15:18:16 +08:00
< div class = "headline-text" >
2026-07-10 17:41:47 +08:00
< h2 > The stars are up. The unit economics aren't.</ h2 >
< p > GitHub stars grew 1.3% WoW to 68.4K, but signup-to-first-render conversion fell to 41% from 47% — the third straight week that step alone has dropped.</ p >
2026-05-12 15:18:16 +08:00
</ div >
</ div >
< span class = "pageno" > 02 / 08</ span >
</ section >
2026-07-10 17:41:47 +08:00
<!-- 3. Metric proof -->
2026-05-12 15:18:16 +08:00
< section class = "slide" >
2026-07-10 17:41:47 +08:00
< span class = "crumb" > Metric proof</ span >
2026-05-12 15:18:16 +08:00
< div class = "slide-inner" >
2026-07-10 17:41:47 +08:00
< h2 class = "section-title" > The proof, < em > line by line</ em > .</ h2 >
2026-05-12 15:18:16 +08:00
< div class = "item-list" >
2026-07-10 17:41:47 +08:00
< div class = "item" >< span class = "item-num" > 01</ span >< span class = "item-title" > Weekly active builders — 14,220 sessions, +4% WoW</ span >< span class = "item-meta" > Core · Activation</ span ></ div >
< div class = "item" >< span class = "item-num" > 02</ span >< span class = "item-title" > Signup → first-render conversion — 41%, − 6pp WoW</ span >< span class = "item-meta" > Funnel · Down</ span ></ div >
< div class = "item" >< span class = "item-num" > 03</ span >< span class = "item-title" > BYOK agent connections — 9,800 linked keys across 21 agents, +2%</ span >< span class = "item-meta" > Agents · Flat</ span ></ div >
< div class = "item" >< span class = "item-num" > 04</ span >< span class = "item-title" > Plugin installs — 214,000 cumulative, +11,400 this week</ span >< span class = "item-meta" > Distribution</ span ></ div >
2026-05-12 15:18:16 +08:00
</ div >
</ div >
< span class = "pageno" > 03 / 08</ span >
</ section >
2026-07-10 17:41:47 +08:00
<!-- 4. Driver tree -->
2026-05-12 15:18:16 +08:00
< section class = "slide" >
2026-07-10 17:41:47 +08:00
< span class = "crumb" > Driver tree</ span >
2026-05-12 15:18:16 +08:00
< div class = "slide-inner" >
2026-07-10 17:41:47 +08:00
< h2 class = "section-title" > Why conversion < em > slipped</ em > .</ h2 >
2026-05-12 15:18:16 +08:00
< div class = "item-list" >
2026-07-10 17:41:47 +08:00
< div class = "item" >< span class = "item-num" > 01</ span >< span class = "item-title" > Default agent timeout raised p95 render latency 8.1s → 14.4s</ span >< div class = "av-row" >< span class = "av" > OD</ span ></ div ></ div >
< div class = "item" >< span class = "item-num" > 02</ span >< span class = "item-title" > 61% of the drop concentrates in Safari desktop, React-based templates</ span >< div class = "av-row" >< span class = "av av-2" > MR</ span >< span class = "av" > SL</ span ></ div ></ div >
< div class = "item" >< span class = "item-num" > 03</ span >< span class = "item-title" > New od-reframe flow added one extra confirm step before render</ span >< div class = "av-row" >< span class = "av av-2" > CA</ span ></ div ></ div >
< div class = "item" >< span class = "item-num" > 04</ span >< span class = "item-title" > Everything else — agent choice, BYOK setup, plugin discovery — flat WoW</ span >< div class = "av-row" >< span class = "av av-3" > PB</ span ></ div ></ div >
2026-05-12 15:18:16 +08:00
</ div >
</ div >
< span class = "pageno" > 04 / 08</ span >
</ section >
2026-07-10 17:41:47 +08:00
<!-- 5. The anomaly -->
2026-05-12 15:18:16 +08:00
< section class = "slide" >
2026-07-10 17:41:47 +08:00
< span class = "crumb" > The anomaly</ span >
2026-05-12 15:18:16 +08:00
< div class = "slide-inner" >
2026-07-10 17:41:47 +08:00
< h2 class = "section-title" > One thing broke the < em > pattern</ em > .</ h2 >
2026-05-12 15:18:16 +08:00
< div class = "blocked-block" >
2026-07-10 17:41:47 +08:00
< h3 > Safari desktop first-render latency nearly doubled.</ h3 >
< p > Every other channel held steady or improved this week. Safari desktop alone jumped from 8.1s to 14.4s p95, and it's driving almost two-thirds of the conversion drop. That forces a call: roll back the od-reframe confirm step, or ship a Safari-specific render path before Friday's release cut.</ p >
< span class = "blocked-ask" > Decision needed: roll back or patch by Thu 18:00</ span >
2026-05-12 15:18:16 +08:00
</ div >
</ div >
< span class = "pageno" > 05 / 08</ span >
</ section >
2026-07-10 17:41:47 +08:00
<!-- 6. Forecast -->
2026-05-12 15:18:16 +08:00
< section class = "slide" >
2026-07-10 17:41:47 +08:00
< span class = "crumb" > Forecast</ span >
2026-05-12 15:18:16 +08:00
< div class = "slide-inner" >
2026-07-10 17:41:47 +08:00
< h2 class = "section-title" > If we don't fix it by < em > Friday</ em > .</ h2 >
2026-05-12 15:18:16 +08:00
< div class = "chart-grid" >
< div class = "chart" >
2026-07-10 17:41:47 +08:00
< h4 > First-render conversion · 4-week trailing</ h4 >
2026-05-12 15:18:16 +08:00
< div class = "sub" > Higher is better</ div >
< svg viewBox = "0 0 600 220" preserveAspectRatio = "none" >
2026-06-16 16:41:04 +08:00
< polyline fill = "none" stroke-width = "2.5" stroke-linejoin = "round" stroke-linecap = "round"
2026-05-12 15:18:16 +08:00
points = "20,60 110,72 200,90 290,108 380,124 470,148 560,164" />
2026-06-16 16:41:04 +08:00
< circle cx = "560" cy = "164" r = "5" />
2026-05-12 15:18:16 +08:00
</ svg >
2026-07-10 17:41:47 +08:00
< div class = "big-num" > 41%</ div >
< div class = "delta" > ▼ − 6pp this week, tracking to 33% by month end if unresolved</ div >
</ div >
< div class = "chart" >
< h4 > p95 render latency · Safari desktop</ h4 >
< div class = "sub" > Lower is better</ div >
< svg viewBox = "0 0 600 220" preserveAspectRatio = "none" >
< polyline fill = "none" stroke-width = "2.5" stroke-linejoin = "round" stroke-linecap = "round"
points = "20,160 110,150 200,140 290,124 380,108 470,80 560,52" />
< circle cx = "560" cy = "52" r = "5" />
</ svg >
< div class = "big-num" > 14.4s</ div >
< div class = "delta" > ▲ +78% WoW, breaches the 12s render SLA</ div >
2026-05-12 15:18:16 +08:00
</ div >
</ div >
</ div >
< span class = "pageno" > 06 / 08</ span >
</ section >
2026-07-10 17:41:47 +08:00
<!-- 7. Recommended move -->
2026-05-12 15:18:16 +08:00
< section class = "slide" >
2026-07-10 17:41:47 +08:00
< span class = "crumb" > Recommended move</ span >
2026-05-12 15:18:16 +08:00
< div class = "slide-inner" >
2026-07-10 17:41:47 +08:00
< h2 class = "section-title" > The one decision, < em > and who owns it</ em > .</ h2 >
2026-05-12 15:18:16 +08:00
< div class = "asks" >
< div class = "ask" >
2026-07-10 17:41:47 +08:00
< div class = "who" >< span class = "av av-2" > EN</ span > Engineering</ div >
< h3 > Ship the Safari-specific fallback render path by Thursday EOD.</ h3 >
< p > Bypasses the timeout path causing the 14.4s p95 without touching the other 39% of the drop.</ p >
2026-05-12 15:18:16 +08:00
</ div >
< div class = "ask" >
2026-07-10 17:41:47 +08:00
< div class = "who" >< span class = "av av-3" > PM</ span > Product</ div >
< h3 > Pull the extra confirm step from od-reframe pending re-test.</ h3 >
< p > It was added for clarity, not speed — re-run the A/B once the Safari fix lands.</ p >
2026-05-12 15:18:16 +08:00
</ div >
< div class = "ask" >
2026-07-10 17:41:47 +08:00
< div class = "who" >< span class = "av" > GR</ span > Growth</ div >
< h3 > Hold paid acquisition spend flat until conversion clears 45%.</ h3 >
< p > No point buying more traffic into a funnel step that's currently losing 6pp of it.</ p >
2026-05-12 15:18:16 +08:00
</ div >
< div class = "ask" >
2026-07-10 17:41:47 +08:00
< div class = "who" >< span class = "av av-2" > DA</ span > Data</ div >
< h3 > Split Safari desktop out of the funnel dashboard going forward.</ h3 >
< p > This anomaly stayed hidden inside a blended average for two weeks — that can't repeat.</ p >
2026-05-12 15:18:16 +08:00
</ div >
</ div >
</ div >
< span class = "pageno" > 07 / 08</ span >
</ section >
2026-07-10 17:41:47 +08:00
<!-- 8. Decision -->
2026-06-16 16:41:04 +08:00
< section class = "slide invert" >
2026-07-10 17:41:47 +08:00
< span class = "crumb" > Decision</ span >
2026-05-12 15:18:16 +08:00
< div class = "slide-inner closer" >
2026-07-10 17:41:47 +08:00
< h2 > Ship the < em > fallback</ em > , not more spend.</ h2 >
< p > The data says one thing: fix the render path before we spend another dollar acquiring users into a slower funnel. Engineering owns Thursday's patch, Growth holds spend flat until conversion recovers, and Data splits Safari out so this doesn't hide again.</ p >
2026-05-12 15:18:16 +08:00
< div class = "signature" >
2026-06-16 16:41:04 +08:00
< span class = "av" > OD</ span >
2026-07-10 17:41:47 +08:00
< div >< strong > Analytics & Ops</ strong >< span > Weekly metrics standup · ping #growth-metrics</ span ></ div >
2026-05-12 15:18:16 +08:00
</ div >
</ div >
< span class = "pageno" > 08 / 08</ span >
</ section >
</ div >
< div class = "nav" id = "nav" ></ div >
< script >
const deck = document . getElementById ( 'deck' );
const slides = deck . querySelectorAll ( '.slide' );
const nav = document . getElementById ( 'nav' );
slides . forEach (( _ , i ) => {
const d = document . createElement ( 'span' );
d . className = 'dot' + ( i === 0 ? ' active' : '' );
d . addEventListener ( 'click' , () => deck . scrollTo ({ left : window . innerWidth * i , behavior : 'smooth' }));
nav . appendChild ( d );
});
function activeIndex () {
return Math . round ( deck . scrollLeft / window . innerWidth );
}
deck . addEventListener ( 'scroll' , () => {
const idx = activeIndex ();
nav . querySelectorAll ( '.dot' ). forEach (( d , i ) => d . classList . toggle ( 'active' , i === idx ));
}, { passive : true });
document . addEventListener ( 'keydown' , ( e ) => {
const idx = activeIndex ();
if ( e . key === 'ArrowRight' || e . key === 'PageDown' ) {
const next = Math . min ( slides . length - 1 , idx + 1 );
deck . scrollTo ({ left : window . innerWidth * next , behavior : 'smooth' });
} else if ( e . key === 'ArrowLeft' || e . key === 'PageUp' ) {
const prev = Math . max ( 0 , idx - 1 );
deck . scrollTo ({ left : window . innerWidth * prev , behavior : 'smooth' });
}
});
</ script >
2026-07-10 17:41:47 +08:00
2026-05-12 15:18:16 +08:00
</ body >
</ html >