Project-level instructions for AI coding agents working on this repository —
Codex, GitHub Copilot (code review and coding agent), and other
AGENTS.md-aware tools read this file directly.
A single-page Quarto presentation rendered to RevealJS slides and deployed as a static site via GitHub Pages.
index.qmd # All slide content (the only file you usually need to edit)
_quarto.yml # Quarto project config (output dir, resources list)
style.css # Custom RevealJS theme (fonts, colours, component classes)
meta-tags.html # OpenGraph, Twitter Card, JSON-LD, and analytics tags
justfile # Command runner (install, render, preview, clean, etc.)
media/ # Images: evidence screenshots, illustrations, social card
llms.txt # Short machine-readable summary for LLM discovery
llms-full.txt # Extended machine-readable summary
.well-known/ # Mirrors of llms.txt and llms-full.txt
robots.txt # Crawl rules
sitemap.xml # Sitemap for search engines
.github/ # CI workflow (reusable, from IndrajeetPatil/workflows) and Dependabot
_extensions/ # Optional Quarto extensions (gitignored; currently unused)
_site/ # Build output (gitignored)
Python-based decks also have:
pyproject.toml # Project metadata and dependencies (managed by uv)
uv.lock # Locked Python dependencies
.python-version # Python version pin
.venv/ # Python virtualenv (gitignored)
R-based decks have instead:
renv.lock # Locked R dependencies
renv/ # renv library and infrastructure (library/ is gitignored)
.Rprofile # Bootstraps renv on session start
Check which set is present to know which language context applies.
- Single-file deck. All slides live in
index.qmd. There are no partial includes or multi-file splits. - Slide syntax. Slides are separated by
##headings. Use Quarto's RevealJS dialect: fenced divs (:::), columns (.columns/.column), raw HTML blocks ({=html}), and the{.smaller}class for dense slides. - Inline styling. Visual design uses inline
styleattributes on fenced divs with a small palette of background colours (e.g.#e3f2fd,#e8f5e9,#fff3e0,#ffebee,#FFFBC1,#f8f9fa). The CSS maps these to the custom theme. Do not change these colour values without updatingstyle.css. - Image classes. Images may use semantic classes (e.g.
.hero,.artifact,.illustration) that control border, shadow, and rounding instyle.css. Check the existing CSS before adding new image classes. - Sources. Every factual claim has a source citation at the bottom of its slide in a small-font centered div. Keep this pattern.
- Accessibility. Images must have
fig-alttext. Raw HTML widgets userole="img"andaria-label. Keep these. - Icons. Icons use lightweight HTML spans backed by only the required SVG path data in the custom stylesheet; no icon-font or Quarto icon extension is needed. When adding an icon, add only its mask data, preserve the source licence attribution, keep an accessible label where the icon conveys meaning, and render the deck to verify it.
- Mermaid performance boundary. Keep Mermaid diagrams as Mermaid source. Do not replace them with pre-rendered SVGs solely to reduce the website bundle.
- No code execution. The YAML front matter sets
execute: eval: false. Code blocks are for display only; they are not executed during render. - Compute engine. Python decks declare
jupyter: python3in the front matter; R decks declareengine: knitr. The virtualenv or renv exists to satisfy Quarto's engine, not to run slide code.
All commands use just. The recipes are the same across decks; only the dependency backend differs:
just install # Install language dependencies
just render # Render index.qmd to _site/
just preview # Live-reload dev server
just open # Alias for preview (live-reload dev server over localhost)
just clean # Remove build artifacts
just check # Verify Quarto setup
just update # Update language dependenciesPython decks prefix the render command with QUARTO_PYTHON=.venv/bin/python. R decks call quarto render directly (R is discovered automatically). See the justfile for exact commands.
When modifying index.qmd:
- Follow the existing card/column layout patterns visible in neighbouring slides.
- Preserve the source-citation div at the bottom of each slide.
- Use the established background-colour palette for info cards rather than inventing new colours.
- Keep
fig-alton every image andaria-labelon HTML widgets. - Run
just render(orjust preview) to verify changes compile without errors.
style.css defines CSS custom properties under :root and component classes for complex HTML widgets. The variable names and widget classes vary per deck. When adding a new widget, follow the naming and structure patterns already present in the file.
meta-tags.htmlcontains OpenGraph, Twitter Card, JSON-LD structured data, and Google Analytics. Update it when the title, description, or social card image changes.llms.txtandllms-full.txtare machine-readable summaries following the llms.txt convention. Update them when the deck content changes significantly.sitemap.xmlandrobots.txtare static and rarely need changes.
- The GitHub Actions workflow in
.github/workflows/renders the deck and deploys to GitHub Pages on push tomain. It calls a reusable workflow fromIndrajeetPatil/workflows(Python and R decks use different workflow files). Do not inline the workflow; update the ref SHA if the upstream workflow changes. - Dependabot keeps GitHub Actions dependencies up to date weekly. Python decks also have Dependabot configured for
uv; R decks do not use Dependabot for R packages.
- Do not add new top-level files without a clear reason; the project intentionally has a flat structure.
- Do not split
index.qmdinto multiple files. - Do not change the Quarto theme from
simpleor the output format fromrevealjs. - Do not enable code execution (
eval: true) unless the presentation genuinely needs computed output. - Do not commit
_site/,_extensions/, or.quarto/(all gitignored). For Python decks,.venv/is also gitignored; for R decks,renv/library/andrenv/staging/are gitignored. - Do not modify the reusable CI workflow inline; it lives in a separate repository.