Arsen
Dzantiev
← All projects

01Own productLive

Argus

A workspace for football agencies, clubs and scouts.

Ask an agent what they know about a player and the answer lives in five places: a contract in a folder, a scout's note, a WhatsApp chat, the market in a browser tab and their own memory. Argus puts it in one profile: the data, the market around him, the deals and the money, so agencies, clubs and scouts work from the same full picture.

I built it alone, end to end: the data pipeline, the models, the web and mobile apps, the design and the servers. It works in seven languages. Below are the decisions inside it, with screens from the live product.

My part

End to end: product, design, web and mobile development, the data pipeline, the models and the servers.

Visit the site: argus.football↗
Khvicha Kvaratskhelia's profile in the live product.Live product

In numbers

529,137
transfer records from 1996 to 2026 in one warehouse
72,828
players matched across sources
116
leagues in 82 countries
4,257
tests passed by the release of 27 September 2026

What I built

01

Multi-Source Data Warehouse

Many messy sources, one player record you can trust.

The problem

Every source has its own IDs, spellings and seasons, and they break quietly. One open dataset once wiped the market value of 10,021 players while keeping the same row count.

How it works

  • Each import passes five checks before it goes live: the shape of the data, no more than 15% of rows lost, minimum counts, filled columns, and dates that never go backwards. If a check fails, the live data stays as it was.
  • Players are matched in three passes with a confidence score: exact ID (1.0), name and birth date (0.95), a near name with one clear candidate (0.8). Manual links are never overwritten.
  • Clubs are matched by vote: at least three shared players and a clear margin. Agreement is 99.7%.
  • 21 reference transfers must match within 1% before anything loads. Sources are reconciled every week, and disagreements become tickets.

Status

  • Live: running in production529,137 transfer records from 1996 to 2026, 72,828 players, 15,961 clubs.

Also fits

Retail catalogues from many suppliers, property data, medical registries, KYC, logistics.

The public coverage page: every league in the warehouse, grouped by its calendar.Live product

02

Player Analysis Studio

Compare a player with a cohort you choose, across leagues, and see how fresh the data is.

The problem

Standard percentiles are computed inside one league. The 90th percentile in Estonia and in the Premier League is not the same player.

How it works

  • You pick the cohort: position, league strength, division, season, minutes, age. A badge shows how far the sample can be trusted.
  • Three league modes: raw; “if he moved”, which translates his numbers into another group of leagues and adjusts for age; and adjusted for league strength.
  • Similar players are found by comparing 32 percentiles at once, so a match has to share the level as well as the style. Filters then find a younger, cheaper or same-level replacement.
  • Stale data never shows as fresh. A missing value reads “not observed”, not zero.

Status

  • Live: running in productionSearch runs across every player: a name in 5 ms, common filters in under 80 ms.

Also fits

Sales across regions of different strength, clinics adjusted for case mix, staff across offices.

The Data tab. You pick the cohort, and a badge says how far the sample can be trusted.Live product

03

Player Valuation and Scenarios

A price with an honest range, and scenarios drawn from what happened to similar players.

The problem

Public market values are opinions, not prices. Models that promise “undervalued” or “likely to leave” usually ship without a test.

How it works

  • An expected fee with two ranges: half of real deals land in the inner one, four in five in the outer. Calibration took their real coverage from 43% and 73% to 50% and 80%.
  • The chance of a paid move sits next to the price and is never multiplied into it. Inside the price it cut values by a factor of three.
  • A projection for 12 and 24 months that beats the simplest forecast, “nothing changes”: an error of 0.282 against 0.300.
  • Six scenarios from what really happened to similar players: starter, rotation, fringe; a move up, down or sideways. The card itself warns that these are facts about other players, not a forecast for this one.
  • Every model faces a simple baseline first. Two failed and never shipped.

Status

  • Live: running in productionRetrained every month.

Also fits

Any market of illiquid assets with a deal history: property, equipment, M&A multiples.

Market value with its range, and below it the chance that the next move is a paid one.Live product
The next year, and six scenarios from what really happened to similar players.Live product

04

Explainable Matching

A request becomes a shortlist, and every name comes with its reasons.

The problem

An agent reads “left-footed centre-back, under 23, up to €2m” on one screen and retypes it as filters on another. Hundreds of times per transfer window.

How it works

  • Each criterion returns yes, no or unknown. Unknown never passes.
  • Your own players come first, compared only with confirmed terms that have a source and an expiry date. Market value never stands in for their asking price.
  • Then the whole market. There the fee ceiling is checked against market value, and the screen says so. What can't be checked, like salary, is listed rather than hidden. A neighbouring position comes back as a “near fit”.
  • For each player, clubs are ranked by squad gap, how similar moves worked out and whether they can pay. A long shot stays on the list with a label.

Status

  • Live: running in production26 tests hold the matching rules.

Also fits

Recruitment agencies, property brokers, distributors, talent agencies.

CB · left foot · under 23 · fee up to €2m
PLAYERFOOTAGEPOSFEEVERDICT
Player A · 22✓✓✓✓Match
Player B · 21✓✓~✓Review
Player C · 23✓✓✓?Excluded
Player D · 25✓✕✓✓Excluded

? fee not confirmed → unknown never passes · ~ neighbouring position, a near fit

Club request → shortlistSample data

05

Scout Notes to Report

Voice, text or a photo of a notebook page becomes a structured report. The scout's words come first.

The problem

Scouts write reports at night from memory, and early generators buried their observations under data.

How it works

  • Input: voice, dictation, text, a photo of handwritten notes or up to 100 saved notes. A WhatsApp channel is built and waits for Meta's approval.
  • The AI assistant finds the player, asks the scout to confirm, collects the grades and asks again when something is unclear.
  • The scout's observations lead, and the data backs them up or openly disagrees. Where there is little to go on, the report says so instead of padding.
  • Data, exchange rate and charts freeze at the moment of writing, so the PDF means the same thing a year later. PDF, image and link look exactly like the screen.

Status

  • Built: finished, not in daily use yetThe editor, 10 templates, 6 themes and export are live.

Also fits

Inspectors, auditors, field sales, property agents, ward rounds.

Voice · 0:42

Notebook photo

Brave in duels. Late on second balls. Asks for it under pressure.

Report · Player A

Scout's observations

Brave in duels. Late on second balls. Wants the ball under pressure.

Data check

Duels won 61%: agrees. Aerials 38%: disagrees, flagged.

Grade

B+ · first-team option

Thin data: 412 minutes this season

Notes → reportSample data

06

Opportunity Feed

Every morning the system surfaces what needs action. A person decides what to do.

The problem

Important things don't arrive as messages. A mandate enters its last 90 days, a club request waits three weeks, a client hasn't heard from you in a quarter. It all sits in the database until someone opens the right screen.

How it works

  • Six kinds of facts, each with its own window: contract 180 days, mandate 90, birthday 14, request deadline 21, stalled request 14, silent client 90.
  • The feed is computed on every read. Renew a contract and the card comes back as a new fact.
  • Buttons lead to where a person creates the work. The system never creates tasks by itself, and a test keeps it that way.

Status

  • Live: running in production

Also fits

Account management, legal deadlines, private banking, academies keeping families, renewals.

Mandate

88 days left with Player A

Plan renewal →

Club request

21 days without a reply

Write back →

Client

No conversation in 94 days

Log a call →

Contract

Player C ends in 176 days

Open deal →

Nothing is created until a person presses a button.

This morningSample data

07

Contract Money That Counts Itself

Contract bonuses count themselves from match data. Earned but not invoiced sits in one list.

The problem

A clause like “€200k after 450 minutes” stays at zero until someone counts matches by hand. Money that was earned goes uninvoiced.

How it works

  • The clause is described in full: fixed, per unit or threshold; window; competitions; one of six metrics; 21 currencies.
  • A match that couldn't be read is skipped, not counted as zero. An invoice depends on that number.
  • If the source corrects a match, the count goes back down. The screen shows “820 / 1,100 minutes” and where the number came from.
  • Currencies are never added together. Each amount keeps the ECB rate of its date.

Status

  • Built: finished, not in daily use yetCounts on demand. The nightly run is next.

Also fits

Clubs forecasting payroll, record labels paying royalties, sales commissions, usage-based billing.

Bonus €200,000 at 1,100 minutes

0 / 1,100

90
90
78
90
?
90
64
90
90
68
70

? lineup unreadable → skipped, not counted as zero

Earned, not invoiced · €120,000 · clause 1, 14 Sep

Clause 3 · minutesSample data

08

Telegram Ops and Review Loop

The platform watches itself and writes to Telegram when something breaks. Doubtful calls reach a person as a card with buttons.

The problem

Nobody reads job logs until something is already wrong, and a broken scraper returns silence, not errors. Once, six tables stood still for a month while the job reported success every week.

How it works

  • Every 20 minutes it runs six checks: failed, stuck and missed jobs, tables that stopped updating, sources that went quiet, and database changes that didn't apply cleanly.
  • One message sorted by severity. A repeated alert stays quiet for 20 hours. At 09:00 one green line arrives, so silence is never ambiguous.
  • Every day a canary, about 30 reference players whose data is known to be right, is checked again; when two break the same way, the alarm goes off.
  • News with an uncertain player match is held and sent as a card: Approve, Reject, Relink. A relink teaches the matcher for next time.

Status

  • Live: running in productionWatch and canary.
  • Built: finished, not in daily use yetReview bot.

Also fits

Any company with data pipelines and integrations. One-tap moderation for content, KYC and support.

Ops · 07:40 UTC · 2 issues

[CRIT] Import stopped at gate: row drop 71%

[WARN] Market values stale for 9 days

09:00 · all clear · 26 jobs ok

HELD · ambiguous player

“Left-back agrees personal terms”: 2 players match the name

ApproveRejectRelink

→ published · alias saved, next time it links itself

Ops botSample data

09

Design

Brand, design system, data on screen, reports and sites. Variants side by side on real content; the winner becomes the standard.

The problem

An interface made of template cards and default fonts looks like every dashboard. When every screen is solved differently, people relearn the product on every page.

How it works

  • Variants side by side on real content and the worst case. 20 variants produced the number strip and tabs used across the product; the running dot on maps, chosen from five, became the standard for every map.
  • Search wide, choose narrow: 26 type systems became one, 35 report templates became 10.
  • Fonts with a reason: the app is read mostly in Russian and the landing typeface has no Cyrillic, so it uses Brygada 1918 and Literata.
  • Measured, not eyeballed: category colours tested for contrast in both themes, the sixth failed and was dropped; design rules are locked with tests.
  • Designed and built end to end by me, with AI tools.

Status

  • Live: running in productionThe mark, the palette, the design system and about 45 charts and maps; 10 report templates in 6 themes.

Also fits

Brand systems for clubs, agencies and media. Data-heavy dashboards. Reports that look the same on screen and in PDF. Cinematic launch sites.

The market overview: the window in numbers, the latest deals and rumours, and the moves on a map.Live product

Also inside

Built with

  • Next.js
  • TypeScript
  • Supabase
  • PostgreSQL
  • Pythondata pipeline and models
  • Capacitormobile app
  • Vercel AI SDK