A modern Laravel application for tracking and monitoring Twitch streams and events. Get real-time notifications when your favorite streamers go live, manage your subscriptions, and never miss a stream again.
- Twitch Authentication - Sign in with your Twitch account using OAuth
- Stream Monitoring - Track your favorite streamers and their activities
- Real-time Events - Receive Twitch EventSub webhooks for instant updates
- Push Notifications - Get browser push notifications when streamers go live
- Subscription Management - Easily manage your streamer subscriptions
- Modern UI - Clean, responsive interface built with Vue 3 and Tailwind CSS 4
- Dark Mode - Full dark mode support for comfortable viewing
- History - Show a complete history with timeline for your favourites streamers
- PHP 8.4 - Latest PHP features and performance improvements
- Laravel 12 - Modern Laravel framework with streamlined structure
- Laravel Octane - High-performance application server
- Laravel Socialite - OAuth authentication with Twitch
- Laravel Telescope - Debugging and monitoring assistant
- SQLite - Lightweight database (easily switchable to MySQL/PostgreSQL)
- Vue 3 - Progressive JavaScript framework
- Inertia.js v2 - Modern monolith architecture with SPA feel
- Tailwind CSS 4 - Utility-first CSS framework
- TypeScript - Type-safe JavaScript
- Laravel Wayfinder - Type-safe routing between backend and frontend
- Reka UI - Accessible component library
- VueUse - Collection of Vue composition utilities
- Pest 4 - Modern PHP testing framework with browser testing
- Laravel Pint - Opinionated code formatter
- Larastan (PHPStan) - Static analysis tool
- ESLint - JavaScript linter
- Prettier - Code formatter
- PHP 8.4 or higher
- Composer
- Node.js 18+ and Bun (or npm/yarn)
- SQLite extension (or MySQL/PostgreSQL)
-
Clone the repository
git clone https://github.com/SirMishaa/obsvr obsvr cd obsvr -
Install PHP dependencies
composer install
-
Install JavaScript dependencies
bun install
-
Set up environment
cp .env.example .env php artisan key:generate
-
Configure Twitch OAuth
Register your application at Twitch Developer Console and add these to your
.env:TWITCH_CLIENT_ID=your_client_id TWITCH_CLIENT_SECRET=your_client_secret TWITCH_REDIRECT_URI=http://localhost:8000/auth/twitch/callback
-
Create database
touch database/database.sqlite php artisan migrate
-
Start the development server
composer run dev
This will start:
- Laravel development server (http://localhost:8000)
- Queue worker for background jobs
- Log viewer (Pail)
- Vite dev server for hot module replacement
Alternatively, for high-performance development with Octane:
composer run dev:octane
-
Visit the application
Open your browser and navigate to http://localhost:8000
composer run dev- Start all development services (server, queue, logs, Vite)composer run dev:octane- Start with Laravel Octane for better performancecomposer run dev:ssr- Start with Server-Side Rendering supportcomposer run test- Run the test suitecomposer run lint- Run PHPStan static analysiscomposer run helper- Generate IDE helper files for better autocomplete
bun run dev- Start Vite development serverbun run build- Build frontend assets for productionbun run build:ssr- Build with SSR supportbun run lint- Run ESLint and auto-fix issuesbun run lint:check- Check for linting errors without fixingbun run format- Format code with Prettierbun run format:check- Check code formatting
php artisan test- Run testsphp artisan test --filter=testName- Run specific testphp artisan wayfinder:generate- Generate TypeScript route definitionsphp artisan telescope:prune- Prune old Telescope entriesphp artisan queue:work- Process queued jobsphp artisan pail- View logs in real-time
This project uses Pest 4 with support for unit, feature, and browser testing.
# Run all tests
php artisan test
# Run specific test file
php artisan test tests/Feature/TwitchTest.php
# Run tests with coverage
php artisan test --coverage
# Run browser tests
php artisan test tests/Browser/obsvr/
├── app/
│ ├── Http/
│ │ ├── Controllers/ # Application controllers
│ │ └── Middleware/ # Custom middleware
│ ├── Models/ # Eloquent models
│ └── ...
├── bootstrap/
│ ├── app.php # Application bootstrap
│ └── providers.php # Service providers
├── database/
│ ├── factories/ # Model factories
│ ├── migrations/ # Database migrations
│ └── seeders/ # Database seeders
├── resources/
│ ├── js/
│ │ ├── Pages/ # Inertia Vue pages
│ │ ├── Components/ # Vue components
│ │ └── ...
│ └── views/ # Blade templates
├── routes/
│ ├── web.php # Web routes
│ └── console.php # Console commands
├── tests/
│ ├── Feature/ # Feature tests
│ ├── Unit/ # Unit tests
│ └── Browser/ # Browser tests (Pest 4)
└── ...
To receive real-time Twitch events, you need to configure webhooks:
- Your application must be publicly accessible (use ngrok for local development)
- Configure EventSub subscriptions via Twitch API
- Webhook endpoint:
POST /twitch/eventsub
Web push notifications are configured using the laravel-notification-channels/webpush package:
- Generate VAPID keys:
php artisan webpush:vapid - Add the keys to your
.envfile - Users can subscribe via
POST /push/subscribe
This project uses Laravel Pint for PHP and Prettier for JavaScript/Vue. Code is automatically formatted on commit.
# Format PHP code
vendor/bin/pint
# Format JavaScript/Vue code
bun run format- PHP: Larastan (PHPStan) ensures type safety. Run
composer run lint - TypeScript: Full TypeScript support with strict mode
- Routes: Laravel Wayfinder provides type-safe routes in the frontend
- Laravel Telescope - Available at
/telescopein local environment - Laravel Debugbar - Visible at the bottom of pages in development
- Pail - Real-time log viewer:
php artisan pail
-
Build assets
bun run build
-
Optimize Laravel
php artisan config:cache php artisan route:cache php artisan view:cache
-
Run migrations
php artisan migrate --force
-
Configure your web server to point to the
publicdirectory -
Set up queue worker as a background process
php artisan queue:work --daemon
-
Consider using Laravel Octane for production performance
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Write tests for your changes
- Ensure tests pass (
php artisan test) - Format your code (
vendor/bin/pint && bun run format) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is open-sourced software licensed under the MIT license.
- Built with Laravel
- UI powered by Inertia.js and Vue.js
- Styled with Tailwind CSS
- Tested with Pest


