Overview of four specs (2026-10-03), all built 2026-10-04 on one branch by five parallel tracks (links, the site probe, social accounts, aliases, colors and marks). Each spec ends with an "As built" section: what changed from the plan, and the real coverage numbers.
Why
A profile today is all figures. It has no link to the college's website (the dataset has one, unused), no way to reach admissions or book a tour, no social accounts, and search does not know that "UGA" is the University of Georgia. The hero is tinted with a color hashed from the unit id and the crest is a generated monogram, so every college looks like the site rather than like itself.
Specs
| Spec | Adds | Source | Complexity |
|---|---|---|---|
| links.md | Website, admissions, apply, financial aid, veterans', and disability-services links, and the campus visit page found on the college's site | IPEDS HD (already downloaded) + the college's admissions page | Medium |
| social-accounts.md | Instagram, YouTube, TikTok, X, Facebook, LinkedIn; introduces npm run sync-wikidata and data/wikidata.json |
Wikidata (by IPEDS id) + the homepage footer | Medium |
| aliases.md | A table of short names and nicknames (UGA, Vandy, Georgia Tech, Ole Miss) that search and Explore match | IPEDS HD, Wikidata, the homepage domain, a curated file | Medium |
| brand.md | The college's own colors in the hero and crest, and its site icon in place of the monogram; the legal summary (marks approved by the owner 2026-10-03, with safeguards and a removal route) | Wikipedia's college color data (cited to brand guides) + the college's site icon | Large |
| Identity Follow-ups: A Monthly Refresh, Older Icon Formats, and the Visit-Page Picker Run | A monthly refresh workflow and older icon formats (built 2026-10-04); the visit-page picker's first run (deferred: the one paid step) | The scripts above; Haiku for the picker | Small |
Shared pieces
- The Wikidata link (
sync-wikidata, from social-accounts): one query keyed by IPEDS id gives accounts, other names, the Wikipedia article, and the Commons logo file for 1,719 of 1,893 colleges. Aliases and brand read it. - The homepage probe (from links): one polite fetch of each homepage and admissions page, through the college-reported crawler (robots.txt, one request a second per host), collects the visit link, the footer's social links, and the site icon in a single pass.
- Corrections go in the existing
data/overrides.json(links, accounts) or the newdata/aliases-curated.jsonanddata/brand-overrides.json, each value with its source, like every other override.
Keeping it fresh
Every identity value lives in a committed file under data/ and is applied to each school by one function,
applyIdentity (lib/identity.ts), in the same order wherever it runs. So a full npm run sync-data (which reads the
newest IPEDS directory for the links and short names) keeps everything else exactly as the files say, and each
refresh below changes only its own file:
| Command | Refreshes | Network |
|---|---|---|
npm run sync-data |
Links from the newest HD{Y}; the IPEDS short names; applies every identity file |
NCES, Scorecard |
npm run sync-wikidata |
data/wikidata.json: social accounts, other names, article links |
Wikidata (11 queries) |
npm run probe-sites |
data/site-probe.json, data/link-issues.json: visit pages, footer accounts, icon candidates, broken links |
Each college's site, ~14,000 polite requests, ~20 minutes |
npm run sync-brand |
data/brand-colors.json, data/brand-logos.json, public/brand/: colors and marks |
Wikipedia (35 requests), each college's icon |
npm run merge-identity |
Re-applies the files above to the committed data/schools.json and rebuilds data/aliases.json (no network) |
None |
The last three scripts call merge-identity themselves. A link becomes null only after two probe runs a day or more
apart both find it gone, so run probe-sites (then sync-brand) about monthly. Corrections go in
data/overrides.json (links, accounts), data/aliases-curated.json, and data/brand-overrides.json (logo: false
removes a college's mark on the next deploy). .github/workflows/identity-refresh.yml runs the three syncs monthly
and opens an auto-merging PR when anything changed (Identity Follow-ups: A Monthly Refresh, Older Icon Formats, and the Visit-Page Picker Run section 1).
What was measured (2026-10-03)
HD2025: homepage 1,893, admissions 1,800, application 1,757, financial aid 1,807, net price 1,877, veterans 1,454, disability services 1,893, alias 882 (of 1,893 colleges).- Wikidata: 1,719 colleges have an item; X 1,504, Facebook 1,296, Instagram 1,045, YouTube 580, TikTok 225, LinkedIn 193; any account 1,548; a Commons logo 1,032; other names 1,354 (677 with a short all-caps one); an English Wikipedia article 1,663. Official colors (P6364): 27, so colors come from Wikipedia instead.
- Wikipedia
Module:College color/data: 1,555 programs, 918 aliases, 1,519 with a citation to a brand or athletics guide. Of 14 random infoboxes, 7 gave hex colors, 5 names only, 2 none. - Homepages (18 reachable of 20): 16 declared an icon, 11 a touch icon (mostly 180–192 px); 1 a theme color.
- College Scorecard:
school.aliasis the HD column a year older;school.school_urlis set for all 1,893 and is already stored aslinks.website.