/Quick

Chat App: A MERN stack project facilitating messaging, video & voice calls, group chats, and personal conversations. Customize profiles and explore a global user directory.

Primary LanguageTypeScript

Quick Chat Application ๐Ÿš€

Quick is a simple and efficient chat application designed to facilitate fast and easy communication between users. Whether you want to chat one-on-one with friends or participate in group conversations, Quick has got you covered.

Key Features โœจ

  • Instant Messaging: Send and receive messages in real-time.
  • One-on-One Chat: Engage in private conversations with individual users.
  • Group Chats: Create or join group conversations with multiple users.
  • User Authentication: Secure login system using JWT authentication.
  • Customizable Profiles: Personalize your profile with avatars, statuses, and more.
  • Notification System: Receive alerts for new messages and updates.
  • Lightweight and Fast: Built for speed and efficiency, ensuring a smooth user experience.
  • Video Call: Initiate video calls with other users ๐Ÿ“น.
  • Audio Call: Make voice calls to other users ๐Ÿ“ž.
  • Responsive: Provides a user-friendly experience on various devices.
  • Search Functionality: Quickly find users and conversations ๐Ÿ”.

All key features have been thoroughly tested using Playwright to ensure reliability and performance.

Technologies Used ๐Ÿ› ๏ธ

  • Next.js: React framework for server-side rendering and static site generation
  • Express.js: Web application framework for Node.js
  • Prisma: Modern database toolkit
  • Docker: Containerization platform
  • Tailwind CSS: Utility-first CSS framework
  • Pusher: Real-time communication API
  • PeerJS: Peer-to-peer communication library
  • WebRTC: Real-time communication protocol
  • Zustand: Lightweight state management library
  • Playwright: Browser automation library
  • Dexie: IndexedDB wrapper library for client-side storage
  • Nodemailer: Email sending library

Getting Started ๐Ÿšฆ

Prerequisites ๐Ÿšง

How To Use ๐Ÿš€

From your command line:

# Clone this repository
  $git clone https://github.com/SHABIN-K/quick.git

# Go into the repository
  $cd quick

Navigate to the server folder and create a file: .env. Add the following contents:

   APP_PORT='Your server port number'
   APP_LOG_LEVEL='log level'
   APP_NODE_ENV='prodcution | development mode'
   APP_WEB_URL='your frontend url'
   APP_SESSION_SECRET='secret_key'
   APP_SALT_ROUNDS = 10
   APP_LEVEL="development"
  
# for database purposes
   APP_DATABASE_URL='your_Mongodb_database_url'

# for jwt token generation
   APP_ACCESS_TOKEN_SECRET='your_access_token_secret'
   APP_REFRESH_TOKEN_SECRET='your_access_token_secret'
   APP_REFRESH_TOKEN_EXPIRY=30d
   APP_ACCESS_TOKEN_EXPIRY=7d
   APP_RESET_PASSWORD_TOKEN_SECRET=15m
   APP_RESET_PASSWORD_TOKEN_EXPIRY_MINS=15m
   
# for email config
  APP_GMAIL_USERNAME='your_email_id'
  APP_GMAIL_PASS="your_email_pass"

# https://pusher.com
  APP_PUSHER_ID=""
  APP_PUSHER_KEY=""
  APP_PUSHER_SECRET=""
  APP_PUSHER_CLUSTER="

Navigate to the client folder and create a file: .env:

# https://pusher.com/
  NEXT_PUBLIC_PUSHER_APP_KEY=''
  NEXT_PUBLIC_BACKEND_URL='your backend url'

Running the Application ๐Ÿ›ซ

  1. Ensure Docker is installed and running on your machine.
  2. From the project root directory, run the following command to build and start the application:
   docker-compose up --build

Development Workflow ๐Ÿ› ๏ธ

For development purposes, you can start the client and server separately to benefit from hot reloading:

  1. Navigate to the client directory and run:
   npm install
   npm run dev
  1. Open a new terminal, navigate to the server directory, and run:
   npm install
   npm run dev

Testing ๐Ÿงช

All key features have been thoroughly tested using Playwright to ensure reliability and performance. To run the tests, use:

   # Run Playwright tests
   npx playwright test

Support ๐Ÿ’ฌ

Join Our Telegram Group for support and assistance, and our Channel for updates. Report bugs and give feature requests there.

โญ๏ธ Star this Repo if you Liked it! โญ๏ธ