The student-run publication of ACM @ UIUC, published at banks.acm.illinois.edu.
The site has two parts:
- Current issue — the latest issue, published as web-native Markdown articles (a Medium-style reading experience). It is the homepage.
- Archive — every back issue in its original typeset form (PDF / scan / PostScript / source), browsable by volume.
archive/ # the ARCHIVE — typeset back issues (top-level)
<volume>/<YYYY-MM-DD>-<slug>/ # folder names are shell/URL-safe, no spaces
issue.md # frontmatter only (volume, issue, date, label?, note?, print)
<files>.pdf/.ps/… # the print artifacts referenced by issue.md
website/ # the Astro site
content/current/ # the CURRENT issue — web articles
<article>.md # frontmatter: title, authors, … (see below)
images/ # images referenced by the articles
src/ # site code (pages, components, collections)
public/ # static assets (+ generated public/files/, see below)
logo/ # source logo files
The archive lives in the top-level archive/ folder — its files are static
(served via the collector below), so it can sit anywhere. The current issue
lives in website/content/current/; it has to be inside the project so Astro's
dev server can render the article images. The site reads both through Astro
content collections (archive, current), and
website/scripts/collect-archive-assets.mjs publishes only the print files named
in each issue.md (run automatically before dev/build).
cd website
npm install
npm run dev # also runs the archive-asset collector first
npm run buildDrop a Markdown file in website/content/current/. Minimal frontmatter:
---
title: "Banks of the Boneyard Rises from the Dead!"
authors:
- "Yanni Zhuang"
---Optional fields: subtitle, byline (overrides authors), date,
order (lower sorts first), slug (defaults to the filename), and image
({ src, alt, attribution }) used as the article header and feed thumbnail.
Put article images in website/content/current/images/ and reference them with
relative paths, e.g. .
Update the masthead in website/src/config.ts (currentIssue: { volume, number, date }) when the issue changes.
Create a folder named archive/<volume>/<YYYY-MM-DD>-<slug>/ (no spaces or
parentheses) with an issue.md:
---
volume: 16
issue: 3 # number, or a name for un-numbered specials ("EOH")
date: "1997-11-01"
label: "Quad Day" # optional special-edition label
note: "Only page 7 survives" # optional editorial caveat
slug: 3-quad-day # optional; defaults to the issue. Set when a label
# should appear in the URL, or to disambiguate.
print:
pdf: Vol16Issue3-Nov.pdf # final/built PDF
pdf_scan: scan.pdf # scanned PDF, if different
source: Vol16Issue3-Nov.ps # LaTeX/Typst/PostScript; zip if multiple files
website: https://… # external host (e.g. Internet Archive)
---Put the referenced files alongside issue.md. The collector copies them to
/files/<volume>/<slug>/…; anything not named in print: stays private. The
issue's URL is /archive/<volume>/<slug> — slugs only need to be unique within
a volume. credits (a list of { title, names }) is also supported.
When a new issue is ready:
- Archive the outgoing issue. Add it under
archive/…with its final typeset PDF (and source, if available), as above. - Swap in the new articles. Replace the files in
website/content/current/(andwebsite/content/current/images/) with the new issue's articles. - Update the masthead. Bump
currentIssueinwebsite/src/config.ts.
Old /issues/* links redirect to /archive/* (see website/public/_redirects).