Watch Instagram Reels together, in sync, in real time.
⚠️ Important Note: You'll need a new Instagram account to use ReelWatch. This ensures optimal performance and avoids conflicts with your main Instagram account.
ReelWatch brings people together through shared entertainment. Open Instagram together in real-time with live comments - watch funny reels, romantic moments, and viral content with your loved ones, no matter the distance.
🌐 Try it now: reelwatch.adelelawady.org | 🌐 Server: reelwatch-server
ReelWatch creates virtual rooms where users can watch Instagram Reels together in perfect synchronization. The app uses WebSocket connections to ensure everyone sees the same content at the same time, with features like remote control, live chat, and user management.
- Authentication - Connect your Instagram account (optional)
- Room Creation - Create a private room or join an existing one
- Real-time Sync - All users see the same reel simultaneously
- Interactive Features - Chat, control playback, and manage participants
CHAT
|
CHAT
|
SIGN NAME
|
ROOMS
|
BUILD IN KEYBOARD
|
SHOW USER DATA [DEV]
|
SHOW LIKES COMMENTS[DEV]
|
DEV TOOLS PANEL
|
BUILD IN KEYBOARD
|
🎬 REELWATCH IN ACTIONWhatsApp.Video.2026-03-23.at.7.09.40.AM.mp4 |
||
- 🔄 Real-time Synchronization - Watch Instagram Reels together with perfect sync
- 💬 Live Chat - Chat with friends while watching reels
- 🎮 Remote Control - Take control of playback for the entire room
- 👥 Multi-user Rooms - Create and join virtual watch parties
- 📱 Cross-platform - Works on iOS, Android, and Web
- 🔐 Instagram Integration - Seamless authentication with Instagram
- 🎯 Smooth UI - Beautiful, responsive interface with animations
- ⚡ WebSocket Powered - Low-latency real-time communication
- React Native - Cross-platform mobile development
- Expo - Development platform and toolchain
- TypeScript - Type-safe JavaScript
- Expo Router - File-based routing
- React Native WebView - Instagram integration
- React Native Reanimated - Smooth animations
- React Native Gesture Handler - Touch interactions
- WebSocket - Real-time bidirectional communication
- Node.js Server - Room management and synchronization
- 🖥 Server Repo: reelwatch-server
- ESLint - Code linting and formatting
- TypeScript Compiler - Type checking and compilation
- Metro - JavaScript bundling
- React Native - Cross-platform mobile development
- Expo - Development platform and toolchain
- TypeScript - Type-safe JavaScript
- Expo Router - File-based routing
- React Native WebView - Instagram integration
- React Native Reanimated - Smooth animations
- React Native Gesture Handler - Touch interactions
- WebSocket - Real-time bidirectional communication
- Node.js Server - Room management and synchronization
- 🖥 Server Repo: reelwatch-server
- ESLint - Code linting and formatting
- TypeScript Compiler - Type checking and compilation
- Metro - JavaScript bundling
- Node.js 18+
- Node.js 18+
- npm or yarn
- Expo CLI (
npm install -g @expo/cli) - Expo Go app on your device (for testing)
- Expo CLI (
npm install -g @expo/cli) - Expo Go app on your device (for testing)
# Clone the repository
# Clone the repository
git clone https://github.com/adelelawady/reelwatch.git
cd reelwatch
# Install dependencies
# Install dependencies
npm install
# Start the development server
npm start# Start with Expo CLI
npm start
# Run on specific platforms
npm run android # Android
npm run ios # iOS
npm run web # Web browsernpm start
### Running the App
```bash
# Start with Expo CLI
npm start
# Run on specific platforms
npm run android # Android
npm run ios # iOS
npm run web # Web browser
Edit constants/config.ts to customize your deployment:
Edit constants/config.ts to customize your deployment:
export const CONFIG = {
SERVER_IP: "reelwatch.adelelawady.org", // Your server domain
SERVER_PORT: 443, // WebSocket port
START_URL: "https://www.instagram.com/reels/DWEzH45guQJ/",
SERVER_IP: "reelwatch.adelelawady.org", // Your server domain
SERVER_PORT: 443, // WebSocket port
START_URL: "https://www.instagram.com/reels/DWEzH45guQJ/",
LOGIN_URL: "https://www.instagram.com/accounts/login/",
REQUIRE_LOGIN: false, // Force Instagram login
REQUIRE_LOGIN: false, // Force Instagram login
// Development flags
DEV_MODE: false,
DEV_DEFAULT_ROOM: "room1",
DEV_MODE: false,
DEV_DEFAULT_ROOM: "room1",
DEV_USERNAME: "devuser",
} as const;Create a .env.local file for sensitive configuration:
# Server configuration
REACT_APP_SERVER_URL=wss://your-server.com
REACT_APP_SERVER_PORT=443
# Instagram integration (optional)
INSTAGRAM_CLIENT_ID=your_client_id
INSTAGRAM_CLIENT_SECRET=your_client_secretCreate a .env.local file for sensitive configuration:
# Server configuration
REACT_APP_SERVER_URL=wss://your-server.com
REACT_APP_SERVER_PORT=443
# Instagram integration (optional)
INSTAGRAM_CLIENT_ID=your_client_id
INSTAGRAM_CLIENT_SECRET=your_client_secret- Launch the App - Start ReelWatch on your device
- Enter Your Name - Choose a display name for the session
- Create or Join Room - Either create a new room or join an existing one
- Start Watching - Browse and play Instagram Reels together
- Create Room: Generate a unique room ID and become the host
- Join Room: Enter an existing room ID to join a watch party
- Remote Control: Transfer playback control between participants
- Chat: Send real-time messages to everyone in the room
- Optional Login: Connect your Instagram account for enhanced features
- Browse Reels: Access your Instagram feed and explore reels
- Share Content: Easily share reels with the room
// Register user
{ type: "register", name: string }
// Room operations
{ type: "create_room", room: string, remote_control: boolean }
{ type: "join", room: string }
{ type: "leave" }
{ type: "delete_room", room: string }
// Control operations
{ type: "transfer_remote", to: string }
{ type: "list_rooms" }// Registration
{ type: "registered" }
// Room information
{ type: "rooms_list", rooms: RoomInfo[] }
{ type: "room_state", room: RoomInfo }
// Room events
{ type: "room_created", room: string }
{ type: "joined", room: string }
{ type: "room_deleted", reason: string }
{ type: "remote_transferred", from: string, to: string }
// Error handling
{ type: "error", msg: string }interface RoomInfo {
id: string;
owner: string;
remote_control: boolean;
controller: string | null;
users: string[];
user_count: number;
current_reel: string;
}- Launch the App - Start ReelWatch on your device
- Enter Your Name - Choose a display name for the session
- Create or Join Room - Either create a new room or join an existing one
- Start Watching - Browse and play Instagram Reels together
- Create Room: Generate a unique room ID and become the host
- Join Room: Enter an existing room ID to join a watch party
- Remote Control: Transfer playback control between participants
- Chat: Send real-time messages to everyone in the room
- Optional Login: Connect your Instagram account for enhanced features
- Browse Reels: Access your Instagram feed and explore reels
- Share Content: Easily share reels with the room
// Register user
{ type: "register", name: string }
// Room operations
{ type: "create_room", room: string, remote_control: boolean }
{ type: "join", room: string }
{ type: "leave" }
{ type: "delete_room", room: string }
// Control operations
{ type: "transfer_remote", to: string }
{ type: "list_rooms" }// Registration
{ type: "registered" }
// Room information
{ type: "rooms_list", rooms: RoomInfo[] }
{ type: "room_state", room: RoomInfo }
// Room events
{ type: "room_created", room: string }
{ type: "joined", room: string }
{ type: "room_deleted", reason: string }
{ type: "remote_transferred", from: string, to: string }
// Error handling
{ type: "error", msg: string }interface RoomInfo {
id: string;
owner: string;
remote_control: boolean;
controller: string | null;
users: string[];
user_count: number;
current_reel: string;
}reelwatch/
├── app/ # Main application screens
│ ├── _layout.tsx # Root layout configuration
│ ├── index.tsx # Entry point (redirects to entrance)
│ ├── entrance.tsx # Login and room selection
│ └── reel.tsx # Main viewing experience
├── components/ # Reusable UI components
│ ├── reel/ # Reel-specific components
│ │ ├── KeyboardBar.tsx
│ │ ├── TopBar.tsx
│ │ └── UsersPanel.tsx
│ ├── ui/ # Base UI components
│ └── ... # Other shared components
├── hooks/ # Custom React hooks
│ ├── useRooms.ts # WebSocket room management
│ ├── useSync.ts # Video synchronization
│ ├── useAuth.ts # Instagram authentication
│ └── useToasts.ts # Toast notifications
├── constants/ # Configuration constants
│ └── config.ts # App configuration
├── utils/ # Utility functions
│ ├── authInjected.ts # Instagram auth scripts
│ └── injected.js # WebView injection scripts
├── assets/ # Static assets
└── scripts/ # Build and development scripts
├── app/ # Main application screens │ ├── _layout.tsx # Root layout configuration │ ├── index.tsx # Entry point (redirects to entrance) │ ├── entrance.tsx # Login and room selection │ └── reel.tsx # Main viewing experience ├── components/ # Reusable UI components │ ├── reel/ # Reel-specific components │ │ ├── KeyboardBar.tsx │ │ ├── TopBar.tsx │ │ └── UsersPanel.tsx │ ├── ui/ # Base UI components │ └── ... # Other shared components ├── hooks/ # Custom React hooks │ ├── useRooms.ts # WebSocket room management │ ├── useSync.ts # Video synchronization │ ├── useAuth.ts # Instagram authentication │ └── useToasts.ts # Toast notifications ├── constants/ # Configuration constants │ └── config.ts # App configuration ├── utils/ # Utility functions │ ├── authInjected.ts # Instagram auth scripts │ └── injected.js # WebView injection scripts ├── assets/ # Static assets └── scripts/ # Build and development scripts
## 🧪 Development
### Development Workflow
```bash
# Install dependencies
npm install
# Start development server
npm start
# Run linter
npm run lint
# Reset project (clean slate)
npm run reset-project
- TypeScript: Full type safety throughout the codebase
- ESLint: Consistent code style and error prevention
- Component Architecture: Modular, reusable components
- Custom Hooks: Encapsulated business logic
# Run type checking
npx tsc --noEmit
# Run linting
npm run lint# Install dependencies
npm install
# Start development server
npm start
# Run linter
npm run lint
# Reset project (clean slate)
npm run reset-project- TypeScript: Full type safety throughout the codebase
- ESLint: Consistent code style and error prevention
- Component Architecture: Modular, reusable components
- Custom Hooks: Encapsulated business logic
# Run type checking
npx tsc --noEmit
# Run linting
npm run lintWe welcome contributions! Please follow these guidelines: We welcome contributions! Please follow these guidelines:
-
Fork the Repository
git clone https://github.com/your-username/reelwatch.git
-
Create a Feature Branch
git checkout -b feature/amazing-feature
-
Make Your Changes
- Follow the existing code style
- Add TypeScript types for new code
- Update documentation if needed
-
Test Your Changes
npm run lint npm start
-
Submit a Pull Request
- Describe your changes clearly
- Include screenshots if applicable
- Ensure all tests pass
- 🎯 Focus: Bug fixes, features, and documentation
- 📝 Style: Follow existing TypeScript patterns
- 🧪 Testing: Ensure functionality works across platforms
- 📖 Docs: Update README for API changes
-
Fork the Repository
git clone https://github.com/your-username/reelwatch.git
-
Create a Feature Branch
git checkout -b feature/amazing-feature
-
Make Your Changes
- Follow the existing code style
- Add TypeScript types for new code
- Update documentation if needed
-
Test Your Changes
npm run lint npm start
-
Submit a Pull Request
- Describe your changes clearly
- Include screenshots if applicable
- Ensure all tests pass
- 🎯 Focus: Bug fixes, features, and documentation
- 📝 Style: Follow existing TypeScript patterns
- 🧪 Testing: Ensure functionality works across platforms
- 📖 Docs: Update README for API changes
This project is licensed under the MIT License - see the LICENSE file for details. This project is licensed under the MIT License - see the LICENSE file for details.
If you find ReelWatch useful, please consider:
- ⭐ Starring the repository - Show your support
- 🐛 Reporting issues - Help us improve
- 💡 Suggesting features - Share your ideas
- 🔄 Forking and contributing - Make it even better
- 🌐 Live Demo: reelwatch.adelelawady.org
- 📱 Expo Go: Open in App
- 📧 Issues: Create an issue
- 💬 Discussions: Join the conversation
- 🖥 Server: reelwatch-server
- 📖 Documentation: Check the code comments and inline documentation
Made with ❤️ by Adele Lawady








