Rewrite / fix breadcrumb-handling logic.

The default page template reads the `breadcrumbs` data value from the
front-matter of each page. Previously the export script was generating
a string of HTML to insert directly, but this was buggy and was
effectively hard-coding HTML into the template, rather than letting the
template do the HTML generation.

This CL fixes things by (a) switching the value to be a list of
[href, text] pairs that the template can iterate over, and (b) fixing
the bugs in the string so that the URLs are correct.

In theory we should be able to generate the breadcrumbs during the
build process and not need them to be in the front matter at all, but
making that change will have to wait for now (see

Bug: 1260459
Change-Id: If5d3ae559914194075a38c614c6ce464e5e08c40
Reviewed-by: Struan Shrimpton <>
Commit-Queue: Dirk Pranke <>
1439 files changed
tree: d9f8c35f68c29069932661d72fff7101b9adf578
  1. docs/
  2. infra/
  3. scripts/
  4. site/
  5. third_party/
  6. .eleventy.js
  7. .firebaserc
  8. .gclient
  9. .gitignore
  10. .vpython3
  12. DEPS
  13. firebase.json
  14. node_modules.tar.gz.sha1
  15. npmw
  16. OWNERS
  17. package-lock.json
  18. package.json

Source code for

This Git repo contains the source content for

NOTE: 2021-10-19. This is not (yet) actually true. This is a work-in-progress repo that we plan to move to.

The website is implemented by serving static content (mostly Markdown files) that is translated / built ahead of time into HTML using the Eleventy static site generator (which is written in Node/JS) and deployed onto Firebase Cloud Hosting.

The Markdown is translated using a single extremely simple Nunjucks template and the site is served with a single basic Sass/SCSS stylesheet (using the Node/NPM library version of Sass).

Large objects (PDFs, big images, etc.) are stored in a Google Cloud Storage bucket, indexed by SHA-1 checksums that are committed into this repo.

See //docs/ if you wish to contribute to the site.