Skip to content

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.

Notifications You must be signed in to change notification settings

omkarhole/Video-Stream-platform

Repository files navigation

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.

🌟 Features

  • 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

πŸ› οΈ Tech Stack

  • 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

πŸ“‹ Prerequisites

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

πŸš€ Getting Started

1. Clone the Repository

git clone https://github.com/omkarhole/Video-Stream-platform.git
cd Video-Stream-platform

2. Install Dependencies

npm install
# or
yarn install
# or
pnpm install

3. Environment Variables

Create 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

4. Get API Keys

Clerk Setup:

  1. Go to clerk.com and create an account
  2. Create a new application
  3. Copy the publishable key and secret key
  4. Configure sign-in/sign-up settings

Stream Setup:

  1. Go to getstream.io and create an account
  2. Create a new app in the dashboard
  3. Copy the API key and secret from the dashboard

5. Run the Development Server

npm run dev
# or
yarn dev
# or
pnpm dev

Open http://localhost:3000 in your browser.

πŸ“ Project Structure

β”œβ”€β”€ 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

🎯 Key Features Explained

Meeting Types

  1. Instant Meeting: Click "New Meeting" to start immediately
  2. Schedule Meeting: Set date, time, and send invites
  3. Join Meeting: Enter meeting ID to join existing calls
  4. Personal Room: Your persistent meeting space

Personal Room Features

  • 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

Authentication Flow

  1. User signs in via Clerk
  2. Stream client initializes with user data
  3. Token provider generates secure tokens
  4. User can create/join meetings

πŸ“± Pages Overview

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

🎨 UI Components

Meeting Card

Displays meeting information with actions:

  • Meeting title and description
  • Date and time
  • Join/Start/Play buttons
  • Copy link functionality

Meeting Modal

Handles meeting creation:

  • Instant meetings
  • Scheduled meetings
  • Meeting configuration

Meeting Room

Main video call interface:

  • Video grid/speaker layouts
  • Control buttons
  • Participant management
  • Screen sharing

πŸ” Security Features

  • 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

πŸš€ Deployment

Vercel (Recommended)

  1. Push your code to GitHub
  2. Import repository in Vercel
  3. Add environment variables in Vercel dashboard
  4. Deploy automatically

Environment Variables for Production

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.app

Build Commands

npm run build    # Build for production
npm run start    # Start production server
npm run lint     # Run ESLint

πŸ“Š Performance Optimization

  • Code Splitting: Automatic route-based splitting
  • Image Optimization: Next.js Image component
  • Lazy Loading: Dynamic imports for heavy components
  • Stream Optimization: Efficient video streaming

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/new-feature
  3. Commit changes: git commit -m 'Add new feature'
  4. Push to branch: git push origin feature/new-feature
  5. Submit a pull request

πŸ†˜ Support

πŸ™ Acknowledgments


Built with ❀️ by Omkar Hole

About

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.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published