Video Stream Platform-Voom.com
A modern video calling platform built with Next.js, Stream Video SDK, and Clerk authentication. Create instant meetings, schedule calls, and enjoy high-quality video communication.
- Instant Meetings: Start video calls immediately
- Scheduled Meetings: Plan and schedule future meetings
- Personal Room: Each user gets a persistent meeting room
- Meeting Recordings: Record and playback meetings
- Screen Sharing: Share your screen with participants
- Real-time Chat: Text messaging during video calls
- Meeting History: View and manage past meetings
- Responsive Design: Optimized for desktop and mobile
- Multiple Layouts: Grid view, speaker view, and more
- Participant Management: Invite, mute, and manage attendees
- Framework: Next.js 15 with TypeScript
- Styling: Tailwind CSS
- Authentication: Clerk
- Video SDK: Stream Video React SDK
- UI Components: Shadcn/ui
- Icons: Lucide React
- Notifications: Sonner
- State Management: React Hooks
Before running this project, make sure you have:
- Node.js 18 or later
- npm, yarn, or pnpm
- A Clerk account for authentication
- A Stream account for video functionality
git clone https://github.com/omkarhole/Video-Stream-platform.git
cd Video-Stream-platformnpm install
# or
yarn install
# or
pnpm installCreate a .env.local file in the root directory:
# Clerk Authentication
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_your_clerk_publishable_key
CLERK_SECRET_KEY=sk_test_your_clerk_secret_key
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
# Stream Video
NEXT_PUBLIC_STREAM_API_KEY=your_stream_api_key
STREAM_SECRET_KEY=your_stream_secret_key
# Application
NEXT_PUBLIC_BASE_URL=localhost:3000- Go to clerk.com and create an account
- Create a new application
- Copy the publishable key and secret key
- Configure sign-in/sign-up settings
- Go to getstream.io and create an account
- Create a new app in the dashboard
- Copy the API key and secret from the dashboard
npm run dev
# or
yarn dev
# or
pnpm devOpen http://localhost:3000 in your browser.
βββ app/
β βββ (auth)/ # Authentication pages
β β βββ sign-in/ # Sign in page
β β βββ sign-up/ # Sign up page
β βββ (root)/ # Main application routes
β β βββ (home)/ # Dashboard home
β β βββ meeting/[id]/ # Individual meeting rooms
β β βββ personal-room/ # Personal meeting room
β β βββ previous/ # Past meetings
β β βββ recordings/ # Meeting recordings
β β βββ upcoming/ # Scheduled meetings
β βββ globals.css # Global styles
β βββ layout.tsx # Root layout
βββ components/
β βββ ui/ # Reusable UI components
β βββ CallList.tsx # Meeting list display
β βββ EndCallButton.tsx # End call functionality
β βββ HomeCard.tsx # Dashboard cards
β βββ Loader.tsx # Loading component
β βββ MeetingCard.tsx # Individual meeting card
β βββ MeetingModal.tsx # Meeting creation modal
β βββ MeetingRoom.tsx # Video call interface
β βββ MeetingSetup.tsx # Pre-call setup
β βββ MeetingTypeList.tsx # Meeting type selection
β βββ MobileNav.tsx # Mobile navigation
β βββ Navbar.tsx # Main navigation
β βββ Sidebar.tsx # Sidebar navigation
βββ hooks/
β βββ useGetCallById.ts # Hook to fetch specific call
β βββ useGetCalls.ts # Hook to fetch all calls
βββ actions/
β βββ stream.actions.ts # Server actions for Stream
βββ providers/
β βββ StreamClientProvider.tsx # Stream client context
βββ constants/
β βββ index.ts # App constants
βββ lib/
βββ utils.ts # Utility functions
- Instant Meeting: Click "New Meeting" to start immediately
- Schedule Meeting: Set date, time, and send invites
- Join Meeting: Enter meeting ID to join existing calls
- Personal Room: Your persistent meeting space
- Unique Meeting ID: Each user gets a permanent meeting ID (their user ID)
- Persistent Link: Your personal meeting link never changes
- Easy Access: Start your personal room anytime
- Invite Others: Share your personal room link
- User signs in via Clerk
- Stream client initializes with user data
- Token provider generates secure tokens
- User can create/join meetings
| Route | Description |
|---|---|
/ |
Home dashboard with meeting options |
/upcoming |
View scheduled meetings |
/previous |
Meeting history |
/recordings |
Meeting recordings |
/personal-room |
Your personal meeting space |
/meeting/[id] |
Individual meeting room |
/sign-in |
Authentication page |
/sign-up |
User registration |
Displays meeting information with actions:
- Meeting title and description
- Date and time
- Join/Start/Play buttons
- Copy link functionality
Handles meeting creation:
- Instant meetings
- Scheduled meetings
- Meeting configuration
Main video call interface:
- Video grid/speaker layouts
- Control buttons
- Participant management
- Screen sharing
- Server-side Token Generation: Secure token creation
- Protected Routes: Authentication required for all meeting features
- Environment Variables: Sensitive data stored securely
- User Validation: Proper user authentication checks
- Push your code to GitHub
- Import repository in Vercel
- Add environment variables in Vercel dashboard
- Deploy automatically
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_live_...
CLERK_SECRET_KEY=sk_live_...
NEXT_PUBLIC_STREAM_API_KEY=your_production_stream_key
STREAM_SECRET_KEY=your_production_stream_secret
NEXT_PUBLIC_BASE_URL=your-domain.vercel.appnpm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint- Code Splitting: Automatic route-based splitting
- Image Optimization: Next.js Image component
- Lazy Loading: Dynamic imports for heavy components
- Stream Optimization: Efficient video streaming
- Fork the repository
- Create a feature branch:
git checkout -b feature/new-feature - Commit changes:
git commit -m 'Add new feature' - Push to branch:
git push origin feature/new-feature - Submit a pull request
- Issues: GitHub Issues
- Documentation: Stream Video Docs
- Authentication: Clerk Documentation
- Stream for video infrastructure
- Clerk for authentication
- Vercel for hosting
- Shadcn/ui for UI components
Built with β€οΈ by Omkar Hole