Visitor-statistics methodology and Worker operations are documented in docs/VISITOR_STATISTICS.md.
VietProfs is a searchable, community-maintained directory of Vietnamese and Vietnamese-diaspora academics at universities and eligible public or nonprofit research institutes worldwide, covering tenure-line, teaching, research, and clinical faculty (see ROSTER_MAINTENANCE.md for exact eligibility). Read the paper (arXiv) describing the project — the site's copy is kept current; the arXiv listing is a versioned snapshot.
This site is maintained by users all around the world (e.g., submitting new or editing existing entries) and AI bots that continuously validate and update the directory database. The site itself documents its search, filters, and keyboard shortcuts (press ? there for help).
Repository documentation is intentionally limited to four files:
README.md: project overview, commands, and operating instructions.ROSTER_MAINTENANCE.md: authoritative eligibility, evidence, and roster-editing policy.paper/PAPER_NOTES.md: reproducible manuscript metrics, claim audit, and publication checklist.AGENTS.md: concise instructions for automated contributors.
npm install
npm run dev # start the Vite development server
npm run build # build the production site to dist/
npm run preview # preview the production build
npm run typecheck # check TypeScript modules
npm test # validate data and run unit/UI tests
npm run test:e2e # run browser smoke tests
npm run analyze # print snapshot counts for paper/PAPER_NOTES.md and the paper
npm run figures # rebuild and recapture the paper's screenshot figuresThe manuscript source lives under paper/. After a roster change it cites, run npm run analyze and npm run figures to refresh its snapshot values and screenshots, update
paper/PAPER_NOTES.md/paper/paper.tex accordingly, rebuild the PDF (cd paper && latexmk -pdf paper.tex), and copy the result to vietprofs.pdf at the repo root — that copy isn't built in CI,
so it must be committed manually.
The roster lives in public/data.json and is also published on Hugging Face Datasets. Each active record gets a static
public profile at people/vp-####.html, and its immutable vp-#### id is assigned by npm run assign-profile-ids -- --apply after an entry is added.
Verified roster-internal academic connections live in the normalized edge table
public/relationships.json. Profile pages render these records in a
Connections section; candidate or unresolved relationships never appear in this public file.
Thanks to hieuphay.com for an initial dataset of Vietnamese economists that seeded a batch of entries, and to the many contributors over LinkedIn and other channels who've suggested corrections and additions.
An unattended AI-based maintenance controller (scripts/maintain-roster.ts)
periodically re-verifies existing entries and pushes updates directly to main; see
ROSTER_MAINTENANCE.md for how it works and
how to run it manually.
Code and data are licensed under Creative Commons
Attribution-NonCommercial-NoDerivatives 4.0;
portraits and the manuscript are not covered. See LICENSE for full terms.