Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
cbeb04c
adding file changes without local render
Apr 1, 2026
d9a848e
changes to example gallery
Apr 1, 2026
e3f9712
update order of navbar
Apr 1, 2026
0871209
landing page changes
Apr 1, 2026
a2b32c1
add callout about Rmd
Apr 1, 2026
7edb497
move credits page to build
Apr 1, 2026
b6a7dd8
add ava and kate to contact page
Apr 1, 2026
6020f32
fixing errors from ottr check
Apr 3, 2026
cf7408f
update metricminer example
Apr 3, 2026
cdfbe36
add fhdsl to enroll sync
Apr 3, 2026
a93ef42
adding publishing & start writing pages
Apr 4, 2026
1c03b6f
update ottr error
Apr 4, 2026
7e821a2
order of pages + consistent case + footer
Apr 6, 2026
4bd221c
updating jhudsl repo to ottr
Apr 6, 2026
601a450
adding a start writing nav link
Apr 6, 2026
b7c762f
formatting indentation to be better
Apr 6, 2026
a2b4c6d
adding fhdsl to next steps page
Apr 6, 2026
4dbe511
adding cheatsheet buttons
Apr 6, 2026
03996e4
moving update from #22
Apr 7, 2026
5176a45
Update enroll_sync.qmd
padmashris Apr 7, 2026
f448896
adding enroll sync as child qmd
Apr 7, 2026
5879694
Merge branch 'approved-updates' of https://github.com/ottrproject/ott…
Apr 7, 2026
2ebca26
adding back template intro
Apr 7, 2026
54b4151
modifying color instructions based on Katherine's update
Apr 7, 2026
c03ebe5
add quarto example chapter files
Apr 7, 2026
9181931
index file moved to not delete
Apr 7, 2026
c211a84
minor tweak in next steps
Apr 7, 2026
39fe082
testing https in ignore url
Apr 7, 2026
b8fe529
Update dictionary.txt
Apr 7, 2026
2920290
testing www
Apr 7, 2026
7feb49e
upping the URL threshold
Apr 7, 2026
cd96341
adding Quarto in start writing
Apr 9, 2026
c34379d
attempt to fix ottr error
Apr 9, 2026
598589a
another attempt
Apr 9, 2026
6cda504
cleaning up steps
Apr 9, 2026
737ba33
next steps as a gallery
Apr 10, 2026
4722c4f
updating URLs to ignore
Apr 13, 2026
a30b6a9
trying something out with the url errors
Apr 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 1 addition & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1 @@
# OTTR for Websites -- Quarto version!

Get started by going to [ottrproject.org](https://www.ottrproject.org/getting_started.html)!

This is a template for creating websites from qmd files hosted on GitHub with three helpful automations following a pull request to the repository: spelling check, broken link check, and website rendering.

- Check for spelling errors more intensively than RStudio and allow you to add words to the dictionary
- Check for broken links - you will be warned about broken links
- Automatic rendering of the website for previewing before merges
- Automatic rendering of the website upon merging to main
- Docker images that can be customized.
This repository makes the content for the OTTR website: ottrproject.org. It introduces folks to OTTR (open-source tools for Training Resources).
49 changes: 32 additions & 17 deletions _quarto.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,46 @@ website:
href: index.qmd
- text: "Quick Start"
menu:
- text: "Getting Started"
- text: "Getting started"
href: getting_started.qmd
- text: "Next Steps"
- text: "Next steps"
href: next_steps.qmd
- text: "Customization"
- text: "Example use cases"
href: examples.qmd
- text: "Help me choose my template"
href: choose_template.qmd
- text: "Build with OTTR"
menu:
- text: "Customizing checks {{< fa robot title='A robot' >}}"
href: customize-robots.qmd
- text: "Customizing style {{< fa palette title='A palette' >}}"
- text: "Template"
href: getting_started.qmd
- text: "Start writing"
href: writing_content_courses.qmd
- text: "Enroll for sync updates"
href: enroll_sync.qmd
- text: "OTTR-fy existing repo"
href: ottr-fy.qmd
- text: "Giving credits {{< fa award title='An award' >}}"
href: more_features_credits.qmd
- text: "---"
- text: "Customize"
- text: "Style {{< fa palette title='A palette' >}}"
href: customize-style.qmd
- text: "Customizing Docker {{< fa gears title='gears' >}}"
- text: "Checks {{< fa robot title='A robot' >}}"
href: customize-robots.qmd
- text: "Docker {{< fa gears title='gears' >}}"
href: customize-docker.qmd
- text: "Advanced Integrations"
menu:
- text: "Google Analytics {{< fa chart-line title='a line chart' >}}"
href: more_features_ganalytic.qmd
- text: "Citing sources {{< fa quote-left title='A left quotation mark' >}}"
href: more_features_sources.qmd
- text: "Giving credits {{< fa award title='An award' >}}"
href: more_features_credits.qmd
- text: "Google Docs {{< fa file title='a file folder' >}}"
href: more_features_gdoc.qmd
- text: "Borrowing chapters {{< fa bookmark title='A bookmark' >}}"
href: more_features_borrowing.qmd
- text: "Compatibility with Google Docs {{< fa file title='a file folder' >}}"
href: more_features_gdoc.qmd
- text: "Google Analytics {{< fa chart-line title='a line chart' >}}"
href: more_features_ganalytic.qmd
- text: "OTTR-fying an existing repository"
href: ottr-fy.qmd
- text: "About OTTR babies"
href: examples.qmd
- text: "Publishing OTTR courses"
href: publishing.qmd
- text: "Troubleshooting {{< fa tools title='tools' >}}"
href: faqs.qmd
- text: "Contact {{< fa envelope title='An envelope' >}}"
Expand All @@ -50,3 +64,4 @@ format:
theme: cosmo
css: styles.css
toc: true
include-after-body: resources/footer.html
293 changes: 293 additions & 0 deletions choose_template.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,293 @@
---
title: "Help me choose my template"
---

Not sure which OTTR template is right for you? Answer two quick questions and we'll point you to the right setup guide.

<style>
#ottr-wizard {
font-family: inherit;
width: 100%;
margin: 1.5rem auto;
text-align: center;
}
#wizard-breadcrumb {
font-size: 1rem;
color: #666;
margin-bottom: 1rem;
min-height: 1.4rem;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
gap: 4px;
}
.crumb-question { color: #888; }
.crumb-answer { color: #5aA8C0; font-weight: 600; }
.crumb-sep { color: #bbb; margin: 0 2px; }
.wizard-question {
font-size: 1.5rem;
font-weight: 600;
color: #222;
margin-bottom: 1rem;
}
.wizard-options {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: center;
}
.wizard-btn {
background-color: #ADD8E6;
color: #222;
border: none;
border-radius: 6px;
padding: 10px 20px;
font-size: 18px;
cursor: pointer;
transition: background-color 0.15s ease;
}
.wizard-btn:hover { background-color: #85C1D4; }
.result-card {
border-radius: 8px;
padding: 1.2rem 1.4rem;
margin-top: 0.5rem;
}
.result-recommended {
background-color: #e8f6fa;
border-left: 4px solid #ADD8E6;
}
.result-standard {
background-color: #f4f4f4;
border-left: 4px solid #aaa;
}
.result-name {
font-size: 1.1rem;
font-weight: 700;
color: #222;
margin-bottom: 0.3rem;
}
.badge-recommended {
background-color: #ADD8E6;
color: #222;
font-size: 0.75rem;
font-weight: 600;
padding: 2px 8px;
border-radius: 20px;
margin-left: 8px;
vertical-align: middle;
}
.result-desc {
font-size: 0.92rem;
color: #444;
margin: 0.5rem 0 1rem;
}
.result-link {
display: inline-block;
background-color: #ADD8E6;
color: #222 !important;
text-decoration: none;
padding: 8px 18px;
border-radius: 6px;
font-size: 14px;
font-weight: 600;
transition: background-color 0.15s ease;
}
.result-link:hover { background-color: #85C1D4; }
.restart-btn {
background: none;
border: none;
color: #5aA8C0;
font-size: 0.85rem;
cursor: pointer;
padding: 0;
margin-left: 10px;
text-decoration: underline;
}
.restart-btn:hover { color: #85C1D4; }
</style>

<div id="ottr-wizard">
<div id="wizard-breadcrumb"></div>
<div id="wizard-content"></div>
</div>

<script>
(function () {
const tree = {
question: "What do you want to create?",
options: [
{
label: "Website",
next: {
question: "Do you have existing R Markdown / Bookdown files?",
options: [
{ label: "Yes", result: "rmarkdown_web" },
{ label: "No I'm starting fresh", result: "quarto_web" }
]
}
},
{
label: "Online Course",
next: {
question: "Do you have existing R Markdown files?",
options: [
{ label: "Yes", result: "rmarkdown_courses" },
{ label: "No I'm starting fresh", result: "quarto_courses" }
]
}
},
{
label: "Metrics Dashboard",
result: "dashboards"
}
]
};

const results = {
rmarkdown_web: {
name: "R Markdown Websites",
description: "An R Markdown / Bookdown-based website template. Best choice when you have existing .Rmd files to build on.",
url: "getting_started.html#r-markdown-websites",
recommended: false
},
quarto_web: {
name: "Quarto Websites",
description: "A Quarto-based website template. The modern standard, recommended for all new projects.",
url: "getting_started.html#quarto-websites",
recommended: true,
fallback: "rmarkdown_web"
},
rmarkdown_courses: {
name: "R Markdown Courses",
description: "An R Markdown / Bookdown-based course template. Best choice when you have existing .Rmd files to build on.",
url: "getting_started.html#r-markdown-courses",
recommended: false
},
quarto_courses: {
name: "Quarto Courses",
description: "A Quarto-based course template. Recommended for new projects.",
url: "getting_started.html#quarto-courses",
recommended: true,
fallback: "rmarkdown_courses"
},
dashboards: {
name: "Dashboards",
description: "Collect and display metrics from GitHub, Google Analytics, Google Forms, CRAN, Calendly, and more.",
url: "getting_started.html#dashboards",
recommended: false
}
};

let history = [];
let current = tree;

function render() {
const breadcrumb = document.getElementById("wizard-breadcrumb");
const content = document.getElementById("wizard-content");

if (history.length > 0) {
breadcrumb.innerHTML =
history.map(h =>
`<span class="crumb-question">${h.question}</span>` +
`<span class="crumb-sep"> › </span>` +
`<span class="crumb-answer">${h.label}</span>`
).join('<span class="crumb-sep"> &nbsp;·&nbsp; </span>') +
`<button class="restart-btn" onclick="ottrRestart()">↺ Start over</button>`;
} else {
breadcrumb.innerHTML = "";
}

if (current.result) {
const r = results[current.result];
const badge = r.recommended
? `<span class="badge-recommended">⭐ Recommended</span>`
: "";
const fallbackBtn = r.fallback
? `<div style="margin-top:1rem">
<button class="restart-btn" onclick="ottrUseFallback('${r.fallback}')">
I want to use R Markdown instead
</button>
</div>`
: "";
content.innerHTML = `
<div class="result-card ${r.recommended ? "result-recommended" : "result-standard"}">
<div class="result-name">${r.name}${badge}</div>
<p class="result-desc">${r.description}</p>
<a href="${r.url}" class="result-link">Get started with ${r.name} →</a>
${fallbackBtn}
</div>`;
} else {
const btns = current.options.map((opt, i) =>
`<button class="wizard-btn" onclick="ottrChoose(${i})">${opt.label}</button>`
).join("");
content.innerHTML = `
<div class="wizard-question">${current.question}</div>
<div class="wizard-options">${btns}</div>`;
}
}

window.ottrChoose = function (i) {
const opt = current.options[i];
history.push({ question: current.question, label: opt.label });
current = opt.result ? { result: opt.result } : opt.next;
render();
};

window.ottrUseFallback = function (resultKey) {
current = { result: resultKey };
render();
};

window.ottrRestart = function () {
history = [];
current = tree;
render();
};

render();
})();
</script>

---

## At a glance

| Template | Best for | Write in | Can also publish to |
|:---|:---|:---:|:---|
| [Quarto Courses](getting_started.html#quarto-courses) ⭐ | New courses, starting fresh , existing `.qmd` course files | `.qmd` | GitHub Pages · Coursera · Leanpub |
| [R Markdown Courses](getting_started.html#r-markdown-courses) | Existing `.Rmd` course files | `.Rmd` | GitHub Pages · Coursera · Leanpub |
| [Quarto Websites](getting_started.html#quarto-websites) ⭐ | New websites, starting fresh , existing `.qmd` course files| `.qmd` | GitHub Pages |
| [R Markdown Websites](getting_started.html#r-markdown-websites) | Existing `.Rmd` website files | `.Rmd` | GitHub Pages |
| [Dashboards](getting_started.html#dashboards) | Metrics tracking & reporting | `.Rmd` | GitHub Pages |

::: {.callout-warning}
## R Markdown is no longer being actively updated

Posit has shifted its focus to Quarto as the next-generation publishing system for data science. While OTTR's R Markdown templates remain functional, R Markdown **will not receive new features or improvements going forward**. If you have existing `.Rmd` files, they will continue to work but for any new project, we strongly recommend starting with a Quarto template.

**Resources for Quarto-fying your content:**

- [quartify](https://ddotta.github.io/quartify/articles/getting-started.html): an R package that automates conversion of R Markdown files to Quarto
- [Transitioning from R Markdown to Quarto](https://github.com/Openscapes/quarto-website-tutorial/blob/main/transition-from-rmarkdown.qmd): a practical guide from Openscapes
:::

## Key questions to ask yourself

**Courses vs. Websites**

- Choose a **Course** template if you want a sidebar table of contents, chapter-by-chapter navigation, and the option to publish to Coursera or Leanpub.
- Choose a **Website** template if you want a top navigation bar and a more flexible page structure — like this documentation site.

**Quarto vs. R Markdown**

- Choose **Quarto** if you are starting a new project. It is the modern successor to R Markdown, supports R and Python, and is what OTTR recommends for all new content.
- Choose **R Markdown** if you already have a set of `.Rmd` files you want to build on, or if your team is already working in R Markdown and a migration isn't practical right now.

**Dashboards**

- Choose the **Dashboard** template if your primary goal is to collect and display metrics — number of GitHub stars, Google Analytics traffic, CRAN downloads, Calendly bookings, and more — powered by the [`metricminer`](https://www.metricminer.org/) R package.

---

[Get Started](getting_started.qmd) →
2 changes: 1 addition & 1 deletion config_automation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ check-quizzes: false
quiz_error_min: 0
# Check that urls in the content are not broken
url-checker: true
url_error_min: 0
url_error_min: 4
# Spell check Rmds and quizzes
spell-check: true
spell_error_min: 0
Expand Down
8 changes: 6 additions & 2 deletions contact.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,12 @@ output:
html_document
---

If you have questions please contact:

- Carrie Wright (cwright2@fredhutch.org)
- Ava Hoffman (ahoffma2@fredhutch.org)
- Kate Isaac (kisaac@fredhutch.org)

If you have questions please contact:
---

* Carrie Wright (cwrigh60@jhu.edu)
← [Troubleshooting](faqs.qmd) &emsp; [Home](index.qmd)
Loading
Loading