Content design skill and quality evaluation system — Goodnotes
Live — released May 2026
Prompt engineering, reference architecture, and structured output design
Portfolio note: More details available to share in interviews
Content design doesn't scale 1:1. I built a Claude skill that embeds documented content decisions into a system any designer or PM can run — so the team gets grounded copy reviews without waiting for me. It connects to Figma via MCP, reads screens directly, and returns structured output against documented standards. This is the 0-to-1 initiative: nothing like it existed before I built it.
Content quality at a 25M+ MAU app means hundreds of strings across an AI product surface — error states, onboarding flows, empty states, AI-generated suggestions. Reviewing all of it manually wasn't scalable. Neither was ad-hoc A/B testing where experiment copy was written without a shared rubric.
What I built
A Claude skill with two modes, shipped to Goodnotes' internal AI skills marketplace
- Takes a string or set of strings as input
- Scores copy against a defined set of content principles (clarity, tone, length, consistency with terminology standards)
- Returns structured feedback with a score, specific failure flags, and suggested rewrites
- Used by PMs and designers to self-review, reducing back-and-forth
- Takes a brief (surface, context, user goal, constraints) as input
- Produces multiple A/B experiment copy variants with rationale
-
Output is formatted for direct use in experiment tooling
- Reduces time from brief to testable variants from days to minutes
Design decisions worth noting
-
Modes are separate by design — mixing evaluation and generation in one prompt produces worse output in both directions
-
The evaluation rubric is itself a content design artifact: it had to be written precisely enough that the model applies it consistently, but not so rigidly that it penalises good judgment calls
-
Prompt architecture uses structured XML input/output to make results parseable and auditable
How I thought about it
7 living markdown reference files — terminology, tone, patterns, decision log, IA principles, tropes, changelog — structured so the skill parses and cites them, not just so humans read them.
Built the skill in Claude Code, designed the prompt architecture, structured the reference files for LLM retrieval, and iterated on the output format based on what the model was getting wrong. Deployed to Github.
Tracking output quality through a public log: helpfulness rating per review, issues flagged, iteration history. Currently: 1 of 1 reviews found output helpful. Skill issues flagged: 0.
No brief, no precedent. I scoped it, built it, stress-tested it, and shipped it — then documented what needed changing after real use.
What I learned building it
- Plan the system first, but be open to iterating based on project decisions. For example, the information density rule — max 1 thing per heading, max 2 per description — came from a live project.
-
By open to updating relational connections to other workflows. For example, when
- Replaced "always read everything" with a reference-mapping table — the skill loads only what's relevant. Reduced model hallucination and context bloat significantly. This is prompt engineering in practice.
-
The terminology file was generating false positives: B2C deprecation of "member" didn't apply to B2B workspace members. The bug was in the source doc's precision, not the model.