Josh BaileyIT Desktop Analyst
← All projects

Write-up · 19 of 22 sections written · revised 3 Sep 2026

Gaffer IQ.The write-up.

A Fantasy Premier League tool that stops treating fixture difficulty as a property of a team, and starts treating it as a property of a pairing.

Role
Design, engine, code
Stack
Vanilla JS, ES modules
Backend
One Vercel function
Status
Live, iterating

In short

Five views over one scoring engine – Matchups, Fixtures, Ranker, Dashboard and Planner – replacing FPL’s 1–5 difficulty rating with a weighted composite of five sub-metrics, scored relative to the opponent so both sides of a fixture sum to 100.

Contents

Start anywhere. Each section stands on its own.

Ranker

2 sections
  1. 17Idea and approachThe bridge between team-level fixture scores and player-level decisions.~1 min
  2. 18DesignHow the ranked list is laid out, and why every column sorts on the value it actually shows.Planned

Planner

3 sections
  1. 20Idea and approachThe most horizon-aware view: every candidate transfer evaluated for its change in projected score, with the four-point hit modelled rather than ignored.~1 min
  2. 21DesignHow a ranked list of transfers is presented so the trade-off in each one stays visible.Planned
  3. 22EngineWhat the Planner actually computes, and how a four-point hit is priced rather than ignored.Planned

Planned sections aren’t written yet. They’re listed so you can see what’s coming.

Glossary

The terms the write-up leans on.

App shapeStatic
The app’s files (HTML/CSS/JS) are served exactly as written, with nothing generated per-request.
Explained in Approach
App shapeFrontend-built
Nearly all the logic runs in the browser, not on a server. This is the app’s core design choice.
Explained in Approach
App shapeSingle-page application (SPA)
One HTML page, JavaScript swaps content in and out instead of loading new pages.
Explained in The interface
Build approachVanilla JS
No framework (no React/Vue). Plain JavaScript, run as-is.
Explained in Approach
Build approachES modules
The browser-native way files import each other (import/export), no bundler needed.
Explained in Approach
Build approachNo build step
The code that runs is exactly the code you wrote, nothing compiles or transforms it first.
Explained in Approach
Other write-upFC26 Feel CalculatorThe card says 87 pace. The player does not feel like 87 pace. This works out the difference.
→
© Josh Bailey · jayjaybee.comSet in Geist.