Jason Cox Logo

Project Case Study

Chatty

Chatty is a full-stack real-time messaging application designed to explore WebSocket communication, persistent messaging systems, and responsive UI architecture. The application supports private and group conversations, media sharing, typing indicators, and unread message tracking while maintaining real-time updates between connected users.

ReactViteNode.jsExpressMongoDBSocket.ioZustandCloudinaryTailwind CSS

Project Snapshot

Type

Real-Time Full-Stack App

Architecture

React • Express • MongoDB • Socket.io

Focus

Messaging UX, live updates, state sync

Role

Product design & full-stack development

Architecture

React + Vite frontend handles chat UI, routing, and state management.
Zustand manages global chat state such as conversations, unread counts, and typing indicators.
Node.js + Express backend exposes REST APIs for authentication, conversations, and message persistence.
MongoDB stores users, conversations, and message history.
Socket.IO handles real-time message broadcasting and typing indicators.
Cloudinary manages image uploads and media hosting.

Key Features

User authentication with JWT

Real-time messaging via WebSockets

One-on-one and group chat support

Typing indicators for active conversations

Unread message badge tracking

Image uploads with Cloudinary

Emoji picker and message reactions

Responsive chat UI

Challenges & Solutions

Maintaining real-time UI consistency

Challenge

Real-time chat requires UI updates to appear instantly while still syncing with persisted backend data.

Solution

Socket.IO events update the client immediately while messages are simultaneously stored in MongoDB to ensure conversation history remains consistent after refresh or reconnect.

Handling media uploads within a chat workflow

Challenge

Uploading media during message creation introduces asynchronous processing that can disrupt the chat experience.

Solution

Integrated Multer with Cloudinary so images upload first, then the resulting URL is attached to the message payload and broadcast to connected users.

Managing complex chat state

Challenge

Chat applications require multiple UI states such as active conversations, unread counts, typing indicators, and message history.

Solution

Used Zustand for centralized state management, allowing chat components to subscribe to only the state they need.

Screenshots

Chatty Dashboard
Chatty messaging interface
Chatty user profile
Chatty group conversations