untitled.mp4
A multilingual CS2 esports match tracker built to help players follow their favorite teams and never miss their next match.
Users can follow their favorite CS2 teams and get a feed containing matches relevant to them.
- Upcoming matches
- Live matches
- Recent results
- Team-based filtering
- Match status tracking
- Match spotlight
Users can choose which events they want to be notified about.
Supported notification events include:
- Match scheduled
- Match started
- Match result
- Match time changed
- Match cancelled
- Requested team became available
Notifications are delivered through the browser using Web Push.
Matchlist was designed for an international audience.
Supported languages:
- π¬π§ English
- π§π· PortuguΓͺs (Brasil)
- π΅πΉ PortuguΓͺs (Portugal)
- πͺπΈ EspaΓ±ol
- π«π· FranΓ§ais
- π·πΊ Π ΡΡΡΠΊΠΈΠΉ
- π©πͺ Deutsch
- π΅π± Polski
- πΊπ¦ Π£ΠΊΡΠ°ΡΠ½ΡΡΠΊΠ°
The application keeps language and timezone preferences independent, allowing users to configure how the application should display information.
Match times are displayed according to the user's selected timezone.
For example, a match scheduled for:
20:00 UTC
can be displayed as:
17:00 in SΓ£o Paulo
or:
22:00 in Madrid.
Match timestamps are stored and transmitted independently from their display format, allowing the frontend to perform the appropriate timezone conversion.
Users can search for teams and manage their followed teams from the application.
Following a team automatically personalizes the user's match feed and notification system.
The application includes user authentication with:
- Registration
- Login
- Logout
- Password reset
- Password confirmation
- Session management
The interface was designed to work across:
- Desktop
- Tablet
- Mobile
Matchlist consists of several independent parts working together:
βββββββββββββββββββ
β Draft5 β
β Match Data β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Playwright β
β Scraper β
ββββββββββ¬βββββββββ
β
β API
βΌ
βββββββββββββββββββ
β Laravel β
β Backend β
βββββββββ¬ββ¬ββββββββ
β β
ββββββββββββββ βββββββββββββββ
βΌ βΌ
βββββββββββββββ βββββββββββββββ
β PostgreSQL β β Redis β
β Database β β Queue β
βββββββββββββββ ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β Web Push β
β Notificationsβ
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β User β
β Browser β
βββββββββββββββ
- Vue 3
- TypeScript
- Inertia.js
- Tailwind CSS
- Vite
- Pinia
- Vue Router
- PHP
- Laravel
- Laravel Breeze
- Laravel Sanctum
- Laravel Queues
- Nginx
- Redis
- Linux
- Node.js
- Playwright
- Web Push
- VAPID
Matchlist continuously collects match information from its data source and synchronizes it with the application.
External match data
β
βΌ
Scraper
β
βΌ
Laravel API
β
βΌ
DB
β
βββββββββββββββββ
βΌ βΌ
Match Feed Notification
Service
β
βΌ
Redis
β
βΌ
Web Push
β
βΌ
Browser
Match Event
β
βΌ
Notification Service
β
ββββββββββββββββΊ Database
β β
β βΌ
β In-app notification
β
ββββββββββββββββΊ Queue
β
βΌ
Web Push
β
βΌ
Browser
Localization is handled independently from timezone conversion.
- Interface language
- Notification text
- Date formatting
- Number formatting
- Match dates
- Match times
- Rescheduled match times
- Notification timestamps