<- Back to projects
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

Evaluation mode
  • 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
Generative mode for experiments
  • 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 
Taxonomies for agentic ingestion

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. 
Content engineered

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. 
Measure AI output quality

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.
Went 0-to-1 in ambiguous space

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.