Solo Pro League is an amateur football league in Milan that I co-founded with Andrea Limonta in January 2023. Players join as individuals, play in teams that change from game to game, and earn points for their own performance. That format creates a practical problem: keeping the games balanced while making results, rankings and player history easy to follow.
I lead the product, data and technology. Andrea leads partnerships, suppliers and events. My work grew from an Excel points tracker into a database, an admin dashboard, team-generation tools and a public statistics site.
From a spreadsheet to a league platform
In 2023, I designed the points system and built the first FantaSPL tracker in Excel. I then wrote Python to turn the workbook into fantaspl.com, with standings, player pages and a fantasy league. Forty people entered the first fantasy season.
As the league grew, I migrated the match history into Supabase, using Postgres to hold players, games, individual match statistics and scoring parameters. During 2025–26 I built a Flask admin dashboard for maintaining those records and managing sign-ups. I also wrote Python scripts to replace our n8n workflows for matching participants, generating teams, recording results and rendering team cards.
The 2026 public-site pipeline reads the database and uses pandas to calculate points, rankings, player market values and fantasy-league results. It exports the results as JSON, then Jinja2 renders the league pages and about 190 individual player pages. The static site is deployed to GitHub Pages.
The separate Odoo implementation was built by others.
How a match becomes player statistics
Each game has a score and one statistics record per player. That record includes their team, goals, own goals, MVP award, the SPL bonus voted by players, friend referrals and penalties. Scoring parameters vary by match format, with headcount used to distinguish five-, seven- and eleven-a-side games.
For example, our seven-a-side scoring awards five points for taking part, three for a win, one per goal, three for MVP and four for bringing a new player. Defenders and goalkeepers also receive a defensive score based on goals conceded. Keeping the parameters separate from the match records lets the calculation apply the appropriate rules consistently.
The same history feeds the fantasy league. Player valuations use exponentially weighted recent statistics, combining attendance, adjusted points and a weighted performance measure. Values stay between €1 million and €25 million. These are fantasy-game values, not transfer prices.
Helping organisers choose balanced teams
I built a generator that starts with the next game’s sign-up list and each player’s historical statistics and role. The current Python version scores differences in rank, points per game and win ratio. It places goalkeepers first, accommodates requests to play together or against another player, and improves candidate splits by swapping eligible players between the two sides.
The generator tries to produce three distinct options for Neri and Bianchi. We review the options and choose the teams for the game. Keeping that decision with the organisers matters: the recorded statistics cannot capture everything we know about a player or a particular evening.
I also built experimental match-prediction work using scikit-learn. I treat that as an experiment; I have not established a measured improvement in match fairness or prediction accuracy that I can claim here.
What the league grew into
By December 2025, our records covered 130 games since January 2023, roughly 1,800 player-game records and 189 registered players. The 2023–24 season alone included 79 players and 38 games. These are historical totals, rather than a claim about the site’s current audience.
We grew from one weekly game to two fixed pitches, Bovisa and Lambrate, by 2025. Alongside the software, I helped run weekly games, sign-ups, payments, three summer tournaments and a Christmas tournament. The 2024 summer edition had 30 players, six games and 63 goals.
We have ordered branded kits each season since 2024 with Jersix, and I co-own the SPL trademark registered in Italy in 2024. FantaSPL has been rebuilt three times as the league grew. The continuing work has been to keep the software useful for the people turning up to play each week.
See the project
Solo Pro League introduces the league. FantaSPL contains the results, standings, player profiles and fantasy market. The implementation repositories are private; I can walk through the code on request.