DOT Messanger โ€” Conversation
Hey! You there? ๐Ÿ‘‹
Yeah! What's up? ๐Ÿ˜„
Check out DOT Messanger! ๐Ÿš€
โšก Full-Stack โ€ข React 19 โ€ข Node.js โ€ข WebSocket

DOT Messanger

The classic messenger. Reimagined as a full-stack web application with real-time WebSocket communication.

Abderrahmane is typing
Features โ€” DOT Messanger
Everything You Loved, And More

All the nostalgic WLM features, rebuilt with modern full-stack technology.

Real-time Messaging
๐Ÿ’ฌ
Real-time Messaging
Instant message delivery via native WebSocket. Typing indicators, message history on connect, and live user presence tracking.
GIF & Sticker Picker
๐ŸŽญ
GIFs & Stickers
Giphy API integration with a searchable GIF drawer, plus a curated local sticker collection โ€” just like Winks & Emoticons.
Voice Messages
๐ŸŽ™๏ธ
Voice Messages
Record and send voice clips via the Web Audio API. Server-validated with 1MB limit and strict audio/ header checks.
PDF Sharing
๐Ÿ“„
PDF Sharing
Send up to 3 PDFs at once with inline preview thumbnails. Server validates file headers, size (2MB limit), and sanitizes filenames.
Photo Sharing
๐Ÿ“ธ
Photo Sharing
Share images with fullscreen preview dialogs, zoom controls, and pending upload confirmation. 2MB size limit enforced server-side.
Reactions & Replies
๐Ÿ˜
Reactions & Replies
React with emoji (one per user, toggle off/on) or thread a reply. Reactions broadcast in real-time to all connected clients.
Themes
๐ŸŽจ
Themes
Switch between multiple WLM-inspired colour themes with font, color, and font-size customization applied globally.
Online Contacts Panel
๐Ÿ‘ฅ
Online Contacts
Sidebar showing who's online/offline with live status updates โ€” powered by server-side USER_STATUS_UPDATE broadcasts.
User Profiles
๐Ÿ‘ค
User Profiles
Editable profile with 30+ classic DOT avatars. View other users' profiles with creation date, IP info, and status details.
Gifts
๐ŸŽ
Gifts
Send animated gift messages to friends โ€” a modern take on the classic DOT Wink feature with visual flair.
Text Formatting
โœ๏ธ
Text Formatting
Rich text input with formatting toolbar โ€” bold, italic, and more styling options before sending your messages.
Breaking News Panel
๐Ÿ“ฐ
Breaking News
Live news panel in the sidebar with expandable article cards, cover images, attachments, and custom scrollbar styling.
Tech Stack
Built With

A modern full-stack powering a classic experience.

๐Ÿ–ฅ๏ธ Frontend
โš›๏ธ React 19 ๐Ÿ”ท TypeScript ๐ŸŽจ Tailwind CSS v4 ๐ŸŽž Motion (Framer) ๐Ÿ”ถ Lucide React โšก Vite
โš™๏ธ Backend
๐ŸŸข Node.js ๐Ÿš‚ Express 5 ๐Ÿ”Œ WebSocket (ws) ๐Ÿ›ก๏ธ Zod ๐Ÿ”‘ UUID ๐Ÿ”ง dotenv
๐ŸŒ APIs & Services
๐Ÿ˜‚ Giphy API ๐ŸŽ™ Web Audio API ๐Ÿ’พ In-Memory Store
Backend Architecture
WebSocket Message Flow

How messages travel from client to server and back to all connected users.

๐Ÿ–ฅ๏ธ React Client
Browser WebSocket
โ†’
๐Ÿ”Œ WS Server
Rate Limiter
โ†’
โš™๏ธ Handlers
Auth ยท Message ยท Reaction
โ†’
๐Ÿ’พ Memory Store
Users ยท Messages

๐Ÿ“จ Supported Message Types

text image voice pdf sticker gif gift nudge

๐Ÿ›ก๏ธ Server Middleware Pipeline

๐Ÿ”’ Auth Middleware โฑ๏ธ Token Rate Limiter โœ… Message Validation (Zod) ๐Ÿงน XSS Sanitization ๐Ÿ“ก Broadcast Service

๐Ÿ”„ Connection Lifecycle

WebSocket Flow
Client connects โ†’ WS Server assigns rate-limit tokens
Client sends AUTH {token} โ†’ Server validates โ†’ Sends HISTORY + AUTH_SUCCESS
Server broadcasts USER_STATUS_UPDATE to all clients
Client sends messages โ†’ Validated โ†’ Stored โ†’ Broadcast to all
Client disconnects โ†’ Removed from clients โ†’ Status re-broadcast
Getting Started โ€” Developer Setup
Developer Setup

Get DOT Messanger running locally โ€” both backend and frontend.

1. Clone the repository

bash
git clone https://github.com/aarab-abderrahmane/messager.git
cd messager

2. Backend setup

bash
cd server
npm install

# Create .env from example
cp .example.env .env
server/.env
PORT=5000               # Express + WS server port
MAX_TOKENS=10           # Rate limiter token bucket size
JWT_SECRET=mysecretkey  # Auth secret

3. Frontend setup

bash
cd ../frontEnd
npm install

4. Run both servers

bash
# Terminal 1 โ€” Backend
cd server && npm run dev   # starts on http://localhost:5000

# Terminal 2 โ€” Frontend
cd frontEnd && npm run dev # starts on http://localhost:3000

๐Ÿ“ Project Structure

Project Layout
messager/
โ”œโ”€โ”€ server/                        # Backend
โ”‚   โ”œโ”€โ”€ package.json
โ”‚   โ””โ”€โ”€ server/
โ”‚       โ”œโ”€โ”€ server.js              # Express + HTTP entry point
โ”‚       โ”œโ”€โ”€ config/socket.js       # WebSocket server setup
โ”‚       โ”œโ”€โ”€ controllers/           # signup, GIF proxy
โ”‚       โ”œโ”€โ”€ handlers/              # auth, message, reaction handlers
โ”‚       โ”œโ”€โ”€ memory/                # In-memory userStore & chatStore
โ”‚       โ”œโ”€โ”€ middleware/            # auth, rateLimiter, validation
โ”‚       โ”œโ”€โ”€ routes/chatRoutes.js   # REST API endpoints (/Dot)
โ”‚       โ””โ”€โ”€ services/              # broadcast, messageFactory
โ”‚
โ””โ”€โ”€ frontEnd/                      # Frontend
    โ”œโ”€โ”€ public/                    # Static assets, avatars, stickers
    โ””โ”€โ”€ src/
        โ”œโ”€โ”€ App.tsx                # Root โ€” SignupPage or ChatPage
        โ”œโ”€โ”€ types.ts               # Message, UserData, NewsItem
        โ”œโ”€โ”€ constants.ts           # Avatars, stickers, emojis
        โ””โ”€โ”€ components/
            โ”œโ”€โ”€ common/            # TitleBar, Toast
            โ”œโ”€โ”€ signup/            # SignupPage
            โ””โ”€โ”€ chat/              # ChatPage + all dialogs
                โ”œโ”€โ”€ ChatPage.tsx
                โ”œโ”€โ”€ ThemeDialog.tsx
                โ”œโ”€โ”€ StickerDialog.tsx
                โ”œโ”€โ”€ ProfileDialog.tsx
                โ”œโ”€โ”€ PhotoPreviewDialog.tsx
                โ”œโ”€โ”€ PdfPreviewDialog.tsx
                โ”œโ”€โ”€ NewsDialog.tsx
                โ”œโ”€โ”€ GiftDialog.tsx
                โ””โ”€โ”€ FormatButton.tsx
UI Component Reference โ€” Help
Component Reference

Key props and interfaces for the main components.

TitleBar

Prop Type Default Description
title string โ€” Window title text displayed in the blue bar
icon ReactNode โ€” Optional icon before the title
onClose () => void โ€” Callback for the โœ• close button
showControls boolean true Show min/max/close window controls

ChatPage

Prop Type Description
user UserData Current authenticated user (token, email, username, avatar)
onLogout () => void Clears localStorage and returns to SignupPage

Message Interface

Field Type Description
id string Unique message identifier (UUID)
type 'text' | 'image' | 'voice' | 'pdf' | 'sticker' | 'gif' | 'gift' | 'nudge' | 'system' Message content type
content string Text content or base64-encoded media
sender 'me' | 'them' Message direction
reactions {[emoji]: string[]} Map of emoji โ†’ array of user emails
replyTo {id, text, username} Optional threaded reply reference
attachments {name, content}[] PDF file attachments (up to 3)

ThemeDialog

Prop Type Description
isOpen boolean Controls dialog visibility
onClose () => void Callback to close the dialog
onApply (theme) => void Applies font, colours, and font-size globally
Preview โ€” DOT Messanger Windows
App Preview

DOT Messanger windows โ€” faithful to the original WLM 7 layout.

๐Ÿ’ฌ DOT Messanger โ€” Conversation
๐Ÿ’ฌ
Chat Window Real-time messaging with reactions & replies
๐Ÿ‘ฅ People Online
๐Ÿ‘ฅ
Contacts Panel Live online/offline status via WebSocket
๐ŸŽญ GIF & Sticker Picker
๐ŸŽญ
Sticker Picker Giphy-powered GIF search + local stickers
๐Ÿ“ธ Photo Preview
๐Ÿ“ธ
Photo Dialog Fullscreen preview with zoom controls
๐Ÿ“ฐ Breaking News
๐Ÿ“ฐ
News Panel Live news with cover images & attachments
๐ŸŽ™ Voice Message Recorder
๐ŸŽ™๏ธ
Voice Recorder Web Audio API with waveform visualiser
๐ŸŽจ Theme Settings
๐ŸŽจ
Theme Dialog Font, colour, and size customization
๐Ÿ‘ค User Profile
๐Ÿ‘ค
Profile Dialog 30+ classic DOT avatars & user info