diff --git a/FIX-BRIEF.md b/FIX-BRIEF.md new file mode 100644 index 0000000..eeb379f --- /dev/null +++ b/FIX-BRIEF.md @@ -0,0 +1,140 @@ +# Fix Brief · html-ppt v2 + +User feedback: current skill is weak. Fix these four problems HARD. Do not hand-wave. + +Skill lives at `~/clawspace/html-ppt-skill`. Git is already initialized, SKILL.md + assets already exist. This is an **iteration**, keep what works, replace what's weak. + +## Problem 1 — Theme showcase shows identical pages + +Root cause: `templates/theme-showcase.html` builds 24 slides but they all inherit one ``. When you arrow-through, every slide looks the same. + +Fix: Each slide in theme-showcase must render **its own theme in isolation**. Do this with an **` + `; + deck.appendChild(s); +}); + + + diff --git a/templates/full-decks/course-module/README.md b/templates/full-decks/course-module/README.md new file mode 100644 index 0000000..470f901 --- /dev/null +++ b/templates/full-decks/course-module/README.md @@ -0,0 +1,8 @@ +# course-module · 教学模块 + +7-slide teaching module: cover (title + meta), objectives, core concept, worked example, exercise, check-your-understanding (MCQ), summary. + +Academic but friendly look: warm off-white paper, Playfair Display display type, a green/terracotta accent pair. A persistent **left sidebar** on content slides lists the module's learning objectives and checks them off as you progress — students always know where they are. + +**Use when:** online course modules, lecture handouts, onboarding curricula, workshop units. +**Feel:** a good textbook opened to a chapter — structured, quiet, encouraging. diff --git a/templates/full-decks/course-module/index.html b/templates/full-decks/course-module/index.html new file mode 100644 index 0000000..51eeb6e --- /dev/null +++ b/templates/full-decks/course-module/index.html @@ -0,0 +1,189 @@ + + + + +Module 04 · Recursion · CS101 + + + + + + +
+ + +
+

CS 101 · MODULE 04

+

Recursion: solving
problems by calling yourself.

+

In this module you'll learn why a function that calls itself is not a trick, but the most natural way to describe problems that contain smaller copies of themselves.

+
+ ~ 45 min read + prereq · functions, if/else + lang · Python +
+ +
+ + +
+ +
+

OBJECTIVES

+

By the end, you will be able to…

+
+

① Explain recursion in one sentence.

"A function that solves a problem by calling itself on a smaller version of that problem."

+

② Write a base case that always terminates.

Every recursive function must have an exit door, or it runs forever.

+

③ Trace a call stack on paper.

Given fact(4), draw the stack frames top-to-bottom.

+

④ Convert a while-loop to a recursive equivalent.

And explain when one is clearer than the other.

+
+
+
+ + +
+ +
+

CORE CONCEPT

+

Two parts, always.

+

A recursive function has exactly two things inside it: a base case (when to stop) and a recursive case (how to shrink the problem before calling yourself).

+
+ Rule of thumb. If you can't name the base case out loud, don't write the recursion yet. Draw it on paper first. +
+
+

Base case

The smallest possible input — one the function answers directly, without calling itself.

e.g. n == 0

+

Recursive case

Every other input — delegate to a smaller version of the same problem.

e.g. n × fact(n-1)

+
+
+
+ + +
+ +
+

WORKED EXAMPLE

+

Factorial, 7 lines.

+
# fact(n) = n × (n-1) × … × 1,  and fact(0) = 1
+def fact(n):
+    if n == 0:          # base case
+        return 1
+    return n * fact(n - 1)   # recursive case
+
+print(fact(4))   # → 24
+
+ Trace fact(4). 4 × fact(3) → 4 × (3 × fact(2)) → 4 × 3 × (2 × fact(1)) → 4 × 3 × 2 × 1 × fact(0) → 4 × 3 × 2 × 1 × 1 = 24. +
+
+
+ + +
+ +
+

EXERCISE 4.1

+

Write sum_to(n).

+

Return 1 + 2 + … + n using recursion — no loops allowed.

+
+

Your task

+
    +
  1. Write the base case. What does sum_to(0) return?
  2. +
  3. Write the recursive case in terms of sum_to(n - 1).
  4. +
  5. Test it: sum_to(5) == 15, sum_to(10) == 55.
  6. +
  7. Bonus: what happens if you call sum_to(-3)? Fix it.
  8. +
+
+

Stuck? Remember: a base case is the smallest input you already know the answer to.

+
+
+ + +
+ +
+

CHECK YOUR UNDERSTANDING

+

Which function will recurse forever?

+
+
A
def f(n): return 1 if n == 0 else n * f(n - 1)

Base case n == 0, shrinks toward it. Terminates.

+
B
def f(n): return n + f(n + 1)

✓ Correct. No base case, and n grows — infinite recursion.

+
C
def f(n): return n if n < 2 else f(n - 1) + f(n - 2)

Classic Fibonacci. Base case on n < 2. Terminates.

+
+
+
+ + +
+

SUMMARY · MODULE 04

+

You can now…

+
+

✓ Define recursion

A function that calls itself on a smaller input.

+

✓ Write a safe base case

Every recursion needs an exit door.

+

✓ Trace a call stack

You can unwind fact(4) by hand.

+

✓ Judge when to use it

Trees and self-similar problems → recursion. Flat iteration → loop.

+
+
+ Up next · Module 05. Divide & conquer: merge sort. We'll use everything you just learned — but on lists, not numbers. +
+
+ +
+ + diff --git a/templates/full-decks/course-module/style.css b/templates/full-decks/course-module/style.css new file mode 100644 index 0000000..5620ffe --- /dev/null +++ b/templates/full-decks/course-module/style.css @@ -0,0 +1,46 @@ +/* course-module — academic but friendly */ +.tpl-course-module{ + --bg:#fbfaf6;--bg-soft:#f4f1e8;--surface:#ffffff;--surface-2:#f6f3ea; + --border:rgba(60,45,20,.12);--border-strong:rgba(60,45,20,.24); + --text-1:#2a2418;--text-2:#5a5140;--text-3:#8a7f68; + --accent:#2d7d6e;--accent-2:#d88a3a;--accent-3:#c4593f; + --grad:linear-gradient(135deg,#2d7d6e,#4ea893); + --radius:14px;--radius-lg:20px; + --shadow:0 12px 30px rgba(60,45,20,.07); + font-family:'Inter','Noto Sans SC',sans-serif; +} +.tpl-course-module .slide{padding:64px 80px;background:var(--bg);display:grid;grid-template-columns:260px 1fr;gap:56px;align-content:start} +.tpl-course-module .slide.full{grid-template-columns:1fr;display:flex;flex-direction:column;justify-content:center} +.tpl-course-module .sidebar{border-right:1px solid var(--border);padding-right:32px;position:relative} +.tpl-course-module .sidebar .brand{font-family:'Playfair Display',serif;font-size:22px;font-weight:700;color:var(--accent)} +.tpl-course-module .sidebar .brand::before{content:"✦ ";color:var(--accent-2)} +.tpl-course-module .sidebar h5{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--text-3);margin:32px 0 12px} +.tpl-course-module .obj-list{list-style:none;padding:0;margin:0;font-size:13px;color:var(--text-2);line-height:1.5} +.tpl-course-module .obj-list li{padding:8px 0 8px 22px;position:relative;border-bottom:1px dashed var(--border)} +.tpl-course-module .obj-list li::before{content:"○";position:absolute;left:0;top:8px;color:var(--accent)} +.tpl-course-module .obj-list li.done::before{content:"●";color:var(--accent)} +.tpl-course-module .obj-list li.current{color:var(--text-1);font-weight:700} +.tpl-course-module .obj-list li.current::before{content:"▸";color:var(--accent-2)} +.tpl-course-module .main{min-width:0} +.tpl-course-module .h1{font-family:'Playfair Display',serif;font-size:72px;line-height:1.02;font-weight:800;letter-spacing:-.02em;color:var(--text-1)} +.tpl-course-module .h2{font-family:'Playfair Display',serif;font-size:48px;line-height:1.1;font-weight:700;letter-spacing:-.015em;color:var(--text-1)} +.tpl-course-module h3,.tpl-course-module h4{color:var(--text-1)} +.tpl-course-module .kicker{color:var(--accent-2);font-size:12px;font-weight:700;letter-spacing:.14em} +.tpl-course-module .lede{font-size:20px;color:var(--text-2);line-height:1.7} +.tpl-course-module .callout{border-left:4px solid var(--accent-2);background:var(--surface-2);padding:20px 24px;border-radius:0 var(--radius) var(--radius) 0;margin-top:24px} +.tpl-course-module .callout b{color:var(--accent-2)} +.tpl-course-module .concept-box{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px 26px;box-shadow:var(--shadow)} +.tpl-course-module .concept-box h4{margin-top:0;color:var(--accent)} +.tpl-course-module .exercise{background:#fff8ed;border:1.5px dashed var(--accent-2);border-radius:var(--radius);padding:24px 28px} +.tpl-course-module .exercise::before{content:"✎ Exercise";display:block;font-size:12px;font-weight:700;letter-spacing:.12em;color:var(--accent-2);margin-bottom:10px;text-transform:uppercase} +.tpl-course-module .code{background:#2a2418;color:#f4f1e8;border-radius:var(--radius);padding:20px 24px;font-family:'JetBrains Mono',monospace;font-size:14px;line-height:1.7;overflow:auto} +.tpl-course-module .code .cmt{color:#8a7f68;font-style:italic} +.tpl-course-module .code .kw{color:#e8a770} +.tpl-course-module .code .str{color:#8ec6b2} +.tpl-course-module .mcq{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px 22px;margin-bottom:10px;display:flex;gap:14px;align-items:flex-start;cursor:pointer} +.tpl-course-module .mcq .letter{flex:none;width:28px;height:28px;border-radius:50%;border:2px solid var(--text-3);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;color:var(--text-2)} +.tpl-course-module .mcq.correct{border-color:var(--accent);background:rgba(45,125,110,.06)} +.tpl-course-module .mcq.correct .letter{border-color:var(--accent);background:var(--accent);color:#fff} +.tpl-course-module .pill-academic{display:inline-block;padding:4px 12px;border-radius:4px;background:var(--surface-2);border:1px solid var(--border);font-size:12px;color:var(--text-2);font-family:'JetBrains Mono',monospace} +.tpl-course-module .slide.full .h1{font-size:88px} +.tpl-course-module .deck-footer{color:var(--text-3)} diff --git a/templates/full-decks/dir-key-nav-minimal/README.md b/templates/full-decks/dir-key-nav-minimal/README.md new file mode 100644 index 0000000..1d65ebb --- /dev/null +++ b/templates/full-decks/dir-key-nav-minimal/README.md @@ -0,0 +1,11 @@ +# dir-key-nav-minimal + +8 张幻灯片,每张一个纯色/渐变 mono-background(indigo / cream / crimson / emerald / slate / violet / white / charcoal)。灵感直接来自 `20260405 演示幻灯片【方向键版】.html` —— 八个 `t-*` 主题类,每张幻灯一个背景,方向键切换,极简 editorial 气质。 + +**Visual traits:** 每张独立背景色 + 单一 accent、巨大 160px 标题无副图、4px 短粗 accent line divider、arrow-prefixed mono list、左下 `← →` 键盘提示 + 右下 page label、全屏 breathing negative space、JetBrains Mono 做数字 / 代码 / 键盘 hint、每个背景有自己的 `.dk-accent` 色。 + +**Use when:** 有话要说、没太多图、希望用排版节奏推进观众注意力;keynote 式的极简讲稿;每张幻灯只讲一件事;公开分享 / keynote / 演讲稿。 + +**Source inspiration:** `20260405-Karpathy-知识库/20260405 演示幻灯片【方向键版】.html`. + +**Path:** `templates/full-decks/dir-key-nav-minimal/index.html` diff --git a/templates/full-decks/dir-key-nav-minimal/index.html b/templates/full-decks/dir-key-nav-minimal/index.html new file mode 100644 index 0000000..d30f0b1 --- /dev/null +++ b/templates/full-decks/dir-key-nav-minimal/index.html @@ -0,0 +1,138 @@ + + + + + +Dir-Key Nav Minimal + + + + + +
+ + +
+
01 / 08
+
+
Karpathy LLM Wiki
+

为什么笔记
治不了 LLM

+ +

8 种背景、8 张幻灯,一个关于如何把 AI 变成「长期记忆外挂」的最短陈述。按 → 继续。

+
+
nav · · space
+
cover
+
+ + +
+
02 / 08
+
+
Chapter 01
+

The Problem.

+ +

Token 上限是一个物理事实。你每次和 LLM 说话,它都是一个失忆症患者。

+
+
chapter · 01 / 04
+
section
+
+ + +
+
03 / 08
+
+
Symptoms
+

四种你已经
受够的
遗忘

+
    +
  • 昨天聊过的项目,今天重新解释一遍
  • +
  • 上下文窗口一到,它开始「编造记忆」
  • +
  • 不同 session 之间毫无关联,就像第一次见
  • +
  • 你的真正偏好从未被记住,每次都要 re-prompt
  • +
+
+
content · list
+
03
+
+ + +
+
04 / 08
+
+
The Fix
+

答案不是
更大 的窗口。

+

而是:把你的知识、偏好、历史都写进文件系统
让 LLM 每次对话前,先去读那个系统。

+
+

× 窗口 stuffing

把所有东西塞 prompt,贵、慢、最终溢出。

+

✓ 文件 + 检索

按需加载,永远不溢出,结构化可 diff。

+
+
+
content · compare
+
04
+
+ + +
+
05 / 08
+
+
Minimal Setup
+

4 行 YAML
就能开始。

+
memory:
+  root: ~/.llm-wiki
+  format: markdown
+  retrieval: hybrid  # embedding + bm25
+

你现在拥有一个会随时间增长的 第二大脑。每次对话它都会被读、被更新。

+
+
content · code
+
05
+
+ + +
+
06 / 08
+
+
30-day result
+
87%
+

的 re-explain 被消除。平均每次对话节省 4.2 分钟 的 re-context。

+ + + + 87% + +
+
chart · big-num
+
06
+
+ + +
+
07 / 08
+
+
Start tonight
+

开始
你的 wiki

+ +

不是装又一个插件。是决定:从今晚起,你的所有 AI 对话都要有一个共同的 vault

+
$ mkdir ~/llm-wiki && cd ~/llm-wiki
+$ git init
+$ echo "# my brain" > README.md
+
+
cta · three-commands
+
07
+
+ + +
+
08 / 08
+
+
End · thanks for staying
+

謝謝

+ +

Karpathy 的原始 thread + 我的 vault 结构都在 github.com/lewis/llm-wiki。欢迎按 ← 再看一遍。

+
+
press to rewind · F for fullscreen
+
fin
+
+ +
+ + + diff --git a/templates/full-decks/dir-key-nav-minimal/style.css b/templates/full-decks/dir-key-nav-minimal/style.css new file mode 100644 index 0000000..2c7c42b --- /dev/null +++ b/templates/full-decks/dir-key-nav-minimal/style.css @@ -0,0 +1,60 @@ +/* dir-key-nav-minimal — 方向键极简 · 8 种 mono-background 切换 */ +.tpl-dir-key-nav-minimal{ + --dk-font:'Inter','Noto Sans SC','PingFang SC',-apple-system,sans-serif; + --dk-mono:'JetBrains Mono',monospace; + background:#000; + color:#fff; + font-family:var(--dk-font); +} +.tpl-dir-key-nav-minimal .slide{padding:80px 104px;overflow:hidden;position:absolute;inset:0} +/* 8 background themes */ +.tpl-dir-key-nav-minimal .t-indigo{background:linear-gradient(135deg,#0f172a 0%,#1e1b4b 100%);color:#fff} +.tpl-dir-key-nav-minimal .t-cream{background:#F5F0E8;color:#1a1a1a} +.tpl-dir-key-nav-minimal .t-crimson{background:linear-gradient(135deg,#7f1d1d 0%,#991b1b 100%);color:#fff} +.tpl-dir-key-nav-minimal .t-emerald{background:linear-gradient(135deg,#052e16 0%,#064e3b 100%);color:#ecfdf5} +.tpl-dir-key-nav-minimal .t-slate{background:linear-gradient(135deg,#0f1923 0%,#1a2942 100%);color:#e6edf3} +.tpl-dir-key-nav-minimal .t-violet{background:linear-gradient(135deg,#1e0a2e 0%,#2e1065 100%);color:#f5f3ff} +.tpl-dir-key-nav-minimal .t-white{background:#ffffff;color:#111216} +.tpl-dir-key-nav-minimal .t-charcoal{background:linear-gradient(135deg,#111827 0%,#1f2937 100%);color:#f3f4f6} + +.tpl-dir-key-nav-minimal .dk-snum{position:absolute;top:30px;right:48px;font-size:11px;font-weight:700;letter-spacing:3px;text-transform:uppercase;font-family:var(--dk-mono)} +.tpl-dir-key-nav-minimal .t-cream .dk-snum, +.tpl-dir-key-nav-minimal .t-white .dk-snum{color:#999} +.tpl-dir-key-nav-minimal .t-indigo .dk-snum, +.tpl-dir-key-nav-minimal .t-crimson .dk-snum, +.tpl-dir-key-nav-minimal .t-emerald .dk-snum, +.tpl-dir-key-nav-minimal .t-slate .dk-snum, +.tpl-dir-key-nav-minimal .t-violet .dk-snum, +.tpl-dir-key-nav-minimal .t-charcoal .dk-snum{color:rgba(255,255,255,.38)} + +.tpl-dir-key-nav-minimal .dk-eyebrow{font-size:12px;font-weight:700;letter-spacing:3.5px;text-transform:uppercase;opacity:.55;margin-bottom:22px;display:flex;align-items:center;gap:14px} +.tpl-dir-key-nav-minimal .dk-eyebrow::after{content:'';flex:1;max-width:120px;height:1px;background:currentColor;opacity:.3} +.tpl-dir-key-nav-minimal .dk-h0{font-size:160px;font-weight:900;line-height:.9;letter-spacing:-5px;margin:0 0 20px} +.tpl-dir-key-nav-minimal .dk-h1{font-size:100px;font-weight:900;line-height:.98;letter-spacing:-3px;margin:0 0 18px} +.tpl-dir-key-nav-minimal .dk-h2{font-size:72px;font-weight:800;line-height:1.05;letter-spacing:-2px;margin:0 0 16px} +.tpl-dir-key-nav-minimal .dk-lede{font-size:26px;line-height:1.45;opacity:.72;max-width:900px;font-weight:300} +.tpl-dir-key-nav-minimal .dk-lede strong{font-weight:700;opacity:1} +.tpl-dir-key-nav-minimal .dk-big{font-family:var(--dk-mono);font-size:240px;font-weight:800;line-height:.9;letter-spacing:-10px} + +.tpl-dir-key-nav-minimal .dk-line{display:block;width:90px;height:4px;background:currentColor;margin:30px 0;opacity:.85} +.tpl-dir-key-nav-minimal .t-indigo .dk-accent{color:#a5b4fc} +.tpl-dir-key-nav-minimal .t-cream .dk-accent{color:#B5392A} +.tpl-dir-key-nav-minimal .t-crimson .dk-accent{color:#fecaca} +.tpl-dir-key-nav-minimal .t-emerald .dk-accent{color:#6ee7b7} +.tpl-dir-key-nav-minimal .t-slate .dk-accent{color:#7dd3fc} +.tpl-dir-key-nav-minimal .t-violet .dk-accent{color:#c4b5fd} +.tpl-dir-key-nav-minimal .t-white .dk-accent{color:#6366f1} +.tpl-dir-key-nav-minimal .t-charcoal .dk-accent{color:#fbbf24} + +.tpl-dir-key-nav-minimal .dk-list{list-style:none;padding:0;margin:28px 0 0;font-family:var(--dk-mono);font-size:22px;line-height:2} +.tpl-dir-key-nav-minimal .dk-list li{padding-left:30px;position:relative;font-weight:400;opacity:.85} +.tpl-dir-key-nav-minimal .dk-list li::before{content:'→';position:absolute;left:0;opacity:.5} +.tpl-dir-key-nav-minimal .dk-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:56px;margin-top:36px} +.tpl-dir-key-nav-minimal .dk-col h3{font-size:28px;font-weight:700;margin-bottom:10px} +.tpl-dir-key-nav-minimal .dk-col p{font-size:19px;line-height:1.55;opacity:.72;font-weight:300} +.tpl-dir-key-nav-minimal .dk-code{font-family:var(--dk-mono);font-size:16px;line-height:1.9;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:10px;padding:24px 28px;margin-top:24px;white-space:pre} +.tpl-dir-key-nav-minimal .t-cream .dk-code, +.tpl-dir-key-nav-minimal .t-white .dk-code{background:rgba(0,0,0,.05);border-color:rgba(0,0,0,.1)} +.tpl-dir-key-nav-minimal .dk-keyhint{position:absolute;bottom:34px;left:104px;font-family:var(--dk-mono);font-size:12px;letter-spacing:2px;text-transform:uppercase;opacity:.45} +.tpl-dir-key-nav-minimal .dk-keyhint kbd{display:inline-block;padding:2px 10px;margin:0 3px;border:1px solid currentColor;border-radius:4px;font-size:12px} +.tpl-dir-key-nav-minimal .dk-page{position:absolute;bottom:34px;right:48px;font-family:var(--dk-mono);font-size:12px;letter-spacing:2px;opacity:.45} diff --git a/templates/full-decks/graphify-dark-graph/README.md b/templates/full-decks/graphify-dark-graph/README.md new file mode 100644 index 0000000..cd8f687 --- /dev/null +++ b/templates/full-decks/graphify-dark-graph/README.md @@ -0,0 +1,11 @@ +# graphify-dark-graph + +Deep-night 暗底 + 力导向知识图谱覆盖层 + 温暖玻璃拟态卡片。灵感来自 `20260413-graphify/ppt/graphify.html` 的 `#06060c` 渐变底、飘移 orb 光晕、glass 卡片(warm/blue/green/purple 五变体)和 rainbow-text 标题。 + +**Visual traits:** `#06060c → #0e1020` 斜向渐变、三颗 400-520px blur orb 慢飘动、cover SVG 力导向图谱作为背景、rainbow shift 渐变标题、JetBrains Mono 的 `.cmd-glow` 命令行、玻璃拟态卡片带顶部高光和微妙内阴影、温暖色系 accent (#e8a87c 琥珀 / #7ed3a4 薄荷 / #7eb8da 雾蓝 / #b8a4d6 丁香). + +**Use when:** 介绍一个开发者工具、命令行产品、知识图谱 / 数据可视化相关项目;你希望现场演示时视觉有「AI native + 科技感 + 温度」。 + +**Source inspiration:** `20260413-graphify/ppt/graphify.html`. + +**Path:** `templates/full-decks/graphify-dark-graph/index.html` diff --git a/templates/full-decks/graphify-dark-graph/index.html b/templates/full-decks/graphify-dark-graph/index.html new file mode 100644 index 0000000..098ae01 --- /dev/null +++ b/templates/full-decks/graphify-dark-graph/index.html @@ -0,0 +1,180 @@ + + + + + +Graphify Dark Graph + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
01 / 08
+
+

Tech Sharing · 纯干货

+

手把手用 Graphify
搭建个人知识图谱

+

一行命令 · 全多模态 · 诚实审计 —— 把任何文件夹变成可导航的知识网络。

+

↑ 背景就是 Graphify 真实跑出来的知识图谱

+
+
+ + +
+
+
02 / 08
+
+
Part 01
+

Why Graph?

+

folder → tree → graph,人类认知的下一步

+
+
+ + +
+
+
03 / 08
+

Feature Map

+

一个工具,四件事

+
+
📂

Folder Ingest

递归扫描任意路径,支持 md / pdf / 代码 / 图片

+
🧠

Entity Extract

用 LLM 抽概念、人物、事件、关系

+
🕸️

Force Graph

D3 力导向,点击即跳转原文

+
🔍

Audit Trail

每条边都能追溯到 source span

+
+

它不是「又一个 RAG」—— 它是 把检索结果画出来,让你一眼就知道信息长什么样

+
+ + +
+
+
04 / 08
+

One command

+

从 0 到图谱,大概 90 秒

+

$ graphify ~/notes --out ./graph

+
# graphify.config.yaml
+ingest:
+  paths: [~/notes, ~/code/docs]
+  include: ["*.md", "*.pdf", "*.py"]
+
+extract:
+  model: claude-opus-4-6
+  schema: [concept, person, event, relation]
+
+render:
+  engine: d3-force
+  audit: true     # 每条边带 source span
+
+ + +
+
+
05 / 08
+

Efficiency Race

+

没有知识库 vs 有知识库

+
+
+
没有
知识库
+
+
🛵
+
反复喂信息…整理…又忘了…
+
+
+
+

知识库
+
+
🏎️
+
AI 自己找 → 确认 → 干活!
+
+
+
+
+

速度提升

+
-80%

重复喂信息

+

记忆持久化

+
+
+ + +
+
+
06 / 08
+

Pipeline

+

端到端 4 步走

+
+
📂
Scan
递归读文件
+
+
🔬
Extract
LLM 抽实体
+
+
🕸️
Build
构图 + 去重
+
+
🎨
Render
D3 交互图
+
+

每一步都有 audit log:你永远知道某个节点为什么存在、它来自哪个文件的哪一行。

+
+ + +
+
+
07 / 08
+

Try it tonight

+

Graphify your folders

+

$ npm i -g @lewis/graphify

+

$ graphify ~/obsidian-vault

+
+ #knowledge-graph + #open-source + #claude-agent + #obsidian + #d3-force +
+
+ + +
+
+
08 / 08
+
+
Thanks.
+

github.com/lewis/graphify · 欢迎 star / issue / PR

+
+
+ +
+ + + diff --git a/templates/full-decks/graphify-dark-graph/style.css b/templates/full-decks/graphify-dark-graph/style.css new file mode 100644 index 0000000..bc6dd47 --- /dev/null +++ b/templates/full-decks/graphify-dark-graph/style.css @@ -0,0 +1,54 @@ +/* graphify-dark-graph — 暗底玻璃 + 力导向知识图谱 */ +.tpl-graphify-dark-graph{ + --gd-bg:#06060c; + --gd-bg2:#0e1020; + --gd-text:#f0ece4; + --gd-text2:#b0a99e; + --gd-text3:#7a746c; + --gd-warm:#e8a87c; + --gd-blue:#7eb8da; + --gd-green:#7ed3a4; + --gd-rose:#d4a0b9; + --gd-purple:#b8a4d6; + --gd-danger:#e07070; + background:var(--gd-bg); + color:var(--gd-text); + font-family:'Inter','Noto Sans SC',-apple-system,sans-serif; + letter-spacing:-.01em; +} +.tpl-graphify-dark-graph .slide{background:linear-gradient(160deg,#08080f,#0e1020 50%,#08080f);color:var(--gd-text);padding:64px 88px;overflow:hidden} +.tpl-graphify-dark-graph .gd-ambient{position:absolute;inset:0;pointer-events:none;z-index:0;overflow:hidden} +.tpl-graphify-dark-graph .gd-orb{position:absolute;border-radius:50%;filter:blur(110px);opacity:.35;animation:gdDrift 22s ease-in-out infinite alternate} +.tpl-graphify-dark-graph .gd-orb-1{width:520px;height:520px;background:radial-gradient(circle,rgba(126,184,218,.55),transparent 70%);top:-12%;left:-6%} +.tpl-graphify-dark-graph .gd-orb-2{width:460px;height:460px;background:radial-gradient(circle,rgba(232,168,124,.45),transparent 70%);top:55%;right:-8%;animation-delay:-6s} +.tpl-graphify-dark-graph .gd-orb-3{width:420px;height:420px;background:radial-gradient(circle,rgba(184,164,214,.4),transparent 70%);bottom:-8%;left:30%;animation-delay:-11s} +@keyframes gdDrift{0%{transform:translate(0,0) scale(1)}100%{transform:translate(25px,-20px) scale(1.08)}} +.tpl-graphify-dark-graph .slide > *{position:relative;z-index:2} +.tpl-graphify-dark-graph .gd-snum{position:absolute;top:28px;right:40px;font-size:12px;letter-spacing:.25em;color:var(--gd-text3);z-index:3} +.tpl-graphify-dark-graph .gd-eyebrow{font-size:13px;letter-spacing:.2em;text-transform:uppercase;color:var(--gd-text3);font-weight:500} +.tpl-graphify-dark-graph .gd-h1{font-size:74px;font-weight:800;line-height:1.08;letter-spacing:-.02em;margin:16px 0 10px;color:var(--gd-text)} +.tpl-graphify-dark-graph .gd-h2{font-size:52px;font-weight:700;line-height:1.12;margin:0 0 14px} +.tpl-graphify-dark-graph .gd-lede{font-size:22px;line-height:1.65;font-weight:300;color:var(--gd-text2);max-width:850px} +.tpl-graphify-dark-graph .gd-rainbow{background:linear-gradient(90deg,#ff0080,#ff4d00,#ff9900,#ffe600,#00c853,#0091ea,#6200ea,#ff0080);background-size:200% auto;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:gdRainbow 4s linear infinite} +@keyframes gdRainbow{0%{background-position:0% center}100%{background-position:200% center}} +.tpl-graphify-dark-graph .gd-grad{background:linear-gradient(135deg,var(--gd-warm),var(--gd-rose),var(--gd-purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent} +.tpl-graphify-dark-graph .gd-accent{color:var(--gd-warm);font-weight:500} +.tpl-graphify-dark-graph .gd-green{color:var(--gd-green)} +.tpl-graphify-dark-graph .gd-blue{color:var(--gd-blue)} +.tpl-graphify-dark-graph .gd-dim{color:var(--gd-text2)} +.tpl-graphify-dark-graph .gd-mono{font-family:'JetBrains Mono',monospace} +.tpl-graphify-dark-graph .gd-glass{position:relative;overflow:hidden;border-radius:20px;padding:22px 26px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.1);backdrop-filter:blur(20px) saturate(160%);box-shadow:0 8px 32px rgba(0,0,0,.3),inset 0 1px 0 rgba(255,255,255,.08)} +.tpl-graphify-dark-graph .gd-glass::before{content:'';position:absolute;top:0;left:0;right:0;height:50%;background:linear-gradient(180deg,rgba(255,255,255,.05),transparent);pointer-events:none} +.tpl-graphify-dark-graph .gd-glass-warm{background:rgba(232,168,124,.06);border-color:rgba(232,168,124,.2)} +.tpl-graphify-dark-graph .gd-glass-green{background:rgba(126,211,164,.06);border-color:rgba(126,211,164,.2)} +.tpl-graphify-dark-graph .gd-glass-blue{background:rgba(126,184,218,.06);border-color:rgba(126,184,218,.2)} +.tpl-graphify-dark-graph .gd-grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:24px} +.tpl-graphify-dark-graph .gd-grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:24px} +.tpl-graphify-dark-graph .gd-tag{display:inline-block;border-radius:999px;padding:5px 14px;font-size:12px;font-weight:500;margin:2px 4px 2px 0;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);color:var(--gd-text2)} +.tpl-graphify-dark-graph .gd-cmd{font-family:'JetBrains Mono',monospace;font-size:32px;font-weight:700;color:var(--gd-green);text-shadow:0 0 30px rgba(126,211,164,.45),0 0 60px rgba(126,211,164,.15);letter-spacing:-.01em} +.tpl-graphify-dark-graph .gd-big{font-size:120px;font-weight:900;letter-spacing:-.04em;line-height:1} +.tpl-graphify-dark-graph .gd-codebox{background:rgba(0,0,0,.55);border:1px solid rgba(255,255,255,.08);border-radius:14px;padding:22px 26px;font-family:'JetBrains Mono',monospace;font-size:14px;line-height:1.8;color:#d8d4c8} +.tpl-graphify-dark-graph .gd-codebox .cm{color:#6b6a62} +.tpl-graphify-dark-graph .gd-codebox .kw{color:var(--gd-warm)} +.tpl-graphify-dark-graph .gd-codebox .st{color:var(--gd-green)} +.tpl-graphify-dark-graph .gd-codebox .fn{color:var(--gd-blue)} diff --git a/templates/full-decks/hermes-cyber-terminal/README.md b/templates/full-decks/hermes-cyber-terminal/README.md new file mode 100644 index 0000000..7a27c62 --- /dev/null +++ b/templates/full-decks/hermes-cyber-terminal/README.md @@ -0,0 +1,11 @@ +# hermes-cyber-terminal + +黑底 (`#0a0c10`) + 终端 chrome + 扫描线 + 薄荷绿 glow 大字 + JetBrains Mono 全文打字机感。灵感来自 `20260414-hermes-agent/ppt/hermes-record.html` 的 `codebox #15151b` 深色代码盒和 `hermes-vs-openclaw.html` 的实测对比气质 —— 把两者合成一份「honest cyber review」。 + +**Visual traits:** 56px cyber 网格 + CRT vignette + 半透明 scanlines 叠层、窗口 traffic-light chrome、`$ prompt` 开头的 command-line 标题、薄荷绿 text-shadow glow `#7ed3a4`、monospace 全局、虚拟 bar chart 用 stroke-only 呈现、blinking cursor、amber/green/red 分级标签。 + +**Use when:** 评测一个开发者工具 / CLI / agent,展示跑分数据、trace、diff;想要即刻给出「技术人 honest review」的视觉语气;适合长 trace / long code 的场景。 + +**Source inspiration:** `20260414-hermes-agent/ppt/hermes-record.html` + `hermes-vs-openclaw.html`. + +**Path:** `templates/full-decks/hermes-cyber-terminal/index.html` diff --git a/templates/full-decks/hermes-cyber-terminal/index.html b/templates/full-decks/hermes-cyber-terminal/index.html new file mode 100644 index 0000000..43bbec2 --- /dev/null +++ b/templates/full-decks/hermes-cyber-terminal/index.html @@ -0,0 +1,199 @@ + + + + + +Hermes Cyber Terminal + + + + + +
+ + +
+
+
+
+
~/hermes · zsh · 118x42 · 01:37:04
+
+

whoami --hermes

+

HERMES
AGENT / v0.9.2

+

一个号称能「自主跑完整软件工程任务」的命令行 agent。
真的好用?还是又一轮营销?—— 我连续跑了 72 小时,告诉你答案。

+
+ rust-core + mcp-native + 72h-benchmark + honest-review +
+
+ +
+ + +
+
+
+
section · 01/04
+
+

cat chapter_01.md

+

// Setup

+

brew install hermes 到第一次 prompt —— 一共 4 分 22 秒。

+
+ +
+ + +
+
+
+
benchmark · cold-start
+

开箱数据

+

cold start → first-successful-task 三次平均

+
+
install time
42s
单 binary,无 docker,无 python env。
+
first token
1.8s
接入 claude-opus-4-6,无预热。
+
first PR merged
4m22s
跑的是 fix-a-typo 级别的低难度任务。
+
+
+
// verdict +
冷启动是真的快
和 OpenClaw 的 docker + pip 流程比,快不止一个数量级。
+
// verdict -
MCP 服务器配置不够友好
env 变量需要手动塞进 ~/.hermes/env,文档几乎没写。
+
+ +
+ + +
+
+
+
trace · hermes run
+

hermes run "refactor auth module to use pkce"

+

↓ 真实 trace (节选)

+
# hermes v0.9.2 · session 42a1
+[plan]    "分析 src/auth/*.ts → 找 oauth flow → 抽成 pkce"
+[read]    src/auth/oauth.ts       // 214 lines
+[read]    src/auth/token.ts       // 88 lines
+[think]   "发现 implicit flow,改为 code+pkce,需新 state param"
+[edit]    src/auth/oauth.ts       +43 -17
+[edit]    src/auth/token.ts       +12 -4
+[test]    pnpm vitest auth        PASS 18/18
+[commit]  "feat(auth): migrate to oauth2 code+pkce"
+[push]    origin feat/pkce-auth   ok
+
+# 总耗时 3m 14s · 14k tokens · $0.21
+ +
+ + +
+
+
+
benchmark · hermes vs openclaw
+

72 小时对比

+

同一组 48 个 GitHub issue,两个 agent 各跑一遍

+ + + + + + + 100% + 75% + 50% + 25% + 0 + + + + 82% + resolved + + 58% + one-shot + + 89% + test-pass + + 71% + pr-merged + + + + + 60% + resolved + + 38% + one-shot + + 67% + test-pass + + + + + hermes 0.9.2 + + openclaw 2.1 + + + + +
+ + +
+
+
+
tldr
+

echo $VERDICT

+
7.8/ 10
+

值得装,还不值得完全依赖。

+
+
+ strong points
• rust 本体冷启快
• trace 可读性极强
• diff 审核友好,commit message 也写得合格
+
- weak points
• plan 阶段偶尔跳步
• 超 50k LoC 仓库会 OOM
• MCP 配置需要手动塞 env
+
+ +
+ + +
+
+
+
install
+

想自己跑一遍?

+

三条命令,不到 5 分钟就能看见它干第一件事。

+
# 1. install
+$ brew install hermes-agent/tap/hermes
+
+# 2. auth (先准备好 anthropic api key)
+$ hermes auth login
+
+# 3. first task
+$ cd ~/your-repo && hermes run "add a CHANGELOG.md from git log"
+
+ brew-ready + opus-4.6 + needs-api-key +
+ +
+ + +
+
+
+
EOF
+
+

exit 0

+

// thanks

+

完整 trace、48 个任务的 PR 列表、benchmark 脚本都在 github.com/lewis/hermes-review

+
+ +
+ +
+ + + diff --git a/templates/full-decks/hermes-cyber-terminal/style.css b/templates/full-decks/hermes-cyber-terminal/style.css new file mode 100644 index 0000000..2145554 --- /dev/null +++ b/templates/full-decks/hermes-cyber-terminal/style.css @@ -0,0 +1,55 @@ +/* hermes-cyber-terminal — 暗终端 + 霓虹绿青 + 扫描线 */ +.tpl-hermes-cyber-terminal{ + --hc-bg:#0a0c10; + --hc-bg2:#15151b; + --hc-surface:#12141a; + --hc-border:rgba(126,211,164,.18); + --hc-ink:#e4e2d8; + --hc-ink2:#8a8892; + --hc-green:#7ed3a4; + --hc-cyan:#64dfdf; + --hc-amber:#e9c58a; + --hc-rose:#d4a0b9; + --hc-red:#ff6b6b; + background:var(--hc-bg); + color:var(--hc-ink); + font-family:'JetBrains Mono','SF Mono','Inter','Noto Sans SC',monospace; +} +.tpl-hermes-cyber-terminal .slide{background:var(--hc-bg);color:var(--hc-ink);padding:60px 84px;overflow:hidden} +.tpl-hermes-cyber-terminal .hc-scanlines{position:absolute;inset:0;pointer-events:none;z-index:3;background:repeating-linear-gradient(180deg,transparent 0,transparent 3px,rgba(126,211,164,.025) 3px,rgba(126,211,164,.025) 4px);mix-blend-mode:screen} +.tpl-hermes-cyber-terminal .hc-grid{position:absolute;inset:0;pointer-events:none;opacity:.35;background-image:linear-gradient(rgba(126,211,164,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(126,211,164,.08) 1px,transparent 1px);background-size:56px 56px;mask-image:radial-gradient(ellipse at 50% 50%,black 30%,transparent 80%)} +.tpl-hermes-cyber-terminal .hc-vignette{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 50% 50%,transparent 50%,rgba(0,0,0,.6) 100%)} +.tpl-hermes-cyber-terminal .slide > *{position:relative;z-index:2} +.tpl-hermes-cyber-terminal .hc-chrome{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;font-size:11px;color:var(--hc-ink2);letter-spacing:.18em;text-transform:uppercase} +.tpl-hermes-cyber-terminal .hc-chrome .dots{display:flex;gap:8px} +.tpl-hermes-cyber-terminal .hc-chrome .dots span{width:11px;height:11px;border-radius:50%;background:#2a2d33} +.tpl-hermes-cyber-terminal .hc-chrome .dots span:nth-child(1){background:#ff5f57} +.tpl-hermes-cyber-terminal .hc-chrome .dots span:nth-child(2){background:#febc2e} +.tpl-hermes-cyber-terminal .hc-chrome .dots span:nth-child(3){background:var(--hc-green)} +.tpl-hermes-cyber-terminal .hc-prompt{color:var(--hc-green);font-weight:500} +.tpl-hermes-cyber-terminal .hc-prompt::before{content:'$ ';color:var(--hc-cyan)} +.tpl-hermes-cyber-terminal .hc-h1{font-family:'JetBrains Mono',monospace;font-size:72px;font-weight:700;line-height:1.05;letter-spacing:-.02em;color:var(--hc-green);text-shadow:0 0 30px rgba(126,211,164,.35),0 0 60px rgba(126,211,164,.1);margin:14px 0 12px} +.tpl-hermes-cyber-terminal .hc-h2{font-size:46px;font-weight:600;color:var(--hc-ink);margin:0 0 10px;letter-spacing:-.015em} +.tpl-hermes-cyber-terminal .hc-h3{font-size:22px;font-weight:600;color:var(--hc-amber);margin:0 0 10px} +.tpl-hermes-cyber-terminal .hc-lede{font-size:18px;line-height:1.7;color:var(--hc-ink2);max-width:780px;font-family:'Inter','Noto Sans SC',sans-serif} +.tpl-hermes-cyber-terminal .hc-cursor{display:inline-block;width:12px;height:1em;background:var(--hc-green);vertical-align:middle;margin-left:6px;animation:hcBlink 1s steps(2) infinite} +@keyframes hcBlink{50%{opacity:0}} +.tpl-hermes-cyber-terminal .hc-card{background:var(--hc-surface);border:1px solid var(--hc-border);border-radius:10px;padding:20px 24px;position:relative} +.tpl-hermes-cyber-terminal .hc-card::before{content:'';position:absolute;top:-1px;left:12px;right:12px;height:2px;background:linear-gradient(90deg,transparent,var(--hc-green),transparent)} +.tpl-hermes-cyber-terminal .hc-card .lbl{font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--hc-ink2);margin-bottom:8px} +.tpl-hermes-cyber-terminal .hc-card .val{font-size:22px;font-weight:700;color:var(--hc-green);font-family:'JetBrains Mono',monospace} +.tpl-hermes-cyber-terminal .hc-card .desc{font-size:13px;color:var(--hc-ink2);margin-top:10px;line-height:1.55;font-family:'Inter',sans-serif} +.tpl-hermes-cyber-terminal .hc-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-top:24px} +.tpl-hermes-cyber-terminal .hc-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:24px} +.tpl-hermes-cyber-terminal .hc-codebox{background:#0c0d12;border:1px solid var(--hc-border);border-radius:10px;padding:22px 26px;font-family:'JetBrains Mono',monospace;font-size:14px;line-height:1.85;color:#d8d4c8;box-shadow:inset 0 0 60px rgba(126,211,164,.04)} +.tpl-hermes-cyber-terminal .hc-codebox .cm{color:#5a6068} +.tpl-hermes-cyber-terminal .hc-codebox .kw{color:var(--hc-amber)} +.tpl-hermes-cyber-terminal .hc-codebox .st{color:var(--hc-green)} +.tpl-hermes-cyber-terminal .hc-codebox .fn{color:var(--hc-cyan)} +.tpl-hermes-cyber-terminal .hc-codebox .var{color:var(--hc-rose)} +.tpl-hermes-cyber-terminal .hc-codebox .hl{color:#fff;background:rgba(126,211,164,.15);padding:0 4px;border-radius:3px} +.tpl-hermes-cyber-terminal .hc-tag{display:inline-block;font-family:'JetBrains Mono',monospace;font-size:11px;padding:3px 10px;border:1px solid var(--hc-border);border-radius:4px;color:var(--hc-green);background:rgba(126,211,164,.04);margin:2px 6px 2px 0;text-transform:uppercase;letter-spacing:.1em} +.tpl-hermes-cyber-terminal .hc-tag.amber{color:var(--hc-amber);border-color:rgba(233,197,138,.2);background:rgba(233,197,138,.04)} +.tpl-hermes-cyber-terminal .hc-tag.red{color:var(--hc-red);border-color:rgba(255,107,107,.25);background:rgba(255,107,107,.05)} +.tpl-hermes-cyber-terminal .hc-big{font-family:'JetBrains Mono',monospace;font-size:140px;font-weight:700;line-height:1;color:var(--hc-green);text-shadow:0 0 40px rgba(126,211,164,.4),0 0 80px rgba(126,211,164,.15);letter-spacing:-.04em} +.tpl-hermes-cyber-terminal .hc-footer{position:absolute;left:84px;right:84px;bottom:32px;display:flex;justify-content:space-between;font-size:10px;color:var(--hc-ink2);letter-spacing:.2em;text-transform:uppercase;border-top:1px solid rgba(126,211,164,.1);padding-top:14px} diff --git a/templates/full-decks/knowledge-arch-blueprint/README.md b/templates/full-decks/knowledge-arch-blueprint/README.md new file mode 100644 index 0000000..d163294 --- /dev/null +++ b/templates/full-decks/knowledge-arch-blueprint/README.md @@ -0,0 +1,11 @@ +# knowledge-arch-blueprint + +奶油纸 (`#F0EAE0`) 底 + 锈红 (`#B5392A`) 单一 accent + 硬黑描边卡片 + 虚线反馈回路箭头。灵感来自 `20260405 架构图v2.html` —— 那是一张真正的「技术白皮书架构图」,像建筑蓝图。 + +**Visual traits:** 暖米色纸底、微弱 48px 网格做 blueprint 感、硬朗 2px 黑边卡片、pipeline step-box 一字排开配 hero box 凸起、右上 insight 红色 callout、大小写 kicker 2.5-4px 字距、SVG 反馈回路虚线 + 箭头、Playfair 大字号衬线数据、无渐变无阴影极度克制。 + +**Use when:** 讲系统架构、数据流向、流程拆解;你想让内容看起来像一份正经技术白皮书而不是营销贴;需要严肃感、印刷感、可直接截图塞进 README。 + +**Source inspiration:** `20260405-Karpathy-知识库/20260405 架构图v2.html`. + +**Path:** `templates/full-decks/knowledge-arch-blueprint/index.html` diff --git a/templates/full-decks/knowledge-arch-blueprint/index.html b/templates/full-decks/knowledge-arch-blueprint/index.html new file mode 100644 index 0000000..35feda0 --- /dev/null +++ b/templates/full-decks/knowledge-arch-blueprint/index.html @@ -0,0 +1,190 @@ + + + + + +Knowledge Arch Blueprint + + + + + +
+ + +
+
+
+
+
Karpathy Stack · 架构图 v2
+

LLM 知识库
工程化蓝图

+

从「乱贴笔记」到「可审计、可纠错、可复用」的第二大脑 —— 这是我读完 Karpathy 的分享后画的一张系统图。

+
+
KEY INSIGHTKarpathy 原版缺一块:
反馈闭环让错误能回流纠正。
+
+ +
+
STEP 01
采集
浏览器剪藏、PDF、Podcast 转写、聊天记录
+
STEP 02
去噪
清洗导航栏、广告、重复段落、低信噪素材
+
STEP 03 · CORE
Wiki 化
结构化成双链笔记,实体、关系、属性全在一起
+
STEP 04
使用
Agent 随时检索、回答、再写入
+
+ +
+ + +
+
+
+
Chapter One
+

为什么 笔记
不够用了

+

当你的知识量超过记忆容量,
你需要的不是更多文件,而是一张可导航的图

+
+ +
+ + +
+
+
Problem · Solution
+

原版 vs 升级版

+
+
+
原版 Karpathy
+

一次性写入

+

采集 → 转写 → 存档,错了就错了。没有回路,没有修正机制,笔记越多越混乱。

+
+
+
升级 v2
+

反馈闭环

+

AI 使用知识库时记录每次 miss / 幻觉 / 过期事实,自动回灌到源文件,让笔记会自我修正。

+
+
+
+
普通节点
+
核心节点 · 反馈回路入口
+
—— 数据流    ┈┈ 反馈回路
+
+ +
+ + +
+
+
Implementation · Skill Manifest
+

反馈回路 怎么实现

+

一个 100 行的 Agent Skill,把「AI 用得顺不顺」回写成 vault 的一条条修订记录。

+
# skills/wiki-feedback/SKILL.md
+name: wiki-feedback
+trigger: "after every retrieval"
+
+on_hit:     record(query, path, used=true)
+on_miss:    record(query, reason="not-in-vault")
+on_wrong:   record(query, correction, path)
+
+nightly:
+  - aggregate misses → suggest new notes
+  - aggregate wrongs → diff-patch old notes
+  - commit to git, open PR for human review
+ +
+ + +
+
+
System Diagram
+

反馈回路全貌

+ + + + + + + + + + + + + Sources + web · pdf · chat + + + Clean + Split + defuddle / chunker + + + Vault (Wiki) + markdown · links + bases · canvas + + + Agent Use + retrieve / answer + + + + + + + + + + FEEDBACK · wrong / miss + + + + + NIGHTLY · suggest new sources + + + +
+ + +
+
+
After 6 Months
+

升级版 跑了半年 的数据

+
+
13

关键优化项 · 全部落地

+

-62%

幻觉率(相比无反馈回路版本)

+

+4.1×

单次检索命中率

+
+
+

自动修订 227 条

其中 189 条被人工批准合并,38 条被拒绝(数据已归档)。

+

新增笔记 412 篇

从 miss 日志聚类而来,每篇都有来源追溯。

+
+ +
+ + +
+
+
Next Step
+

开始你的 Wiki v2

+

不用重写所有笔记。先接一条回路,让 AI 的每次使用都在「改好」你的 vault。

+
+
TONIGHT
装 Skill
pnpm i -g @lewis/wiki-feedback
+
DAY 2
跑 7 天
观察 miss log 自动累积
+
DAY 8 · CORE
第一次审 PR
花 15 分钟 review 自动生成的修订
+
MONTH 1
开始信它
你的 vault 会变成活的
+
+ +
+ + +
+
+
+
END · blueprint v2
+

谢谢 · thanks

+

图纸、Skill、笔记模板都在 github.com/lewis/karpathy-wiki-v2

+
+ +
+ +
+ + + diff --git a/templates/full-decks/knowledge-arch-blueprint/style.css b/templates/full-decks/knowledge-arch-blueprint/style.css new file mode 100644 index 0000000..5766212 --- /dev/null +++ b/templates/full-decks/knowledge-arch-blueprint/style.css @@ -0,0 +1,49 @@ +/* knowledge-arch-blueprint — 奶油纸 + 建筑蓝图风 */ +.tpl-knowledge-arch-blueprint{ + --kb-bg:#F0EAE0; + --kb-ink:#1a1a1a; + --kb-ink2:#555; + --kb-ink3:#aaa; + --kb-rust:#B5392A; + --kb-rust-soft:rgba(181,57,42,.08); + --kb-line:#cec8be; + background:var(--kb-bg); + color:var(--kb-ink); + font-family:'Inter','Noto Sans SC',-apple-system,sans-serif; +} +.tpl-knowledge-arch-blueprint .slide{background:var(--kb-bg);color:var(--kb-ink);padding:64px 80px} +.tpl-knowledge-arch-blueprint .kb-grid-bg{position:absolute;inset:0;pointer-events:none;opacity:.35;background-image:linear-gradient(rgba(26,26,26,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(26,26,26,.06) 1px,transparent 1px);background-size:48px 48px;mask-image:radial-gradient(ellipse at center,black 40%,transparent 85%)} +.tpl-knowledge-arch-blueprint .slide > *{position:relative;z-index:2} +.tpl-knowledge-arch-blueprint .kb-kicker{font-size:13px;font-weight:800;letter-spacing:4px;text-transform:uppercase;color:var(--kb-rust);margin-bottom:12px} +.tpl-knowledge-arch-blueprint .kb-h1{font-size:66px;font-weight:900;line-height:1.08;color:#111;margin:0 0 14px;letter-spacing:-.02em} +.tpl-knowledge-arch-blueprint .kb-h1 span.rust{color:var(--kb-rust)} +.tpl-knowledge-arch-blueprint .kb-sub{font-size:20px;color:#666;line-height:1.55;max-width:780px} +.tpl-knowledge-arch-blueprint .kb-insight{display:inline-block;background:var(--kb-rust);color:#fff;border-radius:10px;padding:16px 22px;font-size:14px;font-weight:700;line-height:1.5;max-width:340px;box-shadow:0 8px 24px rgba(181,57,42,.22)} +.tpl-knowledge-arch-blueprint .kb-insight .kk{font-size:10px;letter-spacing:2px;opacity:.7;display:block;margin-bottom:6px;font-weight:800} +.tpl-knowledge-arch-blueprint .kb-section-label{font-size:11px;font-weight:800;letter-spacing:3.5px;text-transform:uppercase;color:#aaa;margin:30px 0 12px;display:flex;align-items:center;gap:14px} +.tpl-knowledge-arch-blueprint .kb-section-label::after{content:'';flex:1;height:1px;background:var(--kb-line)} +.tpl-knowledge-arch-blueprint .kb-pipeline{display:flex;align-items:stretch;gap:14px;margin-top:24px} +.tpl-knowledge-arch-blueprint .kb-step{flex:1;border:2px solid #1a1a1a;border-radius:12px;padding:22px 18px;background:#fff;position:relative;min-height:200px;display:flex;flex-direction:column} +.tpl-knowledge-arch-blueprint .kb-step.hero{background:var(--kb-rust);border-color:var(--kb-rust);color:#fff;flex:1.25;box-shadow:0 10px 32px rgba(181,57,42,.28);transform:translateY(-10px)} +.tpl-knowledge-arch-blueprint .kb-step-num{font-size:10px;font-weight:800;letter-spacing:2.5px;color:#bbb;margin-bottom:8px;text-transform:uppercase} +.tpl-knowledge-arch-blueprint .kb-step.hero .kb-step-num{color:rgba(255,255,255,.6)} +.tpl-knowledge-arch-blueprint .kb-step-title{font-size:22px;font-weight:900;line-height:1.15;color:#111;margin-bottom:8px} +.tpl-knowledge-arch-blueprint .kb-step.hero .kb-step-title{color:#fff} +.tpl-knowledge-arch-blueprint .kb-step-body{font-size:13px;line-height:1.55;color:#555;margin-top:auto} +.tpl-knowledge-arch-blueprint .kb-step.hero .kb-step-body{color:rgba(255,255,255,.88)} +.tpl-knowledge-arch-blueprint .kb-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:24px} +.tpl-knowledge-arch-blueprint .kb-card{background:#fff;border:2px solid #1a1a1a;border-radius:12px;padding:22px 24px} +.tpl-knowledge-arch-blueprint .kb-card h4{font-size:20px;font-weight:900;margin-bottom:6px} +.tpl-knowledge-arch-blueprint .kb-card p{font-size:14px;color:#555;line-height:1.55} +.tpl-knowledge-arch-blueprint .kb-legend{display:flex;gap:18px;flex-wrap:wrap;margin-top:22px;font-size:12px;color:#666} +.tpl-knowledge-arch-blueprint .kb-legend .d{display:flex;align-items:center;gap:8px} +.tpl-knowledge-arch-blueprint .kb-legend .b{width:14px;height:14px;border:2px solid #1a1a1a;border-radius:3px} +.tpl-knowledge-arch-blueprint .kb-legend .b.rust{background:var(--kb-rust);border-color:var(--kb-rust)} +.tpl-knowledge-arch-blueprint .kb-footer{position:absolute;left:80px;right:80px;bottom:36px;display:flex;justify-content:space-between;font-size:11px;color:#999;letter-spacing:.15em;text-transform:uppercase;border-top:1px solid var(--kb-line);padding-top:16px} +.tpl-knowledge-arch-blueprint .kb-mono{font-family:'JetBrains Mono',monospace} +.tpl-knowledge-arch-blueprint .kb-codebox{background:#1a1a1a;color:#f0eae0;border-radius:12px;padding:22px 26px;font-family:'JetBrains Mono',monospace;font-size:14px;line-height:1.8;margin-top:20px;border:2px solid #1a1a1a} +.tpl-knowledge-arch-blueprint .kb-codebox .cm{color:#7a766c} +.tpl-knowledge-arch-blueprint .kb-codebox .kw{color:#e8a87c} +.tpl-knowledge-arch-blueprint .kb-codebox .st{color:#b3d1bc} +.tpl-knowledge-arch-blueprint .kb-codebox .hl{color:var(--kb-rust);background:rgba(255,255,255,.08);padding:0 4px;border-radius:3px} +.tpl-knowledge-arch-blueprint .kb-big-num{font-family:'Playfair Display',Georgia,serif;font-size:200px;font-weight:900;line-height:.9;color:var(--kb-rust);letter-spacing:-.04em} diff --git a/templates/full-decks/obsidian-claude-gradient/README.md b/templates/full-decks/obsidian-claude-gradient/README.md new file mode 100644 index 0000000..7c0465c --- /dev/null +++ b/templates/full-decks/obsidian-claude-gradient/README.md @@ -0,0 +1,11 @@ +# obsidian-claude-gradient + +GitHub-dark (`#0d1117`) + 紫色 ambient radial + 60px 遮罩网格 + 紫→蓝→绿渐变文字。灵感来自 `20260406-obsidian-claude/slides.html` 的 `--accent #7c3aed`、`.cbg` 双 radial cover、`.cgrid` 60px 遮罩网格以及 `.g` 三停渐变。 + +**Visual traits:** 深灰蓝底 + 紫蓝 radial 晕染 + 暗网格遮罩、居中对齐的标题/正文、圆角紫色 pill tag、linear `#a855f7→#60a5fa→#34d399` 渐变字、GitHub-ish 代码色 (`#010409` 背景 + 紫/蓝/橙/绿 token)、紫色左边框 highlight 块、简洁 step 列表。 + +**Use when:** 讲一个开发者友好的工作流、MCP / Agent / Dev tool 教程;你希望气质接近 GitHub Blog / Linear Changelog;内容以配置文件 + 步骤为主。 + +**Source inspiration:** `20260406-obsidian-claude/slides.html`. + +**Path:** `templates/full-decks/obsidian-claude-gradient/index.html` diff --git a/templates/full-decks/obsidian-claude-gradient/index.html b/templates/full-decks/obsidian-claude-gradient/index.html new file mode 100644 index 0000000..ce9612f --- /dev/null +++ b/templates/full-decks/obsidian-claude-gradient/index.html @@ -0,0 +1,144 @@ + + + + + +Obsidian × Claude Gradient + + + + + +
+ + +
+
+
+
01 / 08
+
● OBSIDIAN × CLAUDE · 第二大脑
+

把 Obsidian 和 Claude
拧成 一条神经

+

不是又一个 AI 笔记插件 —— 是让 Claude 真正理解你 vault 的结构、链接、双向引用,
然后在你想写东西之前就把资料准备好。

+
+ 🧠 Markdown-native + ⚡ MCP-ready + 🔗 双链理解 +
+
+ + +
+
+
+
02 / 08
+
● CHAPTER 01
+

Why not Notion?

+

当你的知识多到会互相引用时,
「文件夹」就不够了,「数据库」也不是答案。

+
+ + +
+
+
+
03 / 08
+
● COMPARE
+

Notion vs Obsidian · 对 AI 友好度

+
+
+ NOTION +

数据库原生

+

适合结构化任务、团队协作,但是——
• AI 要走 API,拿不到实时全文
• 嵌套块结构复杂,token 成本高
• 本地化差,没法当长期记忆

+
+
+ OBSIDIAN +

纯 Markdown + 双链

+

对 AI 天生友好 ——
• 所有东西就是文件,Claude 直接读
• 双链 = 天然 graph,抽实体几乎零成本
• 离线、可 git、可 diff、可回滚

+
+
+
💡 关键洞察:AI 不需要「更聪明的数据库」,它需要「能被它自己读懂的文件系统」。
+
+ + +
+
+
+
04 / 08
+
● SETUP · 4 STEPS
+

从 0 到第一次「AI 写笔记」

+
+
1

装 Obsidian + 开 Local REST API 插件

社区插件,一个勾就开。它让外部进程能 read/write 你的 vault。

+
2

接 Claude Desktop + obsidian-mcp server

MCP 一个配置文件就能接,token 填 vault 的 api key。

+
3

装 5 个 obsidian-skills

markdown / bases / canvas / cli / defuddle —— 让 Claude 知道怎么正确使用 Obsidian。

+
4

让 Claude 自己整理一次

「帮我把最近 10 篇笔记里的重复概念合并,生成一张新的 MOC」—— 90 秒出结果。

+
+
+ + +
+
+
+
05 / 08
+
● MCP CONFIG
+

claude_desktop_config.json

+
// ~/Library/Application Support/Claude/claude_desktop_config.json
+{
+  "mcpServers": {
+    "obsidian": {
+      "command": "npx",
+      "args": ["-y", "@modelcontextprotocol/server-obsidian"],
+      "env": {
+        "OBSIDIAN_API_KEY": "xxxxxxxxxxxxxxxx",
+        "OBSIDIAN_HOST": "http://127.0.0.1:27123"
+      }
+    }
+  }
+}
+

重启 Claude Desktop,输入 /mcp,你会看到 obsidian 已连。

+
+ + +
+
+
+
06 / 08
+
● 3 MONTHS IN
+

跑了 90 天,我的 vault 数据

+
+
1,842

notes in vault

+
6.3k

backlinks (由 AI 自动补)

+
-74%

找资料平均耗时

+
+
最大收益不是「AI 帮我写」,而是「AI 帮我把旧笔记重新连起来」—— 每周 30 分钟,vault 就会主动生长。
+
+ + +
+
+
+
07 / 08
+
● CTA · 今晚可以做
+
+
不要再找「AI 笔记应用」了。
你要的是一个 文件夹 + 一条神经
+
— 我自己,用了 90 天后
+
+
+ ⬇ obsidian.md + ⬇ Claude Desktop + ⬇ obsidian-mcp + ⬇ obsidian-skills × 5 +
+
+ + +
+
+
+
08 / 08
+
Thanks.
+

配置模板、skill manifest、我的 vault 结构图都在 github.com/lewis/obsidian-claude

+
+ +
+ + + diff --git a/templates/full-decks/obsidian-claude-gradient/style.css b/templates/full-decks/obsidian-claude-gradient/style.css new file mode 100644 index 0000000..e27048c --- /dev/null +++ b/templates/full-decks/obsidian-claude-gradient/style.css @@ -0,0 +1,59 @@ +/* obsidian-claude-gradient — 紫色暗底 + GitHub-ish 渐变卡 */ +.tpl-obsidian-claude-gradient{ + --oc-bg:#0d1117; + --oc-surface:#161b22; + --oc-surface2:#21262d; + --oc-border:#30363d; + --oc-accent:#7c3aed; + --oc-accent2:#a855f7; + --oc-accent3:#c084fc; + --oc-green:#3fb950; + --oc-blue:#58a6ff; + --oc-orange:#f97316; + --oc-yellow:#fbbf24; + --oc-red:#f87171; + --oc-text:#e6edf3; + --oc-dim:#8b949e; + --oc-dimmer:#484f58; + background:var(--oc-bg); + color:var(--oc-text); + font-family:'Inter','Noto Sans SC','PingFang SC',-apple-system,sans-serif; +} +.tpl-obsidian-claude-gradient .slide{background:var(--oc-bg);color:var(--oc-text);padding:64px 88px;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;overflow:hidden} +.tpl-obsidian-claude-gradient .oc-cbg{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 28% 38%,rgba(124,58,237,.25) 0%,transparent 60%),radial-gradient(ellipse at 72% 62%,rgba(88,166,255,.18) 0%,transparent 60%)} +.tpl-obsidian-claude-gradient .oc-cgrid{position:absolute;inset:0;pointer-events:none;background-image:linear-gradient(rgba(48,54,61,.4) 1px,transparent 1px),linear-gradient(90deg,rgba(48,54,61,.4) 1px,transparent 1px);background-size:60px 60px;mask-image:radial-gradient(ellipse at center,black 35%,transparent 80%)} +.tpl-obsidian-claude-gradient .slide > *{position:relative;z-index:2} +.tpl-obsidian-claude-gradient .oc-snum{position:absolute;top:24px;right:36px;color:var(--oc-dimmer);font-size:12px;letter-spacing:.1em;z-index:3} +.tpl-obsidian-claude-gradient .oc-tag{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--oc-accent3);background:rgba(124,58,237,.14);border:1px solid rgba(168,85,247,.3);padding:5px 16px;border-radius:999px;margin-bottom:22px} +.tpl-obsidian-claude-gradient .oc-h1{font-size:72px;font-weight:800;line-height:1.08;letter-spacing:-.02em;margin:0 0 10px;color:var(--oc-text)} +.tpl-obsidian-claude-gradient .oc-h2{font-size:44px;font-weight:700;line-height:1.18;letter-spacing:-.015em;margin:0 0 14px} +.tpl-obsidian-claude-gradient .oc-sub{font-size:19px;color:var(--oc-dim);line-height:1.65;max-width:720px;margin-top:14px} +.tpl-obsidian-claude-gradient .oc-g{background:linear-gradient(135deg,#a855f7 0%,#60a5fa 55%,#34d399 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent} +.tpl-obsidian-claude-gradient .oc-card{background:var(--oc-surface);border:1px solid var(--oc-border);border-radius:14px;padding:22px 26px;text-align:left;position:relative;overflow:hidden} +.tpl-obsidian-claude-gradient .oc-card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(168,85,247,.4),transparent)} +.tpl-obsidian-claude-gradient .oc-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:18px;width:100%;max-width:1000px;margin-top:24px} +.tpl-obsidian-claude-gradient .oc-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;width:100%;max-width:1080px;margin-top:24px} +.tpl-obsidian-claude-gradient .oc-badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 11px;border-radius:999px;margin-bottom:10px} +.tpl-obsidian-claude-gradient .oc-bp{background:rgba(168,85,247,.15);color:var(--oc-accent3)} +.tpl-obsidian-claude-gradient .oc-bb{background:rgba(88,166,255,.15);color:var(--oc-blue)} +.tpl-obsidian-claude-gradient .oc-bg{background:rgba(63,185,80,.15);color:var(--oc-green)} +.tpl-obsidian-claude-gradient .oc-bo{background:rgba(249,115,22,.15);color:var(--oc-orange)} +.tpl-obsidian-claude-gradient .oc-code{background:#010409;border:1px solid var(--oc-border);border-radius:12px;padding:20px 24px;font-family:'JetBrains Mono',monospace;font-size:14px;line-height:1.85;width:100%;max-width:860px;text-align:left;color:#e6edf3} +.tpl-obsidian-claude-gradient .oc-code .cp{color:var(--oc-green)} +.tpl-obsidian-claude-gradient .oc-code .cc{color:var(--oc-blue)} +.tpl-obsidian-claude-gradient .oc-code .ca{color:var(--oc-accent3)} +.tpl-obsidian-claude-gradient .oc-code .cm{color:var(--oc-dimmer)} +.tpl-obsidian-claude-gradient .oc-code .cs{color:var(--oc-orange)} +.tpl-obsidian-claude-gradient .oc-hl{background:rgba(124,58,237,.1);border:1px solid rgba(168,85,247,.3);border-left:4px solid var(--oc-accent2);border-radius:0 12px 12px 0;padding:16px 22px;font-size:16px;line-height:1.7;max-width:860px;text-align:left} +.tpl-obsidian-claude-gradient .oc-steps{display:flex;flex-direction:column;gap:0;width:100%;max-width:820px;text-align:left} +.tpl-obsidian-claude-gradient .oc-step{display:flex;gap:20px;align-items:flex-start;padding:18px 0;border-bottom:1px solid var(--oc-border)} +.tpl-obsidian-claude-gradient .oc-step:last-child{border-bottom:none} +.tpl-obsidian-claude-gradient .oc-sn{width:36px;height:36px;flex-shrink:0;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:15px;background:linear-gradient(135deg,var(--oc-accent),var(--oc-blue));color:#fff} +.tpl-obsidian-claude-gradient .oc-sc h4{font-size:17px;font-weight:600;margin-bottom:6px;color:var(--oc-text)} +.tpl-obsidian-claude-gradient .oc-sc p{font-size:14px;color:var(--oc-dim);line-height:1.6} +.tpl-obsidian-claude-gradient .oc-pill{display:inline-flex;align-items:center;gap:8px;background:var(--oc-surface2);border:1px solid var(--oc-border);border-radius:999px;padding:7px 18px;font-size:14px;font-weight:500;color:var(--oc-text);margin:4px 6px 4px 0} +.tpl-obsidian-claude-gradient .oc-quote{max-width:800px} +.tpl-obsidian-claude-gradient .oc-quote blockquote{font-size:26px;font-weight:500;line-height:1.6;position:relative;padding:0 36px;margin:0;color:var(--oc-text)} +.tpl-obsidian-claude-gradient .oc-quote blockquote::before{content:'"';position:absolute;left:-6px;top:-22px;font-size:78px;color:var(--oc-accent);opacity:.4;font-family:Georgia,serif;line-height:1} +.tpl-obsidian-claude-gradient .oc-quote .attr{margin-top:20px;font-size:13px;color:var(--oc-dim)} +.tpl-obsidian-claude-gradient .oc-big{font-size:140px;font-weight:900;line-height:.95;letter-spacing:-.04em} diff --git a/templates/full-decks/pitch-deck/README.md b/templates/full-decks/pitch-deck/README.md new file mode 100644 index 0000000..d8d8d32 --- /dev/null +++ b/templates/full-decks/pitch-deck/README.md @@ -0,0 +1,9 @@ +# pitch-deck + +Classic 10-slide YC/VC seed pitch: cover, problem, solution, product, market, business model, traction, team, ask, thanks. + +Clean white background, bold blue→purple gradient accent, oversized headlines and big numbers — the look investors expect when they skim 40 decks a day. + +**Use when:** pitching a fundraise, office hours, or a "state of the company" update. Swap copy, keep structure. +**Feel:** confident, data-forward, founder-friendly. +**Brand color:** override `--grad` in `style.css` to re-skin. diff --git a/templates/full-decks/pitch-deck/index.html b/templates/full-decks/pitch-deck/index.html new file mode 100644 index 0000000..82b857a --- /dev/null +++ b/templates/full-decks/pitch-deck/index.html @@ -0,0 +1,148 @@ + + + + +Lumen · Pitch Deck + + + + + + +
+ + +
+
+
+
Lumen
+

Seed round · 2026

+

The operating system
for solo founders.

+

One workspace for billing, CRM, contracts and taxes — built for the 70M people running a business of one.

+ +
+ + +
+ 01 +

PROBLEM

+

Solo founders duct-tape
7+ tools to stay alive.

+
+

Fragmentation

Stripe, QuickBooks, HubSpot, DocuSign, Notion, Gusto, a spreadsheet. Nothing talks.

+

$480/mo wasted

Average solo founder pays for 9 SaaS seats they only half-use.

+

14 hrs / week lost

Copy-pasting between tools instead of selling.

+
+
+ + +
+ 02 +

SOLUTION

+

Lumen is one spine
for the business of one.

+

Invoice a client → the payment lands → the tax is reserved → the contract is filed → your dashboard updates. In one app. Without plumbing.

+
+ Billing + CRM + Contracts + Taxes + Banking +
+
+ + +
+ 03 +

PRODUCT

+

Built around "jobs to be done".

+
+

Get paid

Invoices, subscriptions and Stripe/Wise payouts with a single click. ACH, card, wire, crypto.

+

Stay legal

E-sign contracts from templates. Auto-file 1099s and quarterly estimates.

+

Sell smarter

Lead inbox, pipeline, email sequences. No separate CRM.

+

See the business

Live P&L, runway, top customers, churn. One dashboard, zero spreadsheets.

+
+
+ + +
+ 04 +

MARKET

+

A very big small business.

+
+
73M
solo businesses in the US + EU
+
$186B
TAM · horizontal SaaS spend
+
9.4%
CAGR through 2030
+
+

Creators, consultants, indie devs, coaches, freelancers — the fastest-growing segment of the workforce, and the most under-served by tooling.

+
+ + +
+ 05 +

BUSINESS MODEL

+

Flat SaaS + payment rake.

+
+

Starter

$29
/ month · core billing + CRM
+

Pro

$79
/ month · contracts, taxes, banking
+

+ Payments

0.4%
interchange rake on processed volume
+
+

Blended LTV $1,920 · CAC payback 5 months at current funnel.

+
+ + +
+ 06 +

TRACTION

+

6 months, growing 38% MoM.

+
+
$6kOct
+
$11kNov
+
$17kDec
+
$26kJan
+
$38kFeb
+
$54kMar
+
+

2,140 paying customers · NPS 72 · Net retention 118%

+
+ + +
+ 07 +

TEAM

+

Shipped at scale before.

+
+
MC

Maya Chen

CEO · ex-Stripe billing lead. 8 yrs in payments.

+
RP

Raj Patel

CTO · ex-Linear. Built multiplayer sync at 10M users.

+
EK

Elena Kim

Head of Design · ex-Notion. Shipped the mobile relaunch.

+
+
+ + +
+

THE ASK

+
+

Raising $4.5M seed.

+

18 months of runway to reach $3M ARR. 40% engineering, 35% growth, 15% compliance/banking licenses, 10% runway buffer.

+
+
$4.5M
SAFE · post-money cap $28M
+
18 mo
runway to Series A
+
$3M
ARR target by close
+
+
+
+ + +
+
+
+
Thanks.
+

maya@lumen.app · lumen.app/investors

+
+ Let's talk + Deck v4.2 · Apr 2026 +
+
+
+ +
+ + diff --git a/templates/full-decks/pitch-deck/style.css b/templates/full-decks/pitch-deck/style.css new file mode 100644 index 0000000..b565999 --- /dev/null +++ b/templates/full-decks/pitch-deck/style.css @@ -0,0 +1,40 @@ +/* pitch-deck — classic YC/VC pitch */ +.tpl-pitch-deck{ + --bg:#ffffff;--bg-soft:#f6f7fb;--surface:#ffffff;--surface-2:#f2f4fa; + --border:rgba(20,25,60,.08);--border-strong:rgba(20,25,60,.18); + --text-1:#0d1130;--text-2:#4a5070;--text-3:#8a90ad; + --accent:#3b5bff;--accent-2:#7a46ff;--accent-3:#d94cff; + --grad:linear-gradient(135deg,#3b5bff 0%,#7a46ff 55%,#d94cff 100%); + --grad-soft:linear-gradient(135deg,#eef1ff,#f4edff 55%,#fbedff); + --radius:20px;--radius-lg:28px; + --shadow:0 14px 40px rgba(20,25,60,.08),0 2px 8px rgba(20,25,60,.04); + font-family:'Inter','Noto Sans SC',sans-serif; +} +.tpl-pitch-deck .slide{padding:88px 112px} +.tpl-pitch-deck .kicker{color:var(--accent);font-weight:700} +.tpl-pitch-deck .h1{font-size:86px;line-height:1.02;font-weight:900;letter-spacing:-.035em} +.tpl-pitch-deck .h2{font-size:62px;font-weight:800;letter-spacing:-.03em} +.tpl-pitch-deck .mega{font-size:180px;font-weight:900;line-height:.95;letter-spacing:-.05em;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent} +.tpl-pitch-deck .mega-sub{font-size:28px;color:var(--text-2);margin-top:18px} +.tpl-pitch-deck .cover-bg{position:absolute;inset:0;background:var(--grad-soft);z-index:-1} +.tpl-pitch-deck .cover-blob{position:absolute;right:-140px;top:-140px;width:560px;height:560px;border-radius:50%;background:var(--grad);filter:blur(8px);opacity:.35;z-index:-1} +.tpl-pitch-deck .brand-dot{display:inline-block;width:14px;height:14px;border-radius:50%;background:var(--grad);margin-right:10px;vertical-align:middle} +.tpl-pitch-deck .brand{font-weight:800;font-size:22px;letter-spacing:-.02em} +.tpl-pitch-deck .card{border-radius:var(--radius)} +.tpl-pitch-deck .num-tag{font-family:'Inter',sans-serif;font-size:14px;font-weight:700;color:var(--accent);letter-spacing:.12em} +.tpl-pitch-deck .big-q{font-family:'Playfair Display',serif;font-size:56px;line-height:1.15;font-weight:700;letter-spacing:-.02em;max-width:22ch} +.tpl-pitch-deck .metric{display:flex;flex-direction:column;gap:6px} +.tpl-pitch-deck .metric .n{font-size:72px;font-weight:900;letter-spacing:-.035em;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;line-height:1} +.tpl-pitch-deck .metric .l{color:var(--text-2);font-size:16px} +.tpl-pitch-deck .team-card{text-align:center;padding:32px 20px} +.tpl-pitch-deck .avatar{width:96px;height:96px;border-radius:50%;margin:0 auto 14px;background:var(--grad);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:32px} +.tpl-pitch-deck .ask-box{background:var(--grad);color:#fff;padding:56px 64px;border-radius:var(--radius-lg);box-shadow:0 30px 70px rgba(59,91,255,.35)} +.tpl-pitch-deck .ask-box .h2{color:#fff} +.tpl-pitch-deck .ask-box .dim{color:rgba(255,255,255,.85)} +.tpl-pitch-deck .traction-bar{display:flex;align-items:flex-end;gap:14px;height:240px;margin-top:24px} +.tpl-pitch-deck .traction-bar .bar{flex:1;background:var(--grad);border-radius:8px 8px 0 0;position:relative;min-height:20px} +.tpl-pitch-deck .traction-bar .bar span{position:absolute;bottom:-28px;left:0;right:0;text-align:center;font-size:13px;color:var(--text-3)} +.tpl-pitch-deck .traction-bar .bar em{position:absolute;top:-28px;left:0;right:0;text-align:center;font-size:14px;font-weight:700;font-style:normal;color:var(--text-1)} +.tpl-pitch-deck .section-num{font-size:220px;font-weight:900;line-height:.9;color:var(--surface-2);position:absolute;right:72px;bottom:40px;z-index:0;letter-spacing:-.05em} +.tpl-pitch-deck .slide > *{position:relative;z-index:1} +.tpl-pitch-deck .deck-footer{color:var(--text-3)} diff --git a/templates/full-decks/product-launch/README.md b/templates/full-decks/product-launch/README.md new file mode 100644 index 0000000..27bbbb0 --- /dev/null +++ b/templates/full-decks/product-launch/README.md @@ -0,0 +1,8 @@ +# product-launch + +8-slide consumer product announcement deck: hero cover, "introducing" moment, three feature slides, how-it-works, pricing tiers, and a closing testimonial + pre-order CTA. + +Mixes dark hero slides (for show-off moments) with light slides (for details and pricing). Warm orange→peach gradient accent feels confident and human; easy to re-skin for any brand. + +**Use when:** launching a product, announcing a v2, internal all-hands reveals, press kit decks. +**Feel:** Apple-event-on-a-budget — confident, tactile, uncluttered. diff --git a/templates/full-decks/product-launch/index.html b/templates/full-decks/product-launch/index.html new file mode 100644 index 0000000..17ea401 --- /dev/null +++ b/templates/full-decks/product-launch/index.html @@ -0,0 +1,121 @@ + + + + +Halo v2 · Launch + + + + + + +
+ + +
+
+
◎ Halo
+

Launch · April 2026

+

Meet Halo v2.
Your ears,
rewritten.

+

Studio-grade spatial audio in the lightest open-ear earbuds ever made.

+ +
+ + +
+
+

Introducing

+

Halo v2

+

Four years of research. Three generations of silicon. One product you'll forget you're wearing.

+
+
+ + +
+

01 · The sound

+

Hear the room
around the music.

+
+

Open-ear spatial

16mm titanium drivers angled into the ear canal. You hear the song and the world at once.

+

Lossless 24-bit

aptX Lossless and Hi-Res LDAC over Bluetooth 5.4. No dongles, no compromises.

+

Adaptive EQ

Tunes itself to the shape of your ear every 120 seconds.

+
+
+ + +
+

02 · The fit

+

4.9 grams.
All-day forgettable.

+
+

Liquid-silicone hook

Wraps behind the ear like a glasses arm. Never falls out on a run.

+

IP57 sweat + rain

Take them in the ocean. Rinse them under the tap. We dare you.

+

14h + 42h case

A full workweek of commutes on one charge of the case.

+
+
+ + +
+

03 · The intelligence

+

An AI that listens
so you don't have to.

+
+

Live translate

Real-time translation in 41 languages. Whispered directly into your ear, with a 380ms lag.

+

Meeting recap

Double-tap to record. Walk away with a summary, action items, and a searchable transcript.

+
+
+ + +
+

How it works

+

Three taps. You're in.

+
+
1

Open the case near your phone

iOS and Android pair automatically over Bluetooth LE. No app downloads required.

+
2

Pick your profile

Commute, Focus, Workout, Cinema. Each is a complete audio + transparency recipe.

+
3

Just listen

Halo adapts to your ear shape, your environment, and your hearing profile — continuously.

+
+
+ + +
+

Pricing

+

Pick your Halo.

+
+
+

Halo Lite

+
$179
+

Open-ear audio, IP57, 12h battery.

+
  • AAC + SBC
  • Single-tap controls
  • USB-C charging
+
+
+

Halo v2 · Pro

+
$279
+

Everything, in its best form.

+
  • Hi-Res Lossless
  • Live translate · 41 lang
  • Wireless + MagSafe charging
  • Adaptive EQ
+
+
+

Halo Studio

+
$399
+

For creators and field recorders.

+
  • 32-bit binaural capture
  • XLR dongle included
  • Lifetime firmware
+
+
+
+ + +
+

One more thing

+
+
+

"I forgot I was wearing them. Then I remembered, and I didn't want to take them off."

+

— Marques Lin, The Verge · early review

+
+
+

Ships May 14 · from

+
$279
+ Pre-order Halo v2 → +

Free shipping · 45-day return · 2-year warranty

+
+
+
+ +
+ + diff --git a/templates/full-decks/product-launch/style.css b/templates/full-decks/product-launch/style.css new file mode 100644 index 0000000..9584000 --- /dev/null +++ b/templates/full-decks/product-launch/style.css @@ -0,0 +1,39 @@ +/* product-launch — modern announcement deck */ +.tpl-product-launch{ + --bg:#ffffff;--bg-soft:#f5f5f7;--surface:#ffffff;--surface-2:#f2f2f6; + --ink:#0a0a12;--ink-2:#3a3a44; + --border:rgba(10,10,18,.08);--border-strong:rgba(10,10,18,.18); + --text-1:#0a0a12;--text-2:#4a4a58;--text-3:#8a8a96; + --accent:#ff5a36;--accent-2:#ff8c5a;--accent-3:#ffb36b; + --grad:linear-gradient(120deg,#ff5a36 0%,#ff8c5a 60%,#ffb36b 100%); + --radius:22px;--radius-lg:32px; + --shadow:0 20px 60px rgba(10,10,18,.1); + font-family:'Inter','Noto Sans SC',sans-serif; +} +.tpl-product-launch .slide{padding:80px 112px} +.tpl-product-launch .slide.dark{background:#0a0a12;color:#f5f5f7} +.tpl-product-launch .slide.dark .h1,.tpl-product-launch .slide.dark .h2,.tpl-product-launch .slide.dark h3,.tpl-product-launch .slide.dark h4{color:#fff} +.tpl-product-launch .slide.dark .lede,.tpl-product-launch .slide.dark .dim{color:rgba(245,245,247,.72)} +.tpl-product-launch .slide.dark .card{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.12);box-shadow:none;backdrop-filter:blur(20px)} +.tpl-product-launch .slide.dark .kicker{color:var(--accent-2)} +.tpl-product-launch .h1{font-size:96px;line-height:.98;font-weight:900;letter-spacing:-.045em} +.tpl-product-launch .h2{font-size:64px;font-weight:800;letter-spacing:-.035em} +.tpl-product-launch .hero-shot{position:absolute;right:-60px;top:50%;transform:translateY(-50%);width:640px;height:640px;border-radius:50%;background:var(--grad);filter:blur(2px);opacity:.85} +.tpl-product-launch .hero-shot::after{content:"";position:absolute;inset:80px;border-radius:40px;background:linear-gradient(160deg,rgba(255,255,255,.3),transparent 60%),#1a1a28;box-shadow:inset 0 2px 0 rgba(255,255,255,.2)} +.tpl-product-launch .hero-shot::before{content:"Halo v2";position:absolute;inset:80px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:44px;font-weight:900;letter-spacing:-.02em;z-index:2;border-radius:40px} +.tpl-product-launch .brand{font-size:18px;font-weight:800;letter-spacing:-.02em} +.tpl-product-launch .feature-card{padding:40px 36px;border-radius:var(--radius-lg);background:var(--surface);border:1px solid var(--border);position:relative;overflow:hidden} +.tpl-product-launch .feature-card .icon{width:60px;height:60px;border-radius:18px;background:var(--grad);display:flex;align-items:center;justify-content:center;color:#fff;font-size:28px;font-weight:900;margin-bottom:20px} +.tpl-product-launch .step{display:flex;gap:24px;align-items:flex-start} +.tpl-product-launch .step .n{flex:none;width:56px;height:56px;border-radius:50%;background:var(--grad);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:22px} +.tpl-product-launch .price-card{padding:40px 32px;border-radius:var(--radius-lg);border:1.5px solid var(--border);background:var(--surface);text-align:left} +.tpl-product-launch .price-card.pro{background:#0a0a12;color:#fff;border-color:#0a0a12;transform:scale(1.04);box-shadow:0 30px 80px rgba(255,90,54,.25)} +.tpl-product-launch .price-card.pro .dim{color:rgba(255,255,255,.7)} +.tpl-product-launch .price-card h4{font-size:16px;text-transform:uppercase;letter-spacing:.1em;color:var(--accent)} +.tpl-product-launch .price-card.pro h4{color:var(--accent-2)} +.tpl-product-launch .price-card .amount{font-size:64px;font-weight:900;letter-spacing:-.035em;margin:14px 0} +.tpl-product-launch .price-card ul{list-style:none;padding:0;margin:20px 0 0} +.tpl-product-launch .price-card li{padding:8px 0;font-size:15px;color:var(--text-2);border-top:1px solid var(--border)} +.tpl-product-launch .price-card.pro li{color:rgba(255,255,255,.8);border-color:rgba(255,255,255,.12)} +.tpl-product-launch .cta-btn{display:inline-block;padding:20px 40px;border-radius:999px;background:var(--grad);color:#fff;font-weight:700;font-size:20px;box-shadow:0 20px 50px rgba(255,90,54,.4)} +.tpl-product-launch .testimonial{max-width:44ch;font-family:'Playfair Display',serif;font-size:44px;line-height:1.25;font-weight:500;letter-spacing:-.01em} diff --git a/templates/full-decks/tech-sharing/README.md b/templates/full-decks/tech-sharing/README.md new file mode 100644 index 0000000..0ff4946 --- /dev/null +++ b/templates/full-decks/tech-sharing/README.md @@ -0,0 +1,8 @@ +# tech-sharing · 技术分享 + +8-slide engineering talk deck: cover (topic + speaker), agenda, context, two deep-dive slides, a code example, takeaways, Q&A. + +Dark GitHub-ish palette (`#0d1117`) with JetBrains Mono accents and syntax-highlighted terminal blocks. Built to be screenshotted and shared on an internal wiki or Twitter. + +**Use when:** tech-sharing Fridays, brown-bag talks, lunch & learns, conference submissions. +**Feel:** GitHub README meets a good conference talk — dark, monospaced, dense but readable. diff --git a/templates/full-decks/tech-sharing/index.html b/templates/full-decks/tech-sharing/index.html new file mode 100644 index 0000000..a64d132 --- /dev/null +++ b/templates/full-decks/tech-sharing/index.html @@ -0,0 +1,156 @@ + + + + +Rust 异步运行时内部机制 · Tech Sharing + + + + + + +
+ + +
+

tech-sharing / 2026-04-15

+

Rust 异步运行时
到底在调度什么?

+

Future::poll 到 tokio 的 work-stealing,一次讲清楚。

+
@lewisplatform infra · 45 min + Q&A
+ +
+ + +
+

agenda.toml

+

今天的路线图

+
+
01Context: 为什么需要 async~5min
+
02Deep dive 1: Future & Waker~12min
+
03Deep dive 2: Tokio scheduler~15min
+
04Code: 手写一个 mini-runtime~8min
+
05Takeaways + Q&A~5min
+
+
+ + +
+

// context

+

问题:一个线程一个连接,
撑不住 10 万并发。

+
+

Thread-per-conn

每条连接一根 OS 线程,栈 2–8MB。10 万连接 = 几百 GB RAM。

❌ 不现实
+

Event loop (C)

epoll/kqueue + 回调地狱。快,但写起来痛苦且容易出 bug。

😩 callback hell
+

Async / await

看起来像同步代码,编译成状态机。一根线程跑几千任务。

✅ Rust 选这个
+
+
+ + +
+

deep-dive · 1 / 2

+

Future 其实只有一个方法。

+
+
+

编译器把 async fn 变成一个实现了 Future trait 的匿名状态机。运行时只做一件事:反复 poll 它,直到返回 Ready

+
+ Pending Ready(T) Waker.wake() +
+
+
+
future.rs
+
pub trait Future {
+    type Output;
+    fn poll(
+        self: Pin<&mut Self>,
+        cx: &mut Context<'_>,
+    ) -> Poll<Self::Output>;
+}
+
+// Poll::Pending   → 挂起,等 waker 唤醒
+// Poll::Ready(v)  → 完成,产出 v
+
+
+
+ + +
+

deep-dive · 2 / 2

+

Tokio 是一个偷任务的小工。

+
+
+

Multi-thread runtime = N 个 worker,每个 worker 有自己的本地队列。空闲的 worker 会去别人队列里"偷"任务。

+
+
✦ local queue · 256 slots
+
✦ global injection queue
+
✦ work-stealing @ 50% steal ratio
+
✦ LIFO slot for cache locality
+
+
+
+

scheduler tick loop

+
+
1. pop from LIFO slot
+
2. else pop from local queue
+
3. else drain global queue (every 61 ticks)
+
4. else steal from random victim
+
5. else park the thread
+
+
+
+
+ + +
+

mini-runtime.rs · ~40 LOC

+

手写一个最小 runtime。

+
+
src/main.rs
+
use std::collections::VecDeque;
+use std::sync::{Arc, Mutex};
+use std::task::{Context, Poll, Wake, Waker};
+
+struct Task(Mutex<Pin<Box<dyn Future<Output = ()> + Send>>>);
+
+impl Wake for Task {
+    fn wake(self: Arc<Self>) { QUEUE.lock().unwrap().push_back(self); }
+}
+
+fn block_on<F: Future<Output = ()> + Send + 'static>(fut: F) {
+    spawn(fut);
+    while let Some(task) = QUEUE.lock().unwrap().pop_front() {
+        let waker = Waker::from(task.clone());
+        let mut cx = Context::from_waker(&waker);
+        let mut fut = task.0.lock().unwrap();
+        let _ = fut.as_mut().poll(&mut cx); // 就是这一行
+    }
+}
+
+
+ + +
+

// takeaways

+

三件事带回去。

+
+

1 · async 是零成本抽象

编译成状态机,没有运行时虚表,没有 GC。

+

2 · Waker 是脉搏

Future 不主动做事,运行时靠 waker 决定"什么时候再 poll"。

+

3 · 别在 async 里阻塞

一行 std::fs::read 能让整个 worker 停摆。用 spawn_blocking

+
+

延伸阅读:tokio.rs/blog/2019-10-scheduler · rust-lang.github.io/async-book

+
+ + +
+
+
?
+

Questions?

+

github.com/lewis · @lewis on slack

+
+ slides: git.co/rt-deck + code: git.co/mini-rt +
+
+
+ +
+ + diff --git a/templates/full-decks/tech-sharing/style.css b/templates/full-decks/tech-sharing/style.css new file mode 100644 index 0000000..10aaf6f --- /dev/null +++ b/templates/full-decks/tech-sharing/style.css @@ -0,0 +1,49 @@ +/* tech-sharing — 技术分享 dark, code-forward */ +.tpl-tech-sharing{ + --bg:#0d1117;--bg-soft:#161b22;--surface:#161b22;--surface-2:#1c2230; + --border:rgba(139,148,158,.22);--border-strong:rgba(139,148,158,.4); + --text-1:#e6edf3;--text-2:#8b949e;--text-3:#6e7681; + --accent:#7ee787;--accent-2:#79c0ff;--accent-3:#ff7b72; + --grad:linear-gradient(120deg,#7ee787 0%,#79c0ff 60%,#d2a8ff 100%); + --radius:14px;--radius-lg:20px; + --shadow:0 20px 60px rgba(0,0,0,.5); + font-family:'Inter','Noto Sans SC',sans-serif; +} +.tpl-tech-sharing{background:#0d1117;color:var(--text-1)} +.tpl-tech-sharing .slide{padding:72px 96px;background:#0d1117;color:var(--text-1)} +.tpl-tech-sharing .slide::before{content:"";position:absolute;inset:0;background: + radial-gradient(60% 50% at 90% 10%,rgba(121,192,255,.12),transparent 60%), + radial-gradient(50% 50% at 10% 90%,rgba(126,231,135,.08),transparent 60%); + pointer-events:none;z-index:0} +.tpl-tech-sharing .slide>*{position:relative;z-index:1} +.tpl-tech-sharing .h1{font-size:78px;line-height:1.03;font-weight:800;letter-spacing:-.03em;color:#fff} +.tpl-tech-sharing .h2{font-size:54px;font-weight:700;letter-spacing:-.025em;color:#fff} +.tpl-tech-sharing h3,.tpl-tech-sharing h4{color:#fff} +.tpl-tech-sharing .kicker{color:var(--accent);font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:600;text-transform:none;letter-spacing:.02em} +.tpl-tech-sharing .kicker::before{content:"> "} +.tpl-tech-sharing .mono{font-family:'JetBrains Mono','IBM Plex Mono',monospace} +.tpl-tech-sharing .terminal{background:#010409;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:0 30px 80px rgba(0,0,0,.6);font-family:'JetBrains Mono',monospace;font-size:15px;line-height:1.65} +.tpl-tech-sharing .terminal .bar{display:flex;align-items:center;gap:8px;padding:12px 16px;background:#161b22;border-bottom:1px solid var(--border);font-size:12px;color:var(--text-3)} +.tpl-tech-sharing .terminal .dot{width:12px;height:12px;border-radius:50%;background:#ff5f56} +.tpl-tech-sharing .terminal .dot:nth-child(2){background:#ffbd2e} +.tpl-tech-sharing .terminal .dot:nth-child(3){background:#27c93f} +.tpl-tech-sharing .terminal pre{margin:0;padding:24px 28px;color:#e6edf3;overflow:auto;max-height:440px} +.tpl-tech-sharing .kw{color:#ff7b72} +.tpl-tech-sharing .fn{color:#d2a8ff} +.tpl-tech-sharing .str{color:#a5d6ff} +.tpl-tech-sharing .cmt{color:#8b949e;font-style:italic} +.tpl-tech-sharing .num{color:#79c0ff} +.tpl-tech-sharing .card{background:var(--surface);border:1px solid var(--border);box-shadow:none} +.tpl-tech-sharing .card-accent{border-top:3px solid var(--accent)} +.tpl-tech-sharing .pill{background:var(--surface-2);color:var(--text-2);border-color:var(--border)} +.tpl-tech-sharing .pill-accent{background:rgba(126,231,135,.12);color:var(--accent);border-color:rgba(126,231,135,.35)} +.tpl-tech-sharing .tag{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:6px;font-family:'JetBrains Mono',monospace;font-size:12px;background:var(--surface-2);border:1px solid var(--border);color:var(--text-2)} +.tpl-tech-sharing .agenda-row{display:flex;align-items:baseline;gap:24px;padding:18px 0;border-bottom:1px dashed var(--border);font-family:'JetBrains Mono',monospace} +.tpl-tech-sharing .agenda-row .num{color:var(--accent);flex:none;width:48px} +.tpl-tech-sharing .agenda-row .t{color:#fff;font-size:24px;flex:1;font-family:'Inter',sans-serif;font-weight:600} +.tpl-tech-sharing .agenda-row .d{color:var(--text-3);font-size:13px} +.tpl-tech-sharing .speaker{display:flex;align-items:center;gap:14px;margin-top:28px} +.tpl-tech-sharing .speaker .av{width:56px;height:56px;border-radius:50%;background:var(--grad)} +.tpl-tech-sharing .speaker b{display:block;color:#fff;font-size:18px} +.tpl-tech-sharing .speaker span{color:var(--text-3);font-size:13px;font-family:'JetBrains Mono',monospace} +.tpl-tech-sharing .lede{color:var(--text-2)} diff --git a/templates/full-decks/testing-safety-alert/README.md b/templates/full-decks/testing-safety-alert/README.md new file mode 100644 index 0000000..6c4f4ef --- /dev/null +++ b/templates/full-decks/testing-safety-alert/README.md @@ -0,0 +1,11 @@ +# testing-safety-alert + +白底 + 红琥珀警示色 + 条纹危险边 + 大红 strike 和 pill。灵感来自 `20260412-AI测试与安全/xhs-ai-testing-safety-v2.html` 的 `.focus` 黑底白字块、hero quote box 和高对比 black-on-white 气质 —— 但把语气推到「警示 / 风控 / 事故报告」层级。 + +**Visual traits:** 顶部 45° 红黑斜条纹警示带、底部副条纹、`strike-through` 红色斜切的否定大字、L1/L2/L3 三档色卡 (绿/琥珀/红)、圆形前置指示灯 alert-box、policy-yaml 深色代码块带红色左边框 + `bad` 关键词高亮、红/绿复选框 checklist、Q1 事故柱状图。 + +**Use when:** 讲安全 / 风控 / 事故复盘 / 红队测试 / AI 上线前评估 / policy as code;你需要让观众立刻感到「这事严肃,别马虎」。 + +**Source inspiration:** `20260412-AI测试与安全/html/xhs-ai-testing-safety-v2.html`. + +**Path:** `templates/full-decks/testing-safety-alert/index.html` diff --git a/templates/full-decks/testing-safety-alert/index.html b/templates/full-decks/testing-safety-alert/index.html new file mode 100644 index 0000000..554a23e --- /dev/null +++ b/templates/full-decks/testing-safety-alert/index.html @@ -0,0 +1,183 @@ + + + + + +Testing Safety Alert + + + + + +
+ + +
+
+
ai safety · 高优先级01 / 08
+
2026 年最重要的一条判断
+

别再追问
AI 会不会干活
开始问:它出事谁负责

+

AI 出错的代价,不再是一次 bad response 这么简单 —— 它可能一次性写 300 份工单、提 80 个 PR、发 5000 封邮件。

+
+

风险已经规模化

+

「做错」成本 × N;「做对」收益 × N。
这就是为什么 测试、验收、安全、风控 会变成未来 3 年最贵的能力。

+
+
+ +
+ + +
+
+
section · risk 分级02 / 08
+
+
Chapter One
+

先分 等级

+

不是所有 AI 行为都同等危险。
先把「可撤销」和「不可撤销」分开,再谈流程。

+
+
+ +
+ + +
+
+
风险分级 · 3 levels03 / 08
+

三档风险,三种处理

+
+
L1 · 绿色

可撤销

写 draft、生成图片、起草文档。
错了 Ctrl+Z,零代价。
策略:放开跑

+
L2 · 琥珀

半可撤销

发 draft 邮件、提 PR、改 staging 数据。
错了要道歉 / 回滚。
策略:人工复核

+
L3 · 红色

不可撤销

发真实邮件、付款、删库、删 prod 数据。
错了就真错了。
策略:硬卡 + 双人审

+
+
+

绝不要让 agent 自己升级

+

L1 的任务不能自己变成 L2。授权必须是显式的、可撤销的、带过期时间的。

+
+
+ +
+ + +
+
+
policy as code04 / 08
+
别用文档管规则 · 用代码管规则
+

三十行 YAML,
红线硬卡

+
# safety-policy.yaml · compiled → runtime guard
+level_1_allow:
+  - tools: [write_draft, generate_image, read_docs]
+
+level_2_require_review:
+  - tools: [send_email_draft, open_pr, write_staging_db]
+    reviewer: human
+
+level_3_hard_block:
+  - tools: [send_real_email, transfer_money, delete_prod]
+    unless: two_human_sign_off AND within_24h
+
+forbidden_always:
+  - "rm -rf /"
+  - "drop table"
+  - "force push origin main"
+
+ +
+ + +
+
+
incident report · q105 / 08
+

我们 Q1 的 12 起 AI 事故

+

幸好全部捕获在 staging。但每一起都能上生产。

+ + + + + + + + + Jan + 5 + + + + + + Feb + 3 + + + + + + Mar + 4 + + + + L3 不可撤销 (3) + L2 需复核 (4) + L1 可恢复 (5) + 全部被 safety-policy 在 runtime 拦下, + 未进 prod。但 3 起 L3 非常惊险。 + + + +
+ +
+ + +
+
+
red-team checklist06 / 08
+

上线前 必过 7 道题

+
+
它能删除东西吗?有人类 review 吗?能 60 秒内回滚吗?
+
它的 prompt 注入能让它越权吗?(跑过红队提示词)
+
!
它处理 PII 吗?日志里是不是也有 PII?
+
上下游失败时,它会不会开始乱改其他资源?
+
!
并发 100 个 agent 一起跑会不会死锁?
+
错了能不能 立刻 停?(kill switch 能 2 秒内生效吗)
+
!
出事时有没有人值班?值班手册有没有 agent 专属章节?
+
+
+ +
+ + +
+
+
今晚就能动07 / 08
+

今晚先做 三件事

+
+
1 · 分级

给你的 agent
写 L1/L2/L3

把所有工具列出来,标上等级。不标的一律按 L3。

+
2 · 写 policy

policy.yaml
接 runtime

不要信 prompt 里的 "be careful",要信执行层的硬卡。

+
3 · kill switch

红按钮
能在 2 秒内停

CTO / on-call 都得知道怎么按。演练一次。

+
+
+

真正的安全不是 prompt,是流程

+

prompt 会被注入,流程不会。—— 把保护放在不可被说服的一层。

+
+
+ +
+ + +
+
+
please stay safe08 / 08
+
+
end of brief
+

谢谢 · thanks

+

policy.yaml 模板、红队 prompt 清单、事故复盘模板 —— 评论区扣「安全」。

+
+
+ +
+ +
+ + + diff --git a/templates/full-decks/testing-safety-alert/style.css b/templates/full-decks/testing-safety-alert/style.css new file mode 100644 index 0000000..4e17d57 --- /dev/null +++ b/templates/full-decks/testing-safety-alert/style.css @@ -0,0 +1,62 @@ +/* testing-safety-alert — 红/琥珀 警示风 · 白底高对比 */ +.tpl-testing-safety-alert{ + --ts-bg:#fffaf7; + --ts-ink:#14141a; + --ts-ink2:#4a4955; + --ts-muted:#8a8892; + --ts-line:rgba(20,20,26,.08); + --ts-red:#e0314a; + --ts-red-soft:#ffecee; + --ts-amber:#d97706; + --ts-amber-soft:#fff5e6; + --ts-green:#067647; + --ts-green-soft:#e8f8ee; + background:var(--ts-bg); + color:var(--ts-ink); + font-family:'Inter','Noto Sans SC','PingFang SC',-apple-system,sans-serif; +} +.tpl-testing-safety-alert .slide{background:var(--ts-bg);color:var(--ts-ink);padding:64px 84px} +.tpl-testing-safety-alert .ts-stripe{position:absolute;top:0;left:0;right:0;height:14px;background:repeating-linear-gradient(45deg,var(--ts-red) 0 18px,#111318 18px 36px)} +.tpl-testing-safety-alert .ts-stripe-b{position:absolute;bottom:0;left:0;right:0;height:6px;background:repeating-linear-gradient(45deg,var(--ts-red) 0 10px,#111318 10px 20px);opacity:.6} +.tpl-testing-safety-alert .ts-chrome{display:flex;justify-content:space-between;align-items:center;margin:22px 0 16px} +.tpl-testing-safety-alert .ts-alert-tag{display:inline-flex;align-items:center;gap:10px;padding:8px 18px;border-radius:10px;font-size:13px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;background:var(--ts-red);color:#fff;box-shadow:0 6px 18px rgba(224,49,74,.28)} +.tpl-testing-safety-alert .ts-alert-tag::before{content:'⚠';font-size:16px} +.tpl-testing-safety-alert .ts-alert-tag.amber{background:var(--ts-amber);box-shadow:0 6px 18px rgba(217,119,6,.25)} +.tpl-testing-safety-alert .ts-alert-tag.green{background:var(--ts-green);box-shadow:0 6px 18px rgba(6,118,71,.22)} +.tpl-testing-safety-alert .ts-alert-tag.green::before{content:'✓'} +.tpl-testing-safety-alert .ts-page{font-size:13px;color:var(--ts-muted);letter-spacing:.15em;font-weight:700} +.tpl-testing-safety-alert .ts-kicker{font-size:15px;font-weight:700;color:var(--ts-red);letter-spacing:.06em;margin-bottom:10px;text-transform:uppercase} +.tpl-testing-safety-alert .ts-h1{font-size:88px;font-weight:900;line-height:1.04;letter-spacing:-2px;margin:10px 0 16px;color:var(--ts-ink)} +.tpl-testing-safety-alert .ts-h1 .red{color:var(--ts-red)} +.tpl-testing-safety-alert .ts-h1 .strike{position:relative;display:inline-block} +.tpl-testing-safety-alert .ts-h1 .strike::after{content:'';position:absolute;left:-4%;right:-4%;top:50%;height:10px;background:var(--ts-red);transform:skewX(-12deg);opacity:.85} +.tpl-testing-safety-alert .ts-h2{font-size:54px;font-weight:900;line-height:1.1;letter-spacing:-1px;margin:0 0 14px} +.tpl-testing-safety-alert .ts-sub{font-size:22px;line-height:1.5;color:var(--ts-ink2);max-width:880px;margin-top:10px} +.tpl-testing-safety-alert .ts-highlight-red{display:inline-block;padding:4px 14px;background:var(--ts-red);color:#fff;border-radius:8px;font-weight:800} +.tpl-testing-safety-alert .ts-highlight-amber{display:inline-block;padding:4px 14px;background:var(--ts-amber-soft);color:var(--ts-amber);border-radius:8px;font-weight:800;border:1px solid rgba(217,119,6,.2)} +.tpl-testing-safety-alert .ts-highlight-green{display:inline-block;padding:4px 14px;background:var(--ts-green-soft);color:var(--ts-green);border-radius:8px;font-weight:800;border:1px solid rgba(6,118,71,.2)} +.tpl-testing-safety-alert .ts-alert-box{border:2px solid var(--ts-red);border-radius:18px;padding:26px 30px;background:linear-gradient(180deg,#fff 0%,var(--ts-red-soft) 100%);box-shadow:0 14px 36px rgba(224,49,74,.14);margin-top:24px;position:relative} +.tpl-testing-safety-alert .ts-alert-box::before{content:'';position:absolute;top:-11px;left:24px;width:22px;height:22px;background:var(--ts-red);border-radius:50%;box-shadow:0 0 0 6px rgba(224,49,74,.2)} +.tpl-testing-safety-alert .ts-alert-box.amber{border-color:var(--ts-amber);background:linear-gradient(180deg,#fff 0%,var(--ts-amber-soft) 100%);box-shadow:0 14px 36px rgba(217,119,6,.14)} +.tpl-testing-safety-alert .ts-alert-box.amber::before{background:var(--ts-amber);box-shadow:0 0 0 6px rgba(217,119,6,.2)} +.tpl-testing-safety-alert .ts-alert-box.green{border-color:var(--ts-green);background:linear-gradient(180deg,#fff 0%,var(--ts-green-soft) 100%);box-shadow:0 14px 36px rgba(6,118,71,.14)} +.tpl-testing-safety-alert .ts-alert-box.green::before{background:var(--ts-green);box-shadow:0 0 0 6px rgba(6,118,71,.2)} +.tpl-testing-safety-alert .ts-alert-box h3{font-size:34px;font-weight:900;margin:0 0 10px} +.tpl-testing-safety-alert .ts-alert-box p{font-size:17px;line-height:1.6;color:var(--ts-ink2);margin:0} +.tpl-testing-safety-alert .ts-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px} +.tpl-testing-safety-alert .ts-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-top:20px} +.tpl-testing-safety-alert .ts-card{border:1px solid var(--ts-line);border-radius:16px;padding:22px 24px;background:#fff;box-shadow:0 6px 20px rgba(17,19,24,.04)} +.tpl-testing-safety-alert .ts-card .lbl{font-size:12px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--ts-muted);margin-bottom:8px} +.tpl-testing-safety-alert .ts-card h4{font-size:26px;font-weight:900;line-height:1.2;margin-bottom:8px} +.tpl-testing-safety-alert .ts-card p{font-size:14px;color:var(--ts-ink2);line-height:1.55} +.tpl-testing-safety-alert .ts-checklist{display:flex;flex-direction:column;gap:12px;margin-top:20px;max-width:880px} +.tpl-testing-safety-alert .ts-check{display:flex;gap:16px;align-items:flex-start;padding:16px 20px;border:1px solid var(--ts-line);border-radius:14px;background:#fff} +.tpl-testing-safety-alert .ts-check .box{flex:0 0 32px;height:32px;border-radius:8px;border:2px solid var(--ts-red);display:grid;place-items:center;font-weight:900;color:var(--ts-red);background:var(--ts-red-soft)} +.tpl-testing-safety-alert .ts-check.ok .box{border-color:var(--ts-green);color:var(--ts-green);background:var(--ts-green-soft)} +.tpl-testing-safety-alert .ts-check .txt{font-size:18px;line-height:1.5;font-weight:600} +.tpl-testing-safety-alert .ts-codebox{background:#141418;color:#fff5ea;border-radius:14px;padding:22px 26px;font-family:'JetBrains Mono',monospace;font-size:14px;line-height:1.85;margin-top:20px;border-left:6px solid var(--ts-red)} +.tpl-testing-safety-alert .ts-codebox .cm{color:#7a756d} +.tpl-testing-safety-alert .ts-codebox .kw{color:#ffb38a} +.tpl-testing-safety-alert .ts-codebox .st{color:#b3e6c2} +.tpl-testing-safety-alert .ts-codebox .bad{color:#ff9aa8;font-weight:700} +.tpl-testing-safety-alert .ts-footer{position:absolute;left:84px;right:84px;bottom:36px;display:flex;justify-content:space-between;font-size:12px;color:var(--ts-muted);letter-spacing:.1em} diff --git a/templates/full-decks/weekly-report/README.md b/templates/full-decks/weekly-report/README.md new file mode 100644 index 0000000..3390dc0 --- /dev/null +++ b/templates/full-decks/weekly-report/README.md @@ -0,0 +1,8 @@ +# weekly-report · 周报 + +7-slide team weekly report: cover (week range), KPI grid, shipped items, a metric trend chart, blockers, next-week plan, thanks. + +Corporate-clarity palette: near-white background, blue→teal accent, ruled dividers and tiny mono tags (`FEAT`, `FIX`, `EXP`, `INFRA`). Data-dense, readable at a glance, and easy to skim in a standup. + +**Use when:** team weekly readouts, squad reviews, skip-level updates, cross-team "what shipped this week" mails. +**Feel:** Linear changelog meets a McKinsey KPI deck — serious, measured, actionable. diff --git a/templates/full-decks/weekly-report/index.html b/templates/full-decks/weekly-report/index.html new file mode 100644 index 0000000..0290b20 --- /dev/null +++ b/templates/full-decks/weekly-report/index.html @@ -0,0 +1,127 @@ + + + + +Growth Squad · Weekly W15 + + + + + + +
+ + +
+
+ +
W15 · 2026-04-07 → 2026-04-13
+
+

WEEKLY REPORT

+

本周:付费转化率
回到了 3.8%

+

6 个发布,3 个实验收敛,1 个阻塞项升级。整体健康。

+ +
+ + +
+

HIGHLIGHTS · KPIs

+

本周核心指标

+
+
Paid conv.
3.82%
▲ +0.4 pts WoW
+
MRR
$148k
▲ +6.1%
+
Signups
12,430
— +0.3%
+
D7 retention
41%
▼ -1.8 pts
+
NPS
64
▲ +3
+
Support tickets
318
— -12
+
p95 latency
412ms
▼ +38ms
+
Deploys
37
▲ +9
+
+
+ + +
+

SHIPPED THIS WEEK · 6 items

+

Shipped

+
+
FEAT
New onboarding checklist v3

4-step checklist replaces the old 7-step modal. A/B won +18% activation.

@may
+
FEAT
Stripe Tax auto-filing

Quarterly filings now handled for 12 US states via Stripe Tax API.

@raj
+
EXP
Pricing page hero test

"From $29" vs "Free trial" headline. Free-trial wins +22% click-through.

@lewis
+
FIX
Edge case in SSO redirect

Google Workspace users with custom domains now land on the correct workspace.

@eli
+
INFRA
Postgres 16 upgrade

Zero-downtime migration. Query p50 down 14%, p95 down 9%.

@raj
+
FEAT
Referral rewards v1

Both sides get 1 month free. Dashboard + email flow live behind flag.

@may
+
+
+ + +
+

METRIC DEEP-DIVE

+

Paid conversion, last 8 weeks

+
+

Paid conv. rate · weekly

target: 4.0%
+
+
W08
+
W09
+
W10
+
W11
+
W12
+
W13
+
W14
+
W15
+
+

Drop in W13 tracked to a broken Stripe webhook (fixed W14). Rebound in W15 is driven by the new onboarding checklist.

+
+
+ + +
+

BLOCKERS · 3 items

+

Needs attention

+
+
+

p95 latency regressed to 412ms (+38ms)

+

Traced to the new recommender service under load. Adding caching layer + connection pooling.

+
owner: @raj · ETA: W16 Wed · severity: medium
+
+
+

Apple Pay disabled in EU for 3 days

+

Stripe credential rotation wasn't synced to the EU account. Fixed, but cost ~$4.2k in lost checkouts.

+
owner: @eli · severity: high · postmortem in progress
+
+
+

D7 retention down 1.8 points

+

Cohort analysis shows it's isolated to the free-trial pricing test. Need to decide: kill test, or push through W16.

+
owner: @lewis · needs decision from @may by Monday
+
+
+
+ + +
+

NEXT WEEK · W16 plan

+

下周重点

+
+
@raj
Ship recommender cache layerblocker · must land Wed
+
@may
Referral rewards · flag rollout to 100%milestone · targets +3% WoW signups
+
@lewis
Pricing test: decision doc + readoutdeadline Mon noon
+
@eli
Apple Pay postmortem + runbook updateinclude in W16 eng review
+
squad
Q2 OKR planning offsiteThu 2–5pm · async pre-reads Wed
+
+
+ + +
+
+

FIN · week 15

+

Thanks, team 🫶

+

Solid week. Rebound earned, not luck.

+
+ Next report: Mon W16 + questions → #growth-squad +
+
+
+ +
+ + diff --git a/templates/full-decks/weekly-report/style.css b/templates/full-decks/weekly-report/style.css new file mode 100644 index 0000000..0b7274c --- /dev/null +++ b/templates/full-decks/weekly-report/style.css @@ -0,0 +1,55 @@ +/* weekly-report — corporate clarity */ +.tpl-weekly-report{ + --bg:#fafbfc;--bg-soft:#f3f5f9;--surface:#ffffff;--surface-2:#f3f5f9; + --border:rgba(22,30,55,.09);--border-strong:rgba(22,30,55,.2); + --text-1:#161e37;--text-2:#50586b;--text-3:#8b92a5; + --accent:#2e63eb;--accent-2:#0ea5b5;--accent-3:#f59e0b; + --good:#10b981;--warn:#f59e0b;--bad:#ef4444; + --grad:linear-gradient(120deg,#2e63eb,#0ea5b5); + --radius:14px;--radius-lg:18px; + --shadow:0 6px 20px rgba(22,30,55,.06),0 1px 3px rgba(22,30,55,.04); + font-family:'Inter','Noto Sans SC',sans-serif; +} +.tpl-weekly-report .slide{padding:64px 88px;background:var(--bg)} +.tpl-weekly-report .h1{font-size:64px;line-height:1.05;font-weight:800;letter-spacing:-.025em} +.tpl-weekly-report .h2{font-size:42px;font-weight:700;letter-spacing:-.02em} +.tpl-weekly-report .kicker{color:var(--accent);font-size:12px;font-weight:700} +.tpl-weekly-report .cover-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:48px} +.tpl-weekly-report .logo{font-weight:800;font-size:18px;letter-spacing:-.01em} +.tpl-weekly-report .logo::before{content:"■";color:var(--accent);margin-right:8px} +.tpl-weekly-report .week-chip{display:inline-block;padding:8px 18px;border-radius:8px;background:var(--surface);border:1px solid var(--border);font-family:'JetBrains Mono',monospace;font-size:13px;color:var(--text-2)} +.tpl-weekly-report .kpi{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px 26px;position:relative;overflow:hidden} +.tpl-weekly-report .kpi .label{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(--text-3);font-weight:600} +.tpl-weekly-report .kpi .value{font-size:48px;font-weight:800;letter-spacing:-.03em;margin-top:8px;line-height:1} +.tpl-weekly-report .kpi .delta{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:6px;font-size:12px;font-weight:700;margin-top:10px} +.tpl-weekly-report .kpi .delta.up{background:rgba(16,185,129,.12);color:var(--good)} +.tpl-weekly-report .kpi .delta.down{background:rgba(239,68,68,.12);color:var(--bad)} +.tpl-weekly-report .kpi .delta.flat{background:rgba(139,146,165,.14);color:var(--text-2)} +.tpl-weekly-report .kpi::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent)} +.tpl-weekly-report .kpi.good::before{background:var(--good)} +.tpl-weekly-report .kpi.warn::before{background:var(--warn)} +.tpl-weekly-report .kpi.bad::before{background:var(--bad)} +.tpl-weekly-report .ship-item{display:flex;gap:14px;padding:14px 0;border-bottom:1px solid var(--border)} +.tpl-weekly-report .ship-item .tag{flex:none;padding:3px 10px;border-radius:6px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;height:22px;display:inline-flex;align-items:center} +.tpl-weekly-report .tag.feat{background:rgba(46,99,235,.12);color:var(--accent)} +.tpl-weekly-report .tag.fix{background:rgba(16,185,129,.12);color:var(--good)} +.tpl-weekly-report .tag.exp{background:rgba(245,158,11,.14);color:var(--warn)} +.tpl-weekly-report .tag.infra{background:rgba(14,165,181,.12);color:var(--accent-2)} +.tpl-weekly-report .ship-item b{color:var(--text-1);font-weight:600} +.tpl-weekly-report .ship-item span.owner{margin-left:auto;color:var(--text-3);font-size:12px;font-family:'JetBrains Mono',monospace} +.tpl-weekly-report .chart{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:28px} +.tpl-weekly-report .chart-bars{display:flex;align-items:flex-end;gap:16px;height:220px;margin-top:20px} +.tpl-weekly-report .chart-bars .col{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;position:relative} +.tpl-weekly-report .chart-bars .col .b{width:100%;background:var(--grad);border-radius:6px 6px 0 0;min-height:6px;position:relative} +.tpl-weekly-report .chart-bars .col .b::after{content:attr(data-v);position:absolute;top:-22px;left:0;right:0;text-align:center;font-size:12px;font-weight:700;color:var(--text-1)} +.tpl-weekly-report .chart-bars .col .lbl{font-size:11px;color:var(--text-3);font-family:'JetBrains Mono',monospace} +.tpl-weekly-report .blocker{background:var(--surface);border-left:3px solid var(--bad);padding:16px 20px;border-radius:8px;margin-bottom:12px} +.tpl-weekly-report .blocker h4{font-size:16px;margin-bottom:4px} +.tpl-weekly-report .blocker p{font-size:13px;color:var(--text-2);margin:0} +.tpl-weekly-report .blocker .meta{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--text-3);margin-top:6px} +.tpl-weekly-report .next-row{display:grid;grid-template-columns:110px 1fr;gap:16px;padding:14px 0;border-bottom:1px dashed var(--border);align-items:baseline} +.tpl-weekly-report .next-row .owner{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--accent)} +.tpl-weekly-report .next-row .task{color:var(--text-1);font-weight:500} +.tpl-weekly-report .next-row .task span{color:var(--text-3);font-size:12px;margin-left:8px} +.tpl-weekly-report .lede{color:var(--text-2)} +.tpl-weekly-report .card{background:var(--surface)} diff --git a/templates/full-decks/xhs-pastel-card/README.md b/templates/full-decks/xhs-pastel-card/README.md new file mode 100644 index 0000000..17a90c3 --- /dev/null +++ b/templates/full-decks/xhs-pastel-card/README.md @@ -0,0 +1,11 @@ +# xhs-pastel-card + +暖奶油 `#fef8f1` 底 + 模糊彩色 blob + Playfair italic 衬线大字 + 整色马卡龙卡片(桃 / 薄荷 / 天 / 丁香 / 柠檬 / 玫瑰)。共性提取自 `20260412-obsidian-skills/html/xhs-obsidian-skills.html` 的 `soft-purple/pink/blue/green/orange/teal` 软色卡系统,以及 `20260409 v2-白底版` 的胶囊 chip 顶部条。 + +**Visual traits:** 三颗柔光 blob 作背景、顶部 chip+page 组合、Playfair italic 做 accent 词(em / rose / mint)、整色圆角 28px 大卡片、italic Playfair 序号 01-04、donut SVG 图、小 divider 条 + 渐变、衬线正文做标题 / sans 做正文混排。 + +**Use when:** 生活方式 / 个人成长 / 轻内容 / 情感向的小红书贴或个人演讲;你想要一种「不那么科技感、偏杂志偏手作」的气质;适合讲「慢」「休息」「温柔」主题。 + +**Source inspiration:** `20260412-obsidian-skills/html/xhs-obsidian-skills.html` + `20260409` v2-白底版(共性 pastel 系统)。 + +**Path:** `templates/full-decks/xhs-pastel-card/index.html` diff --git a/templates/full-decks/xhs-pastel-card/index.html b/templates/full-decks/xhs-pastel-card/index.html new file mode 100644 index 0000000..18844b6 --- /dev/null +++ b/templates/full-decks/xhs-pastel-card/index.html @@ -0,0 +1,147 @@ + + + + + +XHS Pastel Card + + + + + +
+ + +
+
+
+
+
A soft manifesto
01 · 08
+
Living With AI · 2026
+

放慢一点,
AI 帮你
过一种 更温柔
的生活

+
+

这不是一份效率指南。这是一份「怎么用 AI 少做一些事」的清单 —— 把挤出来的 4 小时还给你自己。

+ +
+ + +
+
+
+
Chapter one
02 · 08
+
+
先问自己
+

什么事
是你 其实不想做 的?

+

不是「不得不做」,是「做的时候灵魂在叹气」。

+
+ +
+ + +
+
+
Four little escapes
03 · 08
+

四件可以
完全交给 AI 的小事

+
+
01

回复那种「收到」邮件

它们不需要你思考。让 AI 按你的语气自动处理,一周省 40 分钟。

+
02

订餐厅、改签、查路线

一句话外包出去。你只负责选最后选项,不负责翻十个 app。

+
03

把会议录音变成行动项

录音 → 摘要 → todo 一键完成。你只需要确认和签字。

+
04

整理上周拍的 300 张照片

按事件分类、挑 10 张精选、写图说。整理档案这件事终于被自动化了。

+
+ +
+ + +
+
+
+
A small pause
04 · 08
+
+

效率工具的终点,不是 做更多
而是 有资格做更少

+
+

当你把「收到」邮件、订餐、行程、照片整理都交出去,你才会惊讶地发现 —— 原来一周有 4 个小时是空的。

+
+ +
+ + +
+
+
My auto-reply prompt
05 · 08
+

把「收到邮件
自动化的 一段 prompt

+
# auto-reply skill
+when email matches "收到 / 好的 / 确认 / 收到谢谢":
+  reply:
+    tone: "温柔,简短,不要太商业"
+    max_lines: 2
+    sign_with: "— Lewis"
+
+always_skip:
+  - from: ["家人", "伴侣", "亲密朋友"]
+  - contains: ["紧急", "合同", "付款"]
+
+# 一周省 38 分钟,测过
+ +
+ + +
+
+
Your week, rebuilt
06 · 08
+

一周 4 小时 还给自己

+
+ + + + + + + + + + + 4h + per week saved + +
+
+

48 min · 邮件

+

72 min · 订/改/查

+

56 min · 会议摘要

+

24 min · 照片整理

+
+
+
+ +
+ + +
+
+
+
This weekend
07 · 08
+

这周末,
先给自己 放一个小假

+
+

Saturday morning

挑一个你最烦的小事,写 prompt,让它从此不再烦你。

+
🌸

Saturday afternoon

去散步。什么都不带。AI 在家帮你看着消息。

+
🌙

Sunday night

复盘:哪 4 小时是真的空的?下周继续。

+
+ +
+ + +
+
+
+
thanks for reading
+

谢谢 · thanks

+
+

如果你也想过更温柔的一周,评论区跟我说说你打算把哪一件事先交出去 ♡

+
+ +
+ +
+ + + diff --git a/templates/full-decks/xhs-pastel-card/style.css b/templates/full-decks/xhs-pastel-card/style.css new file mode 100644 index 0000000..55c3f56 --- /dev/null +++ b/templates/full-decks/xhs-pastel-card/style.css @@ -0,0 +1,66 @@ +/* xhs-pastel-card — 柔和马卡龙大色块封面风 */ +.tpl-xhs-pastel-card{ + --xp-bg:#fef8f1; + --xp-ink:#2a2340; + --xp-ink2:#5b5470; + --xp-muted:#9089a8; + --xp-peach:#ffd8c2; + --xp-peach-d:#f48b5c; + --xp-mint:#c8ecd8; + --xp-mint-d:#2e9d70; + --xp-sky:#c9dcfb; + --xp-sky-d:#4e7ed6; + --xp-lilac:#ddd0f5; + --xp-lilac-d:#7b5dc4; + --xp-lemon:#fdf0b2; + --xp-lemon-d:#c8910a; + --xp-rose:#fcd0dd; + --xp-rose-d:#c94673; + background:var(--xp-bg); + color:var(--xp-ink); + font-family:'Playfair Display','Noto Serif SC','Inter','Noto Sans SC',Georgia,serif; +} +.tpl-xhs-pastel-card .slide{background:var(--xp-bg);color:var(--xp-ink);padding:76px 90px} +.tpl-xhs-pastel-card .xp-blob{position:absolute;border-radius:50%;filter:blur(2px);opacity:.85;z-index:0} +.tpl-xhs-pastel-card .xp-blob.b1{width:420px;height:420px;background:radial-gradient(circle,var(--xp-peach),transparent 70%);top:-8%;right:-6%} +.tpl-xhs-pastel-card .xp-blob.b2{width:360px;height:360px;background:radial-gradient(circle,var(--xp-lilac),transparent 72%);bottom:-10%;left:-8%} +.tpl-xhs-pastel-card .xp-blob.b3{width:260px;height:260px;background:radial-gradient(circle,var(--xp-mint),transparent 72%);top:40%;right:20%} +.tpl-xhs-pastel-card .slide > *{position:relative;z-index:2} +.tpl-xhs-pastel-card .xp-topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:22px;font-family:'Inter','Noto Sans SC',sans-serif} +.tpl-xhs-pastel-card .xp-chip{display:inline-flex;align-items:center;gap:10px;padding:8px 18px;border-radius:999px;background:#fff;border:1.5px solid rgba(42,35,64,.1);font-size:13px;font-weight:600;letter-spacing:.08em;color:var(--xp-ink2);text-transform:uppercase} +.tpl-xhs-pastel-card .xp-chip::before{content:'';width:9px;height:9px;border-radius:50%;background:var(--xp-peach-d)} +.tpl-xhs-pastel-card .xp-chip.mint::before{background:var(--xp-mint-d)} +.tpl-xhs-pastel-card .xp-chip.sky::before{background:var(--xp-sky-d)} +.tpl-xhs-pastel-card .xp-chip.lilac::before{background:var(--xp-lilac-d)} +.tpl-xhs-pastel-card .xp-chip.rose::before{background:var(--xp-rose-d)} +.tpl-xhs-pastel-card .xp-page{font-family:'Inter',sans-serif;font-size:13px;color:var(--xp-muted);letter-spacing:.12em;font-weight:600} +.tpl-xhs-pastel-card .xp-kicker{font-family:'Inter',sans-serif;font-size:14px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--xp-peach-d);margin-bottom:14px} +.tpl-xhs-pastel-card .xp-h1{font-size:96px;font-weight:900;line-height:1.05;letter-spacing:-2px;margin:0 0 18px;color:var(--xp-ink);font-family:'Playfair Display','Noto Serif SC',serif} +.tpl-xhs-pastel-card .xp-h1 em{font-style:italic;color:var(--xp-peach-d);font-family:'Playfair Display',serif} +.tpl-xhs-pastel-card .xp-h1 .rose{color:var(--xp-rose-d);font-style:italic} +.tpl-xhs-pastel-card .xp-h1 .mint{color:var(--xp-mint-d);font-style:italic} +.tpl-xhs-pastel-card .xp-h2{font-size:60px;font-weight:800;line-height:1.1;letter-spacing:-1px;margin:0 0 14px;font-family:'Playfair Display','Noto Serif SC',serif} +.tpl-xhs-pastel-card .xp-sub{font-family:'Inter','Noto Sans SC',sans-serif;font-size:21px;line-height:1.6;color:var(--xp-ink2);max-width:800px;font-weight:400} +.tpl-xhs-pastel-card .xp-card{border-radius:28px;padding:30px 34px;background:#fff;box-shadow:0 14px 40px rgba(42,35,64,.08);position:relative;overflow:hidden} +.tpl-xhs-pastel-card .xp-card.peach{background:var(--xp-peach)} +.tpl-xhs-pastel-card .xp-card.mint{background:var(--xp-mint)} +.tpl-xhs-pastel-card .xp-card.sky{background:var(--xp-sky)} +.tpl-xhs-pastel-card .xp-card.lilac{background:var(--xp-lilac)} +.tpl-xhs-pastel-card .xp-card.lemon{background:var(--xp-lemon)} +.tpl-xhs-pastel-card .xp-card.rose{background:var(--xp-rose)} +.tpl-xhs-pastel-card .xp-card .xp-num{font-family:'Playfair Display',serif;font-size:68px;font-weight:900;font-style:italic;line-height:1;opacity:.85} +.tpl-xhs-pastel-card .xp-card h4{font-size:22px;font-weight:800;margin:8px 0;font-family:'Inter','Noto Sans SC',sans-serif} +.tpl-xhs-pastel-card .xp-card p{font-family:'Inter','Noto Sans SC',sans-serif;font-size:15px;line-height:1.55;color:var(--xp-ink2)} +.tpl-xhs-pastel-card .xp-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:26px} +.tpl-xhs-pastel-card .xp-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:18px;margin-top:26px} +.tpl-xhs-pastel-card .xp-grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:24px} +.tpl-xhs-pastel-card .xp-hero-card{background:#fff;border-radius:36px;padding:40px 46px;margin-top:28px;box-shadow:0 20px 50px rgba(42,35,64,.1)} +.tpl-xhs-pastel-card .xp-quote{font-family:'Playfair Display','Noto Serif SC',serif;font-size:40px;font-weight:800;font-style:italic;line-height:1.3;color:var(--xp-ink)} +.tpl-xhs-pastel-card .xp-quote::before{content:'“';font-size:100px;line-height:.8;display:block;color:var(--xp-peach-d);opacity:.7} +.tpl-xhs-pastel-card .xp-footer{position:absolute;left:90px;right:90px;bottom:40px;display:flex;justify-content:space-between;font-family:'Inter',sans-serif;font-size:12px;color:var(--xp-muted);letter-spacing:.1em} +.tpl-xhs-pastel-card .xp-divider{width:90px;height:4px;background:linear-gradient(90deg,var(--xp-peach-d),var(--xp-rose-d));border-radius:2px;margin:20px 0} +.tpl-xhs-pastel-card .xp-codebox{background:#2a2340;color:#fef8f1;border-radius:24px;padding:26px 30px;font-family:'JetBrains Mono',monospace;font-size:14px;line-height:1.85;margin-top:22px} +.tpl-xhs-pastel-card .xp-codebox .cm{color:#9089a8} +.tpl-xhs-pastel-card .xp-codebox .kw{color:#ffc6a0} +.tpl-xhs-pastel-card .xp-codebox .st{color:#c8ecd8} +.tpl-xhs-pastel-card .xp-codebox .hl{color:#fcd0dd;font-weight:700} diff --git a/templates/full-decks/xhs-post/README.md b/templates/full-decks/xhs-post/README.md new file mode 100644 index 0000000..d95450b --- /dev/null +++ b/templates/full-decks/xhs-post/README.md @@ -0,0 +1,9 @@ +# xhs-post · 小红书 9 图 + +小红书 3:4 图文格式,9 张图(810 × 1080)。结构:封面 → hook → 痛点 → aha moment → 步骤 1-3 → 效果 → CTA 关注。 + +手写便签 + 贴纸 + 圆角硬阴影的 MUJI/风格,暖米色背景 + 粉橘黄柔和渐变。每页右上角有 `N / 9` 页码贴纸,最后一页有话题 tag。 + +**适用场景:** 小红书 / 微博九宫格 / 公众号图文首图 / 抖音图文卡片。 +**使用方式:** 每张 `.slide` 直接截图导出即可,保持 810×1080 比例。按 → 依次浏览。 +**Feel:** 手帐、贴纸、闺蜜跟你分享干货的 vibe。 diff --git a/templates/full-decks/xhs-post/index.html b/templates/full-decks/xhs-post/index.html new file mode 100644 index 0000000..13dd573 --- /dev/null +++ b/templates/full-decks/xhs-post/index.html @@ -0,0 +1,133 @@ + + + + +每天只睡 6h 还精神?· 小红书图文 + + + + + + +
+ + +
+
1 / 9
+
💤 救命
+
亲测 7 天
+
+

打工人深夜自救手册

+

每天只睡 6h
还能精神一整天
的 3 个小习惯

+
+
@小熊不困了
← 左滑 查看
+
+ + +
+
2 / 9
+
👀
+

等等先别划走!

+

我也曾是那个
早上起来像被卡车撞过的人。

直到我发现了
1 件事比睡够 8 小时还重要。

+
真 · 转折点 ↓
+
+ + +
+
3 / 9
+

❌ 你是不是也这样

+

越睡越累

+
+
😵‍💫 周末补觉到中午

起来头更晕,一整天废掉

+
☕️ 咖啡续三杯

下午 3 点照样困到扶墙

+
📱 睡前刷到凌晨

明明很困就是不舍得睡

+
+
+ + +
+
4 / 9
+
✨ aha moment
+

💡 真相是

+

不是睡得少,
醒得不对

+

身体有 90 分钟一个周期。
在"深睡"里被闹钟拽起来,
就算睡 9 小时也跟没睡一样。

+

关键是:卡着周期醒

+
+ + +
+
5 / 9
+
1
+

倒推睡眠时间

+
+

👉 公式

+

起床时间 − 90min × N − 15min 入睡
= 你今晚该上床的点

+
+
+

举例:要 7 点起

+

→ 23:15 上床 (4 个周期)
→ 00:45 上床 (3 个周期)

+
+
+ + +
+
6 / 9
+
2
+

早晨 10 分钟光

+
+

☀️ 打开窗帘 / 下楼遛弯

+

自然光一照,褪黑素立刻被掐停,人就真的醒了。阴天也有效,别偷懒。

+
+
⏰ 比咖啡还猛
+
+

懒人方案:

+

刷牙的时候站在窗边 🪥

+
+
+ + +
+
7 / 9
+
3
+

下午 3 点
20 分钟小睡

+
+

⏱️ 最多 20 分钟。超过 30 就会进入深睡,醒来会更累。

+
+
+

💡 小 tip:睡前喝一口咖啡。20 分钟后咖啡因正好起效,和小睡的清醒 buff 叠加。

+
+
打工人作弊技
+
+ + +
+
8 / 9
+

✅ 我坚持 7 天后

+

结果是……

+
+
😌 早上闹钟响之前就自然醒
+
💪 下午不再崩溃
+
☕️ 咖啡从 3 杯 → 1 杯
+
✨ 最重要:脾气变好了
+
+
+ + +
+
9 / 9
+
💌
+

觉得有用的话

+

收藏 + 关注 🧡

+

下期讲
「打工人脊椎急救 5 式」
办公室也能做

+
+ #睡眠 + #打工人日常 + #自律 + #健康生活 +
+
@小熊不困了
❤️ 5.2w
+
+ +
+ + diff --git a/templates/full-decks/xhs-post/style.css b/templates/full-decks/xhs-post/style.css new file mode 100644 index 0000000..168d5a6 --- /dev/null +++ b/templates/full-decks/xhs-post/style.css @@ -0,0 +1,47 @@ +/* xhs-post — 小红书 3:4 九宫格 */ +.tpl-xhs-post{ + --bg:#fef7f3;--bg-soft:#fff1ea;--surface:#ffffff;--surface-2:#fff5ef; + --border:rgba(90,40,30,.12);--border-strong:rgba(90,40,30,.24); + --text-1:#3a1f18;--text-2:#6f4a3e;--text-3:#a68676; + --accent:#ff6b8b;--accent-2:#ffa94d;--accent-3:#ffd166; + --grad:linear-gradient(135deg,#ffd3e0,#ffe5c7 50%,#d6f0ff); + --good:#7bc67b;--warn:#ffb547;--bad:#ff6b6b; + --radius:24px;--radius-lg:32px; + --shadow:0 14px 36px rgba(90,40,30,.08); + font-family:'Inter','Noto Sans SC','PingFang SC',sans-serif; +} +.tpl-xhs-post{background:#f0eae2;display:flex;align-items:center;justify-content:center;min-height:100vh} +.tpl-xhs-post .deck{width:810px;height:1080px;position:relative;background:transparent} +.tpl-xhs-post .slide{ + position:absolute;inset:0;width:810px;height:1080px;aspect-ratio:3/4; + padding:70px 64px;border-radius:28px;overflow:hidden; + background:var(--bg); +} +.tpl-xhs-post .slide::before{content:"";position:absolute;inset:0;background: + radial-gradient(45% 30% at 80% 10%,rgba(255,209,102,.35),transparent 70%), + radial-gradient(50% 35% at 10% 95%,rgba(255,107,139,.22),transparent 70%), + radial-gradient(40% 30% at 90% 85%,rgba(122,200,255,.18),transparent 70%); + pointer-events:none;z-index:0} +.tpl-xhs-post .slide > *{position:relative;z-index:1} +.tpl-xhs-post .h1{font-size:72px;line-height:1.1;font-weight:900;letter-spacing:-.02em;color:var(--text-1)} +.tpl-xhs-post .h2{font-size:54px;line-height:1.15;font-weight:800;letter-spacing:-.015em;color:var(--text-1)} +.tpl-xhs-post .h3{font-size:36px;font-weight:800;color:var(--text-1)} +.tpl-xhs-post .page-dot{position:absolute;top:40px;right:48px;background:var(--text-1);color:#fff;border-radius:999px;padding:6px 14px;font-family:'JetBrains Mono',monospace;font-size:14px;font-weight:700;z-index:2} +.tpl-xhs-post .sticker{position:absolute;padding:10px 18px;background:#fff;border:2.5px dashed var(--text-1);border-radius:18px;font-weight:800;font-size:18px;color:var(--text-1);transform:rotate(-3deg);box-shadow:4px 4px 0 var(--text-1)} +.tpl-xhs-post .sticker.pink{background:#ffd3e0} +.tpl-xhs-post .sticker.yellow{background:#ffe788} +.tpl-xhs-post .sticker.blue{background:#cfeaff} +.tpl-xhs-post .sticker.green{background:#d4f2c8} +.tpl-xhs-post .hand-box{background:#fff;border:2.5px solid var(--text-1);border-radius:22px;padding:24px 28px;box-shadow:5px 5px 0 var(--text-1)} +.tpl-xhs-post .lede{color:var(--text-2);font-size:26px;line-height:1.55} +.tpl-xhs-post .big-emoji{font-size:180px;line-height:1;text-align:center} +.tpl-xhs-post .num-circle{display:inline-flex;align-items:center;justify-content:center;width:72px;height:72px;border-radius:50%;background:var(--accent);color:#fff;font-weight:900;font-size:36px;border:3px solid var(--text-1);box-shadow:4px 4px 0 var(--text-1)} +.tpl-xhs-post .step-card{background:#fff;border:2.5px solid var(--text-1);border-radius:22px;padding:26px 28px;box-shadow:5px 5px 0 var(--text-1);margin-bottom:24px} +.tpl-xhs-post .step-card h4{font-size:28px;font-weight:800;margin:0 0 6px} +.tpl-xhs-post .step-card p{font-size:18px;color:var(--text-2);margin:0} +.tpl-xhs-post .tag-row{display:flex;flex-wrap:wrap;gap:10px;margin-top:24px} +.tpl-xhs-post .ht{background:#fff;color:var(--accent);border:2px solid var(--text-1);padding:6px 14px;border-radius:999px;font-weight:700;font-size:16px} +.tpl-xhs-post .cover-title{background:linear-gradient(180deg,transparent 60%,var(--accent-3) 60%,var(--accent-3) 92%,transparent 92%);padding:0 10px} +.tpl-xhs-post .heart{color:var(--accent);font-size:28px} +.tpl-xhs-post .bottom-bar{position:absolute;bottom:40px;left:64px;right:64px;display:flex;justify-content:space-between;align-items:center;font-size:15px;color:var(--text-3);font-family:'JetBrains Mono',monospace;z-index:2} +.tpl-xhs-post .avatar{width:54px;height:54px;border-radius:50%;background:var(--grad);border:2.5px solid var(--text-1);box-shadow:3px 3px 0 var(--text-1);display:inline-flex;align-items:center;justify-content:center;font-weight:900;font-size:20px;color:var(--text-1)} diff --git a/templates/full-decks/xhs-white-editorial/README.md b/templates/full-decks/xhs-white-editorial/README.md new file mode 100644 index 0000000..e909576 --- /dev/null +++ b/templates/full-decks/xhs-white-editorial/README.md @@ -0,0 +1,11 @@ +# xhs-white-editorial + +白底杂志风、强调重点块、macaron soft-card 分组。灵感来自 `20260409 升级版知识库/小红书图文/v2-白底版/slide_01_cover.html` 的顶部彩虹条 + 大字标题,以及 `20260412-AI测试与安全/xhs-ai-testing-safety-v2.html` 的 `.focus` 黑底白字强重点和 macaron 软色卡片系统。 + +**Visual traits:** 纯白背景、顶部 10 色彩虹条、巨型 80-110px 标题配轻微负字距、渐变 brand 文字(紫→蓝→绿→橙→粉)、macaron 软色卡(soft-purple / pink / blue / green / orange)、胶囊 tag + dot、黑底 `.focus` 强调框、hero quote box 带淡阴影。 + +**Use when:** 你需要一份能当小红书图文、也能当横屏 deck 用的白底内容帖;文字多、重点密集、需要一眼抓住关键词;面向中文读者为主。 + +**Source inspiration:** `20260409` xhs v2 白底封面 + `20260412` AI 测试与安全 v2。 + +**Path:** `templates/full-decks/xhs-white-editorial/index.html` diff --git a/templates/full-decks/xhs-white-editorial/index.html b/templates/full-decks/xhs-white-editorial/index.html new file mode 100644 index 0000000..a0c90bf --- /dev/null +++ b/templates/full-decks/xhs-white-editorial/index.html @@ -0,0 +1,187 @@ + + + + + +白底杂志风 · XHS Editorial + + + + + +
+ + +
+
+
+
AI 时代 · 职业判断
+
01 / 08
+
+
我越来越确定的一件事
+

以后最贵的工作,
测试 + 安全

+

AI 会越来越会做事。但谁来保证它 做对没风险不会出事

+
+
未来最值钱的,
不是 生产,而是 验收和兜底
+
+ +
+ + +
+
+
+
Chapter · 01
+
02 / 08
+
+
+
第一章
+

先看 大趋势

+

当执行越来越便宜,判断就会越来越贵。

+
+ +
+ + +
+
+
+
越来越多的事会交给 AI
+
03 / 08
+
+

未来 3 年,这些事都会 自动跑

+
+
内容
写文案 · 写方案 · 写脚本
创作变成一个 prompt 的距离
+
生产
做图 · 搭页面 · 做表格
生产力工具集体重写一次
+
执行
跑流程 · 写代码 · 自动操作
Agent 从 demo 走进真实工作流
+
分析
读数据 · 做总结 · 给建议
决策支持层彻底向下延伸
+
+ +
+ + +
+
+
+
为什么会这样
+
04 / 08
+
+

AI 越强,判断对错 越值钱

+
+
1
生产会更便宜,边际成本接近零
+
2
复制会更快,错误也一起被加速
+
3
AI 一本正经地做错,人类难以察觉
+
4
所以最贵的能力会变成 发现问题
+
+
AI 让「做出来」变便宜,
但让「做对、做稳、别出事」变更贵。
+ +
+ + +
+
+
+
一段你今晚就能跑的验收 Skill
+
05 / 08
+
+

不是写 prompt,
是写 验收清单

+
# skills/ai-acceptance/SKILL.md
+name: ai-acceptance
+description: "Runs AI output through a 4-gate review checklist."
+
+gates:
+  - functional:  "Does it actually do what the user asked?"
+  - edge_cases: "Empty / long / non-ASCII / concurrent?"
+  - safety:     "PII, secrets, destructive ops — all red-flagged?"
+  - rollback:   "If this ships and breaks, can we undo in 60s?"
+ +
+ + +
+
+
+
岗位相对价值变化
+
06 / 08
+
+

越来越 便宜,越来越

+ + + + + + + 纯执行 + + + -65% 价值 + + + 内容生产 + + + -40% 价值 + + + 数据分析 + + + 持平 + + + 测试 / 验收 + + + +85% 价值 + + + 安全 / 风控 + + + +110% 价值 + + + + +
+ + +
+
+
+
今晚就可以做的三件事
+
07 / 08
+
+

别再追工具,
开始练 判断力

+
+
Tonight
写一份
验收清单
哪怕只有 5 条,开始比完美更重要
+
This week
跑一遍
红队演练
对自己的 agent 说:试着让它出事
+
This month
加一条
回滚流程
60 秒内能撤销,你就敢把手放开
+
+
真正的稀缺,不是「会用 AI」,
而是 「敢为 AI 的结果签字」
+ +
+ + +
+
+
+
Thanks for reading
+
08 / 08
+
+
+
谢谢 · thanks
+

如果你也在想这些问题,欢迎在评论里告诉我——
你最想让 AI 帮你做什么?你最不放心它做什么?

+
+ @lewis + 小红书 · 白底杂志风 + html-ppt · full-deck +
+
+ +
+ +
+ + + diff --git a/templates/full-decks/xhs-white-editorial/style.css b/templates/full-decks/xhs-white-editorial/style.css new file mode 100644 index 0000000..05e2c73 --- /dev/null +++ b/templates/full-decks/xhs-white-editorial/style.css @@ -0,0 +1,63 @@ +/* xhs-white-editorial — 白底杂志风 */ +.tpl-xhs-white-editorial{ + --xw-bg:#ffffff; + --xw-ink:#111318; + --xw-ink2:#475467; + --xw-muted:#98a2b3; + --xw-line:#eaecf3; + --xw-purple:#7b61ff; + --xw-pink:#ff5fa2; + --xw-blue:#4e8cff; + --xw-green:#17b26a; + --xw-orange:#ff9d42; + --xw-soft-purple:#f4efff; + --xw-soft-pink:#fff0f6; + --xw-soft-blue:#eef4ff; + --xw-soft-green:#edfdf3; + --xw-soft-orange:#fff5ea; + background:var(--xw-bg); + color:var(--xw-ink); + font-family:'Inter','Noto Sans SC','PingFang SC',-apple-system,sans-serif; +} +.tpl-xhs-white-editorial .slide{background:#fff;padding:72px 88px} +.tpl-xhs-white-editorial .xw-topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px} +.tpl-xhs-white-editorial .xw-tag{display:inline-flex;align-items:center;gap:10px;padding:10px 18px;border:1px solid var(--xw-line);border-radius:999px;font-size:15px;color:var(--xw-ink2);background:#fff} +.tpl-xhs-white-editorial .xw-tag .dot{width:10px;height:10px;border-radius:50%;background:linear-gradient(90deg,#7b61ff,#4e8cff,#17b26a,#ff9d42,#ff5fa2)} +.tpl-xhs-white-editorial .xw-page{font-size:14px;color:var(--xw-muted);letter-spacing:.1em} +.tpl-xhs-white-editorial .xw-kicker{font-size:18px;color:var(--xw-ink2);margin-top:6px;font-weight:500} +.tpl-xhs-white-editorial .xw-title{font-size:84px;line-height:1.02;letter-spacing:-2px;font-weight:850;margin:18px 0 0;color:var(--xw-ink)} +.tpl-xhs-white-editorial .xw-title-md{font-size:60px;line-height:1.05;letter-spacing:-1.5px;font-weight:800;margin:14px 0 0} +.tpl-xhs-white-editorial .xw-grad{background:linear-gradient(90deg,#7b61ff 0%,#4e8cff 25%,#17b26a 48%,#ff9d42 72%,#ff5fa2 100%);-webkit-background-clip:text;background-clip:text;color:transparent} +.tpl-xhs-white-editorial .xw-sub{font-size:24px;line-height:1.45;color:#1f2937;margin-top:22px;max-width:900px} +.tpl-xhs-white-editorial .xw-focus{display:inline-block;padding:6px 14px;border-radius:14px;background:#111318;color:#fff;font-weight:700} +.tpl-xhs-white-editorial .xw-focus-blue{display:inline-block;padding:6px 14px;border-radius:14px;background:var(--xw-soft-blue);color:#174ea6;font-weight:700} +.tpl-xhs-white-editorial .xw-focus-pink{display:inline-block;padding:6px 14px;border-radius:14px;background:var(--xw-soft-pink);color:#c11574;font-weight:700} +.tpl-xhs-white-editorial .xw-focus-orange{display:inline-block;padding:6px 14px;border-radius:14px;background:var(--xw-soft-orange);color:#b54708;font-weight:700} +.tpl-xhs-white-editorial .xw-focus-green{display:inline-block;padding:6px 14px;border-radius:14px;background:var(--xw-soft-green);color:#067647;font-weight:700} +.tpl-xhs-white-editorial .xw-hero{margin-top:28px;border:1px solid var(--xw-line);border-radius:28px;padding:30px 34px;background:linear-gradient(180deg,#fff 0%,#fcfcff 100%);box-shadow:0 18px 48px rgba(17,19,24,.08)} +.tpl-xhs-white-editorial .xw-quote{font-size:38px;line-height:1.3;font-weight:800;letter-spacing:-.5px} +.tpl-xhs-white-editorial .xw-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:22px} +.tpl-xhs-white-editorial .xw-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-top:22px} +.tpl-xhs-white-editorial .xw-card{border:1px solid var(--xw-line);border-radius:24px;padding:24px 26px;box-shadow:0 10px 24px rgba(17,19,24,.04);background:#fff} +.tpl-xhs-white-editorial .xw-card.soft-purple{background:var(--xw-soft-purple)} +.tpl-xhs-white-editorial .xw-card.soft-pink{background:var(--xw-soft-pink)} +.tpl-xhs-white-editorial .xw-card.soft-blue{background:var(--xw-soft-blue)} +.tpl-xhs-white-editorial .xw-card.soft-green{background:var(--xw-soft-green)} +.tpl-xhs-white-editorial .xw-card.soft-orange{background:var(--xw-soft-orange)} +.tpl-xhs-white-editorial .xw-label{font-size:14px;font-weight:800;opacity:.7;margin-bottom:10px;letter-spacing:.08em;text-transform:uppercase} +.tpl-xhs-white-editorial .xw-card .main{font-size:28px;line-height:1.22;font-weight:850;letter-spacing:-.5px} +.tpl-xhs-white-editorial .xw-card .desc{font-size:16px;line-height:1.5;color:#475467;margin-top:12px} +.tpl-xhs-white-editorial .xw-steps{margin-top:18px} +.tpl-xhs-white-editorial .xw-step{display:flex;gap:18px;align-items:flex-start;margin:16px 0} +.tpl-xhs-white-editorial .xw-num{flex:0 0 48px;height:48px;border-radius:50%;background:#111318;color:#fff;display:grid;place-items:center;font-size:20px;font-weight:900} +.tpl-xhs-white-editorial .xw-txt{font-size:22px;line-height:1.45;font-weight:700} +.tpl-xhs-white-editorial .xw-codebox{background:#0f1117;color:#e4e2d8;border-radius:18px;padding:22px 26px;font-family:'JetBrains Mono',monospace;font-size:15px;line-height:1.75;margin-top:20px;border:1px solid #1f222c} +.tpl-xhs-white-editorial .xw-codebox .cm{color:#6b6a62} +.tpl-xhs-white-editorial .xw-codebox .kw{color:#c88f64} +.tpl-xhs-white-editorial .xw-codebox .st{color:#a8c292} +.tpl-xhs-white-editorial .xw-codebox .hl{color:#e9c58a;font-weight:600} +.tpl-xhs-white-editorial .xw-footer{position:absolute;left:88px;right:88px;bottom:44px;display:flex;justify-content:space-between;align-items:flex-end;font-size:13px;color:var(--xw-muted)} +.tpl-xhs-white-editorial .xw-topline{position:absolute;top:0;left:0;right:0;height:5px;background:linear-gradient(90deg,#6366f1,#8b5cf6,#a855f7,#ec4899,#f43f5e,#f97316,#eab308,#22c55e,#06b6d4,#6366f1)} +.tpl-xhs-white-editorial .xw-pill{display:inline-block;padding:8px 16px;border-radius:999px;font-size:14px;font-weight:700;margin:0 8px 8px 0;background:#fff;border:1px solid var(--xw-line);color:#394150} +.tpl-xhs-white-editorial .xw-big-stat{font-size:96px;font-weight:900;letter-spacing:-4px;line-height:1} +.tpl-xhs-white-editorial .xw-big-stat small{font-size:22px;color:var(--xw-muted);font-weight:700;letter-spacing:0;margin-left:6px} diff --git a/templates/theme-showcase.html b/templates/theme-showcase.html index 4373494..54f148a 100644 --- a/templates/theme-showcase.html +++ b/templates/theme-showcase.html @@ -1,82 +1,150 @@ - + -Theme Showcase — html-ppt +Theme Showcase — html-ppt v2 - - -
- -
+ +
+