01 · Roasts
Ghost of GitHub Past
8 commits in an entire year, but somehow 147 public repos. That's one commit per 46 repos. The ratio is haunting.
91% Abandoned
staleRepoRatio of 0.91 means 9 in 10 of your repos are digital ghost towns. This isn't a portfolio, it's an archaeological dig site.
PHP Maximalist
75% PHP in 2024. No shame in legacy work, but paired with 0% meaningful TypeScript adoption across the profile, it tells a story — and it's set in the early 2010s.
Following 2143, Followed by 222
A following-to-follower ratio of nearly 10:1. You're a lurker wearing the mask of a networker. 0 issues filed this year seals the verdict.
Digital Architect, Minimal Construction
The bio says 'Digital Architect' but the evidence says 3 active repos, no licenses, and 8 commits in 12 months. Even architects need to lay some bricks.
Built using
Zoral
Shadows one worker for a week, then takes over their job with zero extra setup. Behaves exactly like the original.
zoral.ai
02 · Category breakdown
- Impact25% weight30F
- Consistency20% weight55D
- Quality20% weight57D
- Depth15% weight55D
- Breadth10% weight55D
- Community10% weight40D
03 · Stats
365-day commit heatmap
325 active days
Language distribution
- PHP75%
- JavaScript23%
- CSS1%
- Swift0%
- OCaml0%
- TypeScript0%
- Other1%
04 · Numbers
Owned repos
non-fork
23
Commits
last 12 months
8
Followers
222
Joined GitHub
Apr 2009
05 · Top repos
netspencer /
.dotfiles
Personal Nushell dotfiles with thoughtful architecture, clear modular design, and comprehensive tool integration. Well-documented config respecting Unix philosophy. Experimental/personal scope with ~130KB codebase and recent activity.
netspencer /
AdventOfCode
Personal Advent of Code 2022 solution set in Swift with reusable utility library, typed code, structured targets, tests and CI, but minimal public documentation and no license.
netspencer /
netspencer.com
Personal portfolio website built with Next.js and TypeScript. Minimal stars (2) and thin README, but demonstrates sustained work with 30 recent commits and proper typed project structure including Tailwind CSS configuration and analytics integration.
06 · Timeline
- Apr 26, 2009Joined GitHub
- Oct 19, 2017Created .dotfiles — my dotfiles
- Feb 13, 2020Created netspencer.com — My Personal Website
- Dec 1, 2022Created AdventOfCode
- Feb 3, 2026Most recent push to .dotfiles
07 · Compare
08 · Rubric
How this score was produced
Overall = Σ (category × weight) + gentle top-end curve
Tier thresholds
▸ How the pipeline works
- 01Scrape.Pull every non-fork repo pushed in the last 90 days, plus your contribution calendar, followers, and language byte counts — straight from GitHub's REST & GraphQL APIs.
- 02Triage.A small model reads every repo's file tree + README and picks the 20 files per repo that actually reveal how you code.
- 03Grade each repo. All repos run in parallel through a fast scoring model that reads the picked files and rates each one independently on Impact, Quality, and Depth — with evidence citations.
- 04Aggregate. A larger reasoning model combines the per-repo scores with server-computed stats (heatmap, commit cadence, language entropy, follower count) to produce the 6-dimension profile score + roasts.
- 05Correct.Deterministic server-side checks enforce anchor-scale floors (e.g. a profile with 2,000+ public commits can't score 30 Consistency) and recompute the final verdict.
~90 seconds per profile, ~$0.25 in compute. Total of ~240 files read across your top-12 repos. One rating per GitHub account per day.
▸ Data sources & caveats
- Heatmap & commit totals: GitHub GraphQL
contributionsCollection— covers the last 365 days, includes private repos when the user has opted in (default). - Language %: byte totals across the top 30 owned non-fork repos.
- Curve: a small upward nudge centered on raw score ≈ 70, capping at 100. Prevents specialists from being unfairly penalised for narrow breadth.
- Anchor corrections: when server-measured signals (e.g. privateWorkLikely, multiRepoVolume, follower count) mandate a minimum category score, the aggregation step enforces it. These are signal-conditional, not identity-based floors.