{"id":16726186,"url":"https://github.com/mrbartusek/dokchat","last_synced_at":"2025-04-10T10:24:17.640Z","repository":{"id":64162595,"uuid":"524956953","full_name":"MrBartusek/DokChat","owner":"MrBartusek","description":"DokChat is fully fledged instant web messaging application 💬","archived":false,"fork":false,"pushed_at":"2024-03-27T21:37:27.000Z","size":3201,"stargazers_count":5,"open_issues_count":3,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T09:11:38.004Z","etag":null,"topics":["aws","chat","express","messaging","node","postgresql","react","reactjs","socket-io","typescript"],"latest_commit_sha":null,"homepage":"https://dokchat.dokurno.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MrBartusek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-15T11:15:41.000Z","updated_at":"2025-02-25T05:46:48.000Z","dependencies_parsed_at":"2024-01-22T12:48:14.723Z","dependency_job_id":"1343c708-9672-4331-9828-9e4e07cabfcd","html_url":"https://github.com/MrBartusek/DokChat","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrBartusek%2FDokChat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrBartusek%2FDokChat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrBartusek%2FDokChat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrBartusek%2FDokChat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MrBartusek","download_url":"https://codeload.github.com/MrBartusek/DokChat/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248199088,"owners_count":21063641,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","chat","express","messaging","node","postgresql","react","reactjs","socket-io","typescript"],"created_at":"2024-10-12T22:52:25.831Z","updated_at":"2025-04-10T10:24:17.615Z","avatar_url":"https://github.com/MrBartusek.png","language":"TypeScript","readme":"# DokChat | [Live Demo](https://dokchat.dokurno.dev)\n\n![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/MrBartusek/DokChat/ci.yaml) [![Website](https://img.shields.io/website?url=https%3A%2F%2Fdokchat.dokurno.dev\u0026link=https%3A%2F%2Fdokchat.dokurno.dev)](https://dokchat.dokurno.dev)\n[![Docker Image Version (tag latest semver)](https://img.shields.io/docker/v/mrbartusek/dokchat/latest?label=docker%20version\u0026link=https%3A%2F%2Fhub.docker.com%2Frepository%2Fdocker%2Fmrbartusek%2Fdokchat)](https://hub.docker.com/repository/docker/mrbartusek/dokchat/general) ![Dynamic JSON Badge](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fupdate.electronjs.org%2FMrBartusek%2FDokChat%2Fwin32-x64%2F0.0.0\u0026query=%24.name\u0026label=desktop+version\u0026color=blue)\n\n[![hero](https://raw.githubusercontent.com/MrBartusek/mrbartusek.github.io/master/src/assets/dokchat.png)](https://dokchat.dokurno.dev)\n\nDokChat is complete, fully fledged instant messaging application. It has everything\nyou need: groups, attachment, GIFs, emojis, customization and desktop app.\n\n## Quick Start\n\nIf you want to start using DokChat, I host fully fledged [live demo](https://dokchat.dokurno.dev). For simplicity sake you can also create [a demo account](https://dokchat.dokurno.dev/demo) and skip registration process.\n\n## Features\n\n- Groups for multiple participants as well as private conversations between two people.\n- Custom authentication system based on [JWT Tokens](https://jwt.io) and discord-like user tags `MrBartusek#0001`\n- Social authentication with Google and Facebook.\n- Two-Factor Authentication with QR codes that works with all major authenticator apps.\n- Instant messaging with [socket.io](https://socket.io).\n- Username, tag and avatar customization as well as user preferences.\n- Chat color, name and avatar customization.\n- Link-based group invites.\n- Blocking or hiding other users.\n- GIFs ([gif-picker-react](https://github.com/MrBartusek/gif-picker-react)), Emojis ([Twemoji](https://twemoji.twitter.com)), videos, images and Markdown support for messages.\n- Current online status with green dots.\n- reCAPTCHA and ratelimit protections against bots.\n- Fully functional [Electron Desktop App](https://dokchat.dokurno.dev/download) with browser login handoff.\n\n## Deploy own DokChat instance\n\nDokChat is an extensive project that uses a multitude of tools and cloud services. It's also well suited to be deployed on your own. We have configured multiple tools such as\n[Terraform](https://www.terraform.io), [Docker](https://www.docker.com) and\n[NGINX](https://nginx.org) so you can easily deploy your own DokChat server and infrastructure.\n\n[See `SETUP.md` for detailed setup guide.](SETUP.md)\n\n## Tech Stack\n\n- **PostgreSQL** - Postgress is used as database without any ORM. You can see database visualization in [Database Design](#database-design) section.\n- **Express** - Node.js express is used as primary backend framework\n- **React** - React.js alongside with react-bootstrap and other client-side libraries is used as frontend library.\n- **Typescript** - Typescript is used both on backend and frontend code to ensure type safety in whole project.\n- **Socket.io** - Websockets are used for instant communication\n- **Amazon AWS**- AWS is used as the primary hosting provider, handling server and attachments hosting, as well as emails.\n- **Terraform** - Whole infrastructure is provisioned using Terraform\n\n### Hosting\n\nThis project is designed to run on AWS using following services:\n\n- **[EC2](https://aws.amazon.com/ec2/)** - for hosting server\n- **[S3](https://aws.amazon.com/s3/)** - for attachments and profile pictures\n- **[SES](https://aws.amazon.com/ses/)** - for email sending\n- **[SQS](https://aws.amazon.com/sqs/)**, **[SNS](https://aws.amazon.com/sns/)** - for email bounces and complaints\n- **[IAM](https://aws.amazon.com/iam/)**, for access management\n\n## Database Design\n\nDatabase design is loosely based on [yoosuf/Messenger](https://github.com/yoosuf/Messenger).\nIt features full user authentication and support for group chats. You can see the\nvisualization on [DB Designer](https://dbdesigner.page.link/8WTzU9jzrGC1imjK8) or directly in\n[server/db/structure.ts](./src/server/db/structure.ts)\n\n[![db design](https://i.imgur.com/UP4E7Hl.png)](https://dbdesigner.page.link/8WTzU9jzrGC1imjK8)\n\n## API\n\nDokChat uses Rest API and Websocket API for communication, both are authenticated using JWT tokens.\nYou can check internal API structure in Postman or directly in [server/routes](./src/server/routes/)\n\n[![Run in Postman](https://run.pstmn.io/button.svg)](https://app.getpostman.com/run-collection/7055992-e37dd316-dc47-4469-b9ed-bd99de585463?action=collection%2Ffork\u0026collection-url=entityId%3D7055992-e37dd316-dc47-4469-b9ed-bd99de585463%26entityType%3Dcollection%26workspaceId%3D0c2f10b6-52a7-49d2-aed2-84f4890c693b#?env%5BSimple%5D=W3sia2V5IjoiYXBpLWRvbWFpbiIsInZhbHVlIjoiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaS8iLCJlbmFibGVkIjp0cnVlLCJ0eXBlIjoiZGVmYXVsdCJ9LHsia2V5IjoidG9rZW4iLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWUsInR5cGUiOiJkZWZhdWx0In1d)\n\n## Contributing\n\nWant to contribute to the project?\n\nFirst of all, thanks! If you find and problems with the project or want to suggest a feature\ndon't hesitate to create [an issue](https://github.com/MrBartusek/DokChat/issues). If you want\nto contribute code changes please check [`SETUP.md`](SETUP.md) for detailed setup guide. We\naccept code changes via [Pull Requests](https://github.com/MrBartusek/DokChat/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrbartusek%2Fdokchat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrbartusek%2Fdokchat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrbartusek%2Fdokchat/lists"}