Skip to content
Skillpedia
Documentation101k · #561

huashu-annual-letter

Helps your agent tell a company's story, what it learned, and its future plans. It's useful for communicating company strategy to the community.

What it does

Creates a special webpage that looks like an annual letter, telling a company's story, what it learned, and its future plans. It's visually appealing and easy to read.

When to use it

  • ✓To share a company's annual summary with its community.
  • ✓To present an organization's learnings and plans clearly.
  • ✓To create an official corporate strategy document for investors or partners.

Example of what to ask your AI

“Create an annual letter for 'TechGlobal' about the year 2023, highlighting our growth in artificial intelligence and our expansion plans into Europe.”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/nexu-io/open-design/blob/main/plugins/_official/examples/huashu-annual-letter/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/nexu-io/open-design/blob/main/plugins/_official/examples/huashu-annual-letter/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The AI takes your text and arranges it into a webpage format with a specific design. It uses text paragraphs, boxes with key numbers, and a clean look without extra colors or fonts.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add nexu-io/open-design --skill huashu-annual-letter

Or download just the file:

curl -L https://raw.githubusercontent.com/nexu-io/open-design/main/plugins/_official/examples/huashu-annual-letter/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Annual Letter · 年度信笺

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.

Hard spec (locked — violating any line is a regression)

Canvas & scaling

  • One <div id="stage"> fixed at 1920 × 1080 px, centered with position: fixed; top: 50%; left: 50%.
  • A 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.
  • All layout inside the stage uses px (never vw/vh/% for type) — the scaler owns responsiveness.

Slides & navigation runtime (do not rewrite the script)

  • Each page is one <section class="slide"> directly inside #stage, with a data-screen-label="01 刊头"-style label (1-indexed).
  • Exactly one slide carries .active. No .dark pages in this theme — every page sits on cream paper; rhythm comes from density, not theme flips.
  • Keyboard: ←/↑/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.
  • Zero external JS, zero build step; the file must open via file:// inside a sandboxed iframe.

Design tokens (in :root, keep the names — re-theme by changing values only)

--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;
  • Fonts via Google Fonts @import: Newsreader (display, incl. italic), Source Serif 4 (prose), Noto Serif SC (CJK serif), Inter, Noto Sans SC.
  • All numerals tabular: the shared .num class sets font-variant-numeric: tabular-nums; every metric, year, and display number uses it.
  • One accent. Never a second hue, never a gradient, never a dark slide.

Letter chrome (every page)

  • Letterhead top strip with hairline rule: publication/company name left (small-caps Inter, letter-spaced, brand word in accent), issue + date right.
  • Footer hairline rule: section name left, author/issue meta right. Page numbering lives only in the runtime counter pill — never also printed inside a slide.
  • Headings in 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.
  • Kicker: small-caps Inter label with a short 44×3px accent bar above section titles.
  • Chinese copy uses 「」 quotes; 中英混排 keeps English in Newsreader italic.

Signature devices (the genre — use them, don't substitute)

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

…

FAQ

Do I need to know how to code to use this?

No, you just need to provide the text you want to include. The AI handles all the technical and design aspects.

Can I change the colors or style?

No, the design is fixed to maintain the 'annual letter' style and ensure everything looks professional and consistent.

What are 'data cards' and 'display anchors'?

'Data cards' are small boxes showing important numbers with a title. 'Display anchors' are large numbers that stand out on a full page.

Details

Original description by the author

OpenDesign'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.

repo: nexu-io/open-design

Popularity

GitHub stars
101k
Ranking position
#561
License
Apache-2.0
Updated
10/16/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills