A modern, feature-rich Slack clone built with Vue 3, Nuxt 3, and TypeScript. This project demonstrates real-time communication capabilities with a comprehensive set of features for team collaboration.
- 📡 Real-time Communication - Instant messaging with live updates
- 👍 Message Reactions - React to messages with emojis
- 🧵 Threads & Replies - Organize conversations with threaded discussions
- ✏️ Message Editing - Edit your messages after sending
- 🗑️ Message Deletion - Remove messages when needed
- 🔐 Role-based Access Control - Manage workspace members
- 🖼️ Image Attachments - Share images in conversations
- 📺 Channel Creation - Create and share channels
- 🏢 Workspace Management - Multi-workspace support
- ✉️ Invite System - Invite users via shareable codes
- 💬 Direct Messaging - Private one-on-one conversations
- 👥 User Profiles - Customizable user profiles
- 🎨 Modern UI - Beautiful interface with Shadcn UI and Tailwind CSS
- 🚀 Vercel Deployment
- Frontend: Vue 3, Nuxt 3, TypeScript
- Database: Convex (real-time database)
- Authentication: Session-based email/password + GitHub OAuth
- UI Framework: Shadcn UI, Tailwind CSS
- Deployment: Vercel
Before running this project, make sure you have:
- Node.js 18+ installed
- npm or yarn package manager
- Convex account (free tier available)
- GitHub OAuth App (for GitHub authentication)
- Vercel account (for deployment)
-
Clone the repository
git clone https://github.com/sytanta/nuxt-slack.git cd nuxt-slack -
Install dependencies
npm install # or yarn install -
Set up Convex
npx convex dev
-
Configure environment variables
Create a
.envfile in the root directory:# Convex CONVEX_DEPLOYMENT=your-convex-deployment-url CONVEX_URL=your-convex-url # GitHub OAuth GITHUB_CLIENT_ID=your-github-client-id GITHUB_CLIENT_SECRET=your-github-client-secret NUXT_PUBLIC_HOMEPAGE_URL=http://localhost:3000 NUXT_PUBLIC_AUTH_CALLBACK_URL_GITHUB=http://localhost:3000/auth/github/callback NUXT_PUBLIC_MESSAGE_PER_PAGE=10 NUXT_PUBLIC_TIME_THRESHOLD=5
-
Run the development server
npm run dev # or yarn dev -
Open your browser
Navigate to
http://localhost:3000
- Create a new Convex project at convex.dev
- Install the Convex CLI:
npm install -g convex - Initialize Convex in your project:
npx convex dev
- Go to GitHub Settings > Developer settings > OAuth Apps
- Create a new OAuth App
- Set Authorization callback URL to:
http://localhost:3000/auth/github/callback - Copy the Client ID and Client Secret to your
.envfile
-
Connect your repository to Vercel
- Push your code to GitHub
- Import the project in Vercel dashboard
-
Configure environment variables
- Add all environment variables from your
.envfile - Update
NUXT_PUBLIC_HOMEPAGE_URL&NUXT_PUBLIC_AUTH_CALLBACK_URL_GITHUBto your production domain
- Add all environment variables from your
-
Deploy Convex to production
- Please follow this page to deploy Convex to your selected hosting provider Convex deployment
-
Update Convex environment variables
- Add
CONVEX_DEPLOY_KEYfrom step 3 - Update
CONVEX_DEPLOYMENTandNEXT_PUBLIC_CONVEX_URLin Vercel - Add the remaining variables
- Add
-
Set build command
- It should be
npx convex deploy --cmd 'npm run build'
- It should be
-
Update GitHub OAuth setting
Homepage URLandAuthorization callback URLshould be pointed to your newly deployed website domain
## 🔒 Authentication
The app supports two authentication methods:
1. **Email/Password**: Traditional session-based authentication
2. **GitHub OAuth**: Social login with GitHub
User sessions are managed securely with encrypted session tokens. You can add more OAuth providers as needed.
This project is licensed under the MIT License - see the LICENSE file for details.
This project is based on this comprehensive tutorial:
- YouTube Tutorial - Complete walkthrough of building this Slack clone
- Mobile responsiveness needs more work
- Hydration mismatch warnings from Reka UI
- Error messages from API and Convex are not displayed properly
- Voice/Video calling integration
- File sharing beyond images
- Advanced search functionality
- Message scheduling
- Custom emoji support
- Dark/Light theme toggle
If you encounter any issues or have questions:
- Check the Issues page
- Create a new issue with detailed description
Happy coding! 🚀