DokChat | Website
DokChat is complete, fully fledged instant messaging application. It supports all of the common chatting features like groups, attachment, GIFs and emojis.
- Groups for multiple participants as well as private conversations between two people
- Custom authentication system based on JWT Tokens and discord-like user tags
MrBartusek#0001
- Social authentication with Google and Facebook
- Two-Factor Authentication with QR codes that works with all major Authenticator apps.
- Instant messaging with socket.io
- Username, tag and avatar customization as well as user preferences
- Chat color, name and avatar customization
- Link-based group invites
- Blocking or hiding other users
- GIFs (gif-picker-react), Emojis (Twemoji), videos, images and Markdown support for messages
- Current online status with green dots
- reCAPTCHA and ratelimit protections against bots
- Fully functional Electron Desktop App with browser login handoff
DokChat is well suited to be deployed on your own. We have configured multiple tools such as Terraform, Docker and NGINX so you can easily deploy your own DokChat server and infrastructure.
See SETUP.MD
for setup guide.
- PostgreSQL - Postgress is used as database without any ORM. You can see database visualization in Database Design section.
- Express - Node.js express is used as primary backend framework
- React - React.js alongside with react-bootstrap and other client-side libraries is used as frontend libiary.
- Typescript - Typescript is used both on backend and frontend code to ensure type safety in whole project.
- Socket.io - Websockets are used for instant communication
- Amazon AWS- AWS is used as primary hosting provider that handles server and attachments hosting as well as emails.
- Terraform - Whole infrastructure is provisioned using Terraform
This project is designed to run on AWS using following services:
- EC2 - for hosting server
- S3 - for attachments and profile pictures
- SES - for email sending
- SQS, SNS - for email bounces and complaints
- IAM, for access management
Database design is loosely based on yoosuf/Messenger. It features full user authentication and support for group chats. You can see the visualization on DB Desinger or directly in server/db/initalize.ts.
DokChat uses Rest API and Websocket API for communication, both are authenticated using JWT tokens. You can check internal API structure in Postman or directly in server/routes