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
Ready-to-paste message
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-letterOr 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.mdTechnical 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 withposition: fixed; top: 50%; left: 50%. - A
fit()function scales the stage to the viewport:scale = min(innerWidth / 1920, innerHeight / 1080), applied astranslate(-50%, -50%) scale(s), re-run onresize. 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 adata-screen-label="01 刊头"-style label (1-indexed). - Exactly one slide carries
.active. No.darkpages in this theme — every page sits on cream paper; rhythm comes from density, not theme flips. - Keyboard:
←/↑/PageUpprevious ·→/↓/Space/PageDownnext ·Home/Endfirst/last. Hash routing#/N(1-indexed) read on load andhashchange, written viahistory.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
.numclass setsfont-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 getclass="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
Comments
- …
More skills from this repository
sample-plugin
Makes your agent create a metadata file for tests. It helps ensure code works correctly in different situations.
nexu-io/open-design
aster-atelier
Helps your agent create an artistic website with a classic look. It uses elegant imagery, blue skies, and serif fonts for a cinematic feel.
nexu-io/open-design
audio-jingle
Makes your agent generate audio like jingles and sound effects. It can create music and voices, saving the result as an audio file.
nexu-io/open-design
blog-post
Helps your agent write long articles or blog posts. It includes space for images, quotes, and author information.
nexu-io/open-design
Similar skills
architecture-decision-records
Has your agent record important project structure decisions. It helps to understand the reasoning behind choices and maintain a clear history of changes.
affaan-m/ECC
code-tour
Lets your agent create step-by-step code walkthroughs with exact file and line anchors. It's useful for project introductions, code explanations, or change reviews. Helps understand how a system works.
affaan-m/ECC
codebase-onboarding
Helps your agent analyze unfamiliar code and create an onboarding guide. It includes an architecture map, entry points, and conventions. Ideal for starting on a new project.
affaan-m/ECC