{"id":18790031,"url":"https://github.com/berkanumutlu/discord-clone","last_synced_at":"2025-04-11T01:41:16.786Z","repository":{"id":258758763,"uuid":"874763945","full_name":"berkanumutlu/discord-clone","owner":"berkanumutlu","description":"Discord Clone with Next.js 14, React, Socket.io, LiveKit, Tailwind, Clerk, uploadthing, Prisma, PostgreSQL","archived":false,"fork":false,"pushed_at":"2024-12-06T15:48:10.000Z","size":3315,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T22:51:12.914Z","etag":null,"topics":["clerk","discord","discord-clone","livekit","next","nextjs","postgresql","prisma","react","real-time-app","real-time-chat","real-time-messaging","shadcn","socket","socket-io","socketio","tailwind","uploadthing","voice-chat","voice-chat-app"],"latest_commit_sha":null,"homepage":"","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/berkanumutlu.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":"2024-10-18T12:22:47.000Z","updated_at":"2024-12-25T19:17:01.000Z","dependencies_parsed_at":"2025-02-19T18:42:46.038Z","dependency_job_id":null,"html_url":"https://github.com/berkanumutlu/discord-clone","commit_stats":null,"previous_names":["berkanumutlu/discord-clone"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berkanumutlu%2Fdiscord-clone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berkanumutlu%2Fdiscord-clone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berkanumutlu%2Fdiscord-clone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berkanumutlu%2Fdiscord-clone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/berkanumutlu","download_url":"https://codeload.github.com/berkanumutlu/discord-clone/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248327400,"owners_count":21085248,"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":["clerk","discord","discord-clone","livekit","next","nextjs","postgresql","prisma","react","real-time-app","real-time-chat","real-time-messaging","shadcn","socket","socket-io","socketio","tailwind","uploadthing","voice-chat","voice-chat-app"],"created_at":"2024-11-07T21:09:36.970Z","updated_at":"2025-04-11T01:41:16.730Z","avatar_url":"https://github.com/berkanumutlu.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"https://discord.com\" target=\"_blank\" rel=\"nofollow\"\u003e\n        \u003cpicture\u003e\n          \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://cdn.prod.website-files.com/6257adef93867e50d84d30e2/636e0b5493894cf60b300587_full_logo_white_RGB.svg\"\u003e\n          \u003cimg alt=\"Discord logo\" src=\"https://cdn.prod.website-files.com/6257adef93867e50d84d30e2/636e0b5061df29d55a92d945_full_logo_blurple_RGB.svg\" height=\"128\"\u003e\n        \u003c/picture\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/berkanumutlu/discord-clone/releases/tag/v0.1.0\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/berkanumutlu/discord-clone?logo=github\" alt=\"Discord Clone Release\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/berkanumutlu/discord-clone/stargazers\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/berkanumutlu/discord-clone?style=flat\u0026logo=github\" alt=\"Discord Clone Repo stars\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://nextjs.org/docs/14\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/next-v14.2.15-black?logo=nextdotjs\u0026logoColor=white\u0026labelColor=black\" alt=\"Next.JS Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://nodejs.org\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/Node.js-v20.18.0-5FA04E?logo=nodedotjs\u0026logoColor=white\u0026labelColor=5FA04E\" alt=\"Node.js Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://18.react.dev\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/React-v18.3.1-087EA4?logo=react\u0026logoColor=white\u0026labelColor=087EA4\" alt=\"React Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://tailwindcss.com\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/Tailwind-v3.4.14-06B6D4?logo=tailwindcss\u0026logoColor=white\u0026labelColor=06B6D4\" alt=\"Tailwind Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://ui.shadcn.com\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/shadcn/ui-v2.1.2-black?logo=shadcnui\u0026logoColor=white\u0026labelColor=black\" alt=\"shadcn/ui Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.prisma.io\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/Prisma-v5.21.1-2D3748?logo=prisma\u0026logoColor=white\u0026labelColor=2D3748\" alt=\"Prisma Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.postgresql.org/docs/release/15.7\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/PostgreSQL-v15.7-4169E1?logo=postgresql\u0026logoColor=white\u0026labelColor=4169E1\" alt=\"PostgreSQL Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://clerk.com\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/Clerk-v5.7.5-6C47FF?logo=clerk\u0026logoColor=white\u0026labelColor=6C47FF\" alt=\"Clerk Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://uploadthing.com\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/uploadthing-v7.1.0-E91616?logoColor=white\u0026labelColor=FEFEFE\u0026logo=data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNjAwIDYwMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMV84NykiPgogICAgPHBhdGggY2xhc3M9ImNsb3VkIgogICAgICBkPSJNNTY1LjA1NiA4MC4yOTEzQzUxNy4xMDMgMjIuMTA5NiA0MzEuMDczIDEzLjgyMTcgMzcyLjg5NiA2MS43NzMzQzM0MS4xOSA4Ny45MDMyIDMyNC40MzIgMTI1LjM0NCAzMjMuMzg1IDE2My40MjJDMzE4Ljc2MSAxNTMuOTM5IDMxMy4xIDE0NC44MTQgMzA2LjEwNiAxMzYuMzE4QzI1OC4xNTQgNzguMTM2NCAxNzIuMTIzIDY5Ljg0ODUgMTEzLjk0NyAxMTcuOEM1Ny43MzM4IDE2NC4xMjggNDguMjYzNCAyNDUuOTM1IDkwLjkxODIgMzAzLjg4MUM3Ny4xNjA0IDMwOS4wMzYgNjMuOTczMSAzMTYuMzkzIDUxLjk5MzQgMzI2LjI2NUMtNi4xOTgxNCAzNzQuMjIxIC0xNC40OTEgNDYwLjI1NCAzMy40NjA2IDUxOC40M0M4MS40MDg4IDU3Ni42MDIgMTY3LjQ0OSA1ODQuODk4IDIyNS42MiA1MzYuOTQ5QzI1MC4wNzMgNTE2Ljc5NyAyNjUuNTk1IDQ4OS44ODYgMjcxLjk0MyA0NjEuMTY3QzMxOS45MjYgNDg5LjIwNSAzODIuMjAyIDQ4Ni4xNzUgNDI3LjU5IDQ0OC43NTdDNDcxLjYxNCA0MTIuNDc1IDQ4Ny4wMDggMzU0LjQwMiA0NzEuMTU0IDMwMy4wNzFDNDk3Ljg5NiAzMDAuODQ4IDUyNC4yNTUgMjkwLjc5OSA1NDYuNTM3IDI3Mi40MzNDNjA0LjcxOCAyMjQuNDkxIDYxMy4wMSAxMzguNDU4IDU2NS4wNTUgODAuMjczM0w1NjUuMDU2IDgwLjI5MTNaIgogICAgICBmaWxsPSIjREMyNjI2IiAvPgogIDwvZz4KICA8cGF0aAogICAgZD0iTTMzMy4xODIgMTg4LjgxOEgzOTIuNDE1VjMyOC41OTFDMzkyLjQxNSAzNDUuMjEgMzg4LjQzOCAzNTkuNTkyIDM4MC40ODMgMzcxLjczN0MzNzIuNTk5IDM4My44MTEgMzYxLjU5MSAzOTMuMTUxIDM0Ny40NTcgMzk5Ljc1NkMzMzMuMzI0IDQwNi4yOSAzMTYuOTE4IDQwOS41NTcgMjk4LjIzOSA0MDkuNTU3QzI3OS40MTggNDA5LjU1NyAyNjIuOTQgNDA2LjI5IDI0OC44MDcgMzk5Ljc1NkMyMzQuNjczIDM5My4xNTEgMjIzLjY2NSAzODMuODExIDIxNS43ODEgMzcxLjczN0MyMDcuOTY5IDM1OS41OTIgMjA0LjA2MiAzNDUuMjEgMjA0LjA2MiAzMjguNTkxVjE4OC44MThIMjYzLjI5NVYzMjMuNDc3QzI2My4yOTUgMzMwLjIyNCAyNjQuNzg3IDMzNi4yNjEgMjY3Ljc3IDM0MS41ODhDMjcwLjc1MyAzNDYuODQ0IDI3NC44NzIgMzUwLjk2MyAyODAuMTI4IDM1My45NDZDMjg1LjQ1NSAzNTYuOTI5IDI5MS40OTEgMzU4LjQyIDI5OC4yMzkgMzU4LjQyQzMwNS4wNTcgMzU4LjQyIDMxMS4wOTQgMzU2LjkyOSAzMTYuMzQ5IDM1My45NDZDMzIxLjYwNSAzNTAuOTYzIDMyNS43MjQgMzQ2Ljg0NCAzMjguNzA3IDM0MS41ODhDMzMxLjY5IDMzNi4yNjEgMzMzLjE4MiAzMzAuMjI0IDMzMy4xODIgMzIzLjQ3N1YxODguODE4WiIKICAgIGZpbGw9IndoaXRlIiAvPgogIDxkZWZzPgogICAgPGNsaXBQYXRoIGlkPSJjbGlwMF8xXzg3Ij4KICAgICAgPHJlY3Qgd2lkdGg9IjU5NyIgaGVpZ2h0PSI1NDIiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxIDI5KSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgPC9kZWZzPgo8L3N2Zz4=\" alt=\"uploadthing Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://socket.io\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/Socket.IO-v4.8.1-010101?logo=socketdotio\u0026logoColor=white\u0026labelColor=010101\" alt=\"Socket.IO Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://livekit.io\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/LiveKit-v1.8.0-FF6352?logoColor=white\u0026labelColor=F0F0F0\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAC1QTFRFEhIS8PDwMjIyNB8d/21daTMu3WBSxVdLeDkyXzAqmUY9i0A4TU1Ne0ZAkZGRxXxubAAAAFBJREFUeJxjZEADjAMoIMj4DkiaCOwhTYA1kffAWWQBDhuZBQz4BGYJ3j2xAVlgybJtqO7AEMDQQsgWbjYGbktkhwEx7yNkpxMUoEaYUigAALayJyEvfeD2AAAAAElFTkSuQmCC\" alt=\"LiveKit Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://missiveapp.com/open/emoji-mart\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/Emoji%20Mart-v5.6.0-F2F2F2?logoColor=white\u0026labelColor=F2F2F2\u0026logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48dGV4dCB5PSIuOWVtIiBmb250LXNpemU9IjkwIj7wn4+qPC90ZXh0Pjwvc3ZnPg==\" alt=\"Emoji Mart Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.npmjs.com\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/NPM-v10.8.2-CB3837?logo=npm\u0026logoColor=F7F7F7\u0026labelColor=CB3837\" alt=\"NPM Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.docker.com\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/badge/Docker-v4.25.2-2496ED?logo=docker\u0026logoColor=white\u0026labelColor=2496ED\" alt=\"Docker Version\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# Discord Clone\n\nIt is a study project based on Discord app built with Next.js 14, React, Tailwind, shadcn/ui, Clerk, uploadthing, Prisma, PostgreSQL, Socket.io, LiveKit.\n\n## Features\n\n- Designed using tailwind \u0026 shadcn\n- Automatic / Light / Dark theme modes\n- ORM using Prisma\n- PostgreSQL database\n- Authentication with Clerk\n- Real-time messaging using Socket.io\n- Server creation \u0026 customization\n- Invite system with unique invite link generation\n- Create Text, Audio chat channels\n- Member management (Kick, User role change Guest / Moderator)\n- Send attachments as messages using UploadThing\n- Delete \u0026 Edit messages in real time for all users\n- Infinite loading for messages in batches of 15 with @tanstack/query\n- 1:1 conversation and audio calls between members\n- Websocket fallback: Polling with alerts\n\n## Installation\n\n**1)** Clone repository\n\n```shell\n$ git clone https://github.com/berkanumutlu/discord-clone.git\n```\n\nOr with SSH\n\n```shell\n$ git clone git@github.com:berkanumutlu/discord-clone.git\n```\n\nOr with Github CLI\n\n```shell\n$ git clone gh repo clone berkanumutlu/discord-clone\n```\n\n**2)** Copy the example.env file and **make the required configuration changes** in the file\n\n```shell\n$ cp .env.example .env\n```\n\n**3)** Install docker container (required docker)\n\n```shell\n$ docker-compose up -d\n```\n\n**4)** After installation, find your app's container id on docker\n\n```shell\n$ docker ps\n\n# Output:\nCONTAINER ID   IMAGE                 COMMAND                  CREATED      STATUS          PORTS                              NAMES\n...\n4e98c27c070a   discord-clone-app     \"docker-entrypoint.s…\"   7 days ago   Up 15 seconds   0.0.0.0:3000-\u003e3000/tcp, 5555/tcp   discord-clone-app\n...\n```\n\n- And connect to the terminal of your app's container\n\n```shell\n$ docker exec -it {APP_CONTAINER_ID} bash\n```\n\n**5)** Install all the dependencies using npm\n\n```shell\n/user/local/app $ npm install\n```\n\n**6)** Setup Prisma\n\n```shell\n/user/local/app $ npx prisma generate\n/user/local/app $ npx prisma db push\n```\n\n**7)** Restart your docker container\n\n```shell\n$ docker-compose restart\n```\n\n**8)** Now you're ready to use project\n\n- To stop the Docker container, use the following command\n\n```shell\n$ docker-compose stop\n```\n\n## Screenshots\n\n\u003cul\u003e\n    \u003cli\u003e\n        \u003cp\u003eHome Page\u003c/p\u003e\n        \u003cp align=\"center\"\u003e\n            \u003cimg src=\"screenshots/home-page.png\" alt=\"Home page\" width=\"49%\" /\u003e\n            \u003cimg src=\"screenshots/home-page-dark-theme.png\" alt=\"Home page dark theme\" width=\"49%\" /\u003e\n        \u003c/p\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003cp\u003eLogin page \u0026 Initial page\u003c/p\u003e\n        \u003cp align=\"center\"\u003e\n            \u003cimg src=\"screenshots/login-page.png\" alt=\"Login page\" width=\"49%\" /\u003e\n            \u003cimg src=\"screenshots/initial-page.png\" alt=\"Initial page\" width=\"49%\" /\u003e\n        \u003c/p\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003cp\u003eText channel\u003c/p\u003e\n        \u003cp align=\"center\"\u003e\n            \u003cimg src=\"screenshots/server-text-chat.png\" alt=\"Text channel\" width=\"49%\" /\u003e\n            \u003cimg src=\"screenshots/server-text-chat-light-theme.png\" alt=\"Text channel light theme\" width=\"49%\" /\u003e\n        \u003c/p\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003cp\u003eVoice chat\u003c/p\u003e\n        \u003cp align=\"center\"\u003e\n            \u003cimg src=\"screenshots/server-voice-chat.png\" alt=\"Voice chat\" /\u003e\n        \u003c/p\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003cp\u003eCreate server\u003c/p\u003e\n        \u003cp align=\"center\"\u003e\n            \u003cimg src=\"screenshots/server-creation.png\" alt=\"Create server\" /\u003e\n        \u003c/p\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003cp\u003eCreate channel\u003c/p\u003e\n        \u003cp align=\"center\"\u003e\n            \u003cimg src=\"screenshots/server-create-channel.png\" alt=\"Create channel\" /\u003e\n        \u003c/p\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003cp\u003eInvite to server\u003c/p\u003e\n        \u003cp align=\"center\"\u003e\n            \u003cimg src=\"screenshots/server-invite-people.png\" alt=\"Invite to server\" /\u003e\n        \u003c/p\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003cp\u003eManage server members\u003c/p\u003e\n        \u003cp align=\"center\"\u003e\n            \u003cimg src=\"screenshots/server-manage-members.png\" alt=\"Manage server members\" /\u003e\n        \u003c/p\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003cp\u003eSearch in server\u003c/p\u003e\n        \u003cp align=\"center\"\u003e\n            \u003cimg src=\"screenshots/server-search.png\" alt=\"Search in server\" /\u003e\n        \u003c/p\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003cp\u003eUser conversations\u003c/p\u003e\n        \u003cp align=\"center\"\u003e\n            \u003cimg src=\"screenshots/user-conversations.png\" alt=\"User conversations\" /\u003e\n        \u003c/p\u003e\n    \u003c/li\u003e\n\u003c/ul\u003e\n\n## License\n\nThis is a study project based on Discord app so they own the licence.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fberkanumutlu%2Fdiscord-clone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fberkanumutlu%2Fdiscord-clone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fberkanumutlu%2Fdiscord-clone/lists"}