Client work

Deliverables

  • Product strategy
  • UX and UI design
  • Vue 3 application
  • PHP 8 API and data model

Visit website

Loanee showing a loaned striker's contractual clauses: starts before 31 December at risk, minutes on track, appearances met, and £12,000 at risk on those clauses

The Problem

A parent club can have a dozen young players out on loan at any time, and they are the most valuable assets it owns. Once a player leaves, the club loses sight of him. Minutes played arrive through a WhatsApp message from an agent, or a scout who happened to be at the ground. Training load, injuries and how he actually looked are anyone's guess until he comes back.

The money makes it sharper. Loan agreements carry clauses: a number of starts before a date, a minimum of appearances over fifteen minutes, a games-played threshold that triggers a payment. Under the SFA Cooperation System there is a standard obligation of five appearances of fifteen minutes before 31 March. Miss one of those windows and a club can lose a fee it had already counted on, having had no visibility that it was slipping.

Club staff around a touchscreen table, with the information a loan generates scattered across separate feeds: stats and SFA obligations, player load and welfare, contract and clause status, and an alert on a missed appearance window

The Solution

Loanee puts the loan itself at the centre rather than the player record. Every agreement carries its clauses, each with a metric, a threshold, a window and a consequence, and the platform projects the pace needed to hit them. A clause is not simply met or missed: it is met, on track, at risk, missed or pending, recalculated nightly, so a loans manager sees a target slipping in November rather than discovering it in March.

The data arrives from the club that actually has the player. Loan clubs join free by invitation and submit appearances, attendance, GPS sessions, injuries and reports through a job that takes under a minute on a phone. That is the part no market data provider can replicate: commercial feeds do not meaningfully cover Scottish League One and Two, the Highland and Lowland leagues, or part-time football, which is exactly where these players go.

The Loanee loan agreement matrix: submissions from loan clubs feeding one record, with each clause showing met, on track, at risk, missed or pending against its window and consequence

What the platform does

Clauses that project, not just record

Each loan carries its negotiated terms as structured data, evaluated against real appearances every night. The Cooperation System obligation is added automatically when a loan is set up as a cooperation arrangement.

  • Metric, threshold, window and consequence per clause
  • Met, on track, at risk, missed or pending
  • Pace projection against games remaining
  • Value at risk shown in money, not just counts
  • Deduplicated alerts, so one problem is one notification
The loans dashboard: three loaned players with their clause progress, one at risk on four starts of eight, one met, one tracking minutes

Two club types, one database

Parent clubs and loan clubs use the same platform with entirely different access. Permission is a role matrix crossed with the relationship: a loan club can only reach a player through an active loan linking the two organisations, and only in the modules it submits to.

  • Shared-schema multi-tenancy with an active organisation on the token
  • One person, several clubs, switched without signing out
  • Submit-level modules for the hosting club
  • Clauses, reports and baselines stay parent-only

Data from whoever has the player

The hosting club supplies what only it can see. GPS imports accept any vendor's CSV, with headers matched fuzzily rather than requiring a fixed template, because every sports science department exports something different.

  • Appearances, minutes and starts
  • Training attendance
  • GPS sessions from any vendor export
  • Injuries and return-to-play status
  • Match reports from the coach who watched the game
A player week from the hosting club: rest day, part session, full training and a Saturday fixture, each tagged by days to matchday

Video without a storage bill

Clips are usually links, to YouTube, Vimeo, Veo, Hudl, Wyscout or InStat, embedded with a start and end where the provider allows it. Uploads go through a storage adapter, local for self-hosting or Cloudflare Stream for signed playback at a few pounds per thousand clips.

  • Link or upload, per clip
  • Signed, range-capable streaming
  • Visibility per clip: parent, loan club or passport

A view of form that survives a change of staff

Match reports are scored against the same attributes every time, by whoever actually watched the game. A structured record beats a coach's recollection eighteen months later, when the staff who saw the player have moved on.

  • The same attributes, every report
  • Written by the person at the ground
  • Trend across a season rather than one opinion
A match report scoring movement off the shoulder, hold-up play and pressing out of four, with a verdict of ready to step up

A report the sporting director reads

One export, assembled from what the platform already holds: minutes, clause status, attribute movement and the fixtures behind it. Board papers stop being a job somebody does by hand on a Sunday.

  • Generated from the record, not re-typed
  • Clause status and value at risk included
  • Ready to circulate before a board meeting
A generated loan report PDF: how the loan is going, scored out of 100, with share of minutes and movement in attribute scores

And more

Everything else it needed

  • Player passport

    A record that travels with the player rather than sitting in one club's system.

  • Nightly compliance run

    One scheduled job re-evaluates every clause and raises only what changed.

  • Invitation only

    No public registration. Accounts are created for named staff at named clubs.

  • Per-loanee billing

    Parent clubs pay for the players they actually have out, through Stripe. Hosting clubs never pay.

Under the bonnet

How it was built

  • Front end

    • Vue 3
    • Vite
    • Pinia
    • Vue Router
    • Chart.js
  • API

    • PHP 8
    • PDO
    • JWT authentication
    • Hand-rolled router and controllers
  • Data

    • MySQL, shared-schema multi-tenancy
    • Versioned SQL migrations
    • Compliance and access services
  • Platform

    • Stripe billing
    • Cloudflare Stream
    • Nightly scheduled checks
Your most valuable future assets play for somebody else on Saturday.

Services provided

  • Product strategy
  • UX and UI design
  • Vue 3 application
  • PHP 8 API and data model
  • Compliance engine
  • Stripe billing

Next project

Got something like this in mind?

We build products end to end: discovery, design, engineering and the AI that makes them worth using. Tell us what you are trying to solve.

Start a projectSee more of our work