Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Open Design's annual letter to its community: the year's story, what it learned, and where it's going next. Built as a decision-grade corporate strategy deck for community, contributors, investors.
.claude/skills/nexu-io-huashu-annual-letter/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-21 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 92% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 331% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 109% | 0% |
Produce a single-file, letter-grade HTML deck in the Stripe Annual Letter genre: a published letter you read, not a template you skim. Prose flows in serif paragraphs; numbers live in inline data cards and giant display anchors. The visual system, canvas contract, and navigation runtime are locked by example.html. Start from example.html, replace content only — do not rewrite the design or the script, and never introduce colors or fonts outside this spec.
Adapted from the editorial-longform style (references/design-styles.md, 安静派 · 杂志编辑长文流 / Editorial Longform) of huashu-design by 花叔 (alchaincyf), MIT licensed. Reference lineage: Stripe Annual Letter, Amazon six-page narrative memos, Stripe Press.
<div id="stage"> fixed at 1920 × 1080 px, centered withposition: fixed; top: 50%; left: 50%.
fit() function scales the stage to the viewport:scale = min(innerWidth / 1920, innerHeight / 1080), applied as translate(-50%, -50%) scale(s), re-run on resize. Letterboxed, never cropped.
vw/vh/% for type) —the scaler owns responsiveness.
<section class="slide"> directly inside #stage, with adata-screen-label="01 刊头"-style label (1-indexed).
.active. No .dark pages in this theme —every page sits on cream paper; rhythm comes from density, not theme flips.
←/↑/PageUp previous · →/↓/Space/PageDown next ·Home/End first/last. Hash routing #/N (1-indexed) read on load and hashchange, written via history.replaceState. Click: left third back, rest forward. Fixed counter pill bottom-right, key-hint bottom-left.
file:// insidea sandboxed iframe.
:root, keep the names — re-theme by changing values only)css--paper: #FBFAF8; /* cream paper, every page */ --panel: #FFFFFF; /* data-card surface */ --ink: #232036; /* deep ink text */ --ink-70: rgba(35, 32, 54, 0.72); /* prose body */ --ink-45: rgba(35, 32, 54, 0.46); /* captions, chrome */ --hairline: rgba(35, 32, 54, 0.12); /* all rules */ --accent: #635BFF; /* Stripe purple — the ONLY accent */ --accent-soft: rgba(99, 91, 255, 0.08); /* tint panels, quote marks */ --serif: "Newsreader", "Source Serif 4", "Noto Serif SC", Georgia, serif; --serif-text: "Source Serif 4", "Newsreader", "Noto Serif SC", Georgia, serif; --sans: "Inter", "Noto Sans SC", -apple-system, sans-serif;
@import: Newsreader (display, incl. italic),Source Serif 4 (prose), Noto Serif SC (CJK serif), Inter, Noto Sans SC.
.num class setsfont-variant-numeric: tabular-nums; every metric, year, and display number uses it.
(small-caps Inter, letter-spaced, brand word in accent), issue + date right.
numbering lives only in the runtime counter pill — never also printed inside a slide.
var(--serif) (Newsreader/Noto Serif SC), weight 500–600 —letters are set elegantly, not boldly; key words get class="hl" (accent), never the whole heading.
section titles.
| Device | Spec | |---|---| | Prose measure | paragraphs max-width: 980px (≈65ch), serif 25–27px, line-height: 1.9, text-align: justify optional | | Drop cap | first paragraph of the letter body: ::first-letter serif, ~3 lines tall, accent color | | Inline data card | --panel bg, 1px hairline, 2–3px accent top rule, small-caps Inter label + large tabular serif numeral + one-line caption; floated beside or gridded next to prose | | Display-number anchor | one giant tabular numeral 180–280px in accent, alone on the page with a one-line setup above and a footnote below | | Minimal chart | inline SVG only: single purple line/area on hairline baseline, direct labels on data points, no grid mesh, no legend, no chartjunk | | Quote page | oversized serif quote (60–76px, weight 500) with an accent-soft giant quotation mark, attribution in small-caps Inter | | Signed closing | farewell prose + serif-italic signature block + key-hint capsule |
cover masthead page · contents letter outline rows · salutation prose opening with drop cap · display-number anchor · prose+cards running text with inline data cards · chart minimal SVG figure · quote full-page citation · metrics-panorama data-card grid with footnote · closing signature page.
180–280px, chrome labels 14–16px.
page. A letter is quiet; resist decorating it.
real numbers and 2–4 narrative chapters, tone. One batch of questions.
never lorem ipsum, never invented statistics. Missing data gets an honest <!-- 待用户提供 --> placeholder.
pages (cover + prose-with-cards), confirm, then batch the rest.
example.html, retitle, swap token values only if the user has abrand, then replace each section's content following the layout enumeration. Keep letterhead/footer chrome and the script intact.
#/N stay in sync; no overflow; prose stays inside the 980px measure; numerals all tabular; grep for leftover placeholders.
✦ ✓ → ·) only.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-21 | fail→pass | 16,365 | 6,679 | -59% | 1 | 1 | 0% | 3,018 | 3,202 | +6% | 0 | 0 | — |
case-01 | fail→fail | 51,664 | 111,020 | +115% | 1 | 1 | 0% | 8,298 | 10,354 | +25% | 0 | 0 | — |
case-02 | fail→fail | 50,363 | 41,170 | -18% | 1 | 1 | 0% | 8,295 | 10,351 | +25% | 0 | 0 | — |
case-03 | fail→pass | 40,133 | 38,856 | -3% | 1 | 1 | 0% | 8,275 | 10,331 | +25% | 0 | 0 | — |
case-04 | fail→fail | 47,968 | 48,860 | +2% | 1 | 1 | 0% | 8,247 | 10,303 | +25% | 0 | 0 | — |
case-05 | pass→fail | 47,299 | 77,000 | +63% | 1 | 1 | 0% | 8,233 | 10,289 | +25% | 0 | 0 | — |
case-06 | pass→fail | 51,081 | 52,929 | +4% | 1 | 1 | 0% | 8,249 | 10,304 | +25% | 0 | 0 | — |
case-07 | fail→fail | 15,641 | 10,911 | -30% | 1 | 1 | 0% | 2,157 | 3,326 | +54% | 0 | 0 | — |
case-08 | fail→pass | 14,647 | 17,390 | +19% | 1 | 1 | 0% | 2,247 | 4,310 | +92% | 0 | 0 | — |
case-14 | fail→pass | 18,272 | 34,879 | +91% | 1 | 1 | 0% | 2,384 | 10,286 | +331% | 0 | 0 | — |
case-09 | fail→pass | 18,949 | 6,492 | -66% | 1 | 1 | 0% | 1,435 | 3,001 | +109% | 0 | 0 | — |
case-10 | fail→pass | 16,315 | 11,645 | -29% | 1 | 1 | 0% | 2,187 | 3,797 | +74% | 0 | 0 | — |
case-11 | fail→pass | 15,384 | 49,033 | +219% | 1 | 1 | 0% | 2,450 | 10,285 | +320% | 0 | 0 | — |
case-12 | fail→pass | 24,727 | 37,262 | +51% | 1 | 1 | 0% | 3,283 | 10,270 | +213% | 0 | 0 | — |
case-13 | pass→pass | 3,363 | 4,146 | +23% | 1 | 1 | 0% | 558 | 2,787 | +399% | 0 | 0 | — |
case-15 | fail→pass | 53,251 | 39,466 | -26% | 1 | 1 | 0% | 5,582 | 8,591 | +54% | 0 | 0 | — |
case-16 | fail→pass | 18,063 | 9,495 | -47% | 1 | 1 | 0% | 2,435 | 3,761 | +54% | 0 | 0 | — |
case-17 | fail→fail | 13,212 | 8,184 | -38% | 1 | 1 | 0% | 1,691 | 3,271 | +93% | 0 | 0 | — |
case-18 | fail→pass | 19,594 | 22,861 | +17% | 1 | 1 | 0% | 2,510 | 6,183 | +146% | 0 | 0 | — |
case-19 | fail→fail | 19,684 | 49,946 | +154% | 1 | 1 | 0% | 3,118 | 10,276 | +230% | 0 | 0 | — |
case-20 | fail→pass | 18,255 | 22,307 | +22% | 1 | 1 | 0% | 2,881 | 6,335 | +120% | 0 | 0 | — |
case-22 | fail→pass | 15,343 | 6,129 | -60% | 1 | 1 | 0% | 2,246 | 3,004 | +34% | 0 | 0 | — |
case-23 | fail→fail | 13,122 | 13,925 | +6% | 1 | 1 | 0% | 1,866 | 3,768 | +102% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +48 percentage points is the difference between those two pass rates over the 23 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.