Player database
0 players
Filters
Position
Nationality
Born
Height
Roles
Grade Scout-only
Track Scout-only
Follow-up Scout-only
Age
Has a report
Has private intel
| ID | Player | Country | Position | Team | Height | Roles | Scout-only | Last observed |
|---|
Leave without saving?
What you entered will be lost.
0 players
Filters
Position
Nationality
Born
Height
Roles
Grade Scout-only
Track Scout-only
Follow-up Scout-only
Age
Has a report
Has private intel
| ID | Player | Country | Position | Team | Height | Roles | Scout-only | Last observed |
|---|
Photograph a sheet, paste your notes, or fill it in by hand
No player selected. Add a player, or pick one from the roster.
No player selected. Add a player, or pick one from the roster.
Team
Not recorded
Competition
Not recorded
Competition level
Not recorded
Position family
Not recorded
No measurements recorded.
No links recorded.
No data-rights record on file.
| Date | Type | What it added | Evidence |
|---|---|---|---|
No observations recorded. | |||
Every figure on this page will trace back to a row here — a date, a place and a named observer. A rating that cannot be traced that way is the black box the product is not allowed to be.
No report written.
No player selected. Add a player, or pick one from the roster.
On-court profile
Not recorded
Current level
Not recorded
Active target
Not recorded
No film linked.
Player Report · All events
Player report · all events
One evaluation across every event, built from each event's finalized work.
No player report yet.
Event reports · one per event
No scouting work recorded.
No film yet.
Open a player to see their film here.
Full games are marked in gold because they are what moves a judgement. Wingspan stores the link and the context — team, opponent, competition, date, jersey — and makes no automatic assessment of the footage.
Nothing here yet. Tap Take notes to start writing now and match it to an event later — or set up an event first.
·
Recently opened players
No events yet.
Notes taken before the event and team were set up. Match each one to put its numbers on a roster.
Step 2 of 3 · Teams for
Or add a team by name
Teams are shared across every event — type an existing name (and country) to reuse it, or a new one to create it.
Step 3 of 3 · Start capturing
| Name | Season | Dates | Country | Teams | Sessions |
|---|---|---|---|---|---|
No events yet. Add one above. | |||||
Add a team to start a roster.
No teams yet.
No games yet.
No note sessions yet.
Add a team to import statistics.
No combines yet.
| Name | Date | Site | Mode | Entries | Sign-off |
|---|---|---|---|---|---|
No combines yet. Add one above. | |||||
A scout's judgment call, stored with a name and a date — used while no cohort of 25 exists yet for a position family. See COMBINE.md §1.4.
| Family | Sex | Age | Metric | Low | High | Note | Set by |
|---|---|---|---|---|---|---|---|
No reference bands set yet. | |||||||
| Player | Height | Wingspan | Max vertical | Flags | |
|---|---|---|---|---|---|
No entries yet. | |||||
Add a player to begin.
Scouting Report
Loading…
As written. Never changed by anything below.
Loading…
Loading…
The prompts behind every generated report: your six, plus the player report's, which Wingspan wrote.
Loading…
Not matched yet. Numbers stay plain numbers until you tie these notes to an event and a team.
You have unsent notes on this phone.
Tip: use your keyboard's mic to dictate.
Match this capture to an event and team to organize it.
Nothing parsed yet.
Your scouting process, and why Wingspan is built the way it is.
In Demo mode, the AI steps below use prepared stand-in responses. In the live app, they send your prompts to the model.
Right now a report comes out of four separate places: a Jotform for player data, a notes app for live and video notes, AI chat threads with your own prompts for steps 3A through 8, and a manual PDF or social export at the end. Wingspan holds all of it in one place you own: the events and rosters, your notes, your prompts, every AI draft, and the final report.
Step 1
Today
A Jotform, filled by hand, plus FIBA rosters and box scores, federation and club sites, and whatever public profiles turn up.
In Wingspan
Add a competition, add its teams, then add roster rows by jersey number as you spot players — a name can wait. “New event” on Home or Events walks through the same three things — event, teams, first notes — one screen at a time, phone-first, straight into Notes when you're done. When you're ready for a profile, “Create player from #NN” on that roster entry's Evaluation screen opens Add a player prefilled with the event, team and listed position already on the roster row, and saving links the two automatically — no separate step, and nothing to re-type.
Step 2
Today
A notes app on your phone, one line per observation: “44: played primary ball handler.”
In Wingspan
One text box, one line per number, your exact format. It autosaves as you type and keeps an unsent copy on the phone if the gym's connection drops. Hands full courtside? Tap the mic and say “44, played primary ball handler” — it writes the line for you, in your format, and keeps listening until you tap it off. Game already on and nothing set up? “New capture” on Home starts writing straight away, with no event, team or roster, and you match it to an event later.
Step 3A
Today
Paste the whole raw-notes dump into an AI chat with your “Elite Scouting Report Reorganization Prompt.”
In Wingspan
The “Organize all notes” button on a note session runs your prompt once for every number in that session, instead of one paste per player. Each result lands as a draft on that player's Evaluation screen, beside the raw notes, not in place of them.
Step 3B
Today
Nothing dedicated. The layers only stay apart because they live in different apps: the notes app, the AI chat, the exported document.
In Wingspan
A roster row's Evaluation screen keeps the raw notes, the AI-organized report and the final write-up as three separate blocks. Editing or regenerating one never touches the others, and once you edit a draft, “Show AI original” brings back exactly what the model wrote.
Step 4
Today
Paste a box score or tournament sheet into an AI chat with your team-analysis prompt.
In Wingspan
Paste the same sheet into a stat import on the event screen. The team sheet totals the numbers, then Generate on Team analysis returns the top 5–6 players by combined production and flags the intriguing ones — strong per-40 production in limited minutes, an unusual rebound, steal, block or assist rate, a hot small sample, or high assists with high turnovers.
Step 5
Today
A follow-up question in the same AI chat project: “Comment on [player]'s statistical impact on the team.”
In Wingspan
Your document has no standalone prompt for this step, just an example request and an expected-output list, so Wingspan wrote one from those, and it's on Prompts for you to rewrite. Generate, on that player's Evaluation screen, runs it against their numbers and the team's and comes back as an editable draft.
Step 6
Today
Paste a stat block into an AI chat with your “rewrite into exactly one line” prompt.
In Wingspan
The one-line stat line itself is computed from the stats you import, not guessed by the model, so it can never disagree with the real numbers. The model, using your prompt, only writes the two-sentence commentary and the three highlights.
Step 7
Today
The same AI chat project as step 6, asked about consistency across the games.
In Wingspan
Your document has no standalone prompt for this step either, just an example request and example output, so Wingspan wrote one from those, and it's on Prompts for you to rewrite. With game-by-game stats imported, it runs from the player's Evaluation screen and reads the game-to-game spread, not just the average, the way you ask for it today.
Step 8
Today
Your DraftExpress-style prompt, pasted into AI chat along with the notes, the strengths and weaknesses report, and every stat output above.
In Wingspan
Generate, on the Evaluation screen, runs your prompt against all of it automatically: nothing to copy and paste. A live word count flags anything over your 350, and it stays a draft until you hit Finalize.
Beyond your process
This isn't one of your eight steps. Wingspan added it: on a player's record, one report built from every event he has been scouted at, with his trajectory from event to event, what more than one event agrees on, and what is still open. It has the same Generate, Edit, Finalize, print and email as an event report. Its prompt was written by Wingspan, not you, and it's on Prompts for you to rewrite or replace.
A roster entry — jersey number, team, competition — is the subject of scouting work, not a player.
Why
You scout by number before you have a name. Linking the entry to a player later carries every note and document with it; nothing gets re-entered, and no number you wrote about once becomes a stray player record.
Your process document, step 1
A name for a roster entry not yet linked to a player is stored separately from the entry itself, not on the shared record.
Why
A name attached to a number nobody has linked yet is identifying data about a minor. It has no business sitting on the table every other query reads.
Wingspan build notes
Raw notes, the AI-organized report and the final evaluation stay three separate, always-visible layers — your step 3B.
Why
Nothing generated is allowed to overwrite what you wrote. “Show AI original” is a fact about the stored data, not a promise the screen happens to make.
Your process document, step 3B
Averages, percentages and the one-line stat line are computed in SQL from the numbers you import; the model is told not to calculate any of them.
Why
A generated report can't show a stat that disagrees with your real numbers, because the model never produces one.
Your process document, step 6
No player name ever reaches the model. Generation refers to players by jersey number, or by the literal token [PLAYER]; a name is substituted back in only after the response comes back.
Why
No name, and no database id of any kind, reaches an outside API — regardless of what you've typed into your own notes.
Wingspan build notes
Your prompts ship with your wording; chat-only lines (paste here, wait for me) are removed because the app supplies the inputs, and they stay editable. The guardrail rules are appended separately at generation time and can't be edited out.
Why
Keeps your exact wording under your control, while guaranteeing the instructions that keep names, invented numbers and recomputed averages out of a report can't be removed by accident.
Wingspan build notes
A notes session belongs to one event and one team, with an optional opponent — and can start with neither. A quick capture is matched to an event afterwards, where you pick which numbers (or single lines) were the opponent's.
Why
A bare jersey number only means something once there's a team and an event behind it, but the notes can't wait for setup. Matching later keeps every line exactly as you wrote it, lets you note both teams in one stream, and can be redone if you picked the wrong event or team.
Your process document, step 2
Dictation uses the browser's built-in speech recognition and writes plain text into your notes; nothing is stored as audio.
Why
Courtside, your hands are busy. Depending on your browser, speech may be processed by the browser vendor's own speech service (Google in Chrome, Apple in Safari) to turn it into text — Wingspan never sees or stores the audio itself. If that's not something you want on, the keyboard's own microphone dictates into the same text box with no Wingspan code involved at all.
Wingspan build notes
An AI draft never becomes the final evaluation by itself — Finalize is a separate, explicit action.
Why
You stay in control of what gets published, not the model.
Your process document, introduction
Event reports and a player report. An event report is one player at one event, built from that event's notes and stats — your eight steps, unchanged. The player report sits on the player's record and is built from every event: each event's finalized evaluation, stat line and strengths and weaknesses, plus his measurements over time.
Why
A jersey number at one tournament is the unit of scouting, but the question a club asks is about the player across all of them. Keeping the two apart means an event report never changes because of another event, and the player report says when a newer event report has been finalized since it was written. Same rules as every other report: no name reaches the model, and nothing is final until you finalize it.
Wingspan build notes
Demo mode keeps everything in this browser. Nothing is read from or written to the real backend while it's on.
Why
Lets you, or anyone you're showing this to, walk the whole workflow on demo data without touching your real data.
Wingspan build notes
WS360 and Combines are hidden, not deleted.
Why
Every route, data shape and backend call for both stays wired up. Switching one flag in FEATURES and regenerating the app brings either back.
Wingspan build notes
The solo-scout workflow comes first. The role switch is hidden, because a real scout has exactly one role, and the Institution surface is out of the prototype for now.
Why
The scout surface is the only one that creates data. Building multi-user or admin chrome before that is wasted effort.
Wingspan build notes
Your target
Not recorded
Profile visibility
Not recorded
Photograph
Not recorded
Benchmark use
Not recorded
Wingspan does not rank you against other players and does not promise a scholarship or a contract. It shows where you stand and what a scout would still need to see.
How you play, in your own words. Seven required, four optional.
Your answers are one input among several. Wingspan weighs them against your statistics, physical profile and competition level before describing a role — and says so when the evidence disagrees with what you have chosen.
“I am not sure” is a real answer, not a gap. Guessing produces a worse profile than saying you do not know, so it is offered on every subjective question and never penalised.
No seasons added yet.
| Season | Club | Competition | Lvl | Role | MPG | Source |
|---|---|---|---|---|---|---|
No seasons added yet. | ||||||
| Date | Opponent | Result | Min | Pts | Reb | Ast | Source |
|---|---|---|---|---|---|---|---|
No games logged yet. | |||||||
Not enough games logged yet.
Trajectory appears after two seasons.
Five dots — three small above, two large below. An abstracted arm span, and a cluster of observations. The same dot builds every photograph on the site. Enough dots resolve into a player, which is what a scouting platform is for. The dot is the primitive; everything else follows.
Gold only ever sits on ink. Gold on ink is 11.7:1. Gold on bone is 1.6:1 and fails every threshold. On a light surface gold is a fill behind ink text, never text itself.
Flare appears exactly once on the marketing site — a 2px underline on the active nav item. That restraint is the point. Here it means live, in progress, or a performance gap, and nothing else.
Compressed, 700, uppercase, line-height smaller than the font size so lines interlock. Broken by word, one word per line, sized to fill the measure. Never below 64px, never centred.
Display L
Section heroes
Display M
Page titles
Label — compressed caps
Column heads, stat labels. Wraps to two lines rather than truncating.
Shown in Archivo Narrow. Resolves to Tablet Gothic Compressed once self-hosting is licensed — single swap point in tokens.css.
Early
Developing
Stronger
The product's only formal rubric is a three-tier confidence label. The mark is five dots. Rendering confidence against a five-dot track makes the logo the reward state — a fully evidenced player is the mark. No percentage rings, no stars, no completion bars needed anywhere.
Strong signal — evidence supports a positive conclusionGold, filled
Early signal — pattern visible, more evidence neededBone at 62%
Performance gap — below the target comparison rangeFlare
Evidence gap — not enough reliable data to concludeHollow. No fill, no colour.
An evidence gap renders as absence, not as another colour. The spec's fourth principle is honest confidence and its fifth is no black-box claims — an empty ring says “we don't know” in a way no coloured badge can. Missing data should look missing.
Stat cells — type does the work
Rebounds
7.6per gameBlocks
1.4per gameTurnovers
0.9per gameGold marks the single most important number. Three golds would mean nothing.
Competition level — 1 is top
Position is marked, never filled up to — filling would imply 5 is best when 1 is. Numeral always shown.
Height
201 cm
Wingspan
212 cm
Standing reach
Not recorded
Source labels are provenance, not quality. Set small, muted, always adjacent to the value they qualify — never a coloured pill, because pills imply ranking and these are categories. “Verified” is the product's core claim, so it has to be visible on every fact.
Stronger — all domains clear
Developing — athletic not measured
Provisional — never gold
The badge and the chart are the same object. The arc is literally the 360 — the composite swept as degrees. Five dots sit on the ring, one per domain, echoing the parent mark's five: gold where that domain clears the target band, dim where it does not, hollow where it was never measured. A provisional rating puts no gold anywhere, because gold means the evidence is there.
Squared — 2px radius. Flat: no gradients, no glows, no drop shadows. Elevation is the ink ladder plus 1px borders. The dot is the only circle in the system.
Wingspan · design system v0.1 · framework-agnostic CSS, portable to any stack