Thanks for helping maintain the MPS Lab website. This guide covers how to set up your environment and the workflow for making changes. For the actual content edits (people, publications, news, etc.), each content type has its own step-by-step guide — see Content Updates.
For background and deeper references, see the documentation hub.
Be respectful and constructive. This is a shared lab resource maintained by students, staff, and faculty. Keep changes focused, document non-obvious decisions, and prefer small, reviewable pull requests.
- Node.js v20 or newer
- npm
- Git
- (Optional) Docker / Docker Compose
git clone https://github.com/MPSLab-ASU/MPSLab-ASU.github.io.git
cd MPSLab-ASU.github.io
npm install
npm run devOpen http://localhost:4321.
Full setup details: docs/getting-started.md.
- Create a branch from the default branch (
master). - Make your change (content or code).
- Run the build locally to validate (
npm run build). - Open a pull request describing what changed and why.
- Address review feedback and merge once approved.
Most contributions are content updates (adding people, papers, news). These do not require touching application code — see Content Updates.
- Branch names: short and descriptive, e.g.
add-student-jane-doe,fix-publication-filter,update-news-2026. - Commits: present-tense, imperative summary, e.g.
Add Jane Doe to current PhD students. - Keep unrelated changes in separate PRs.
Always run a full build before opening a PR:
npm run buildThis runs astro check (type + schema validation), the static build, and the
Pagefind search index. If content frontmatter is invalid, the build fails with a
schema error pointing at the offending file.
For search-related changes, also preview the built site:
npm run previewEach content type has a dedicated, self-contained guide under docs/content/. Open the one guide for what you're changing — it covers how to add, update, and remove that content, plus its field reference.
| To change… | Open |
|---|---|
| People (students, PI, alumni, visitors) | docs/content/members.md |
| Publications / papers | docs/content/publications.md |
| News, awards, grants | docs/content/news.md |
| Research areas & reading lists | docs/content/research.md |
| Photo gallery | docs/content/gallery.md |
| Software / tools | docs/content/software.md |
| Sponsors | docs/content/sponsors.md |
| FAQ | docs/content/faq.md |
| Teaching / courses | docs/content/teaching.md |
All content lives in
src/content/(Markdown) andsrc/data/(BibTeX/JSON), validated bysrc/content/config.ts. Prepare image/PDF assets first, then runnpm run buildto validate.
- Content: follow the exact field names and enum values documented in each
content guide (and
src/content/config.ts). The build rejects invalid frontmatter. - Code: React islands (
src/components/react/) are for interactive UI only; keep static content in Astro components/pages. - Theming: changes to colors/contrast must be tested in both light and dark
modes (
src/styles/_theme-light.scss,src/styles/_theme-dark.scss). - Accessibility: keep keyboard focus and
aria-labels on icon-only controls.
See docs/architecture.md for the full UI and theming overview.
- Documentation hub: docs/README.md
- Content guides: docs/content/
- Troubleshooting: docs/deployment.md#troubleshooting