AI keyboard that helps non-native speakers sound closer
Design + Engineering
AI Interaction
Overview
Designing an AI rewriting tool for second-language messaging
This project started from our early research that second language learners used to compress emotional expression in writing because they relied on a narrower set of familiar phrases. We designed the AI behavior and interactions for a custom keyboard that generated more personal, expressive versions of their original messages for conversations with close friends.
As the design engineer, I took the product from Figma to a working native iOS keyboard and covered the end-to-end interaction flow, prompting behavior, and SwiftUI implementation. Over 3 weeks, I refined the AI output and interface through 24 live user tests.
Collaborators
Ellie Na (Design Engineer)
Serena Gupta (Visual Director)
Chaki Ng (Engineering Advisor)
Soojung Ham (Design Advisor)
Skills
Interaction Design
AI Behavior & Prompt Design
Native iOS Implementation
User Testing & Iteration
Tools & Stack
Figma, Xcode, Swift / SwiftUI, Gemini API, Cursor, Claude Code
Duration
2026.03-2026.05
Outcome
1. Our AI keyboard cut message-rewriting time by 70% while texting.
In a timed comparison, users reached a rewrite they were ready to send in around 30 seconds with the keyboard, down from 1 minute 40 seconds using a general-purpose LLM.
1m 40s
~30s
Time to a send-ready rewrite
2. The generated rewrites scored 4.1/5 for intended nuance alignment.
We asked 24 second-language speakers to use the rewriting flow and rate how well the outputs conveyed their intended nuance. The outputs received an average rating of 4.1/5.
4.1/5
Intended nuance alignment
Key Interactions
An end-to-end rewriting flow within the keyboard
Texting is fast and lightweight, so each interaction needed to fit within the message field. The keyboard carried users from their original text through nuance selection, generation, interpretation, and insertion in one compact flow.
Start with the original message
Users entered the message they wanted to send directly in the keyboard. Keeping the entry point within the typing experience made the rewriting flow available across messaging apps and reduced the work of moving between a conversation and a separate AI tool.
Choose the intended nuance with labeled emotion tags
Our research showed that second-language speakers already used emojis to carry emotional nuance. We narrowed the control to seven common emotions and paired each emoji with an explicit label after testing revealed inconsistent interpretations.
Generate 3 alternatives while keeping context visible
Testing showed that users sometimes understood the words in a rewrite but missed the social meaning of unfamiliar expressions. Native-language interpretations clarified the intended nuance, and the Swap action inserted the selected rewrite directly into the message field.
Translate each rewrite and simply swap it
Back in 2024, the existing caselaw search systems were all filter-based, where people select conditions they barely know, then get flooded with a vast amount of results. It was too hard for the m
Research Insights
In a second language, emotional expression narrowed in two ways...
To understand what makes their writing feel less close and how this narrowing specifically appeared in everyday messages, we asked 5 people who learned English later in life to respond to the same close-friend messages in English and in their native language.
Pattern 1 - Relied on narrower set of familiar phrases
When writing in English, participants relied on familiar, low-risk phrases even with close friends. In their native languages, they drew on a broader range of expression like bringing in situational details, shared context, and more personal ways of showing care.

Pattern 2 - More frequent use of emojis to convey emotional intensity
When people struggled to find words that matched their feelings in English, they used emojis to add emotional intensity to short messages. In their native languages, the same feelings tend to come through with fuller sentences and more specific expressions.

Approach
Giving the AI and the user distinct roles in making messages feel closer
Looking across both patterns, we saw two different limits on expression and thought AI would broaden the language beyond the phrases users already knew, while users would choose the emotion they wanted to express more fully. This gave us two clear directions for designing the rewriting system.
Broader linguistic range
Deeper emotional expression
AI’s role
User’s role
Design Decision
1. Broader linguistic range: How should the AI broaden linguistic range, while keeping the message personal?
I defined what the AI should reveal, preserve, and suppress in each rewrite.
I treated linguistic range as more than using richer vocabulary. Each rewrite needed to surface the thoughts and feelings already implied in the draft while staying grounded in the sender’s meaning, texting style, and relationship context. I also identified patterns that made close-friend messages feel generic or overly polished and excluded them from generation.
Reveal
underlying thoughts
implied feelings
emotional intent
Preserve
original meaning
texting style
sentence context
message length
Suppress
assistant-like explanations
generic reassurance
over-polished phrasing
forced humor
2. Deeper emotional expression: How should users direct the emotion in each rewrite?
I used emojis as a familiar parameter for emotional nuance.
Participants already used emojis to carry emotional intensity their English wording left implicit. I built on this familiar messaging behavior, allowing users to select the emotion they wanted the AI to bring forward and express more fully in each rewrite.
I narrowed the parameter to seven familiar emotions.
I selected seven commonly used emojis that covered a broad range of emotions while keeping the choice lightweight during texting.
😮
surprise
😂
laughing
😆
excited
😍
loving
😭
crying
😅
awkward
🥺
pleading
Then I defined how each emotion should affect the rewrite.
...the same emoji can be read differently, so leaving the nuance up to emoji alone makes its interpretation inconsistent. To anchor the consistent output across generations, we defined observable texting behaviors the model should follow.
😭
crying
Definitions
1
Behavioral cues
2
guardrails
3
Example outputs
4
Dramatic devastation with attitude—not quiet sadness, but loud, indignant grief. The feeling is "I can't believe this happened to me."
- Increase emotional intensity
- Speak from a personally wronged perspective
- Use dramatic but believable wording
Tone-specific
- quiet, restrained sadness
- passive or gentle phrasing
Shared across all tones
- therapist-like reassurance
- meme humor or roleplay energy
"I literally can't believe this happened 😭"
"nah this is actually so unfair"
"I'm actually devastated"
Behavioral prompt specification (e.g. Crying)
SYSTEM ARCHITECTURE
I combined the message, selected emotion, and AI behavior in one rewriting flow
The original message grounded the rewrite in the sender’s meaning and conversational context. The selected emoji indicated which emotion to express more fully. Gemini then applied the reveal, preserve, and suppress rules to generate three alternatives that varied in phrasing while remaining connected to the original message.
ex. I didn’t know that
Original message
e.g. Why you weren’t in class?
Input
Process
Output
Expressive alternatives
e.g. I was looking for you all day. U good?
Gemini API
Applies:
Emoji (nuance parameter)
e.g. Crying - 😭 / ...
Reveal
Preserve
Suppress
VALIDATION & ITERATION
Could users recognize the intended nuance in each rewrite?
The rewrites scored 4.1/5 across 24 live tests and we noticed two points of confusion.
Across 24 live testing sessions, participants wrote their own messages, selected an emotion, and reviewed the generated rewrites in real time. They rated how closely each output matched the nuance they intended. The average score showed that the system generally conveyed the selected emotion, while their feedback revealed two recurring points of confusion around interpreting the emoji and understanding unfamiliar English expressions.

Live testing at the Brown School of Engineering

Messages, selected emotions, and ratings collected across 24 tests
Finding 1
The same emoji meant different things to different users.
Participants sometimes selected an emoji based on a personal interpretation that differed from the meaning assigned within the system. This created a mismatch between the emotion users expected and the direction the AI applied during generation.

So I paired each emoji with an explicit emotion label.
Labels such as Crying, Loving, and Laughing made the system’s interpretation visible before generation, helping users choose an emotional direction with clearer expectations.

Finding 2
Unfamiliar expressions made the intended nuance difficult to judge.
Some generated rewrites included casual phrases that participants had not encountered before. They could read the English but were unsure how the expression would come across in a close-friend conversation, making it difficult to confidently apply the rewrite.

I added a native-language preview before users applied a rewrite.
Users could view each result in their native language to understand its meaning and emotional nuance, then return to English when they were ready to use it. I removed the swap action from the translated view so evaluation and application happened as separate steps.

NEXT STEP
The next step is making closeness more personal.
Our system generated expressive rewrites for close-friend conversations, but people express closeness differently depending on who they are speaking with and how they naturally text. Future iterations could adapt the same behavioral framework to each relationship and individual communication style.
1. Adapt expression to each relationship
Closeness can mean playful teasing with a best friend, reassurance with a sibling, affection with a partner, or warmth with a coworker. The system could use relationship context to adjust emotional intensity, directness, humor, and familiarity for each recipient.
2. Learn each user’s way of texting
The system could learn from the rewrites users select, edit, and send to better reflect their preferred vocabulary, sentence length, humor, and emotional style over time.
TAKEAWAY
Designing emotional AI required a shared language between the user and the system
The quality of a rewrite depended on more than expressive output. Users needed to understand how the AI interpreted their emotion and confidently judge how each suggestion would come across. Making that interpretation visible became central to the experience.