Skip to content

01Platform

Scouting Platform

CF União de Lamas

This is what the scouting runs on. It replaced a spreadsheet with somewhere the players, the observations, the assessments and the decisions all live together — so that a judgement I made in October is still readable, and still arguable, in March.

Role
Method, design and development — mine, alone
Stack
React · Express · MongoDB
Database
96 players
Recorded
104 observations from 80 matches
Platform home screen with KPIs, shadow team, targets and upcoming fixtures
The first screen of the week: coverage, targets, what I watched recently and what is coming up.These screens show the demo dataset, not the club's own database.

01Why I built it

A spreadsheet remembers what, not why

The department's information used to live in a spreadsheet. It could tell me who I had seen. It could not tell me why I had put someone aside, who else I had watched for the same position, or whether a verdict rested on one viewing or five.

That matters more than it sounds. A season is long. By February I could not reliably reconstruct what I had thought in September, and when you cannot reconstruct it you end up trusting whoever you saw most recently — which is not the same as whoever is best.

So I built somewhere the reasoning stays attached to the verdict.

02How it works

Three things it does differently from a spreadsheet

01

One way of assessing, used every time

Every observation is scored on an attribute grid built for the position, each attribute from 1 to 10. The attributes group into four dimensions — technical, tactical, physical and mental — and those are weighted into a single rating on a 1 to 5 scale of league level. A player's rating is the average of his observations, so it moves as I see him more rather than being fixed by the first match.

02

The verdict is what the database is for

Each player carries a verdict — sign, keep watching, needs another viewing, not progressing — next to a read on his current level, his ceiling and his profile, and on the league level I think he could reach now, in the medium term and in the long term. Opening the database tells me where every decision stands, which is the question I actually have.

03

Built around the week I work

Schedule, watch, write it up, review. The schedule shows me the fixtures worth going to, I fill in the observation the same evening while I still remember it, and the recruitment screens read from what I wrote. If filling it in had been a chore I would have stopped.

Player database with filters and a sortable table of observed players
The database. Every player I have seen, with the verdict, his current level, his ceiling, his profile and the league level I think he can reach — and a filter on each of them.

03Modules

Seven modules

Each one is there because the work needed it.

01

Database

Players, filters and search, and a profile with the biography, the classification and the full history of observations.

02

Observations

Match records scored on the attribute grid for the position. A player's rating is the average of his.

03

Recruitment

The shadow team, lists by position, comparison between players, and a market report I can print.

04

Planning

The squad and its shape by position, for this season and the next.

05

Schedule and competitions

The week's plan, the matches I have been to, fixtures and standings.

06

Leagues, clubs and contacts

The leagues and clubs I follow, and the agents behind the players in them.

07

Home

Coverage by position, so a position nobody has watched shows up instead of going unnoticed.

Recruitment screen showing a shadow team laid out on a pitch
The shadow team, by position. The lists and the comparison sit behind the tabs.

04Assessment

How a rating gets made

Each position has its own attribute grid, and I score every attribute on it from 1 to 10. Those attributes group into four dimensions — technical, tactical, physical and mental — and the dimensions are weighted into one rating on a 1 to 5 scale. The scale is of league level: not how good he looked, but what level I think he could play at.

The rating a player carries is the average of all his observations. It is meant to move. If I see him three more times and he keeps doing the same thing, the number says so; if the first viewing flattered him, it corrects itself.

What the grid is really for is making two reports comparable. Scoring the same attributes in the same order every time is slower than writing a paragraph, and it is the only way I have found to put two players next to each other honestly months apart.

Dimensions

  • Technical
  • Tactical
  • Physical
  • Mental
Observation record showing the position attribute grid and four dimension scores
An observation: the attribute grid for the position, the four dimensions it feeds, and the notes that go with it.

05My part in it

What is mine here

All of it, which is both the point and the limitation. I wrote the method and the software, while working as the club's scout — which is why it fits a scouting week rather than a specification.

  • The method

    The attribute grid for each position, the four dimensions and their weights, and the 1 to 5 scale of league level the rating sits on.

  • The decisions about what it shows

    What I see first, what a verdict commits me to, what has to come out on paper for a meeting.

  • The code

    React and Vite in front, Express and Mongoose over MongoDB behind, and session login with three levels of access.

  • Using it

    It has been in daily use for a season. Most of what changed in it changed because something did not hold up on a Sunday night.

Weekly schedule of fixtures with watched and unwatched matches
The week ahead, and what I have already been to.

06For a department

What it would give a department

Reports that can be compared

Anyone else scouting would score the same attributes on the same scale, so two reports on two players sit next to each other instead of reading as two opinions.

Coverage you can see

The home screen shows coverage by position. A position nobody has watched reads as a gap rather than going unnoticed.

Decisions that outlast the season

Every verdict has the chain behind it — attributes, dimensions, rating, the history of viewings. A decision can be revisited without starting again.

Paper when it is needed

Shortlists and market reports export to PDF, because meetings still run on paper.

Not tied to this club

The club name, the squad structure and the attribute grid are settings rather than code.

What it is not

Being clear about the limits

It is a working tool used daily by one person in one club, published so the approach can be read — not software ready for someone else to install:

  • One club, one dataset. A single database and a single club, with no separation between clubs or between users' data.
  • Local only. It runs on localhost over plain HTTP, with no hosting, no HTTPS, and a backup script I run by hand.
  • Built around how I work. The positions, the four dimensions and the 1 to 5 scale are fixed in the code; the attribute grid inside them is not.
  • The interface is in Portuguese, with no translation layer.
  • One user means untested paths. Any problem someone else runs into will be a new one.

Next

Football Data Platform

Statistical profiling