Everything you need to replicate these tools from your own (similarly-shaped, differently-named) data: how the system is built, a complete field-by-field data dictionary for every app, and a live "Source mode" overlay that shows where each on-screen number comes from.
PES is 100% static — HTML + JavaScript, no backend and no database. Each app is a single HTML file that loads one or more *_data.js files (a COLS array naming every column + a ROWS array of value arrays) and computes everything client-side in the browser. The five apps are stitched together by a tiny hub (pes.html) that iframes each one under a path prefix and bridges player selection between them. Hosting is therefore just a CDN + auth problem — the live site runs on Cloudflare Pages behind Cloudflare Access.
Replicating PES means understanding two mappings, and the dictionary documents both:
gen_*.ps1 / export_*.ps1 scripts are literally sourceHeader → outputKey column maps. Most heavy math (scores, WAR, PVM, percentiles, eval grades) is computed upstream in the workbook and just passed through. The dictionary's Source column is this layer.g(row,'NFLScore2Y')) and does the client-side work: eval ladders, percentile bars, nearest-neighbor comps, tier outlooks, formatting. The dictionary's Calc and Shown in columns plus each app's Client calcs list cover this layer.COLS array matches, the entire render layer works unchanged.index.html — this site (architecture + searchable dictionary + guide).dict/*.json + dict_data.js — the raw field dictionaries (data you can diff/import).overlay/nfl_profiles_sourcemode.html — the NFL app with a live Source mode toggle (the template pattern).Every column in every app: its key, where it comes from upstream, its type, how it's computed, and where it appears in the UI. Search and filter freely.
The clearest way to convey what each number means: a toggle baked into the live app. Turn it on and every instrumented value gets a dotted underline — hover it to see the field key, upstream source (sheet · header), type, and how it's computed, pulled straight from the dictionary.
Open the NFL Source-mode overlay ↗SV(key, html) wrapper + a tooltip reading NFL_PROV) drops into the other apps. See "Replicate guide" for the snippet.SV(key, html) helper wraps each emitted value in <span class="srcval" data-k="key"> when Source mode is on.overlay/nfl_prov.js exposes window.NFL_PROV (the NFL dictionary); a single mousemove handler looks up data-k and renders the tooltip.A practical order of operations to stand up an equivalent app from your own data.
name → key crosswalk. This is the whole job — the names differ, the concepts don't.*_data.js with a COLS array of those exact keys (order doesn't matter — code resolves by name) and a ROWS array of value arrays. Match the encodings noted per app (e.g. scores/percent as 0–1, HT as ft*100+in, blanks as ""). Mirror the gen_*.ps1 pattern.COLS matches. Keep the eval-ladder order identical (below) so colors/tiers line up.SV() wrapper + tooltip (snippet below) to spot-check that each on-screen number traces back to the field you intended.