CBA Symposium:
An Introducing Quarto as a Tool to Enhance Office Productivity and Transparency

Center for Customer Insights and Digital Marketing

Cal Poly Pomona

4/25/2025

Greetings and Introductions

  • Jae Jung, Ph.D., Professor of Marketing, Director of CCIDM
  • Jarrod Griffin, Master’s Student - Digital Marketing, Graduate Fellow, CCIDM

Announcement

Overall Agenda

  1. Greetings and Introduction to Presenters (Moderator)
  2. Announcement (Moderator)
  3. Expected Learning Outcomes & Agenda (Moderator)
  4. Overview of Quarto and reproducible publications (15 min)
    • Introduction to Quarto
    • Quarto Formats
    • Samples of Quarto documents
    • Steps in Preparing for a project
  5. Publishing a professional portfolio website with Quarto (40 min)
    • Why Quarto?
    • Hands-On Build with Template
    • Anatomy of a Quarto website
    • Publishing the created website

Expected Learning outcomes:

After taking this workshop, participants should be able to:

  1. Describe how to do literate programming with Quarto
  2. Learn how to set up and use Quarto within the RStudio IDE.
  3. List the various output formats of Quarto.
  4. Describe how to render basic Quarto documents to the various popular document formats.
  5. Create a document with basic markdown functions.
  6. Explain the various platforms that host websites and reproducible documents.
  7. Explain how Quarto can be used for work and school.

Overview of Quarto and reproducible publications with Dr. Jung

Introduction to Quarto

  • Support multiple coding languages:
    • R, Python, Julia, ObservableJS
  • Supported by multiple IDEs
    • RStdudio, VS Code, Jupyter, Neovim
  • Publish to multiple hosting services
    • QaurtoPub, GitHub Pages, Posit Connect, Netlify, Hugging Face, etc.
  • Great for reproducible research/publications/documents.

Quarto Formats

  • HTML
  • pdf
  • MS Word
  • Revealjs Presentation
  • PowerPoint
  • dashboard
  • Website
  • Blogs
  • Books

Quarto document Samples

Steps in Preparing for a project

1. Start a new project

  • Projects are the containers for all of your notebooks.
1.  From File, click `new project`
2.  Select a new or existing directory depending on your needs
3.  Select your folder that will contain your project.
4.  Press create project
  • You should see your .Rproj file and others in the Files panel

2. Start a codebook/notebook and save it

  • R Scripts file

  • Rmd file

  • Quarto file

3. Start literate coding with Quarto

Three Areas in Quarto File

1. Yaml header

An YAML header demarcated by three dashes (---) on either end.

---
title: "Module 1 Introduction to R, RStudio, and Qurto"
author: "Jae Jung"
date: '2025-05-12 09:55:43'
format: 
  html: 
    toc: true
    toc-depth: 4
    embed-resources: true
editor: visual
execute: 
  freeze: auto
---

2. Code chunk

```{r}
#| label: demo-code-chunk
#| include: true

#install.packages("tidyverse")
#install.packages("palmerpenguins")
library(tidyverse)
library(palmerpenguins)
```

3. Markdown text area

  • Text area is all the canvas area within qmd file other than Yaml header and code chun areas.

  • Quarto uses markdown syntax for text.

  • You can use text area for typing prose as you would normally do in MS Word or Google Doc.

    • Text with formatting: section headers, hyperlinks, an embedded image, and an inline code chunk.
  • You can also style it: e.g., Bold; Italicize

Coding Tips

Be Careful: do not code in the text area.

  • It is possible to type the code and run in the text area.
  • However, it won’t be read and rendered into a document.
  • During the rendering, RStudio will be in an auto-pilot mode and will treat everything in the text area as a text except for in-line code.

Qurto Interface

Visual editor

  • Easier to those who are familiar with MS Word or Google Doc.
  • To add something; press ctrl/commnad + /
  • Adding table by hand is cumbersome.
  • Adding an figure/image

Source editor

  • Easier to those who are familiar with R Script file or Rmd file.
  • Useful for debugging any Quarto syntax errors since it’s often easier to catch these in plain text.
  • Handy reference sheet available at the RStudio menu:
    • Help > Markdown Quick Reference

Literate Programming in Quarto

Hands-on visualization activity if time permitted

library(tidyverse)
library(gt)
mpg |> 
    count(drv) |> 
    mutate(percent = n/sum(n)) |> 
    gt() |> 
    fmt_percent(columns = percent,
                decimals = 2) |> 
    tab_header(title = md("**Number of Cars by Drive Train Type**")) |> 
    tab_source_note(source_note = md("**Note**: The data is from `ggplot2` package"))
Number of Cars by Drive Train Type
drv n percent
4 103 44.02%
f 106 45.30%
r 25 10.68%
Note: The data is from ggplot2 package

Publishing a professional portfolio website with Quarto with Jarrod Griffin

Expected Outcomes:

  • Walk away with a starter professional website including résumé
  • Publish your professional portfolio website
  • Customize themeing via SCSS
  • Understand options on linking a custom domain to a freely hosted website

Who here currently has a professional website?

Why Quarto for a professional portfolio website?

  • Write once → ship anywhere (HTML, slides, dashboards)
  • Native R / Python for fully reproducible analytics
  • Examples: Refer to Dr. Jung’s section
  • Zero-cost hosting: GitHub Pages · Quarto Pub · Netlify

Live Example - Quick Tour

Hands-On Live Build

Follow along to create your own professional website! Instructions on next slide. Requirements:

- RStudio installed

- Internet connection

Clone the Template

Option A – RStudio GUI
1. File › New Project › Version Control › Git
2. Paste repo URL https://github.com/CCIDM/portfolio-website-templateCreate



Option B – Console (no Git required)

install.packages("usethis")

destination_directory <- "~/PortfolioProject"  # change if you like
if (!dir.exists(destination_directory)) dir.create(destination_directory, recursive = TRUE)

usethis::create_from_github(
  "CCIDM/portfolio-website-template",
  destdir = destination_directory,      
  open   = TRUE 
)



Option C – Download .zip from GitHub link and open .Rproj

Needed Admin Actions



Sever Git connection to original repo

Sever the remote connection

git remote remove origin

Run this command to disconnect your local repository from the remote named origin.



Install tinytext for PDF resume

install.packages(c("tinytex"))

tinytex::install_tinytex() 

Site Structure

A well-organized portfolio website might include the following pages:

  • Home Page:
    An introduction and personal statement.

  • Marketing Analytics:
    A blog-like page showcasing your work in data-driven marketing, including case studies, data visualizations, and performance metrics.

  • Strategic Marketing:
    A dedicated section highlighting your expertise in marketing strategy, brand development, and market positioning.

  • Resume:
    A page featuring your CV, built using Markdown and the Vitae package.

Anatomy of the Quarto Portfolio

File / Folder Purpose
_quarto.yml Global settings, nav & theme (points output-dir: docs)
theme.scss Brand fonts/colours – imported by _quarto.yml
index.qmd Home page – intro & value statement
marketing-analytics.qmd Data-driven case studies
strategic-marketing.qmd Strategy & positioning projects
resume.qmd CV in markdown and one-page PDF resume
listings/ Five deep-dive project pages (01-…, 02-…, …)
data/ Raw datasets, HTML exports (e.g., SEO report)
images/ Headshots, hero banners, thumbnails
resume/ knitted PDF & vitae Rmd source
docs/ Auto-generated site output ≤ don’t edit by hand
.Rproj RStudio project file for quick open

File Structure

portfolio-website/
├── _quarto.yml
├── theme.scss
├── index.qmd
├── marketing-analytics.qmd
├── strategic-marketing.qmd
├── listings/
│   ├── 01-campaign-insights-dashboard.qmd
│   ├── 02-seo-benchmarking-analysis.qmd
│   └── …                             # 3 more deep dives
├── data/
│   └── TRI SEO Comparison.html
├── images/
│   ├── headshot.jpg
│   └── hero.jpeg
├── resume.qmd
├── resume/
│   ├── YOUR-NAME-Resume.Rmd
│   └── YOUR-NAME-Resume.pdf
└── personal_website.Rproj

Six Key Files – 30-Second Tour

  • quarto.yml – brain
  • theme.scss – brand skin
  • index.qmd – intro handshake
  • marketing-analytics.qmd – auto gallery
  • strategic-marketing.qmd – long-form thought pieces
  • resume.qmd – recruiter-ready résumé

_quarto.yml – Site Brain

project:      type: website     # activates site engine
output-dir:   docs              # GitHub Pages target
website:
  title: "YOUR NAME"
  navbar:
    left:
      - index.qmd
      - marketing-analytics.qmd
      - strategic-marketing.qmd
      - resume.qmd
format:
  html:
    theme: [flatly, theme.scss] # Bootswatch + your SCSS
    toc: true                   # on-page table of contents
  • One file controls nav, theme & metadata—render once, everything updates.*

theme.scss – Brand Dial

$color-primary:   #123456;
$color-secondary: #ABCDEF;
$accent-1:        #FF7F00;

body  { font-family: Arial, sans-serif; color: #121212; }
h1    { color: $color-primary; }
h2    { color: darken($color-secondary,10%); }
a     { color: $accent-1; &:hover { text-decoration: underline; } }

Swap two colours → whole site re-skins.

index.qmd – Handshake Page

---
title: "Hi, I'm Jarrod Griffin"   # ①
---

::: {.columns}                    # ② responsive two-column layout
::: {.column width="30%"}
![](images/headshot.jpg){width=100% style="border-radius:50%;"}
:::
::: {.column width="70%" style="padding-left:3rem;"}
I'm a **marketing-analytics specialist** who turns complex data
into clear, actionable insight.
:::
:::

## About Me                     # ③ narrative section
I hold a <span class="highlight">M.S. Digital Marketing</span>
from Cal Poly Pomona.

## Let's Connect                # ④ simple CTAs
You can [email me](mailto:jarrod@example.com)  
or connect on
[LinkedIn](https://www.linkedin.com/in/jarrodgriffin).

Key call-outs

  1. title: feeds the browser tab & SEO meta.
  2. .columns layout delivers a perfectly balanced headshot + intro without custom CSS.
  3. Semantic headings (##) appear in the auto table-of-contents (because toc: true in _quarto.yml).
  4. Clear CTAs (email, LinkedIn) = low-friction contact.

Goal: 75-word elevator pitch + friendly photo → instant credibility.

strategic-marketing.qmd – Thought Leadership

---
title: "Strategic Marketing"
---

## Brand Audit & Positioning
Short narrative …

**Skills Demonstrated**
- Brand Analysis
- Competitive Benchmarking
- Strategic Communication

<iframe src="data/TRI SEO Comparison.html" width="100%" height="600" style="border:none;"></iframe>

Long-form storytelling + embedded proof.

resume.qmd – Recruiter Page

---
title: "Résumé"
---

View the PDF résumé [here](resume/Resume.pdf).

# Technical Skills
- **Languages:** R, Python, SQL
- **Web:** HTML, SCSS, Quarto

# Education
| Degree | Year | Institution |
|--------|------|-------------|
| M.S. Digital Marketing | 2023–2025 | Cal Poly Pomona |

### Data Analyst, ACME Corp
*Jan 2022 – Mar 2024*
- Automated KPI dashboards → –20 h/mo manual work

HTML for SEO, PDF for ATS(Applicant Tracking System)—best of both worlds.

Building a PDF Résumé with vitae

---
name:      Jarrod
surname:   Griffin
position:  "Marketing-Analytics Specialist"
phone:     +1 (555) 123-4567
www:       jarrod.codes
email:     jarrod@example.com
linkedin:  jarrodgriffin
output:
  vitae::latexcv:
    theme: classic
---
# Professional Summary, Education, Work
# (using tribble() + detailed_entries())

Why use vitae?

  • Polished LaTeX themes (classic, awesomecv, twentyseconds)
  • Data-driven helpers (detailed_entries()) → less manual typing
  • Fits Quarto builds:
    • inline chunk in resume.qmd, or
    • pre-render: Rscript build-resume.R in _quarto.yml

Result: an ATS(Applicant Tracking System)-friendly PDF that updates automatically every time you rebuild the site.

Three Ways to Publish (at a Glance)

Host One-liner Requires Git/GitHub? Custom Domain Best For
GitHub Pages quarto publish gh-pages GitHub account People already on GitHub
Netlify quarto publish netlify ✖ (CLI handles upload) Drag-and-drop ease, rollbacks
Quarto Pub quarto publish quarto-pub ✖ (public URL only) Fastest demo / coursework

GitHub Pages – 60-Second Flow

# inside your project root
quarto publish gh-pages
# first run ➜ OAuth to GitHub, auto-creates repo & pages
  • Renders to docs/ then pushes to GitHub Pages.
  • Site lives at https://<user>.github.io/<repo> (custom domain via Settings ▸ Pages).

Netlify – 60-Second Flow

quarto publish netlify             # CLI opens browser to auth
# or:
quarto render                      # build locally
netlify deploy --dir=docs          # if you prefer Netlify CLI
  • No GitHub needed—CLI uploads a ZIP via Netlify API.
  • Alt: drag docs/ onto Netlify Drop in the UI.
  • Netlify auto-provisions HTTPS & lets you add a domain from the dashboard.

Quarto Pub – 30-Second Flow

quarto publish quarto-pub
  • Log in with Google/GitHub once → site appears at
    https://<handle>.quarto.pub immediately.
  • Perfect for quick public proofs-of-concept; custom domains planned but not yet available.

Point your site to a custom domain

GitHub Pages

  1. Settings › Pages › Custom domain – enter www.example.com.
  2. At your DNS provider add
    • CNAME record → USER.github.io (for www).
    • For the root domain add four A records
      185.199.108.153, 185.199.109.153, 185.199.110.153, 185.199.111.153.
  3. Back in Pages, tick Enforce HTTPS once the green-lock appears (GitHub issues the Let’s Encrypt certificate automatically).

Netlify

  1. Site dashboard › Domain management › Add domain – choose “Add a domain you already own”.
  2. Netlify displays the exact DNS records (usually one CNAME for www or an ALIAS/ANAME for the apex). Copy them to your registrar.
  3. Netlify provisions and renews its Let’s Encrypt certificate automatically—no extra steps.

Q&A

  • Open the floor for any questions.

Thank You!