Sportolutions
Full-Stack Developer
Sportolutions is a platform football clubs use to analyze matches, organize video, manage training and attendance, and work on tactics. I built its match-analysis video system (a full upload-to-playback pipeline with per-club storage quotas and a custom player) on top of a long-running Laravel codebase.
Laravel, PHP, Bunny Stream, TUS, AWS S3, HLS, jQuery
Overview
Sportolutions is a web platform for football clubs to analyze matches, organize video, manage training sessions and player attendance, and work on tactics, all on top of a long-running, multi-language codebase. Match video is at the heart of it: coaches upload footage, tag and organize it, and review clips with their staff.
My Role
Full-stack developer. I built the platform’s match-analysis video system across the stack: the storage and encoding pipeline on the backend, the per-club quotas and admin, and the in-app player and upload experience on the frontend.
What I Built
- A complete video pipeline: resumable uploads (up to 5 GB), background encoding, and adaptive HLS playback
- A custom in-app video player with playback-speed control, keyboard shortcuts, and frame-by-frame stepping
- Per-club video storage quotas: schema, accounting, an admin view, and a usage bar that warns at 85%
- “Upload one video to multiple matches” with a global background-upload tray and optimistic “ghost” tiles
- A per-team tactics archive (“Tattica Individuale”) and attendance-sheet logic that separates differentiated training from regular presence
Outcome
Match video stopped being a fragile, one-at-a-time chore. A coach can push large files in the background (to several matches at once) and keep working while they encode, then review them in a player tuned for analysis, with frame-stepping and speed control where general video controls fall short. Per-club quotas keep storage costs predictable as more clubs come on board, and the attendance changes made the foglio presenze finally match how clubs actually train.
Under the Hood
- Video infrastructure: a Bunny Stream provider with TUS resumable uploads (1.8 resume API), presigned S3 for direct upload/playback, encode-status webhooks, and live encode-status polling so the UI tracks processing in real time
- A custom HLS player layer adding speed control, keyboard shortcuts, frame stepping, and animated hover previews on clip cards
- Per-club storage quotas with accounting and a SuperAdmin module toggle; per-club taxonomy management with cascade deletes wrapped in transactions (and safe sort-order swaps)
- Season-scoped team filtering, multi-match upload, and a responsive clip-card grid with reflow
- A long-running Laravel monolith with a jQuery frontend; multi-language UI (it/en/es/de/pl) kept in sync through a LOCO translation workflow