Landing-page hero screenshots for 2,866 Y Combinator companies across every batch from Winter 2022 to Fall 2026, plus a keyboard-driven gallery app to browse them.
Great for studying how YC startups pitch themselves above the fold — headline copy, layout trends, color palettes — across five years of batches.
cd viewer
npm install
npm run devOpen http://localhost:3000 and browse.
Keyboard shortcuts
On mobile, use the burger menu in the bottom bar to switch batches.
viewer/ Next.js + shadcn/ui gallery app
public/shots/ 2,866 hero screenshots (1440×900), one folder per batch
W22/ S22/ ... F26/ W=Winter, X=Spring, S=Summer, F=Fall
<yc-slug>.png filename = company slug on ycombinator.com
data/all.json Full YC directory dump (names, one-liners, websites, batches)
screenshot.mjs Playwright script that captured the screenshots
failed-sites.csv ~110 sites that couldn't be captured (dead domains, bot walls)
Each screenshot is the above-the-fold view of the company's site at 1440×900, captured August 2026. Files are named by YC slug, so viewer/public/shots/S23/letter-ai.png is Letter AI and its profile lives at ycombinator.com/companies/letter-ai.
The app deploys to Vercel as-is — set the project's Root Directory to viewer. Screenshots live inside viewer/public, so they ship as static assets with the build.
Company data comes from the yc-oss/api mirror of YC's directory, which updates daily:
curl -s -o data/all.json https://yc-oss.github.io/api/companies/all.json
node screenshot.mjs # resumable: only shoots missing companies
node viewer/scripts/build-manifest.mjs # refresh the gallery's indexscreenshot.mjs skips anything already captured, so re-running after a new batch drops only fetches the new companies. Failures are appended to failures.csv.
