Cascadia R Conf 2026
Find the Slack channel #workshop-quarto-2026 in the main conference Slack
Check you’ve completed the steps on the Pre-work page.
Workshop website
Workshop website: https://cwickham.github.io/cascadia2026
Workshop website
Introduce yourself to your neighbors:
Check you are all set up
Goal: You create a website with Quarto
BREAK: 3:00 – 3:15pm
My turns: I’ll use slides, and live code to demonstrate ideas.
Your Turns: You practice what you’ve just seen.
Ask questions:
From a new empty project:
Start a new project.
RStudio > New Project
Positron > New Folder from Template > Empty Project
Get the template:
Create a subdirectory for template? No
Open and preview index.qmd. (Put up orange Post-it)
Match the content in index.qmd to the preview.
index.qmdRender/preview index.qmd. It becomes index.html, your homepage.
Regular Quarto document with:
Workflow: Edit, render/preview
Uses an about template: https://quarto.org/docs/websites/website-about.html
Other templates: jolla, trestles, solana, marquee, or broadside
Edit index.qmd:
title and subtitlejolla, trestles, solana, marquee, or broadsidelinks. Find other icons at https://icons.getbootstrap.com/image, and edit image-altSpare time? Edit the content of the page
imageimage-altPaths in a .qmd are relative to the location of the .qmd
A minimal website only needs two files:
New Quarto Document: projects.qmd
File path becomes URL path: { site url }/projects.html
_quarto.yml: configuration file
{ base url }: http://localhost:XXXX when previewing locally
Spare time: Add content to the page
leftsidebar with content and back againtoolsQuick reference: https://quarto-tdg.org/websites.html#other-navigation-elements
_brand.yml
Demo: Change primary
Positron command: Show or Focus Standalone Color Picker
Brand Guide: https://quarto.org/docs/authoring/brand.html
_brand.yml
Demo: Add these to _brand.yml
bunny: Bunny Fonts, zero-tracking and no-logging policy https://fonts.bunny.net
axeOnce you start playing with colors it’s easy to create contrast issues.
Check with axe-core by adding:
Remove before publishing!
Edit _brand.yml to customize colors and fonts
Enable the axe checks to check for contrast issues
Brand Guide: https://quarto.org/docs/authoring/brand.html#brand-elements
If your pages have code, you will probably want to tweak monospace options:
Add light and dark to colors to add a dark mode toggle to your site:
color: palette to more easily refer to themApply styles.scss to all pages:
See _examples/brand-scss.
_quarto.yml_quarto.yml
project: # Project options
type: website
website: # Website options
title: "My Website"
search: false
open-graph: true # https://quarto.org/docs/websites/website-tools.html#open-graph
page-footer: "Made with ❤️ and Quarto"
navbar:
right:
- text: Home
href: index.qmd
tools:
- icon: github
text: Github
href: https://github.com
format: # Page 'html' format options
html:
theme: [brand, styles.scss] Reference: Projects > Websites, and Formats > HTML
quarto publishOther venues: gh-pages, netlify, connect
Updates? Re-run quarto publish
Pick one of:
Publish your site to Posit Connect Cloud:
Challenge: find the setting to customize the URL.
Make your project a Git repo.
Commit, and push to GitHub
Publish to GitHub Pages:
| Provider | Private Source | Private Site | Custom Domain |
|---|---|---|---|
| Posit Connect Cloud | ✔️ | Paid plans | Paid plans |
| GitHub | Paid plans | GitHub Enterprise Cloud only | ✔️ |
| Netlify | ✔️ | Paid plans | ✔️ |
Or Posit Connect if your org has it.
Posit Connect Cloud:
Continuous integration: https://quarto-tdg.org/websites.html#sec-ci
Set title, description and site-url.
E.g. for this workshop’s website:
Add a 1200 × 630 px image and image-alt:
type, or custom template)See more examples at: https://charlotte.quarto.pub/listings/
Items link to path.
_examples/listing-talks/talks.yml
- date: 2025-03-12
title: "From Notebook to Production: Deploying ML Models with Confidence"
description: "A practical walkthrough of taking a model out of a Jupyter notebook and into a reproducible, monitored production pipeline—covering containers, CI/CD, and drift detection."
venue: "PyData Seattle"
path: "https://example.com/talks/notebook-to-production"
- date: 2024-11-08
title: "The Art of the Reproducible Report"
description: "Why your analysis should run end-to-end with a single command, and how literate programming tools like Quarto make stakeholder-ready reports painless."
venue: "posit::conf"
path: "https://example.com/talks/reproducible-report"
- date: 2024-06-04
title: "Causal Inference for the Skeptical Analyst"
description: "Correlation isn't causation, but we can do better than throwing up our hands. An accessible tour of difference-in-differences, propensity scores, and when to trust them."
venue: "useR! Conference"
path: "https://example.com/talks/causal-inference-skeptical-analyst"Items link to page.
projects/coastal-sensors.qmd
---
title: "Coastal Sensor Network"
description: "Real-time monitoring of water quality along the Oregon coast using a fleet of low-cost IoT sensors."
image: images/photo-1601698832159-665cbefd11da.jpg
categories: [IoT, Time Series, Dashboards]
---
## Overview
Placeholder content. This project deploys a network of sensors that stream
temperature, salinity, and turbidity readings into a central pipeline, surfaced
through a live dashboard for researchers and the public.
Photo by [Karsten Winegeart](https://unsplash.com/@_karsten) on [Unsplash](https://unsplash.com/photos/_m-Xjo9R_y4).Brainstorm a list of content you might want to include in your website.
What are the key pieces of information for each item? E.g. title, description, … etc.
Does it make sense to give items each their own page, or to use a YAML file?
See more examples at: https://charlotte.quarto.pub/listings/
A listing page is a regular page that uses the listing option.
Drag the content of one of _examples/listing-projects/ or _examples/listing-talks/ into your website.
Edit at least one item to match your listing idea.
Edit the listing page talks.qmd/projects.qmd to reflect your list.
Play with some of the listing options.
Listing documentation: Types and Options
Keep tweaking the content of pages
Delete pages you don’t want (and delete any related nav from _quarto.yml)
Double-check _quarto.yml
Publish any updates
A minimal website only needs two files:
_quarto.yml_brand.ymlShare your URL in Slack
Ask questions in Slack