Fixing the stale GitHub pinned-repo list
The homepage’s “On GitHub” section has a row of auto-generated repo cards, pulled from a stats service based on a hardcoded list in src/data/projects.ts. The comment above that list says “Mirrors the pinned repos on the GitHub profile.” It didn’t.
The array still had trello-extractor and programming-problems in it, two repos I unpinned a while back. And it was missing astro-affiliate and astro-opt-in-analytics, two libraries I pinned more recently. I checked the actual pinned set via GitHub’s GraphQL API to be sure, rather than trusting what the code claimed.
Worth noting: this site already has a separate, hand-written “Shared packages” section listing all three @vdaluz/* libraries with pitches and links. This fix is specifically about the auto-generated pinned-repo card images, which is a different rendering path that only knew about astro-blog among the three.
The fix was one line:
pinnedRepos: ['homelab-tools', 'astro-blog', 'astro-affiliate', 'astro-opt-in-analytics'],
I verified it in a real browser rather than trusting the build: started the dev server, navigated to the homepage, and checked both the accessibility tree and the actual network requests hitting the stats API. All four repo-card requests came back 200 with the right repo names in the right order, and the rendered cards matched.
The lesson here isn’t really about the code, it’s about the comment. “Mirrors the pinned repos” was true when it was written and then quietly went stale as my GitHub profile changed. A hardcoded list with no drift check will always eventually lie about what it claims to mirror.
Related reading
The filter pills existed, just not where anyone could find them
Per-project filtered views with a nice pill nav - reachable only from homepage cards. The main /blog index, where everyone actually lands, had no way in at all.
The CTA that pointed at the wrong dev log
The only call to action on the Deep Cut Atlas page linked to the whole unfiltered blog - a link that worked, returned 200, and quietly sent everyone to the wrong place for weeks.
The linter was pointing at the right line for the wrong reason
An attribute I nearly deleted on an assumption, an overflow that only exists at phone width, and an a11y suite that passed on every version of this - broken and fixed.