Designing Against Muscle Memory: Why I Modded AI Chat Interfaces

I hate it when I’m editing a long prompt and pressing "Enter" sends it prematurely instead of creating a new line. It disrupts my flow so much that I finally decided to build a Chrome Extension to fix it. Here is the story behind the Enter=NewLine extension, from the frustration to the UX analysis, and finally, the release.
The Frustration: "Don't send yet!"
It started on a day when I was brainstorming with Gemini. I was deep in thought, typing out a long list of bullet points to help shape a project plan. Gemini quickly returned a cleaner version, and I went to edit my original prompt to add more context based on its suggestions.
I typed three lines. My brain was in "writing mode." Even though I logically know that Shift+Enter is the correct way to add a line, my muscle memory took over. I hit Enter.
The incomplete prompt sent instantly. Gemini started "thinking" about a half-baked question.
“No, wait, I haven't finished! Don't waste my time!” I frantically clicked "Stop Generating" and went back to edit my message.
Then, I did it again.
After making the same mistake three times in ten minutes, I stopped. Why was this happening? And more importantly, could I "vibe code" a script to force the interface to match my muscle memory?
The UX Analysis: Conflicting Mental Models
Why did I keep making this mistake? Shift+Enter is standard for modern messaging apps like Discord or Slack. I should be used to it.
But as a designer, I realized this isn't just "user error"—it is a conflict of HTML behaviors and Mental Models.
textarea vs. <input>
In standard web design, we have two primary text inputs:
<input type="text">: A single-line field. PressingEnterhere submits the form.<textarea>: A multi-line field that wraps text and allows scrolling. PressingEnterhere creates a new line (a line break).
Default: Enter = New Line
Default: Enter = Submit
The Context Switch
The problem with AI chat interfaces is that they look like one thing but act like another.
- Quick Chat Mode: When you ask a simple question like, "Outfit suggestions for a summer trip," it feels like a messaging app. Quick question, quick answer.
Enterto send makes sense here. - Editor Mode: When you are working on complex tasks—like event planning or coding—you are often writing long paragraphs. You are in "Editor Mode." Your mental model expects the text box to behave like a document editor or a standard
<textarea>.

When I am editing a previous long prompt, the text box expands into a multi-paragraph block. It looks like a document. So, when I want to insert a line, my brain instinctively hits Enter. When it submits instead, it feels like a betrayal of the interface's affordance.
I realized I wanted control. I wanted to separate the act of "composing" from the act of "sending."
The Solution: "Vibe Coding" the Fix
I decided the simple solution was to force all submit actions to be Ctrl+Enter (or Cmd+Enter). If I press Enter by mistake and nothing happens, that is a "fail-safe" state. I can just correct myself and press Ctrl+Enter. This is much cheaper than the "cost" of sending an unfinished prompt.
A Note on Shift+Enter
You might wonder: why didn't I touch Shift+Enter?
My design philosophy was minimal intervention. Shift+Enter is already the universal standard for creating a new line, and it works correctly in these interfaces. It wasn't "broken," so I didn't want to fix it. My goal was strictly to stop the accidental sends caused by the Enter key, not to rewrite the entire keyboard map.
I opened a new chat with Gemini and explained my requirements.
- "I want a script that prevents
Enterfrom sending the message." - "I want
Enterto only insert a new line." - "I want
Ctrl+Enterto send the message."
After five rounds of debugging and iteration, I had a working script running in Violentmonkey. It worked perfectly. (Fun fact: ChatGPT also tried to write the script, but its code failed twice. Gemini won this round.)
From Script to Chrome Extension
If this script fixed my workflow, surely other designers and writers needed it too?
I paid the $5 fee to become a Chrome Developer and asked Gemini to help me convert my Violentmonkey script into a proper Chrome Extension. It turned out to be surprisingly simple—just two main files: manifest.json and content.js.

Designing the Store Assets
This is where I took off my developer hat and put my designer hat back on. Coding the extension took minutes, but designing the promotional assets took hours. The Chrome Web Store has strict requirements:
- Cover: 440x280 px
- Screenshots: 1280x800 px
- Icon: 128x128 px (with a 96x96 safe zone)
![]()
The icon guidelines actually felt familiar; they reminded me of Material Design principles. The goal is to make the icon dominate the center but leave "breathing room" so it looks unified with other extensions in the toolbar.
For the cover art, I iterated through several designs. I wanted something modern that explained the utility at a glance.
The "Subtle" Approach
I initially tried placing small keystroke icons next to the action buttons. However, once I saw it in context, the visual cue was too subtle to grab attention in the store.
The "Keycap" Concept
I experimented with high-contrast, angled keys to mimic physical keycaps. While distinct, the large block of dark keys felt visually heavy and unbalanced against the white background.
Refining the Details
Draft 3 (top) was close, but felt cluttered. For the final version (bottom), I moved the slogan inside the input box as placeholder text to reduce visual noise. I also pushed the "Enter" key partially out of bounds to break the grid, and added the specific AI logos to the footer to signal compatibility.
I chose a blue-gray background to contrast with the colorful logos of the supported AI platforms. To avoid any copyright headaches, I hand-drew stylized versions of the AI logos using a pixel brush.
![]()
Conclusion
The extension is now live! It was a fun weekend project that solved a genuine daily annoyance. It also reinforced a key lesson for me: sometimes the best UX is the one that prevents errors before they happen.

It is available on the Chrome Web Store now. Give it a try if you also hate accidental sends!