Quarto website for the Stanford seminar series AI + Data for Science (EE 292R / PSYCH 292R / STATS 282), Wednesdays 4:30–5:30 pm in CoDA E160.
quarto preview # live-reloading local server
quarto render # builds the site into _site/Pushing to main builds and deploys the site via GitHub Actions
(.github/workflows/publish.yml). Nothing is committed to a gh-pages
branch — the built site is uploaded straight to Pages.
One-time setup: in the repository's Settings → Pages, set Source to GitHub Actions. Until that is done the deploy step fails.
Because this repository is private inside an enterprise organization,
Pages defaults to private visibility — it is then served from a
randomized *.pages.github.io hostname and requires a GitHub login with
organization membership. Set the Pages visibility to Public in the
same settings page, or external speakers cannot reach the schedule.
The workflow also runs on a schedule, Thursdays at 08:00 UTC. That is deliberate: the home page's "Up next" card is resolved against the build date, so without a periodic rebuild the site would keep advertising a seminar that already happened. The weekly run rolls the card over the morning after each Wednesday seminar. You can also trigger a rebuild by hand from the Actions tab.
Until a stanford.edu host is wired up, the live address is
https://stanford-developers.github.io/aida4sci/, and website.site-url in
_quarto.yml matches it.
Ask NetDB for a DNS CNAME record, not a redirect. The record wanted is
aida4sci.stanford.edu. IN CNAME stanford-developers.github.io.
A first attempt produced a host pointed at Stanford's link service
(stanford.dns.bl.ink), which answered with a 307 to the github.io URL.
That is a forwarder, not a custom domain: the address bar still showed the
github.io URL, GitHub could not issue a certificate for the name, and
adding a CNAME file under it would have failed domain verification and
unpublished the site. If NetDB will not put a CNAME at that name, the
fallback is A records to GitHub's Pages addresses — 185.199.108.153,
185.199.109.153, 185.199.110.153, 185.199.111.153 — but the CNAME
is preferred, since it survives GitHub renumbering those.
Once dig +short aida4sci.stanford.edu answers with stanford-developers.github.io:
- Add a file named
CNAMEat the repository root containing just the hostname, and list it underproject.resourcesin_quarto.ymlso it is copied into_site/on every render. - Set the domain under Settings → Pages (or
gh api -X PUT repos/stanford-developers/aida4sci/pages -f cname=aida4sci.stanford.edu). - Wait for GitHub to provision the certificate, then tick Enforce HTTPS.
- Set
website.site-urlin_quarto.ymltohttps://aida4sci.stanford.edu/— it feeds the sitemap and the link previews shown by search engines and chat apps. GitHub will then redirect the oldgithub.ioURL to the new one.
The home page shows the next seminar automatically — there is nothing to
update by hand. ejs/upnext.ejs reads the same quarter YAML file as the
schedule and picks the next confirmed speaker whose date has not passed.
If the nearest dates are still unbooked it falls back to the next
scheduled date and says the speaker is not announced yet; once the whole
quarter is past, the block disappears rather than showing something stale.
- Open the current quarter's data file, e.g.
speakers/fall-2026.yml. - Replace the
tba: trueentry for the chosen date with a filled-in block — copy the example inspeakers/_template.yml. Fields you omit (url, photo, bio, …) are simply not shown. - Drop a square-ish photo into
images/speakers/(e.g.images/speakers/jane-doe.jpg) and reference it in thephotofield. If there is no photo, omit the field and a neutral placeholder is used. quarto render.
- Create
speakers/<quarter>.yml(e.g.speakers/2027-winter.yml) with one entry per seminar Wednesday. - Point the listing in
schedule.qmdat the new file and update its title. - Archive the finished quarter: create
past/<quarter>.qmdwith the same listing front matter pointing at the old YAML file, and link it frompast.qmd.
_quarto.yml— site config (navbar, footer, theme)styles.scss— Stanford-cardinal styling, talk-card layoutspeakers/*.yml— one file per quarter; the single source of truth for the scheduleejs/speaker.ejs— template that renders each talk cardimages/— logo, page mastheads, speaker photos; seeimages/README.mdfor the art direction and how to regenerate themtools/— the generators that produce the artwork and bundle the fonts. The mastheads and logo are generated, not hand-drawn: change the parameters and re-run rather than editing SVG by handfonts/+fonts.css— bundled webfonts, so the site needs no CDNjs/convergence.js— the home page's live hero animation