Succession
Running CamCribs
Someone has to keep the papers flowing. Every couple of years that someone hands the keys to a new someone.
Applications are closed
There is no open call for a new admin right now. Nothing to fill in, no form to submit. This page stays up so you know what the job is if it opens again.
What the job actually is
Kept from the last handover, updated for the current stack.
CamCribs is a static site with a large JSON file behind it. Most weeks the work is: a paper is missing, someone opens an issue, you add a line to the config, and the site rebuilds. Once a year the department publishes a new tripos and the scrapers do the heavy lifting.
The rest is whatever you feel like building. The admin before you rewrote the whole front end; the one before that wrote the scraper. It is the closest thing the department has to an unofficial public utility, which makes it a genuinely good thing to have your hands on.
Essential
The floor. Without these the day-to-day would be painful.
- Git, and specifically branching. Everything ships off a branch.
- JSON. The entire catalogue of papers is one config file, and editing it is the job most weeks.
- Enough Python to run and occasionally repair the scrapers that fetch each year's new papers.
- The willingness to paste an error message into an LLM and read what comes back. This is not a joke; it is most of the job.
Useful
Nice to have on day one, entirely learnable on the job — the last two admins learned most of it here.
- React with TypeScript. The site is React 19 on Vite, with vite-react-ssg prerendering every page.
- Tailwind CSS v4 and Untitled UI. The eleven themes are all one set of CSS variables.
- pnpm. Lockfile lives in the repo; node 22.
- Cloudflare Pages: static output plus a couple of Pages Functions. Pushing to a branch gets you a preview URL.
How it is put together
This repo
React 19 + Vite + Tailwind, prerendered to static HTML and served from Cloudflare Pages.
cribs-static
A separate repo of PDFs, plus the Python scrapers that fetch each year's new papers and regenerate the config.
comments & requests
Two more repos: GitHub Discussions as the comment backend, and GitHub Issues as the request inbox.
Not here to apply? If a paper is missing or a crib is wrong, that is an issue on the requests repo, and it is a much faster route to fixing it.
Open an issue