phase 2 ✦ continuous portfolio quality
Your portfolio, under CI
Code gets tests; portfolios rot silently. This workflow checks your RepoLens score every week and fails loudly when it drops below your bar — so a threshold you set once keeps holding you to it. It reads the public score API, so there is nothing to install and nothing to pay.
Add the workflow to your profile repo
Create this file in any repo you own (your username/username profile repo is the natural home):
# .github/workflows/repolens.yml
name: RepoLens portfolio check
on:
schedule:
- cron: "0 9 * * 1" # every Monday 09:00 UTC
workflow_dispatch: {} # run it manually from the Actions tab
jobs:
score:
runs-on: ubuntu-latest
steps:
- name: Check portfolio score
env:
MIN_SCORE: 50 # fail below this
run: |
RESULT=$(curl -sf "https://repolens.rianfernando.com/api/score/${{ github.repository_owner }}")
SCORE=$(echo "$RESULT" | jq .score)
PCT=$(echo "$RESULT" | jq .percentileEstimate)
echo "RepoLens score: $SCORE/100 (~top $((100-PCT))% estimated)"
echo "$RESULT" | jq -r '.openGaps[] | "gap: \(.)"'
if [ "$SCORE" -lt "$MIN_SCORE" ]; then
echo "::error::Portfolio score $SCORE fell below threshold $MIN_SCORE — see https://repolens.rianfernando.com/u/${{ github.repository_owner }}"
exit 1
fi
Pick your threshold
MIN_SCORE: 50 is a sensible floor — it means solid READMEs on your top repos and at least a few coverage areas hit. Raise it as your score climbs; the roadmap on your report shows exactly which fix buys which points.
Put the badge where recruiters look
Add the live score badge to your profile README — it links back to your full report:
[](https://repolens.rianfernando.com/u/YOUR_USERNAME)
The API behind it
GET /api/score/<username> returns { score, percentileEstimate, parts, openGaps, analyzedAt } from your latest RepoLens analysis, cached at the edge for six hours. It deliberately never contacts GitHub itself — scheduled checks from many repos must not turn into automated crawling — so re-analyze your profile on RepoLens after you improve it, and the next check picks up the new score.