You’ve seen this before.
Someone is typing…
You wait…
Nothing comes.
Still typing…
Still waiting…
And it never stops.
This is called a ghost typing bug.
So I created a challenge on VibeCode Arena to test how systems handle this.
And honestly… most solutions failed in interesting ways.
The Problem
At first glance, the logic looks simple:
- User starts typing → mark as typing
- User stops typing → remove from list
- Show active typing users
Seems correct.
But real-world systems don’t behave perfectly.

⚠️ What Can Go Wrong?
In real applications:
• User closes app without sending “stop typing”
• Network delay causes events to arrive late
• “Stop typing” event is never received
• System keeps stale data
And suddenly:
User appears as typing forever
UI becomes confusing
Experience feels broken
What I Observed
When AI models tried this challenge:
- Some handled start/stop logic
- Many ignored missing events
- Some didn’t handle timeouts
- Very few handled real-time inconsistencies
The code works.
But the system feels wrong.

The Real Issue
This is not just about state.
It’s about real-time reliability.
Because:
Events can be lost
Timing is unpredictable
Systems must recover automatically
What a Better System Needs
A proper typing system should:
- Add automatic timeout (e.g., 3–5 seconds)
- Handle missing “stop typing” events
- Refresh state periodically
- Use real-time communication (WebSockets)
- Prevent stale indicators
This ensures:
No ghost typing
Clean user experience

Try My Challenge
I created this challenge to test real-time system thinking.
Try it here:
https://vibecodearena.ai/duel/8e38434c-d1cc-4d98-b1a3-ea9677348050/42915701-2dec-48cd-bc76-cef4ca7bf26d
Can you:
- Remove ghost typing?
- Handle missing events?
- Build a reliable real-time system?
Final Thought
Typing indicators are not about showing activity.
They’re about showing correct activity.
Because in real-time systems…
Even small delays can create big problems.
Try it and tell me
Did AI fix ghost typing… or leave users typing forever?