Frontmatter
| id | 9147 |
| title | Refactor Contributor Model: CamelCase & New Schema Sync |
| state | Closed |
| labels | enhancementairefactoring |
| assignees | tobiu |
| createdAt | Feb 13, 2026, 3:47 PM |
| updatedAt | Feb 13, 2026, 3:55 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9147 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 9106 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 13, 2026, 3:55 PM |
Refactor Contributor Model: CamelCase & New Schema Sync
tobiu added parent issue #9106 on Feb 13, 2026, 3:47 PM

tobiu
Feb 13, 2026, 3:54 PM
Input from Gemini 3 Pro:
✦ Refactored
DevIndex.model.Contributorand associated Views to use camelCase and sync with the new backend schema.Changes:
Model (
Contributor.mjs):
- Renamed
total_contributions->totalContributions- Renamed
country_code->countryCode- Renamed
first_year->firstYear- Renamed
last_updated->lastUpdated- Renamed
linkedin_url->linkedinUrl- Renamed
commits_array->commitsArray- Renamed
total_commits->totalCommits- Added
heuristics(hm),isHireable(h),hasSponsors(s),topRepo(tr),privateContributions(py),t),website(w).Store (
Contributors.mjs):
- Updated sorters and filters to use new camelCase names.
Views (
GridContainer.mjs,ControlsContainer.mjs):
- Updated column
dataFieldreferences.- Updated filter
namereferences.- Updated
onSortColumninterception logic.Verification:
Countryfilter logic inControlsContainerupdated (name: 'countryCode').- Grid column renderers updated to access new field names.
This modernizes the frontend codebase and prepares it to display the new AI/Heuristics data.
tobiu assigned to @tobiu on Feb 13, 2026, 3:54 PM
tobiu closed this issue on Feb 13, 2026, 3:55 PM
Refactor the
DevIndex.model.Contributorclass to adhere to Neo.mjs coding conventions (camelCase) and synchronize with the latest backend schema changes.Objective: Eliminate snake_case fields (technical debt) and expose new data points (heuristics, metadata) to the frontend.
Changes:
Rename Fields:
total_contributions->totalContributionscountry_code->countryCodefirst_year->firstYearlast_updated->lastUpdatedlinkedin_url->linkedinUrltotal_commits->totalCommitsAdd New Fields:
heuristics(mapping:hm, type:Object, default:null)isHireable(mapping:h, type:Boolean, default:false)hasSponsors(mapping:s, type:Boolean, default:false)topRepo(mapping:tr, type:Array, default:null)privateContributions(mapping:py, type:Array, default:[])twitter(mapping:t, type:String, default:null)website(mapping:w, type:String, default:null)Update References:
apps/devindex/view/home/GridContainer.mjs(sorters, renderers)apps/devindex/view/home/ControlsContainer.mjs(filters)apps/devindex/store/Contributors.mjs(sorters)apps/devindex/services/LocationNormalizer.mjs(if referenced)Safety: Ensure all new fields handle
undefinedvalues gracefully to support the rolling update ofusers.jsonl.