At EspressoLabs, we’re always on the lookout for talented engineers who can move fast, think clearly, and build scalable systems. Our home assignment is designed to evaluate just that — and we keep it focused and time-boxed.
“Talk is cheap. Show me the code.”
– Linus Torvalds
The Challenge: Real-Time Chat in 90 Minutes
Goal
Build a real-time chat app using ReactJS that allows users to join different chat rooms and interact in real time.
Key Features
Real-Time Communication
- Use Socket.IO for bidirectional messaging.
- Broadcast messages to all users within a specific chat room.
Basic Authentication
- Implement simple auth with Google or MS. For example, let the users use their email and in the app use their photo ID, name to make it more friendly.
- Restrict access to chat rooms to authenticated users only.
Multiple Chat Rooms
- Let users dynamically create and join chat rooms.
- Display a list of active chat rooms + Show online users in each room.
- Maintain isolated message history for each room (in-memory is fine).
Tech Stack
- Frontend: ReactJS with TypeScript
- Backend: Node.js with Express & Socket.IO
⭐ Bonus
- Jest testing and e2e testing
- Use a DB (whatever you like) on the server side to save everything.
Deliverables
- A public GitHub repo
- A README.md with:
- Clear setup instructions.
- A short explanation of your architecture and what you’d improve with more time.
- A video demo of the app in action.
🔔 How We Evaluate
- Use of LLMs – You’re welcome to use LLMs as part of your workflow. However, you must fully understand and take ownership of the code. We will go deep into each part with you, and you’ll need to explain the why and how behind your decisions.
- Code clarity & structure – Write clean, well-structured code. Add meaningful comments that explain not just what the code does, but also why you chose that approach.
- Correctness & completeness – We’ll review how closely your solution matches the spec. We’ll discuss the MVP version versus what could evolve into v1.0 and beyond. Did you write tests? Which ones, and why those specifically?
- Efficient WebSocket usage – Show that you understand how to use WebSockets effectively, avoiding unnecessary overhead.
- Scalability mindset – Think beyond the MVP. How would you scale this to work globally? What would need to change in your design or architecture?
⏱️ You have 90 minutes, so prioritize working code and a clean structure over perfection.
We’re excited to see your approach – Good luck, and happy coding!
Discover more from Ido Green
Subscribe to get the latest posts sent to your email.