Project

FM26 Scouting Manager

Local web app parsing Football Manager 2026 save files for scouting analysis.

Started as an offline .fm save-file parser, then pivoted to live memory reading: an injected dylib attached to the running FM26 process via lldb, walking its heap directly — save files don't expose everything the live process holds.

Built a custom C + Python memory-reading pipeline (mach_vm_region enumeration, manual struct-offset hunting) to enumerate and decode player structs straight out of process memory — reading 172k-182k+ players, staff, and teams in roughly a minute.

Debugging it meant chasing real low-level bugs: a 32/64-bit VM_REGION_BASIC_INFO flavor mismatch that made region enumeration return zero regions, a persistent-connection protocol mismatch between the socket server and client, and a null mach_port_t dereference in the dylib that crashed the game once during testing.

The Express backend indexes extracted data into SQLite with FTS5 full-text search plus custom range/categorical indexes, so scouting queries — position, age, CA/PA bands, attributes — resolve instantly across the full player pool.

The React frontend (TanStack Query) covers search/filtering, a player detail view, and a shortlist for building a target list; squad and tactics planning are still under active development.

TypeScriptReactExpress