Frontmatter
| id | 9058 |
| title | Feat: DevRank Location Normalizer & Data Enrichment |
| state | Closed |
| labels | enhancementaifeature |
| assignees | tobiu |
| createdAt | Feb 8, 2026, 10:02 PM |
| updatedAt | Feb 8, 2026, 10:11 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9058 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 8930 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 8, 2026, 10:11 PM |
Feat: DevRank Location Normalizer & Data Enrichment
tobiu assigned to @tobiu on Feb 8, 2026, 10:02 PM
tobiu added parent issue #8930 on Feb 8, 2026, 10:03 PM

tobiu
Feb 8, 2026, 10:11 PM
Input from Gemini 3 Pro:
✦ Implementation Note: Flag Data Strategy
We have explicitly decided NOT to store a
country_flagfield (neither emoji nor URL) in the backendusers.jsondataset.Reasoning:
- Payload Optimization: The
users.jsonfile is fetched by the client. Minimizing its size is critical. Storing a 2-character ISOcountry_codeis significantly more efficient than storing full URLs or base64 strings for every user.- Client-Side Rendering: The frontend component
Neo.component.CountryFlagis already capable of resolving the correct flag asset based purely on thecountry_code/locationvalue.- Data Hygiene: Separating data (ISO code) from presentation (Flag asset) adheres to better architectural principles.
tobiu closed this issue on Feb 8, 2026, 10:11 PM
To improve the filtering capabilities of the DevRank grid, we need to normalize the location data from GitHub. GitHub's location field is free-text and inconsistent (e.g., "Munich", "München", "Bavaria, DE").
This task involves:
DevRank.services.LocationNormalizer: A new singleton service that maps raw location strings to ISO 3166-1 Alpha-2 country codes (e.g., "DE", "US") usingIntl.DisplayNames, a regex dictionary for common variations, and a city mapping. It should also provide a flag emoji lookup.DevRank.services.Updater**: Update thefetchUserDatamethod to use theLocationNormalizer. The user data object should now include:country_code: The normalized ISO code (for filtering).country_flag: The emoji flag (for UI display).location: The original raw text (preserved for display).This enables robust "Sovereign Tech" filtering (e.g., "Top Developers in Germany").