Skip to content

feat: build the contributors list on /about from GitHub - #488

Merged
xHeaven merged 2 commits into
dev-null-sh:productionfrom
camilleislasse:feat/about-contributors
Oct 23, 2026
Merged

xHeaven merged 2 commits into
dev-null-sh:productionfrom
camilleislasse:feat/about-contributors

Conversation

@camilleislasse

@camilleislasse camilleislasse commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The About page's hand-maintained contributor list became stale and omitted new contributors. It now reads the configured repository's GitHub contributor list, cached for an hour, while keeping the existing grid. Closes #469.

Changes

  • Paginate up to 1,000 upstream accounts, preserving GitHub's contribution order and excluding bots and the two known agent accounts.
  • Send only the login and commit count to the page. Cache unavailable results for a minute and show an outage message.
  • Remove the static list, preserve production's newer timeline and privacy documentation, and inline the query helpers to follow repository conventions.
  • Cover pagination, filtering, cache expiry, partial-page failure, outage recovery, and guest/signed-in controller responses.

Validation

  • composer test:lint: passed; existing warnings in unchanged files remain.
  • composer test:type-coverage: passed, 100%.
  • bun run test:unit: passed, 150 tests.
  • composer test:types: passed, PHPStan and TypeScript.
  • bun run build: passed.
  • XDEBUG_MODE=coverage php -d memory_limit=-1 vendor/bin/pest --parallel --ci --coverage --exactly=100.0 --passthru-php="'-d' 'memory_limit=-1'": passed, 4,104 tests / 23,036 assertions / exactly 100% coverage.
  • Focused contributor/controller tests: passed, 18 tests / 66 assertions.
  • Live public GitHub read returned 65 contributor accounts. Hosted CI must pass on the final pushed revision before merge.

Visual evidence

Local Chromium captures compare production 8d0c6b29125ed2aa8175895b9ea19feaab07b0c6 with the reviewed head using the same 61-account production fixture. Separate live-data captures show the dynamically fetched list. The matrix covers 1440×900, 1366×650 and 390×844 in light and dark themes. Empty, outage, and long-login/count fixtures are simulated. The historical fixture contains an unavailable avatar in both revisions; synthetic edge accounts also have unavailable avatars. Live-data captures have no console or application errors.

Viewport / theme Before After, same data After, live GitHub data
1440×900, light Before After Live data
1440×900, dark Before After Live data
1366×650, light Before After Live data
1366×650, dark Before After Live data
390×844 emulation, light Before After Live data
390×844 emulation, dark Before After Live data
Simulated state Desktop light Desktop dark Mobile light Mobile dark
GitHub unavailable GitHub unavailable GitHub unavailable GitHub unavailable GitHub unavailable
Empty response Empty response Empty response Empty response Empty response
Long login, zero, singular and large counts Long login, zero, singular and large counts Long login, zero, singular and large counts Long login, zero, singular and large counts Long login, zero, singular and large counts

Client navigation and keyboard focus, recorded at 1280×800:

Before After
Before navigation After navigation

Before MP4 · After MP4

First-load layout shift and horizontal overflow were zero across all static states. Navigation measurements distinguish the recording helper's cursor overlay from application layout changes; see the independent review below.

Device verification

iPhone 18 Pro / iOS 27 / Safari, using an iOS Simulator. Fresh loading and touch scrolling past the first screen passed; the bottom navigation and Safari controls stayed usable. No inputs or keyboard interactions are changed by this PR. Desktop client navigation and keyboard focus are recorded above. Physical-device and native signed-in client navigation were not tested.

Native Safari loaded
Native Safari scrolled
Native Safari scrolling

Native Safari MP4

Independent review

Independent Sol 6.1 reviewer (high reasoning, priority service): CODE: PASS; VISUAL: PASS, with no actionable findings. The reviewer checked all eight changed files, verified all 62 artifact hashes, inspected all six screenshot matrices, extracted frames across all three recordings at 2 fps, and independently exercised the live page and keyboard focus. Recordings were sampled rather than continuously played. The prior helper-rule finding is resolved. Evidence manifest SHA-256: ac06fc61705b880157e08c6467f6ab799ab82939800e3f70e9fdf5ae8edc10ce. Overlay-free navigation CLS was zero in all six combinations on both revisions; the recording overlay produced the same 0.002126 reading before and after.

Reviewed base: 8d0c6b29125ed2aa8175895b9ea19feaab07b0c6.
Reviewed head: a40bc6c9b6403cd6969475a07a15be9ec351a32b.

Limitations

GitHub can delay contributor counts by several hours. The hourly cache adds up to another hour of delay. Retrieval is capped at 1,000 upstream accounts before filtering. The page does not add a refresh button or polling. Native device coverage uses a simulator; no physical device was tested.

@ahosker

ahosker commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

Counterargument: everyone will jump me in the order; let's leave it.

@camilleislasse
camilleislasse force-pushed the feat/about-contributors branch from 7f4ea31 to df0f65a Compare October 20, 2026 19:16
@xHeaven
xHeaven merged commit 261f375 into dev-null-sh:production Oct 23, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The contributors page in /about is hardcoded 🙈

3 participants