Files
wehub-resource-sync 070959e133
landing-page-staging / Deploy landing page to staging (push) Has been skipped
landing-page-ci / Validate landing page (push) Failing after 4s
visual-baseline / Capture visual baselines (push) Has been cancelled
bake-plugin-previews / Bake plugin previews (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:00:47 +08:00

273 lines
17 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Write a Weekly Growth Review like a Head of Analytics - Data, KPI &amp; finance</title>
<style>/* weekly-report :: ops ledger restyle */
@import url('https://fonts.googleapis.com/css2?family=Archivo:wght@400..700&family=IBM+Plex+Mono:wght@400;500;600&display=swap');
/* ============ tokens: one accent (forest emerald), warm off-white paper ============ */
:root{
--paper:#f6f5f1;
--paper-2:#edece6;
--ink:#181a17;
--ink-2:#4e524c;
--ink-3:#666b63;
--line:rgba(24,26,23,.13);
--line-strong:rgba(24,26,23,.32);
--accent:#136f47;
--down:#a83430;
--font-display:'Archivo',-apple-system,BlinkMacSystemFont,sans-serif;
--font-body:'Archivo',-apple-system,BlinkMacSystemFont,sans-serif;
--font-mono:'IBM Plex Mono',SFMono-Regular,Menlo,monospace;
--ease:cubic-bezier(.16,1,.3,1);
}
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0;background:var(--paper);color:var(--ink);
font-family:var(--font-body);font-weight:400;line-height:1.55;
-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
a{color:inherit;text-decoration:none}
code,kbd,pre,samp{font-family:var(--font-mono)}
/* ============ deck (static preview: slides stacked, print-paginated) ============ */
.deck{width:100vw}
.slide{position:relative;width:100vw;height:100vh;overflow:hidden;
display:flex;flex-direction:column;justify-content:center;
padding:84px 96px;border-bottom:1px solid var(--line)}
.center{align-items:center;justify-content:center}
.tc{text-align:center}
/* ============ type scale ============ */
.h1{font-family:var(--font-display);font-weight:700;letter-spacing:-.032em;line-height:1.02;
font-size:clamp(56px,6.4vw,84px);margin:0}
.h2{font-family:var(--font-display);font-weight:650;letter-spacing:-.025em;line-height:1.06;
font-size:clamp(36px,3.8vw,50px);margin:0}
.h1,.h2{text-wrap:balance}
h4{font-family:var(--font-display);font-weight:600;letter-spacing:-.01em;font-size:18px;line-height:1.3;margin:0}
.lede{font-size:19px;line-height:1.6;color:var(--ink-2);font-weight:400;max-width:58ch;margin:0}
.kicker{font-family:var(--font-mono);font-size:12px;letter-spacing:.15em;text-transform:uppercase;
color:var(--accent);font-weight:500;margin:0 0 18px}
.dim{color:var(--ink-2)}
.mono{font-family:var(--font-mono)}
.mt-s{margin-top:8px}.mt-m{margin-top:18px}.mt-l{margin-top:40px}
.row{display:flex;gap:24px;align-items:baseline}
.grid{display:grid}
.pill{font-family:var(--font-mono);font-size:12px;color:var(--ink-2);letter-spacing:.03em}
/* ============ entrance motion: transform+opacity only, ease-out, staggered ============ */
@keyframes rise{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:none}}
.slide>*{animation:rise .65s var(--ease) both}
.slide>*:nth-child(2){animation-delay:.06s}
.slide>*:nth-child(3){animation-delay:.12s}
.slide>*:nth-child(4){animation-delay:.18s}
@media (prefers-reduced-motion:reduce){.slide>*{animation:none}}
/* ============ S1 cover ============ */
.cover-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:72px;
padding-bottom:18px;border-bottom:1px solid var(--line-strong)}
.logo{font-family:var(--font-display);font-weight:700;font-size:18px;letter-spacing:-.01em;
display:inline-flex;align-items:center;gap:10px}
.logo::before{content:"";width:11px;height:11px;background:var(--accent);flex:none}
.week-chip{font-family:var(--font-mono);font-size:12.5px;letter-spacing:.03em;color:var(--ink-2)}
.deck-footer{position:absolute;left:96px;right:96px;bottom:44px;
display:flex;justify-content:space-between;align-items:baseline;
font-family:var(--font-mono);font-size:11.5px;letter-spacing:.04em;color:var(--ink-3)}
.slide-number::before{content:attr(data-current)}
.slide-number::after{content:" / " attr(data-total)}
.cover .h1 span{color:var(--accent)}
/* ============ S2 KPI board: hairline grid, no shadow cards ============ */
.g4{grid-template-columns:repeat(4,1fr);gap:0;border-top:1px solid var(--line-strong)}
.kpi{padding:30px 32px 28px 0;border-bottom:1px solid var(--line)}
.kpi:not(:nth-child(4n+1)){border-left:1px solid var(--line);padding-left:32px}
.kpi .label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-3)}
.kpi .value{font-family:var(--font-display);font-weight:650;font-size:clamp(34px,3vw,44px);
letter-spacing:-.03em;line-height:1;margin-top:14px;font-variant-numeric:tabular-nums}
.kpi.hero .value{color:var(--accent)}
.kpi .delta{display:block;font-family:var(--font-mono);font-size:12px;margin-top:12px;color:var(--ink-3)}
.kpi .delta.up{color:var(--accent)}
.kpi .delta.down{color:var(--down)}
.kpi .delta.flat{color:var(--ink-3)}
/* ============ S3 shipped: ledger rows ============ */
.ship-list{border-top:1px solid var(--line-strong)}
.ship-item{display:flex;gap:22px;padding:17px 0;border-bottom:1px solid var(--line);align-items:baseline}
.ship-item .tag{flex:none;width:64px;font-family:var(--font-mono);font-size:11px;font-weight:600;
letter-spacing:.08em;color:var(--ink-3)}
.ship-item .tag.feat{color:var(--accent)}
.ship-item .tag.fix,.ship-item .tag.exp,.ship-item .tag.infra{color:var(--ink-2)}
.ship-item b{font-weight:600;color:var(--ink);font-size:16px;letter-spacing:-.005em}
.ship-item p{margin:0}
.ship-item span.owner{margin-left:auto;flex:none;color:var(--ink-3);font-size:12px;font-family:var(--font-mono)}
/* ============ S4 chart: flat bars, accent only on the current week ============ */
.chart{border-top:1px solid var(--line-strong);padding-top:26px}
.chart-bars{display:flex;align-items:flex-end;gap:12px;height:240px;margin-top:44px;
border-bottom:1px solid var(--line-strong)}
.chart-bars .col{flex:1;display:flex;flex-direction:column;justify-content:flex-end;height:100%;position:relative}
.chart-bars .col .b{width:100%;background:var(--ink);min-height:6px;position:relative}
.chart-bars .col:last-child .b{background:var(--accent)}
.chart-bars .col:last-child .b::after{color:var(--accent);font-weight:600}
.chart-bars .col .b::after{content:attr(data-v);position:absolute;top:-26px;left:0;right:0;text-align:center;
font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--ink)}
.chart-bars .col .lbl{position:absolute;top:100%;left:0;right:0;text-align:center;margin-top:10px;
font-family:var(--font-mono);font-size:11px;color:var(--ink-3)}
.chart>.dim{padding-top:18px}
/* ============ S5 blockers: ruled rows, red tick ============ */
.blocker-list{border-top:1px solid var(--line-strong)}
.blocker{position:relative;padding:22px 0 20px 26px;border-bottom:1px solid var(--line);margin:0}
.blocker::before{content:"";position:absolute;left:0;top:30px;width:12px;height:2px;background:var(--down)}
.blocker h4{margin-bottom:6px}
.blocker p{font-size:14px;color:var(--ink-2);margin:0;max-width:64ch}
.blocker .meta{font-family:var(--font-mono);font-size:11px;letter-spacing:.03em;color:var(--ink-3);margin-top:8px}
/* ============ S6 next week: owner/task ledger ============ */
.next-list{border-top:1px solid var(--line-strong)}
.next-row{display:grid;grid-template-columns:120px 1fr;gap:24px;padding:16px 0;
border-bottom:1px solid var(--line);align-items:baseline}
.next-row .owner{font-family:var(--font-mono);font-size:12.5px;color:var(--accent)}
.next-row .task{color:var(--ink);font-size:16px}
.next-row .task b{font-weight:600;letter-spacing:-.005em}
.next-row .task span{display:block;color:var(--ink-3);font-size:12.5px;font-family:var(--font-mono);margin-top:3px}
/* ============ S7 thanks: the single inverted page ============ */
.slide.thanks{background:var(--ink);color:var(--paper);border-bottom:none}
.thanks .kicker{color:var(--paper);opacity:.55}
.thanks .h1{font-size:clamp(64px,7.6vw,104px)}
.thanks .lede{color:rgba(246,245,241,.72);max-width:72ch;text-wrap:balance}
.thanks .week-chip{color:rgba(246,245,241,.78);border-bottom:1px solid rgba(246,245,241,.3);padding-bottom:5px}
/* ============ print ============ */
@media print{
.slide{page-break-after:always;border-bottom:none}
.slide,.chart-bars .col .b{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}
@media (max-width:820px){
.slide{padding:52px 28px;height:auto;min-height:100vh}
.deck-footer{left:28px;right:28px}
.g4{grid-template-columns:1fr 1fr}
.kpi:not(:nth-child(4n+1)){border-left:none;padding-left:0}
.kpi:nth-child(2n){border-left:1px solid var(--line);padding-left:24px}
.ship-item{flex-wrap:wrap}
.next-row{grid-template-columns:1fr}
}
</style></head>
<body class="tpl-weekly-report">
<div class="deck">
<!-- 1. Cover -->
<section class="slide cover" data-title="Cover">
<div class="cover-head">
<div class="logo">Open Design</div>
<div class="week-chip">W24 · 2026-06-08 → 2026-06-14</div>
</div>
<p class="kicker">WEEKLY GROWTH REVIEW · DATA, KPI &amp; FINANCE</p>
<h1 class="h1 mt-s">Stars are up 18%.<br>Installs are <span>flat</span>.</h1>
<p class="lede mt-m">Top-of-funnel is working. The leak is activation — only 31% of new installs create a first file within 24h, down 4 points WoW. Recommended move: fix the onboarding drop before we fund another awareness push.</p>
<div class="deck-footer"><span>Prepared by @growth · reviewed by @maya</span><span class="slide-number" data-current="1" data-total="7"></span></div>
</section>
<!-- 2. KPI -->
<section class="slide" data-title="KPIs">
<p class="kicker">THE NUMBER, PROVEN · KPIs</p>
<h2 class="h2">Stars up, installs flat, activation down</h2>
<div class="grid g4 mt-l">
<div class="kpi good hero"><div class="label">GitHub Stars</div><div class="value">68.4K</div><div class="delta up">▲ +18% WoW</div></div>
<div class="kpi"><div class="label">New installs (Mac+Win)</div><div class="value">4,120</div><div class="delta flat">— +2% WoW</div></div>
<div class="kpi bad"><div class="label">D1 activation (1st file &lt;24h)</div><div class="value">31%</div><div class="delta down">▼ -4 pts WoW</div></div>
<div class="kpi"><div class="label">BYOK setup completion</div><div class="value">58%</div><div class="delta flat">— flat WoW</div></div>
<div class="kpi good"><div class="label">Plugin installs</div><div class="value">9,800</div><div class="delta up">▲ +11% WoW</div></div>
<div class="kpi good"><div class="label">Discord signups</div><div class="value">640</div><div class="delta up">▲ +9% WoW</div></div>
<div class="kpi good"><div class="label">Agent-store listings</div><div class="value">214</div><div class="delta up">▲ +3 WoW</div></div>
<div class="kpi good"><div class="label">Weekly active projects</div><div class="value">22,300</div><div class="delta up">▲ +5% WoW</div></div>
</div>
</section>
<!-- 3. Shipped -->
<section class="slide" data-title="Shipped">
<p class="kicker">DRIVER TREE · STAR GROWTH BY SOURCE</p>
<h2 class="h2">Where the 18% came from</h2>
<div class="ship-list mt-l" style="max-width:980px">
<div class="ship-item"><span class="tag feat">LAUNCH</span><div><b>Show HN: Open Design v2</b><p class="dim" style="font-size:13px;margin:2px 0 0">Front-page 14 hours. Largest single referral spike of the quarter.</p></div><span class="owner">41% of stars</span></div>
<div class="ship-item"><span class="tag feat">PRESS</span><div><b>3 YouTube creator reviews</b><p class="dim" style="font-size:13px;margin:2px 0 0">Local-first + BYOK angle resonated; combined 210K views this week.</p></div><span class="owner">22% of stars</span></div>
<div class="ship-item"><span class="tag exp">SOCIAL</span><div><b>r/programming thread</b><p class="dim" style="font-size:13px;margin:2px 0 0">"Apache-2.0 Figma alternative" thread crossed 1.2K upvotes.</p></div><span class="owner">14% of stars</span></div>
<div class="ship-item"><span class="tag infra">ORGANIC</span><div><b>GitHub Trending (daily, TypeScript)</b><p class="dim" style="font-size:13px;margin:2px 0 0">Held a top-5 slot for 4 of 7 days without a paid or press trigger.</p></div><span class="owner">12% of stars</span></div>
<div class="ship-item"><span class="tag exp">SOCIAL</span><div><b>X/Twitter thread on agent-native design</b><p class="dim" style="font-size:13px;margin:2px 0 0">Single thread from a mid-size dev account, no boosting.</p></div><span class="owner">7% of stars</span></div>
<div class="ship-item"><span class="tag fix">REFERRAL</span><div><b>Existing-user referrals + other</b><p class="dim" style="font-size:13px;margin:2px 0 0">Long tail: forks, blog mentions, internal team shares.</p></div><span class="owner">4% of stars</span></div>
</div>
</section>
<!-- 4. Metrics chart -->
<section class="slide" data-title="Metrics">
<p class="kicker">FORECAST · NEXT 4 WEEKS</p>
<h2 class="h2">Installs plateau at ~4.15K/week without a fix</h2>
<div class="chart mt-l">
<div class="row" style="justify-content:space-between"><h4>Decision: redirect the 4th paid-channel test budget into the onboarding rebuild.</h4><span class="pill">target: 5.0K/wk</span></div>
<div class="chart-bars">
<div class="col"><div class="b" data-v="3.6K" style="height:56%"></div><div class="lbl">W18</div></div>
<div class="col"><div class="b" data-v="3.7K" style="height:60%"></div><div class="lbl">W19</div></div>
<div class="col"><div class="b" data-v="3.8K" style="height:65%"></div><div class="lbl">W20</div></div>
<div class="col"><div class="b" data-v="3.9K" style="height:69%"></div><div class="lbl">W21</div></div>
<div class="col"><div class="b" data-v="4.0K" style="height:73%"></div><div class="lbl">W22</div></div>
<div class="col"><div class="b" data-v="4.05K" style="height:76%"></div><div class="lbl">W23</div></div>
<div class="col"><div class="b" data-v="4.12K" style="height:80%"></div><div class="lbl">W24</div></div>
<div class="col"><div class="b" data-v="4.15K*" style="height:82%"></div><div class="lbl">W25e</div></div>
</div>
<p class="dim mt-m" style="font-size:13px;margin-top:36px">*W25 is a forecast, not actuals. At the current activation rate, installs flatten near 4.15K/week regardless of new-visitor volume — the ceiling is the onboarding funnel, not awareness.</p>
</div>
</section>
<!-- 5. Blockers -->
<section class="slide" data-title="Blockers">
<p class="kicker">RISK TO THE FORECAST · 3 items</p>
<h2 class="h2">What could break the 4.15K plateau call</h2>
<div class="blocker-list mt-l" style="max-width:900px">
<div class="blocker">
<h4>Step 2 (BYOK key entry) drops 42% of new installs</h4>
<p>Funnel replay shows the single largest activation leak sits at the API-key prompt — most users bounce before entering any key.</p>
<div class="meta">owner: @onboarding · biggest lever · help wanted</div>
</div>
<div class="blocker">
<h4>Windows install friction is rising support load</h4>
<p>Windows native remains best-effort (macOS/Linux/WSL2 are primary); ticket volume from Windows installs is up 22% WoW.</p>
<div class="meta">owner: @desktop · target: next week</div>
</div>
<div class="blocker">
<h4>No day-2 nudge exists for silent installs</h4>
<p>Users who don't create a file on day 1 currently get no follow-up — we can't tell drop-off from delayed activation.</p>
<div class="meta">owner: @data · needs decision from @maya</div>
</div>
</div>
</section>
<!-- 6. Next week -->
<section class="slide" data-title="Next Week">
<p class="kicker">RECOMMENDED MOVE · W25 plan</p>
<h2 class="h2">Fix activation, then re-test paid</h2>
<div class="next-list mt-l" style="max-width:960px">
<div class="next-row"><div class="owner">@onboarding</div><div class="task"><b>Ship guided first-file wizard, replace blank canvas</b><span>target: 31% → 40% D1 activation</span></div></div>
<div class="next-row"><div class="owner">@docs</div><div class="task"><b>Inline 60-second BYOK setup video at step 2</b><span>directly targets the 42% drop point</span></div></div>
<div class="next-row"><div class="owner">@growth</div><div class="task"><b>Hold the 4th paid-channel test</b><span>redirect budget to onboarding rebuild this week</span></div></div>
<div class="next-row"><div class="owner">@desktop</div><div class="task"><b>Triage top 5 Windows install failure modes</b><span>clears this week's rising ticket volume</span></div></div>
<div class="next-row"><div class="owner">@data</div><div class="task"><b>Instrument day-2 nudge email</b><span>closes the silent-install blind spot</span></div></div>
</div>
</section>
<!-- 7. Thanks -->
<section class="slide thanks center tc" data-title="Thanks">
<div>
<p class="kicker">DECISION RECAP</p>
<h1 class="h1">Fix the leak<br>before we fund the funnel.</h1>
<p class="lede" style="margin:24px auto 0">Stars: +18%. Installs: flat. Activation: the one number that moves the other two next week.</p>
<div class="row mt-l" style="justify-content:center;gap:40px">
<span class="week-chip">github.com/nexu-io/open-design</span>
<span class="week-chip">questions → #growth-review</span>
</div>
</div>
</section>
</div>
</body></html>