Skip to content

Building Branch’s AI UX Writing System

I packaged Branch’s brand principles, product context and design-system rules as an agent skill, so every team’s AI workflows produced consistent, on-brand UX writing by default. Internally, we called it CopyGPT.

CopyGPT
Reviewing UX copy automatically
Review complete
  • ContinueStart Camera
  • Send OTPGet OTP
  • Enter your pincodeEnter your PIN code
  • Search for anything...Search transactions
  • Step 2 of 5: Verify PANStep 2 of 5: Enter PAN
In this case study
At a glance

The goal was to standardise UX writing: consistent tone and casing, grounded in the product and market, and aligned with Branch’s brand principles.

Company
Branch International
Visit Branch ↗
Industry
Fintech
Role
Product Designer, AI Systems
Tools
Claude Figma Google Sheets ChatGPT (early prototype)
Team
One product manager and one engineer from each market.
Period
25 August 2025 to
5 March 2026

The final harness was Claude Chat with the skill enabled. Product, design, engineering, marketing and customer support teams could send text, attach a screenshot, share a Figma link, use voice or share their screen.

Impact TLDR:

  • I packaged Branch’s brand principles, product context and design-system rules as an agent skill, so every team’s AI workflows produced consistent, on-brand UX writing by default.
  • I took ownership of the project from discovery through implementation, with substantial help from colleagues.
  • The product team implemented 1,778 copy changes across markets.
Results and calculation boundaries

What CopyGPT included

Brand principles

The ten principles that defined how Branch should sound:

  1. Be Concise and Eliminate Unnecessary Words
  2. Use Clear, Simple, and Jargon-Free Language
  3. Maintain a Conversational, Human Tone
View more
  1. Provide Context and Helpful Guidance
  2. Use Specific and Predictable CTAs and an Action-Oriented Language
  3. Be Empathetic, Optimistic, Use Positive Wording to Create Good Feelings
  4. Optimize for Mobile-Specific Interactions
  5. Write Inclusive Microcopy
  6. Write Clear and Reassuring Success Messages
  7. Write Helpful Error Messages and Failure scenarios

Used by

  • Teams: Product, design, engineering, marketing and customer support.
  • Markets: India, Kenya and Nigeria.

Contextual framework

  • Product, market, screen state and intended action.
  • Component, text position, category and use case.
  • Tone, character and word limits, sentence phrasing, casing and punctuation.
  • Relevant brand principles and examples of good and bad copy.

Caters for

Error, confirmation, success, feature, empty-state and processing copy, as well as the labels and instructions within those experiences.

Why Branch needed CopyGPT

Reviewing a single line of UX writing could take 20 minutes of a design review. We would discuss what sounded right while also finding inconsistent casing for the same component across different screens in the app.

The goal was to standardise UX writing: consistent tone and casing, grounded in the product and market, and aligned with Branch’s brand principles. Teams needed to reach that standard without repeatedly spending review time deciding what worked and what did not.

I took ownership of the project from discovery through implementation, with substantial help from colleagues.

Discovery: how teams were creating copy

I started by looking at the workflows people already used. Colleagues turned to Gemini, ChatGPT, Claude, Perplexity and Google Search. Each approach produced an answer, but there was no shared knowledge base or set of component rules governing those answers.

At the start, the documented UX-writing guidance was the brand principles. The product and component context needed to apply them consistently had not been assembled into a common reference.

Copy for the same feature could differ in tone or casing between India and Nigeria, without consistently following Branch’s principles. I needed a common set of rules that also accounted for each market’s products and terminology.

Defining the product context and component guardrails

Other product designers helped me collect and clean documentation for the features in their markets. They wrote product overviews and the steps within each flow. This became the core product-context dataset supplied to the LLM: what a feature did, what the person was trying to achieve and what happened at each step.

We then agreed that the writing rules needed to be defined within the design-system components. A button, input label and error-message body serve different purposes. Each needed its own guardrails so the LLM could apply the relevant rules to that part of the interface.

Together, we documented each component’s category, use case, tone, character limit, word count, sentence phrasing, casing, punctuation, applicable principles, good and bad examples, and rationale. The final v7 reference defined 30 component types and 45 text positions.

For a Primary Button, for example, the documented guidance specified:

Primary Button exampleProperty guidance and v7 JSON

Documented property guidance

Property Guidance
Category Actionable
Use cases Loan application, repayment and wallet top-up
Tone Clear and action-oriented
Character limit Maximum 25 characters
Word count 1–4 words
Sentence phrasing Verb + object
Casing Title Case
Punctuation No ending punctuation
Principles Clear language, predictable actions and mobile interactions
Good examples Add to Wallet; Pay Now; Start Investment
Bad examples Submit; Proceed; Click Here

This gave the LLM a specific contract for the component. The product context determined the action; the component rules determined how to write it.

Explore the framework

Choose a component, market or brand principle to see the guidance supplied to the LLM.

Researching and prototyping the LLM workflow

This was new territory at Branch. I had to determine how an existing LLM could interpret a screen, find the applicable Branch guidance and follow the component rules in its response. I researched the major LLMs and reviewed literature on how they were built, then structured the operating guide and reference data around that workflow.

I developed an algorithm for the writing workflow: identify the context, select the relevant guidance, generate copy, check it and resolve any conflicts. The operating guide defined that sequence, while JSON reference files supplied the component, market, brand and validation rules.

The first harness was a ChatGPT Custom GPT. We moved to a Claude Project after the team found Claude stronger for the writing task. I continued refining the instructions and reference data through seven versions.

Refining the system through seven versions

The iterations progressively made the component definitions more complete, the constraints more explicit and the validation more thorough.

  1. V1

    Assembled the initial brand, market and component references. Thirty component types were listed, with populated text-position rules for twelve.

  2. V2

    Added rule precedence and seven lint checks.

  3. V3

    Linked component rules to writing principles and consolidated the market structure.

  4. V4

    Defined text positions across all components, structured character, word and line limits, and expanded component inference and mapping.

  5. V5

    Reduced hard minimum constraints and added ordered alternatives when copy could not fit a component’s limits.

  6. V6

    Expanded lint to fifteen checks, standardised naming and market-term validation, and introduced an operating guide.

  7. V7

    Aligned conflicting List definitions, specified styling for all forty-five text positions, expanded lint to thirty checks, and added generation patterns and checks against copying examples verbatim.

How the version 7 algorithm works

Colleagues used CopyGPT through a chat harness. They sent a request with text or an app screenshot, supplied missing context when asked, and refined the proposed copy through follow-up messages.

I designed the v7 operating guide to instruct the LLM to identify the screen context, select the applicable Branch rules, generate copy and validate it before responding. The sequence below shows that algorithm.

Team member needs
UX copy
Submit text or a screenshot

A colleague sends a request through the chat harness.

Identify the context

Component, text position, intended action and market.

Is essential context clear?
NoYes
Normalise names and text positions

Map other design-system terms to Branch’s vocabulary.

Select the applicable guidance

Market → component → brand → inference fallback.

Generate fresh copy

Use the selected guidance and component patterns. Rephrase examples rather than copying them.

Validate the proposal

Thirty checks in a nine-step sequence.

Does the copy pass the checks?
NoYes
Return five options by default

Unless requested otherwise. Use a numbered list for single-line requests; group multi-part options by element.

Colleague reviewsMay refine the request in chat.
Optional · initiated by the colleagueFollow-up request → submit in chat

Resolving conflicting rules

v7 followed market requirements → component rules → brand defaults → inference fallbacks. If necessary guidance cannot fit, shorten first, propose a supported alternative and revalidate; the team decides component changes and unresolved constraints. The following scenarios illustrate that policy.

Examples of how the LLM resolves conflicts

Nigeria’s investment product
Starting copy

Savings

A reused Kenyan label.

Rule A · Kenya only
Savings

Kenya’s product uses “savings,” not “investments.” This market rule is not active in Nigeria.

markets-v7.json · KE
Rule B · Nigeria · active market
Investments

The market requires “investments” and prohibits “savings.”

markets-v7.json · NG
Conflict point

Reusing the Kenyan label would apply terminology from the wrong market.

Market terminology takes priority

Nigeria is the active market, so its source replaces the reused Kenyan label. Kenya’s rule applies only in Kenya.

Revised copy
Savings

Investments

Banner headline
Starting copy

Your Account Is Ready

Follows the brand’s Title Case default.

Rule A · General brand default
Title Case

The default for titles and headlines.

brand-v7.json · titles_headlines
Rule B · Banner headline
Sentence case

The Banner requires Sentence case.

components-v7.json · Banner.headline
Conflict point

The same headline cannot use both Title Case and Sentence case.

The component rule takes priority

The specific Banner headline constraint supersedes the general brand default.

Revised copy
Your Account Is Ready

Your account is ready

Payment connection failure
Starting copy

No money left your account. Check your connection and try again.

The necessary recovery message is 64 characters; a Toast allows 50.

Product state confirms no money left the account.
Rule A · Toast text
50-character maximum

At most 10 words, in Sentence case.

components-v7.json · Toast.text
Rule B · Payment error
Preserve necessary recovery guidance

Give the next step and reassure about funds safety using the confirmed product state.

heuristics-v7.json · error_state
Conflict point

This 64-character, 11-word message exceeds the Toast contract. Neither the limit nor the necessary guidance is waived.

Resolve both constraints

Shorten first. If guidance still cannot fit, propose an Alert and revalidate.

  1. Shorten first
  2. Still too long? Propose Alert or Text Block
  3. Revalidate every slot
  4. Alternatives fail? Flag for human review
heuristics-v7.json · on_limit_failure
Proposed resolutionAlert
Payment Not Completed

No money left your account. Check your connection and try again.

Retry Payment
Title
21 / 30 characters · 1 line maximum
Message
64 / 100 characters · 2 lines maximum
CTA
13 / 18 characters · 2 / 3 words
Revalidate casing, punctuation and line limits against components-v7.jsonThe team decides the component change and checks the two-line layout.

Packaging it as a Claude Skill

I packaged the workflow as a Claude Skill so every team could use the guidance within Claude Chat. The package contained a main SKILL.md instruction file and six Markdown references for components, markets, brand, lint, component recognition and flows.

The Skill instructions directed the model to identify the request and select the references it needed. This made the shared product context and component guardrails available within colleagues’ existing AI workflows, across projects and chats.

One instruction file. Six references.
SKILL.md Instructions and reference selection
  • components.mdSlots, limits and writing structure
  • markets.mdProduct context and local terminology
  • brand.mdPrinciples and voice
  • lint-rules.mdValidation rules
  • reference.mdComponent recognition and mapping
  • flows.mdDetailed Nigeria flow context
The later Markdown Skill package, used within Claude Chat.

Implementation across the app

I collaborated with one product manager and one engineer from each market to work through the app’s UX writing. We sent screenshot batches to CopyGPT, then recorded the original copy, proposed copy and rationale in a shared Google Sheet.

We reviewed the recommendations against the product context and agreed writing rules. The engineers implemented the changes that passed review, and we recorded the outcomes in the tracker before moving to the next batch.

  1. Screenshot batches
  2. CopyGPT proposals
  3. PM and design review
  4. Engineer implementation
  5. Tracker update
Shared-sheet structure, recreated from two implemented India entries.
Original copyProposed copyRationale
Send OTPGet OTPDescribe the person’s outcome using the preferred authentication action.
Search for anything...Search transactionsName the content the field actually searches.

Results

India, Kenya & Nigeria · product-team implementation
1,778
Copy changes implemented
530
Screen-flow appearances reviewed
4,390
UI component instances audited

Kenya and Nigeria figures include directional estimates.

The product team implemented 1,778 copy changes. The cross-market summary also recorded 530 screen-flow appearances reviewed and 4,390 UI component instances audited. These totals cover India, Kenya and Nigeria; Kenya and Nigeria figures include directional estimates.

The detailed India tracker contains 617 implemented component entries whose text changed. Comparing the original and implemented text shows the scope of those changes:

Detailed India analysis · 617 implemented entries with changed text
Wording56.1% · 346 entries
Punctuation29.2% · 180 entries
Capitalisation alone28.8% · 178 entries

Wording and punctuation overlap in 125 entries. These percentages are not additive.

Examples of implemented changes

Eight implemented India tracker entries. PAN rows show the empty and already-filled states. Reasons are paraphrased. Final v7 rules explain aligned guidance; the tracker does not identify which version generated each historical change.

What I learned

Richer context requires better documentation

The LLM needed more than writing rules. It needed to understand each market’s products, features and flows. Building that context meant collecting information and writing detailed documentation with other product designers. The richer and more specific that context became, the better the model could match its writing to the product and market. That documentation was a core part of building CopyGPT.

The model needed a consistent vocabulary

The first component rules we created as a team lived in Google Sheets. We used “header” and “body” for an Accordion, but “title” and “description” for a Text Block. My first attempt at the algorithm failed repeatedly because the LLM struggled to connect those equivalent labels to the right rules. I had to clean the data and standardise the names for equivalent text positions, so the algorithm and references used a consistent vocabulary.

Writing the algorithm and assembling the JSON references made the project clearer: I could see where the data and instructions needed attention.

From my project reflection

Clarity came from doing the work

Before I started building, I spent too long researching and trying to resolve the uncertainty on paper. Writing the algorithm and assembling the JSON references made the project clearer: I could see where the data and instructions needed attention. I learned to approach ambiguity by building a first version, then using what it revealed to decide what to do next.

Try CopyGPT

Try the live CopyGPT demo, powered by Claude Sonnet 5.5 and the complete v7 operating guide and JSON references.

Paste one piece of UX writing or attach an app screenshot. CopyGPT identifies the component, asks for essential missing context and proposes one rewrite using Branch’s brand, market and component rules.