Context
../lib/positions.ts maps a profile's dominant GitHub language(s) to a football position
(e.g. frontend → Right Winger, backend → Central Midfielder, devops → Goalkeeper, data/ML → Defensive Midfielder,
mobile → Full-Back) via five hardcoded Sets:
FRONTEND_LANGS = JavaScript, TypeScript, HTML, CSS, Vue, Svelte
BACKEND_LANGS = Java, Go, Python, C#, PHP, Rust, Ruby, C, C++, Elixir
DEVOPS_LANGS = Shell, Dockerfile, HCL, YAML, Makefile
MOBILE_LANGS = Swift, Kotlin, Dart, Objective-C
DATAML_LANGS = Jupyter Notebook, R
A language GitHub reports that isn't in any of these five sets is simply invisible to categorize() — it still
counts toward topLanguage (used for "preferred foot" and the "Preferred stack" display) unless it's also in
EXCLUDED_FROM_TOP_LANGUAGE, but it contributes to no tactical category, which can silently skew a profile's
computed position for anyone whose repos lean on an unmapped language. Confirmed gaps: Lua, Zig, Haskell, Scala,
Clojure, Erlang/Elixir siblings, OCaml, Perl, PowerShell, Julia, MATLAB, Groovy, Assembly, Nim, Crystal, F#, and
more aren't in any set today.
Files involved
lib/positions.ts — the five *_LANGS sets, and TYPED_LANGS (which drives the "preferred foot" joke — typed language → right foot) which has its own, smaller gap (e.g. Haskell, Scala, OCaml, F#, Swift-adjacent statically-typed languages aren't all present).
lib/positions.test.ts — check whether a test file exists; if not, this is a good place to add one (computePosition is a pure function, easy to unit test with a synthetic GithubRepo[]).
Acceptance criteria
Notes
If a language doesn't cleanly fit any of the five categories, it's fine to leave it unmapped (it'll still count
toward topLanguage) — use judgment rather than forcing every possible language into a bucket.
Context
../lib/positions.tsmaps a profile's dominant GitHub language(s) to a football position(e.g. frontend → Right Winger, backend → Central Midfielder, devops → Goalkeeper, data/ML → Defensive Midfielder,
mobile → Full-Back) via five hardcoded
Sets:A language GitHub reports that isn't in any of these five sets is simply invisible to
categorize()— it stillcounts toward
topLanguage(used for "preferred foot" and the "Preferred stack" display) unless it's also inEXCLUDED_FROM_TOP_LANGUAGE, but it contributes to no tactical category, which can silently skew a profile'scomputed position for anyone whose repos lean on an unmapped language. Confirmed gaps: Lua, Zig, Haskell, Scala,
Clojure, Erlang/Elixir siblings, OCaml, Perl, PowerShell, Julia, MATLAB, Groovy, Assembly, Nim, Crystal, F#, and
more aren't in any set today.
Files involved
lib/positions.ts— the five*_LANGSsets, andTYPED_LANGS(which drives the "preferred foot" joke — typed language → right foot) which has its own, smaller gap (e.g. Haskell, Scala, OCaml, F#, Swift-adjacent statically-typed languages aren't all present).lib/positions.test.ts— check whether a test file exists; if not, this is a good place to add one (computePositionis a pure function, easy to unit test with a syntheticGithubRepo[]).Acceptance criteria
primaryLanguage.name, don't guess spellings.TYPED_LANGSgets the same treatment for statically-typed languages you add.computePositionandTYPED_LANGSclassification for at least a few of the newly-added languages.Notes
If a language doesn't cleanly fit any of the five categories, it's fine to leave it unmapped (it'll still count
toward
topLanguage) — use judgment rather than forcing every possible language into a bucket.