All Projects → suddenlyGiovanni → spiced_academy--p2p_chat

suddenlyGiovanni / spiced_academy--p2p_chat

Licence: other
A fun and easy messaging app that allows private conversations through P2P

Programming Languages

javascript
184084 projects - #8 most used programming language
HTML
75241 projects

Projects that are alternatives of or similar to spiced academy--p2p chat

Spreen
Now use any device with a web browser as a second screen for your laptop or PC. No cables. No internet. No software installation. Just Spreen, that's it.
Stars: ✭ 29 (+70.59%)
Mutual labels:  socket-io, peerjs
harker-bell
Official bell schedule app
Stars: ✭ 41 (+141.18%)
Mutual labels:  socket-io
Webrtc Video Broadcast
WebRTC video/audio broadcast
Stars: ✭ 217 (+1176.47%)
Mutual labels:  socket-io
web15-TadakTadak
타닥타닥 모닥불 앞에서 타닥타닥 코딩하는 서비스 🔥🧑🏻‍💻
Stars: ✭ 50 (+194.12%)
Mutual labels:  socket-io
Vue Echo
Vue integration for the Laravel Echo library.
Stars: ✭ 229 (+1247.06%)
Mutual labels:  socket-io
Radar
Arduino Servo controller with Ultrasonic sensor, that will send distance value from sensor to Node.js via USB serial and leveraging socket.io to send the data to browser in realtime.
Stars: ✭ 24 (+41.18%)
Mutual labels:  socket-io
Egg Socket.io
socket.io plugin for eggjs.
Stars: ✭ 209 (+1129.41%)
Mutual labels:  socket-io
realtime-geolocation
Geolocation tracking app with Node.js, Socket.io, & AngularJS
Stars: ✭ 29 (+70.59%)
Mutual labels:  socket-io
m.io
An open source Moomoo.io server implementation
Stars: ✭ 20 (+17.65%)
Mutual labels:  socket-io
sync
📺 Interactive, synchronized YouTube streaming
Stars: ✭ 23 (+35.29%)
Mutual labels:  socket-io
Chattt
❯❯❯ Chat without leaving your terminal
Stars: ✭ 239 (+1305.88%)
Mutual labels:  socket-io
Node Decorators
node-decorators
Stars: ✭ 230 (+1252.94%)
Mutual labels:  socket-io
2019-15
Catch My Mind - 웹으로 즐길 수 있는 캐치마인드
Stars: ✭ 19 (+11.76%)
Mutual labels:  socket-io
Web Socket
Laravel library for asynchronously serving WebSockets.
Stars: ✭ 225 (+1223.53%)
Mutual labels:  socket-io
rust-socketio
An implementation of a socket.io client written in the Rust programming language.
Stars: ✭ 198 (+1064.71%)
Mutual labels:  socket-io
Laravel Echo Server
Socket.io server for Laravel Echo
Stars: ✭ 2,487 (+14529.41%)
Mutual labels:  socket-io
Android spy app
This is a android spy app, which uploads user data such as contacts, messages, call log, send message(s), photos, videos, open a browser link etc. Android Rat
Stars: ✭ 232 (+1264.71%)
Mutual labels:  socket-io
pacNEM
pacNEM is a Browser PacMan game with NodeJS, Socket.io, Handlebars and NEM Blockchain
Stars: ✭ 20 (+17.65%)
Mutual labels:  socket-io
quickmeet
A video chat/meeting webapp using WebRTC and WebSockets. Basically a Google Meet clone + a collaborative Whiteboard.
Stars: ✭ 75 (+341.18%)
Mutual labels:  socket-io
blog-single-user-websocket
Enforcing a single web socket connection per user with Node.js, Socket.IO, and Redis. Sample repository for my article on Medium.
Stars: ✭ 67 (+294.12%)
Mutual labels:  socket-io

P2P-Chat

A fun and easy messaging app that allows private conversations through P2P.

Table of contents

Context

Between July and October 2017, I attend SPICED Academy, an intensive 12-week coding program focused on Full Stack JavaScript Web Development in Berlin. During this program, I built a portfolio of web applications.

  1. Reichstag - a static landing page
  2. Kitty Carousel - a carousel/slideshow element that displays kitties picture
  3. Resizable Panes - an element to display before and after photos
  4. Incremental Search - search field that allows users to select matching results
  5. Connect Four - the vertical checkers game
  6. Spotify API Search
  7. Github API Search
  8. Ticker Twitter API - a sliding twitter news feed element
  9. Petition - A server-side render app for collecting signatures for a pledge.
  10. Imageboard - An app that allows users to upload images, comment, and like images.
  11. Social Network - Mock social network project for superheroes and villains.
  12. Final Project - one-week coding challenge - P2P Chat

As my Final Project I was required to come up with and develop a project of my own to showcase what I had learned and to test new ideas and technologies. The constraints were the following:

  • it had to be completed in just one week
  • it had to be substantial but also achievable.
Timeframe: One week
New Technologies:
  • PeerJs (WebRTC)

Summary:

Recently I've participated in a one-week coding challenge where I set myself to build a secure and decentralized chat application. My goal with this application was to test the architecture and tech needed to make it happen. The user has the ability to register, login, look up people to befriend, manage friendships, use a global chatroom, use a private chatroom or switch to a “secure” channel to protect the privacy of a conversation. To make all of this happen, I had to build a node.js backend that used WebSocket to emit real-time events to all the relevant clients while on a React/Redux frontend I had to handle the secure chat by enabling two clients to speak directly to each other through webRtc protocol (p2p connection). I especially enjoyed how React in combination with Redux allowed me to explicitly implement the separation of concerns principle and also write clean, functional and maintainable code.

Tech Stack:

Frontend Backend Database
React.js Node.js PostgreSQL
Redux.js Express.js AWS S3
Socket.io - client Socket.io - server
PeerJs - WebRTC
Material-UI

Installation

$ git clone https://github.com/suddenlyGiovanni/p2p-chat.git
$ cd p2p-chat
$ npm install
$ cd config && touch secrets.json
Secret.json

Paste in the following code and remember to configure PostgreSQL and AWS S3 it accordingly...

{
    "psqlConfig": "postgres:postgres:postgres@localhost:5432/p2p-chat",
    "sessionSecret": "this is a secret!!",
    "bcryptSalt": "this is a secret!!",
    "AWS_KEY": "XXXXXXX",
    "AWS_SECRET": "XXXXXXX/XXXXXXX/",
    "AWS_BUCKET": "p2p-chat",
    "s3Url": "https://s3.amazonaws.com/XXXXXXX/"
}

Features:

As a user, I can register and login. If I am already login, I can skip this step.

The user can create or submit its credentials: Passwords are hashed using the bcrypt library. Forms include CSRF protection using the csurf npm package.

p2p_chat-register p2p_chat-login

As a user, I can personalize my profile picture.

p2p_chat-profile_pic

As a user, I can see who of my friends is online now.

As a user, I can find friends using the search box.

p2p_chat-find_friends

This Feature is implemented as an incremental search field. Input events result in ajax requests, and the route hit does a database queries with pattern matching to find matches.

As a user, I can see a list of all of my friends. I can also manage friendship status: I can send a friendship request, I can cancel ann erroneous friendship request, I can accept friends requests, I can terminate friendships

p2p_chat-manage_friendship

As a user, I can use the group chat feature to chat with everyone that is online.

p2p_chat-group_chat

As a user, I can use the private chat to talk to other friends that can be either online or offline.

p2p_chat-private_chat

As a user, I can use the secure chat to talk to other friends.

This feature is achieved by enabling two clients to speak directly to each other through the webRTC protocol (p2p connection). The messages payload are stored only locally in the redux store of each client. They are also not persistent.

Todos of additional features:

  • Temp:

Contact

License

MIT © suddenlyGiovanni Free Software, Hell Yeah!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].