SideRow is a real-time video synchronization platform that allows friends to watch videos together in perfect sync. Built with a modern tech stack, it features instant room creation, synchronized playback controls, and real-time chat.
- Synchronized Playback: Play, pause, and seek videos in real-time across all connected clients.
- Multi-Source Support: Powered by
react-player, supporting YouTube, SoundCloud, Vimeo, and more. - Real-time Chat: Integrated chat system with emoji support to discuss the video as you watch.
- Room System: Create unique rooms instantly or join via Room ID/Link.
- User Presence: See who is currently in the room with visual avatars.
- Drift Correction: Automatic server-side clock synchronization to ensure no user falls behind.
- Modern UI: Built with Shadcn UI and Tailwind CSS v4 for a sleek, responsive experience.
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS v4
- Components: Shadcn UI, Lucide React
- Real-time: Socket.io Client
- Media: React Player
- Runtime: Node.js
- Framework: Express.js
- Language: TypeScript
- Real-time: Socket.io
- Database: Redis (for room state and chat history persistence)
Ensure you have the following installed on your machine:
git clone [https://github.com/amitb0ra/siderow.git](https://github.com/amitb0ra/siderow.git)
cd siderowThis project uses a monorepo structure. Install dependencies for both frontend and backend from the root:
pnpm installThe application requires a Redis instance to store room states and chat history.
Option A: Run via Docker (Recommended)
docker run -d -p 6379:6379 --name siderow-redis redis:latestOption B: Local Installation
Ensure your local Redis server is running on port 6379.
Set up the environment variables for both the backend and frontend.
Backend:
cp backend/.env.example backend/.envOpen backend/.env and update the REDIS_URL if your Redis setup differs from the default:
REDIS_URL="redis://default:your_redis_password@localhost:6379"
# If using the docker command above with no password:
# REDIS_URL="redis://localhost:6379"Frontend:
cp frontend/.env.example frontend/.envDefault content:
NEXT_PUBLIC_SERVER_URL="http://localhost:8080"You can start both the backend and frontend concurrently with a single command from the root directory:
pnpm start- Frontend will be available at:
http://localhost:3000 - Backend will run on:
http://localhost:8080
siderow/
├── backend/ # Express & Socket.io server
│ ├── src/
│ │ ├── index.ts # Entry point & Socket logic
│ │ └── ...
│ └── ...
├── frontend/ # Next.js application
│ ├── src/
│ │ ├── app/ # App Router pages
│ │ ├── components/ # UI Components (Shadcn)
│ │ ├── lib/ # Utilities (Socket client, etc.)
│ │ └── ...
│ └── ...
└── package.json # Root scripts
To run services individually for debugging:
Terminal 1 (Backend):
pnpm --filter backend devTerminal 2 (Frontend):
pnpm --filter frontend devThis project is licensed under the ISC License.