Contexte
Epitalk is a chat application inspired by classic IRC server behavior, allowing users to engage in real-time discussions within public channels or via private messages.
The project was developed as part of an academic assignment at Epitech, with the goal of designing a complete real-time messaging application accessible directly from a web browser.
Rather than using WebSockets as in most modern chat applications, the project leverages Mercure and Server-Sent Events (SSE) to explore an alternative approach for handling real-time communications between server and clients.
The application is fully functional and publicly accessible: users can simply choose a username and immediately join the chat.
Problème
Building a real-time messaging application presents several technical challenges:
- synchronizing messages across multiple users and devices
- managing the creation and administration of discussion channels
- maintaining the state of connected users
- transmitting events without page reloads.
Traditional solutions typically rely on WebSockets, but alternative architectures exist for handling real-time data streams.
The project’s objective was to design a modern chat application while experimenting with an architecture based on Mercure and Server-Sent Events.
Solution
Epitalk is built on a real-time architecture combining an AdonisJS backend and the Mercure protocol to broadcast events to clients.
Clients connect to an SSE stream to receive instant updates from the server: new messages, user arrivals, channel creation, or status changes.
The frontend interface is developed with Vue 3 and TypeScript, using Pinia for state management, delivering a smooth experience akin to modern chat applications.
Users can simply enter a username to join the server and start chatting immediately.
Fonctionnalités principales
- instant connection to the chat via username
- public discussion channels (channels)
- private messaging between users
- creation and deletion of channels
- list of connected users in a channel
- classic IRC commands (/join, /list, /users, /nick, /create, /delete, /msg, /leave)
- integrated bot to handle commands
- real-time updates for messages and events
- online user detection
- responsive interface compatible with mobile and desktop.
Résultats
Epitalk demonstrates the implementation of a complete real-time chat application using an architecture based on Mercure and Server-Sent Events.
The project highlights:
- real-time event handling on client and server sides
- instant data synchronization across multiple users
- the design of a modern chat interface with Vue.js.
It also serves as a demonstration of an alternative architecture to WebSockets for applications requiring real-time updates.