Features
Profile Score Dashboard
The main output of Devfolio Analyzer is a structured score dashboard rendered after analysis completes.
What's included
- Overall composite score with a visual progress ring
- Five sub-score cards (one per dimension), each with:
- Numeric score (0–100)
- Badge label (Excellent / Good / Fair / Weak / Poor)
- 2–4 specific feedback points generated by the LLM
- Top repos list showing the 6 repos used in evaluation with basic metadata
- Language breakdown as a bar chart (top 5 languages by byte count)
- Contribution heatmap — 52-week calendar view, client-side rendered
Contribution Consistency Analysis
This is the most technically nuanced dimension. Raw commit counts mean nothing without context.
What the analysis measures:
- Active weeks — weeks in the last 52 with at least one contribution
- Longest streak — consecutive days with at least one contribution
- Recency decay — contributions weighted more heavily if they're in the last 90 days
- Gap detection — flags gaps of 30+ days as a signal of inconsistency
Bots, organization events, and forked repo contributions are excluded from the calculation where detectable.
Project Quality Evaluation
For each of the top 6 repos (ranked by a combination of stars, forks, and last-push recency), the analyzer checks:
Note: The file tree check is limited to the top-level directory to avoid excessive API calls. Deeper test structures may not be detected.
Tech Stack Analysis
The tech stack dimension evaluates what you know and whether it's current.
Language scoring
Language percentages are pulled from GitHub's per-repo language breakdown (byte-count weighted). The analyzer:
- Aggregates across all public non-forked repos
- Normalizes to percentages
- Maps languages to a recency tier (e.g., Python/TypeScript/Go = current; PHP 5.x patterns = dated)
High specialization (>80% one language) scores lower than healthy breadth — unless the primary language is a modern, in-demand one.
Framework detection
Frameworks are inferred from:
package.jsondependencies (fetched for top repos)- Repository topics set by the user
- Language co-occurrence patterns (e.g., TypeScript + HTML + CSS often signals React/Next.js)
This detection is heuristic, not authoritative. If a framework doesn't appear in detectable signals, it won't be counted.
Portfolio Presentation Check
GitHub profiles have a presentation layer that many developers neglect. This dimension scores it.
Evaluated signals:
- Profile README — does
username/usernamerepo exist and have meaningful content? - Pinned repos — are 6 repos pinned? Are they the developer's best work or arbitrary?
- Bio — is it filled in? Does it contain role, location, or contact information?
- Avatar — is it a real photo or default identicon? (heuristic: identicons score 0 for this signal)
- Social links — Twitter/X, LinkedIn, or personal site linked in profile
- Repo descriptions — what percentage of public repos have non-empty descriptions?
Shareable Report Link
After analysis completes, a unique slug is generated for the result. The report is persisted in the database and accessible at:
Reports expire after 30 days by default. Users can re-analyze at any time to refresh their score.
Rate Limiting
The API enforces rate limits to prevent abuse and manage GitHub API quota:
- Anonymous requests: 5 analyses per IP per hour
- Authenticated requests (API key): 60 analyses per hour
- Same username: Results are cached for 6 hours — repeated requests for the same username within that window return the cached result
Rate limit headers are returned on every API response:
X-RateLimit-Limit: 5
X-RateLimit-Remaining: 3
X-RateLimit-Reset: 1717200000