- Astro 37.4%
- CSS 29.7%
- TeX 24.2%
- JavaScript 6.2%
- TypeScript 2.5%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| astro-site | ||
| branding | ||
| .gitignore | ||
| README.md | ||
bonhamlab-web
Source for bonhamlab.bio — the Bonham Lab website at Tufts Medical Center.
Built with Astro. Deployed to Hetzner via Forgejo Actions.
Repo layout
branding/
design-tokens.json # Single source of truth for colors, type, spacing
tokens-to-css.js # Generates astro-site/src/styles/tokens.css at build time
logo/lab-logo.svg # SVG logo (currentColor, theme-aware)
astro-site/
src/
content/
people/*.md # Lab member profiles
projects/*.md # Research project pages
publications/
references.bib # Zotero export — source for the publications page
pages/ # Astro routes (people, projects, publications, services)
components/ # Shared Astro components
layouts/Base.astro # Root layout (fonts, theme toggle, nav)
styles/global.css # Global styles (fonts, reset, utilities)
plugins/ # Custom remark/rehype plugins
utils/bibliography.ts
public/
fonts/ # Self-hosted IBM Plex woff2 subsets
people/ # Headshot images
Development
cd astro-site
npm install
npm run dev # generates tokens.css, then starts dev server at localhost:4321
npm run build # production build → astro-site/dist/
npm run preview # serve the built site locally
Adding content
Content is edited as Markdown with YAML frontmatter. No HTML required.
People
Add astro-site/src/content/people/<slug>.md:
---
name: "Jane Smith"
title: "Postdoctoral Fellow"
vitae: "One-line bio"
email: "jane.smith@tufts.edu"
github: "janesmith" # optional
portrait: "smith_headshot.jpg" # filename in public/people/
joined: 2024-09-01
alumn: false
---
Optional longer bio in Markdown.
Projects
Add astro-site/src/content/projects/<slug>.md:
---
name: "Project title"
description: "One-paragraph summary shown on the index card."
date: 2024-01-01
complete: false
tags: ["16S", "cohort"]
---
Full project description in Markdown. Cite papers inline with @citekey.
Any @citekey in the body is automatically resolved against references.bib
and a References section is appended at the bottom of the page. Keys must
match the BibTeX citation key in the bib file.
You can also list references explicitly in frontmatter (e.g. for a key paper list without inline text citations):
references:
- smith2024naturemicrobiology
Publications
The publications page is generated automatically from references.bib. Update
the file by re-exporting from Zotero (select all → Export Library → BibTeX,
include DOIs). No other changes needed.
Branding
Colors, typography, and spacing are defined in branding/design-tokens.json.
Edit that file and run npm run build (or npm run dev) to regenerate
tokens.css. Do not edit tokens.css directly — it is not tracked in git.