A Laravel-based real-time overlay system for streamers to display chat messages, notifications, and other interactive content on their streams.
Twitchy provides a clean, customizable overlay system that displays chat messages and notifications as toasts on your stream. It uses Laravel Reverb WebSockets for real-time updates with a control panel for managing promoted messages.
- ๐จ Customizable Toasts: Display chat messages with user badges, themes, and animations
- ๐ Real-time Updates: Laravel Reverb WebSockets for instant updates
- ๐ฎ IRC Integration: Built-in Twitch IRC relay for automatic chat message capture
- ๐ฏ Control Panel: Web interface for managing and promoting chat messages
- ๐จ Theme Support: Dark and light themes with customizable styling
- ๐ฑ Responsive Design: Works on various screen sizes and resolutions
- โก Performance: Lightweight with minimal overhead
- โจ๏ธ Typing Animation: Realistic typing effect for message display
- PHP 8.4+
- Laravel 12
- Composer
- Node.js & NPM
-
Clone the repository
git clone <repository-url> twitchy cd twitchy
-
Install dependencies
composer install npm install
-
Environment setup
cp .env.example .env php artisan key:generate
-
Configure the overlay key (in
.env)OVERLAY_KEY=local
-
Build assets
npm run build # or for development npm run dev -
Start the server
php artisan serve
- Access the control panel at:
http://your-domain.test/control - Start the IRC relay to capture chat messages:
php artisan twitch:relay --channel=yourchannel
- Promote messages by clicking on them in the chat feed
- Manage promoted messages using the toast preview panel
- Access your overlay at:
http://your-domain.test/overlay/local - Add as Browser Source in OBS/Streamlabs with these settings:
- URL:
http://your-domain.test/overlay/local - Width: 1920
- Height: 1080
- Custom CSS (optional): Transparent background
- URL:
Start IRC relay for a specific channel:
php artisan twitch:relay --channel=yourchannelRun the full stack (IRC relay + frontend dev server):
php artisan twitchy:run --channel=yourchannelAvailable options:
--channel=channelname: Twitch channel to connect to--dry-run: Test mode without saving messages--no-frontend: Skip frontend dev server--no-relay: Skip IRC relay
Configure your Twitch credentials in .env:
# Twitch IRC Configuration
TWITCH_OAUTH=oauth:your_oauth_token
TWITCH_NICK=your_bot_username
TWITCH_CHANNEL=your_channel_name
# Overlay Configuration
OVERLAY_KEY=local
# Reverb Configuration (for real-time updates)
REVERB_APP_ID=your_app_id
REVERB_APP_KEY=your_app_key
REVERB_APP_SECRET=your_app_secret
REVERB_HOST=localhost
REVERB_PORT=8080
REVERB_SCHEME=http- Go to Twitch Developer Console
- Create a new application
- Generate an OAuth token with
chat:readscope - Add the token to your
.envfile
Start the development server:
php artisan serveStart IRC relay in another terminal:
php artisan twitch:relay --channel=yourchannelOr run everything together:
php artisan twitchy:run --channel=yourchannelTest the overlay system:
- View overlay:
http://your-domain.test/overlay/local - Control panel:
http://your-domain.test/control - Start IRC relay:
php artisan twitch:relay --channel=yourchannel
- OverlayController: Handles overlay display
- TwitchRelayCommand: IRC relay for capturing Twitch chat messages
- Message Actions: CreateMessage, PromoteMessage, DemoteMessage for message management
- ToastDisplay: Livewire component for rendering toasts with typing animation
- Control Panel: Web interface for managing promoted messages
- Twitch IRC โ TwitchRelayCommand โ Creates Message โ Broadcasts MessageReceived event via Reverb
- Control Panel โ User promotes message โ Broadcasts MessagePromoted event via Reverb
- Overlay โ Listens to Reverb events โ Displays toast with typing animation
- Auto-dismiss โ Clears toast after duration
- Laravel Reverb: WebSocket server for real-time communication
- Events: MessageReceived, MessagePromoted, MessageDemoted broadcast via Reverb
- Livewire: Real-time UI updates using Reverb WebSocket connections
- Typing Animation: JavaScript-based typing effect for realistic message display
Toasts not appearing:
- Check overlay URL and key
- Verify Reverb WebSocket connection in browser dev tools
- Ensure IRC relay is running and connected to Twitch
- Check browser console for JavaScript errors
IRC relay not connecting:
- Verify Twitch OAuth token is valid
- Check channel name is correct
- Ensure bot has permission to read chat
- Check Laravel logs for connection errors
Real-time updates not working:
- Verify Reverb server is running:
php artisan reverb:start - Check WebSocket connection in browser dev tools
- Ensure events are being broadcast correctly
Enable debug logging in .env:
LOG_LEVEL=debugView logs:
tail -f storage/logs/laravel.logTest Reverb connection:
php artisan reverb:start --debugThis project is open-sourced software licensed under the MIT license.
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
For questions or issues:
- Check the troubleshooting section
- Review the logs for error details
- Open an issue with detailed information