AI keyboard that helps non-native speakers sound closer
Project overview
For late L2 learners, one of the most frustrating moments is coming across as cold or distant because they lack the expressive range to communicate. Most language AI tools optimize rewrites for linguistic accuracy, but in close friendships, sounding emotionally close matters just as much. We designed an AI keyboard that rewrites messages for emotional closeness in real time.
ROLE & Contribution
Design Engineer. Design & prototyped end-to-end flows, then technically implemented Figma designs with Claude Code. Validated AI output quality through user testing, iteratively refining prompts to optimize better results.
Key Interactions
Input
Tone tag selection
Result generation
Translation & Text swap
writing patterns & Insights
To understand what makes their writing feel less close, we asked 5 L2 (late second language) English speakers to reply to the same message in English, then in their native language. In terms of differences in expressiveness, we found they tend to compress emotion more in their non-native language in two ways:
Relied on familiar, low-risk phrases
Response in Non-native English
Response translated from native language

M
E
99
Ellie
I think I completely bombed that exam.
🥺 I'm sorry to hear that. I'm sure you'll do better next time though!
they answered afterwards,
“not sure about the boundaries,
don’t know what else to say”

M
E
99
Ellie
(Translated from Korean)
Wait seriously? You studied so hard though. Let's grab something spicy and complain about it
I think I completely bombed that exam.
Emotional compensation through emojis
Response in Non-native English
Response translated from native language

M
E
99
Ellie
I finally passed the exam!
omg 😭😭😭 Congratulations!!!🥰
they answered afterwards,
“When I try to say in English, it’s hard to come up with anything else, but once I throw in an emoji, it actually feels like it shows how happy I am at least a bit”

M
E
99
Ellie
(Translated from Chinese)
Congrats!! I knew you could do it hahaha I'm really proud of you
I finally passed the exam!
Design Principles for AI
To sound closeness between friends...

A message feels personal when it shows the thought or feeling behind it. "Why weren't you in class?" asks about what happened. "I was looking for you all day. Are you okay?" reveals what someone was feeling.

Close friends rarely write perfectly polished messages. A quick "lol same" or a typo left uncorrected feels more like a friend than a carefully edited reply.
Behavior & System design
We translated the design principles into concrete prompting behaviors for closeness between friends that guided what the LLM model should reveal, preserve and suppress during generation.
Reveal
underlying thoughts
implied feelings
emotional intent
Preserve
texting style
sentence context
emotional intensity
sentence length
Suppress
assistant-like explanations
generic reassurance
over-polished phrasing
performative humor
And then configured the system architecture.
ex. I didn’t know that
Plain text
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
Why Emoji as a nuance parameter?
→ It functions as an additional expressive language and is naturally used in a messaging situation to compensate for emotional nuances that are difficult to convey through texts alone
Nuance Parameter
We narrowed the emoji set to 7, chosen from the most globally used emojis and mapped onto universal human emotions to balance broad emotional coverage with stable generation.
😮
surprise
😂
laughing
😆
excited
😍
loving
😭
crying
😅
awkward
🥺
pleading
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.
Behavioral prompt specification (e.g. Crying)
😭
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"
Output Quality Validation & Iteration
We ran 24 rounds of user testing, having people type and review the system’s output in real-time. On a 5 point scale measuring how well the intended nuance came through, we scored an average of 4.1 and found two important areas to improve.

Brown U School of Engineering Science Poster

Screenshots of results from the 24 rounds of user testing
Finding 1 - Ambiguous emoji interpretation ("I interpreted this emoji differently”)
I’m late, everyone will look at me
😭
🥰
😂
😆
😮
😅
🥺
i'm so screwed. Everyone's gonna notice me walking in
Swap
omg i'm late. everyone's gonna stare at me the second i open the door
Swap
nooo i'm gonna be late. i hate when everyone looks at me as i walk in 😭
Swap

Serena
Back
Only Emoji
Design change - Added explicit emotion labels to align individual’s interpretation
I’m late, everyone will look at me
😭
crying
😍
loving
😂
laughing
😆
excited
😮
surprise
😅
awkward
🥺
pleading
i'm so screwed. Everyone's gonna notice me walking in
Swap
omg i'm late. everyone's gonna stare at me the second i open the door
Swap
nooo i'm gonna be late. i hate when everyone looks at me as i walk in 😭
Swap

Serena
Back
Emoji + Emotion Label
Finding 2 - Difficulty grasping the nuance of second-language expressions (“I'm not really sure what this expression means.”)
I’m late, everyone will look at me
😭
🥰
😂
😆
😮
😅
🥺
i'm so screwed. Everyone's gonna notice me walking in
Swap
omg i'm late. everyone's gonna stare at me the second i open the door
Swap
nooo i'm gonna be late. i hate when everyone looks at me as i walk in 😭
Swap

Serena
Back
English only
Design change - Added native-language interpretation to convey the intended nuance of unfamiliar expressions.
I’m late, everyone will look at me
😭
crying
😍
loving
😂
laughing
😆
excited
😮
surprise
😅
awkward
🥺
pleading

Show in Korean
Change language
i'm so screwed. Everyone's gonna notice me walking in
Swap
omg i'm late. everyone's gonna stare at me the second i open the door
Swap
nooo i'm gonna be late. i hate when everyone looks at me as i walk in 😭
Swap

Serena
Back
I’m late, everyone will look at me
😭
crying
😍
loving
😂
laughing
😆
excited
😮
surprise
😅
awkward
🥺
pleading

Back to English
Change language
😭

Serena
Back
Native-language
translation
Removed the Swap button to keep
the focus on understanding first, then returning to the second-language
Show in English (Second-language)
Translate to native-language
Next step is...
1. Scaling emotional closeness across platforms
We chose the keyboard as the MVP because it provides a cross-app, zero-friction touchpoint at the exact moment people type. But the challenge of expressing emotional closeness in a second language could extend wherever people write. Future iterations could bring the same behavioral rewriting system to social media, email, browser extensions, and other writing experiences.
2. Personalizing closeness by relationships
While this project focuses on making messages sound emotionally closer, closeness itself varies across relationships. The way people communicate with a best friend, sibling, partner, or coworker differs significantly. Future work could explore how AI adapts its rewrites based on the user's relationship with the recipient, making suggestions feel more personally authentic rather than universally friendly.