OTTR (Open-source Tools for Training Resources ) is a set of tools and templates to help you make **websites, online courses, and dashboards** more easily (and for free)!
+
+
@@ -83,7 +362,7 @@ Please cite our [OTTR manuscript here!](https://www.tandfonline.com/doi/full/10.
-
+
diff --git a/more_features_borrowing.qmd b/more_features_borrowing.qmd
index d91b59d..7cb0757 100644
--- a/more_features_borrowing.qmd
+++ b/more_features_borrowing.qmd
@@ -89,3 +89,7 @@ Learn more about templates [here](https://bookdown.org/yihui/rmarkdown-cookbook/
+
+---
+
+← [Next Steps](next_steps.qmd) [Troubleshooting](faqs.qmd) →
diff --git a/more_features_credits.qmd b/more_features_credits.qmd
index 19f0328..196ed51 100644
--- a/more_features_credits.qmd
+++ b/more_features_credits.qmd
@@ -91,3 +91,7 @@ In Coursera, you can add the credits table URL as an ungraded plugin ([the same
In Leanpub, make sure that your About.md file in your manuscript folder is listed in your Book.txt file and this Credits table will automatically be incorporated into your Leanpub course.
+
+---
+
+**← Back to:** [Next Steps](next_steps.qmd) · **Also see:** [Citing Sources](more_features_sources.qmd) · [Customizing Style](customize-style.qmd)
diff --git a/more_features_ganalytic.qmd b/more_features_ganalytic.qmd
index d04ddc9..6221bed 100644
--- a/more_features_ganalytic.qmd
+++ b/more_features_ganalytic.qmd
@@ -1,51 +1,162 @@
---
-title: "More Features: Google Analytics Integration"
-output:
- html_document
+title: "Google Analytics"
---
-## Google Analytics
+# Set Up Google Analytics
-If you would like to add Google Analytics to track traffic to your course, you can do the following:
+Follow these steps to enable traffic tracking for your OTTR course or website.
-1. Get a **Google Analytics account** (if you do not already have one): [https://analytics.google.com/analytics](https://analytics.google.com/analytics)
-
-Note that in creating an account you will need to agree to some terms. Currently it is free to get Google analytics data as long as your course does not exceed a very high user rate.
+**1. Create a Google Analytics account** (if you do not already have one):
https://analytics.google.com/analytics
-Check to make sure that the terms work for you
-
+Click on **Start measuring**.
+
-1. If you already have an account or navigated away from where you started - Go to the **Admin tab** (lower left button that looks like a gear)
+You will need to agree to Google's terms during account creation. Tracking is currently free as long as your course does not exceed a very high user rate.
+
+**2. Create a new Property** — fill in a name and details, and select the options that reflect how you intend to use Google Analytics.
-1. Set up a new **property** (fill out name and details, select options about tracking traffic for how you intend to use Google Analytics)

-
+

-1. Add a **stream** to your property, choose the **Web** option.
+**3. Accept Terms**
+
+To use Google Analytics you must first accept the terms of service agreement for your country / region.
+
+**4. Add a Data Stream** to your property — choose the **Web** option.
+

+**5. Enter the URL** for your course. Note: the `https://` portion is selected from a dropdown to the left of the URL field — do not include it in the text box. Click on _Create and continue_.
+
+
+
+
+**6. Copy the code chunk** provided on the resulting page. It will look like this (with your unique ID in place of `G-XXXXXXXXXX`):
+
+```html
+
+
+
+```
+
+
+
+# Configure Your OTTR Repo
+
+:::: {.columns}
+
+::: {.column width="50%"}
+
+## For R Markdown Courses
+
+**Update `GA_Script.html`** — replace the entire contents of the file with the code chunk you copied from Google Analytics:
+
+```html
+
+
+
+```
+
+
+
+**`_output.yml` is already configured** in the updated OTTR template — no manual changes needed. It should include:
+
+```yaml
+includes:
+ in_header: GA_Script.html
+ before body: ...
+```
+
+
+
+:::
-1. Fill in your stream information with the **link** for your course (note you may need to remove https as this is part of a pull down menu to the left of where you paste your link)
-
-
+::: {.column width="50%"}
+## For Quarto Courses
-1. On the resulting page you will see a **Measurement ID**. Copy this ID and paste it in the GA_Script.html file in the template replacing the fields that say {MeasurementID} including the curly brackets. For example, if your ID was `G-ABC123`, then the line `gtag('config', '{MeasurementID}');` would become `gtag('config', 'G-ABC123');`.
-
-
+**Update `GA_Script.html`** — replace the entire contents of the file with the code chunk you copied from Google Analytics (same as for R Markdown courses).
-1. Add a line to the _output.yml file above the line that starts with `before body:` (i.e. nested under `includes`). This line should be `in_header: GA_Script.html`. Make sure this line is indented to the same level as the `before body:` line.
-
+The `GA_Script.html` file is included via `include-in-header` in `_quarto.yml`:
-1. **Rerender** your course by making a change to one of your chapter RMD files in a pull request and pushing and merging the pull request. This will cause new html files to be made for each chapter in the `docs` folder. The Google Analytics code should now be in each of the html files - you can check by searching for `Google Analytics`.
+```yaml
+format:
+ html:
+ include-in-header: GA_Script.html
+```
-1. Go back to [Google Analytics](https://analytics.google.com/analytics) and log in if you need to.
+The updated template handles this — you only need to paste in your copied code chunk.
-1. Check on the **Reports** button on the top of the far left icon menu. The icon looks like a bar chart. If you open up a browser window to your hosted course online, then you should see yourself as 1 user in the last 30 minutes.
+:::
+::::
-
-
+
+
+# Trigger a Re-render
+
+After updating `GA_Script.html`, the GitHub Action will automatically re-render your course because the updated OTTR template watches for changes to `GA_Script.html`:
+
+```yaml
+# In .github/workflows/render-all.yml
+on:
+ push:
+ paths:
+ - '*.Rmd'
+ - 'assets/*'
+ - '*.yml'
+ - 'GA_Script.html' # <-- triggers render on GA changes
+```
+
+You can verify the Google Analytics code was included by opening any rendered HTML file in `docs/` and searching for `Google Analytics`.
+
+> **Note:** If you are working with an older template, you may need to manually trigger the `render_all` workflow. Make sure both `_output.yml` and `GA_Script.html` are updated with matching file names and the correct code chunk. Occasionally this also requires setting up a `GH_PAT` for the repo (with `actions` and `repo` permissions) — not just the organization.
+
+
+
+# Verify Traffic Is Being Tracked
+
+1. Log in to
Google Analytics.
+
+1. Click the **gear icon** (lower left) → **Data Collection and Modification** → **Data Streams**.
+
+1. Click on your stream — it will indicate whether traffic has been received.
+
+1. To test, click **Test** on the stream page. Even if the test passes, **also open your live course URL** and check Google Analytics to confirm you appear as a visitor.
+
+1. Click the **Home button** in Google Analytics — it should say **"Data collection is active"**.
+
+1. Check the **Reports** tab (bar chart icon, upper left). If you open your course in a browser, you should see yourself counted as 1 user in the last 30 minutes.
+
+
+
+
+
+
+# Troubleshooting
+
+| Issue | What to Check |
+|------------------------------------|----------------------------------------------------|
+| No data showing in GA | Make sure the **code chunk** in `GA_Script.html` was copied correctly from Google Analytics and contains the right ID (`G-XXXXXXXXXX`) |
+| Data stream shows no traffic | Check that the **URL** in the stream matches your course URL — watch for `https` vs `http` |
+| Old template not rendering GA | Manually run the `render_all` workflow; confirm both `_output.yml` and `GA_Script.html` are updated with the correct code chunk, and that the `GA_Script.html` filename is consistent in both files |
+| Render not triggering | Ensure `GH_PAT` is set up for the repo (with `actions` and `repo` permissions), not just the organization |
+
+
+
+---
-1. Enjoy the data about how people are using your course!
+**← Back to:** [Next Steps](next_steps.qmd) · **Having issues?** [Troubleshooting](faqs.qmd)
diff --git a/more_features_gdoc.qmd b/more_features_gdoc.qmd
index 225ec3e..965b79e 100644
--- a/more_features_gdoc.qmd
+++ b/more_features_gdoc.qmd
@@ -14,3 +14,7 @@ Google Docs can be a great way to get feedback from collaborators who aren't com
- Then as comments and suggestions trickle in, a lead author who is comfortable with the OTTR process can incorporate those comments into an existing or new pull request which can checked for its rendering and eventually added to the `main` content branch.
+
+---
+
+← [Next Steps](next_steps.qmd) [Troubleshooting](faqs.qmd) →
diff --git a/more_features_sources.qmd b/more_features_sources.qmd
index 6da160c..3c39767 100644
--- a/more_features_sources.qmd
+++ b/more_features_sources.qmd
@@ -39,3 +39,7 @@ Alternatively, you can add a header for this list of references as the last head
If you would like to suppress having references listed at the end of each chapter, you can add a line that says `split_bib: false` to your `_output.yml` file.

+
+---
+
+**← Back to:** [Next Steps](next_steps.qmd) · **Also see:** [Giving Credits](more_features_credits.qmd) · [Customizing Style](customize-style.qmd)
diff --git a/next_steps.qmd b/next_steps.qmd
index 6e88182..2629c8b 100644
--- a/next_steps.qmd
+++ b/next_steps.qmd
@@ -1,21 +1,319 @@
---
title: "Next Steps"
-output: html_document
+format:
+ html:
+ toc: true
+ toc-depth: 5
---
-Now that you've setup a shell for your OTTR repository, there are some next steps that you **need** to take, and some steps that we **highly recommend**. Additionally, there are further customizations you may want to consider.
+```{css, echo=FALSE}
+.steps-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
+ gap: 1.25rem;
+ margin: 1.5rem 0 2rem 0;
+}
-::: {.panel-tabset group="nextStepType"}
+.step-card {
+ border: 1px solid var(--bs-border-color, #dee2e6);
+ border-radius: 8px;
+ padding: 1.25rem 1.5rem 1rem 1.5rem;
+ background: var(--bs-body-bg, #fff);
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+}
-## Necessary Next Steps
+.step-card h3 {
+ font-size: 1rem;
+ font-weight: 600;
+ margin: 0 0 0.25rem 0;
+ border: none;
+ padding: 0;
+}
-Tab Content ... Visit here to learn more
+.step-card p {
+ font-size: 0.875rem;
+ color: var(--bs-secondary-color, #6c757d);
+ margin: 0;
+ line-height: 1.5;
+}
-## Highly Recommended Next Steps
+.step-card details {
+ margin-top: 0.75rem;
+ font-size: 0.875rem;
+}
-Tab Content ... Visit here to learn more
+.step-card details summary {
+ cursor: pointer;
+ font-weight: 500;
+ color: var(--bs-link-color, #0d6efd);
+ list-style: none;
+ padding: 0.25rem 0;
+ user-select: none;
+}
-## Additional Customizations to Consider
+.step-card details summary::-webkit-details-marker {
+ display: none;
+}
-Tab Content ... Visit here to learn more
-:::
+.step-card details summary::before {
+ content: "+ ";
+ font-weight: 700;
+}
+
+.step-card details[open] summary::before {
+ content: "- ";
+}
+
+.step-card details .card-detail {
+ padding: 0.75rem 0 0 0;
+ border-top: 1px solid var(--bs-border-color, #dee2e6);
+ margin-top: 0.5rem;
+ line-height: 1.6;
+ color: var(--bs-body-color, #212529);
+}
+
+.step-card details .card-detail ul {
+ padding-left: 1.25rem;
+ margin: 0.5rem 0;
+}
+
+.step-card details .card-detail li {
+ margin-bottom: 0.35rem;
+}
+
+.step-card details .card-detail code {
+ font-size: 0.8rem;
+}
+
+.step-card details .card-detail pre {
+ font-size: 0.78rem;
+ background: var(--bs-tertiary-bg, #f8f9fa);
+ border: 1px solid var(--bs-border-color, #dee2e6);
+ border-radius: 4px;
+ padding: 0.75rem;
+ overflow-x: auto;
+ white-space: pre;
+}
+```
+
+Now that you've set up a shell for your OTTR repository, there are some next steps that you **need** to take, and some steps that we **highly recommend**. Additionally, there are further customizations you may want to consider.
+
+```{=html}
+
+```
+
+
+# Necessary Next Steps
+
+{{< include enroll_sync.qmd >}}
+
+## Customizing branding and style
+
+Once your repository is set up, it's worth updating the visual identity of your course or website to reflect your project. For full instructions, see the [Customizing Style page](customize-style.qmd).
+
+**Key things to update:**
+
+- **Title** — set in the YAML header of `index.qmd` (or `index.Rmd` for R Markdown).
+- **Colors** — color theming is controlled through CSS variables. Default values live in `assets/style_config_default.css`, and course-specific overrides should go in `assets/style_config_custom.css`. To customize branding, update variables such as `--link-color`, `--accent-color`, and `--highlight-color`. You generally should not edit color hex codes directly in `assets/style.css`.
+- **Favicon** — convert your logo to `.ico` format using [favicon.io](https://favicon.io/favicon-converter/), save it in `assets/`, and reference it in the YAML header.
+- **Logo** — logos in the table of contents sidebar are configured via `_output.yml`. Update the image URL and the link to your GitHub repo.
+- **Style set** — the template defaults to the JHU Data Science Lab style. If you are building an ITN or DataTrail course, copy the relevant files from the `style-sets/` folder to switch styles.
+
+# Highly Recommended Next Steps
+
+Click any card to expand full instructions.
+
+```{r, echo=FALSE, results='asis'}
+cards <- list(
+ list(
+ title = "Clean out template placeholder files",
+ summary = "Remove example content that comes with the template and replace it with your own.",
+ detail = '
+
Safe to delete:
+
+ - Example chapter files
+
+ - For Quarto:
setup.qmd, hosting.qmd, editing.qmd, etc.
+ - For RMarkdown:
01-intro.Rmd, 02-chapter_of_course.Rmd, 03-chapter_of_course.Rmd, etc.
+
+
+ - Any images in
resources/images/ that were part of the example content
+
+
Do NOT delete:
+
+ index.qmd or index.Rmd
+ - Anything inside
.github/workflows/ — these run all the automated checks and rendering
+ resources/ — contains the spell-check dictionary and screenshot helpers
+ - Configuration files:
_bookdown.yml, _output.yml, book.bib, _quarto.yml
+
'
+ ),
+ list(
+ title = "Update the README",
+ summary = "Replace template placeholder text with a description of your course, its audience, and how to contribute.",
+ detail = '
+
The README.md in your repository comes with template placeholder text. Update it to describe what your course or website is about, who it\'s for, and how to contribute or report issues. A clear README helps collaborators and visitors understand your project at a glance.
+
At minimum, update:
+
+ - The title and description
+ - Any links that point to the template repository (replace with your own repo URL)
+ - Author and contact information
+
'
+ ),
+ list(
+ title = "Add a license",
+ summary = "Clarify how others can use and share your content by adding a license file to your repository.",
+ detail = '
+
Adding a license to your repository clarifies how others can use and share your content. For open educational resources, Creative Commons Attribution 4.0 (CC BY 4.0) is a common choice — it allows reuse with attribution.
+
To add a license on GitHub:
+
+ - Go to your repository\'s main page.
+ - Click Add file > Create new file and name it
LICENSE.
+ - GitHub will offer a license picker — select your preferred license and commit.
+
'
+ ),
+ list(
+ title = "Add your repository link to the sidebar",
+ summary = "Link your GitHub repository from the course sidebar so readers can find the source, suggest edits, or file issues.",
+ detail = '
+
For R Markdown courses, update _output.yml:
+
bookdown::gitbook:
+ config:
+ edit:
+ link: https://github.com/YOUR-ORG/YOUR-REPO/
+ text: "GitHub Repository"
+ download: no
+ sharing: no
+
For Quarto, update _quarto.yml:
+
book:
+ repo-url: https://github.com/YOUR-ORG/YOUR-REPO
+
Replace YOUR-ORG/YOUR-REPO with your actual organization and repository name.
'
+ ),
+ list(
+ title = "Set up a feedback channel",
+ summary = "Make it easy for learners to report problems or leave feedback to improve your course over time.",
+ detail = '
+
Two good approaches:
+
+
GitHub issue templates — add structured issue forms so readers can report content errors, broken links, or general feedback directly from your repo. You can use OTTR\'s example issue templates as a starting point.
+
+
Google Form link — for audiences less familiar with GitHub, add a feedback Google Form link to your course. In _output.yml, you can surface this in the sharing config:
+
bookdown::gitbook:
+ config:
+ sharing:
+ facebook: false
+ twitter: false
+ all: []
+
Then add a direct link to your form in index.Rmd or your course footer. For automated responses, Zapier can connect Google Form submissions to email notifications, Slack alerts, or GitHub issues.
'
+ ),
+ list(
+ title = "Give credits to contributors",
+ summary = "Acknowledge everyone who contributed including instructors, editors, publishers, and template engineers.",
+ detail = '
+
OTTR courses include a credits table to acknowledge everyone who contributed. For full instructions, see the Giving Credits page.
+
Key things to update:
+
+ About.Rmd — already included in the template. Fill in author names for each role, remove inapplicable rows, and make sure role names grammatically match (singular vs. plural).
+ - Required rows — all courses should include rows for Template Publishing Engineers, Publishing Maintenance Engineer, Technical Publishing Stylists, and Package Developers. See the full credits table reference.
+ - Coursera — add the credits table URL as an ungraded plugin at the start of your course, right after the introduction.
+ - Leanpub — ensure
About.md is listed in Book.txt and it will be included automatically.
+
'
+ ),
+ list(
+ title = "Cite your sources",
+ summary = "Manage references with a BibTeX file and cite sources inline throughout your course.",
+ detail = '
+
OTTR courses use BibTeX-style references managed through a book.bib file. For full instructions, see the Citing Sources page.
+
+ - Add references to
book.bib in alphabetical order. For articles with a DOI, use doi2bib.org or ZoteroBib to generate a BibTeX entry to copy in.
+ - Cite in text using
@key (inline) or [@key] (parenthetical). Separate multiple citations with semicolons: [@key-1; @key-2].
+ - References list — keep
References.Rmd as the last file in _bookdown.yml so the full reference list appears at the end of your course.
+ - Suppress per-chapter references by adding
split_bib: false to _output.yml.
+
'
+ ),
+ list(
+ title = "Set up Google Analytics",
+ summary = "Track how people are finding and using your content with Google Analytics.",
+ detail = '
+
Adding Google Analytics to your OTTR course or website lets you track how people are finding and using your content. For full setup instructions, see the Google Analytics Integration page.
+
+ - Create a Google Analytics account and set up a new property with a Web data stream for your course URL.
+ - Copy the
<script> code chunk provided by Google Analytics.
+ - Paste it into
GA_Script.html in your repository (replacing the placeholder content).
+ - Push your changes — the GitHub Action will automatically re-render your course and include the tracking code in every page.
+ - Verify in Google Analytics (Reports tab) that traffic is being received.
+
'
+ )
+)
+
+card_html <- function(card) {
+ paste0(
+ '
',
+ '
', card$title, '
',
+ '
', card$summary, '
',
+ '
Full instructions
',
+ '', card$detail, '
',
+ '',
+ '
'
+ )
+}
+
+cat('
\n')
+for (card in cards) {
+ cat(card_html(card), "\n")
+}
+cat('
\n')
+```
+
+---
+
+# Additional Customizations to Consider
+
+See the customization menu below for options including Docker configuration, borrowing chapters, Google Docs compatibility, and more.
+
+```{=html}
+
+```
+
+---
+
+← [Getting Started](getting_started.qmd) [Start writing!](writing_content_courses.qmd) [Enroll for Sync Updates](enroll_sync.qmd) →
diff --git a/ottr-fy.qmd b/ottr-fy.qmd
index d927f61..093756b 100644
--- a/ottr-fy.qmd
+++ b/ottr-fy.qmd
@@ -86,4 +86,8 @@ Make sure to commit this to your branch.
### 3. Set up your repository with the proper settings
-From here, you can follow the rest of the steps described in the [Getting Started section](https://www.ottrproject.org/getting_started.html#Starting_a_new_OTTR_websitecourse).
+From here, you can follow the rest of the steps described in the [Getting Started section](getting_started.html).
+
+---
+
+← [Getting Started](getting_started.qmd) [Next Steps](next_steps.qmd) →
diff --git a/publishing.qmd b/publishing.qmd
new file mode 100644
index 0000000..6f44fac
--- /dev/null
+++ b/publishing.qmd
@@ -0,0 +1,384 @@
+---
+title: "Publishing OTTR Courses"
+format:
+ html:
+ toc: true
+ toc-depth: 4
+ toc-location: right
+---
+
+Below are some examples of courses created using the [OTTR Template](https://github.com/ottrproject/OTTR_Template) and published on three platforms: Bookdown, Leanpub, and Coursera.
+
+*Introduction to Reproducibility in Cancer Informatics:*
+
+- [GitHub repository and source code](https://github.com/jhudsl/Reproducibility_in_Cancer_Informatics)
+ - [Bookdown website](https://jhudatascience.org/Reproducibility_in_Cancer_Informatics/introduction.html)
+ - [Leanpub course](https://leanpub.com/universities/courses/jhu/cancer-informatics-for-research-leaders)
+ - [Coursera course](https://www.coursera.org/learn/intro-reproducibility-cancer-informatics)
+
+*Computing for Cancer Informatics:*
+
+- [GitHub repository and source code](https://github.com/jhudsl/Computing_for_Cancer_Informatics)
+ - [Bookdown website](https://jhudatascience.org/Computing_for_Cancer_Informatics/)
+ - [Leanpub course](https://leanpub.com/universities/courses/jhu/cancer-informatics-computing)
+ - [Coursera course](https://www.coursera.org/learn/computing-for-cancer-informatics)
+
+
+# Publishing with Bookdown
+
+To publish your content using Bookdown, utilize GitHub Pages by following the [repository setup instructions](getting_started.html). Note that Bookdown is a prerequisite for Coursera and Leanpub publishing. You must publish with Bookdown before using those platforms.
+
+As you add or rename chapters, update `_bookdown.yml` accordingly. For example, after adding `03-new_chapter_of_course.Rmd`:
+
+```{yaml}
+book_filename: "Course_Name"
+chapter_name: "Chapter "
+repo: https://github.com/ottrproject/OTTR_Template/ ##Make sure you update this to your GitHub Repo!!
+rmd_files: ["index.Rmd",
+ "01-intro.Rmd",
+ "02-chapter_of_course.Rmd",
+ "03-new_chapter_of_course.Rmd", ## This is the only new line!
+ "about.Rmd"]
+new_session: yes
+delete_merged_file: true
+language:
+ ui:
+ chapter_name: "Chapter "
+output_dir: "docs"
+```
+
+Only a single line changes. Be careful with quotation marks (`""`) and commas (`,`).
+
+Preview the book by running `bookdown::serve_book()` in the RStudio Console. This generates an `.rds` file you can ignore. The live preview will appear in your RStudio Viewer.
+
+When a pull request is merged to main, [GitHub Actions](#github-actions) will re-run `bookdown::render_book()` and add the results to `main`.
+
+# Publishing with Leanpub
+
+OTTR includes everything needed to publish to [Leanpub](https://leanpub.com/). The [`ottrpal` package](https://github.com/ottrproject/ottrpal) handles converting content into a Leanpub-ready format, storing output in the `manuscript` folder.
+
+::: {.callout-warning}
+Do not manually edit files in the `manuscript` folder. It is auto-generated by `ottrpal` and will be overwritten.
+:::
+
+If you want quizzes and answers hidden, you will need a separate private OTTR_Quizzes repository. [Start with these instructions](publishing.html#quizzes-repository-checklist) before proceeding.
+
+## Leanpub Rendering
+
+The `ottrpal` package handles most formatting for links and other elements, as long as you have followed the [image formatting instructions](writing_content_courses.html#set-up-images).
+
+GitHub Actions will attempt to convert Bookdown to Leanpub by running `ottrpal::bookdown_to_leanpub()` at the top of the repository.
+
+### Setting up Leanpub-related GitHub Actions
+
+When ready to publish to Leanpub, enable the following in your [`config_automation.yml`](customize-robots.html):
+
+- `render-leanpub: yes`
+- `check-quizzes: yes`
+
+You may also configure chapter and quiz ordering. By default, `make-book-txt: TRUE` orders content by filename numbering. Set `make-book-txt: FALSE` if you want to specify ordering manually via a `Book.txt` file. Read more in the [quizzes section](#setting-up-quizzes).
+
+After updating `config_automation.yml`, file and merge a pull request. Quiz formatting will be checked automatically and reported in a pull request comment.
+
+File issues with the `ottrpal` package in its [GitHub repository](https://github.com/ottrproject/ottrpal/issues).
+
+## Hosting your course on Leanpub
+
+Finalizing a course on Leanpub can be tricky. The [Using Leanpub](https://hutchdatascience.org/Using_Leanpub/index.html) guide provides detailed help.
+
+1. Create a [Leanpub account](https://leanpub.com/) if you do not have one.
+
+2. Start a course:
+ - Click the three-line button at the far right of the top bar.
+ - Click the **Author** tab, then **Courses**.
+ - Verify your email address if prompted.
+ - Click `create a new course`, then **A Course**.
+ - Provide a title (the Course URL fills automatically).
+ - Select **Using Git and GitHub**.
+ - JHU developers: follow [this additional setup document](https://docs.google.com/document/d/18UQicXwf8d25ayKGF2BrinvRgB_R2ToVn5EDOUcxyoc/edit?usp=sharing).
+ - Press `add to plan`.
+
+3. Preview a new version:
+ - Click the three-line menu, then the **Author** tab, then **Courses**.
+ - Click your course name or icon.
+ - Click **Preview New Version**, then `Create Preview`.
+
+If the render fails, it is typically due to a quiz formatting error. Occasional failures may also occur due to sync lag between GitHub and Leanpub — try again if it fails once.
+
+## Setting up quizzes {#setting-up-quizzes}
+
+Store quizzes in the `quizzes/` directory. Use the [template quiz](https://github.com/ottrproject/OTTR_Quizzes/blob/main/quizzes/quiz_ch1.md) as a starting point. All quizzes must be written in [Markua format](https://leanpub.com/markua/read#leanpub-auto-quizzes-and-exercises).
+
+After adding each quiz, add its filename to the `Book.txt` file at the top of the repository (not the one in `manuscript`) in the correct position. For example, with two quizzes interleaved between three chapters:
+
+```
+01-intro.md
+02-chapter_of_course.md
+quiz_1.md
+03-chapter_of_course.md
+quiz_2.md
+about.md
+```
+
+Files listed with a `#` prefix in `Book.txt` are ignored by Leanpub.
+
+You cannot have two quizzes with the same `quiz_id`. See an [example quiz here](https://github.com/ottrproject/OTTR_Quizzes/blob/main/quizzes/quiz_ch1.md).
+
+### Leanpub quiz question types
+
+**Standard multiple choice** — answer choices are not randomized:
+
+```
+? A question is here
+a) A wrong answer
+B) A correct answer has a capital letter
+c) A wrong answer
+d) A wrong answer
+```
+
+**Choose answers** — randomizes choices using `C)` for correct, `m)` for mandatory incorrect, and `o)` for optional incorrect. The number of answers must be at least equal to the count of correct and mandatory incorrect answers.
+
+```
+{choose-answers: 4}
+? A question is here
+C) The correct answer is signified with a capital C
+m) A mandatory incorrect answer
+m) A mandatory incorrect answer
+o) An optional incorrect answer
+o) An optional incorrect answer
+```
+
+Upon merging to `main`, the `check-quizzes.yml` GitHub Action validates quiz formatting and reports errors on the pull request.
+
+### Leanpub quiz format rules
+
+- Quizzes start and end with `{quiz}` and `{\quiz}` tags.
+- No exclamation points or colons in answers.
+- At least one correct answer per question.
+- All question and quiz attributes must be recognized by Leanpub.
+- All quizzes must be listed in `Book.txt`.
+- The `choose-answers` count must be at least as large as the number of mandatory and correct answers.
+
+## Converting quizzes from Leanpub to Coursera format
+
+Convert quizzes to a Coursera-uploadable YAML file by running:
+
+```{r, eval=FALSE}
+ottrpal::convert_quizzes()
+```
+
+Note that images and links are not currently supported by the conversion script and must be added manually. Colons (`:`) are not allowed in prompts or answers.
+
+[See full Coursera publishing instructions](course_publishing.html#publishing-with-coursera).
+
+## `_Quizzes` repository checklist
+
+- [ ] A [`GH_PAT` has been set](https://www.ottrproject.org/getting_started.html#6_Set_up_your_GitHub_personal_access_token) in both the main Template and the `_Quizzes` repository.
+- [ ] [Leanpub course has been created](#hosting-your-course-on-leanpub).
+ - [ ] Writing mode is set to `GitHub` and linked to your main OTTR_Template repository.
+- [ ] `_Quizzes` repository is set to `private`.
+ - [ ] `main` branch protection is configured:
+ - [ ] `Require pull request reviews before merging` is checked.
+ - [ ] `Require status checks to pass before merging` is checked.
+ - [ ] `Require branches to be up to date before merging` is checked.
+- [ ] Repository is [enrolled in automatic updates](enroll_sync.html).
+- [ ] `Book.txt` is up to date.
+- [ ] [`ottrpal::bookdown_to_leanpub()` ran successfully](#leanpub-rendering).
+
+
+# Publishing with Coursera
+
+Once your content is extensively developed, consider publishing on Coursera.
+
+::: {.callout-note}
+This guide was prepared for [ITN project](https://www.itcrtraining.org/) developers at Johns Hopkins University or other Coursera partner institutions. Coursera's Educator Resource Center is the authoritative source for platform documentation.
+:::
+
+## Setting up your Coursera course
+
+**If you are from Johns Hopkins:** Follow [this document](https://docs.google.com/document/d/1aZeOSFLkK4hZne4Vb1iaP_0H4zyhIwvbnw9sbdCFq1Y/edit?usp=sharing) and contact Ira Gooding (iragooding@jhu.edu) to create a course shell.
+
+**If you are not from Johns Hopkins:** Set up your educator profile and course shell through your own institution.
+
+## Converting your files for Coursera
+
+GitHub Actions (in `render-all.yml`) renders your course in a Coursera-compatible format — identical to the standard version but without the left-side table of contents. These files are available in the `docs/no_toc` folder. A preview link is posted as a GitHub comment by `render-preview.yml`.
+
+If quizzes were written in Leanpub format, `pull-request.yml` converts them automatically for Coursera upload. Alternatively, you can write quizzes directly on Coursera's website and download them as YAML for storage in your repository.
+
+## Navigating to your course on Coursera
+
+Go to **My Courses** in your Coursera profile. Your course will appear in the list. Click **Go to Course**, then **Edit Course** in the upper right corner.
+
+
+
+
+
+
+
+Select your version (initially Version 1):
+
+
+
+You are now on the Edit content page:
+
+
+
+Each lesson should contain at least one chapter and one quiz. Each module represents approximately one week of learner work — plan one or two lessons per module accordingly.
+
+Click `+ Add Lesson` to add a new lesson:
+
+
+
+### Adding chapters to Coursera
+
+Chapter URLs follow this pattern, using your GitHub Pages URL with `/no_toc/` inserted before the filename:
+
+```
+
/no_toc/
+```
+
+Find your GitHub Pages URL under `Settings` > `Pages`. For example:
+
+```
+https://ottrproject.org/OTTR_Template/no_toc/introduction.html
+```
+
+To add a chapter: in a lesson, click `+ More` and choose **Ungraded Plugin**.
+
+
+
+
+
+Click the edit button on the new Ungraded Plugin:
+
+
+
+
+
+Scroll down and click **Edit Configuration**:
+
+
+
+Replace the example URL with your chapter URL:
+
+
+
+Click **Save Configuration**:
+
+
+
+Adjust the time estimate for your content. If the URL is correct, a preview of your chapter appears:
+
+
+
+Edit the title if needed, then click **Publish** to save. Coursera will ask you to confirm — click **Publish** again.
+
+
+
+### Adding quizzes to Coursera
+
+From the **Edit content** page, click `+ Quiz` on the lesson where you want to add it:
+
+
+
+Click **Edit** on the new quiz:
+
+
+
+To import a converted Leanpub quiz, click **Import Questions** and choose your converted YAML file. (If not yet converted, [see the conversion section](#converting-quizzes-from-leanpub-to-coursera-format).)
+
+
+
+
+
+Click **Upload**:
+
+
+
+If the upload fails, [file an issue](https://github.com/ottrproject/OTTR_Quizzes/issues) with the file and a description of the failure. Note that images, links, and colons in prompts or answers are not supported.
+
+After a successful upload, click **Continue**. Change the quiz type from `Practice Quiz` to `Graded Quiz` as needed using the dropdown on the left. Update the time estimate as well.
+
+
+
+Assign learning objectives by clicking the plus sign under the title, selecting applicable objectives, and clicking **Save**:
+
+
+
+
+
+Edit the title if needed, then click **Publish** to save.
+
+## Programmed messages
+
+From **Edit Course**, navigate to `Content` > `Programmed Messages` in the left sidebar. At minimum, add a **Welcome** and a **Completion** message. Click **Preview** then **Publish** to save each.
+
+**Welcome message template:**
+
+```
+Welcome to {Course Name}
+
+We hope this course will {What will they learn?}
+
+To get the most out of the course {What do you advise?}
+
+If you ever encounter any problems with the course, have questions or ideas, please let us know using this feedback form.
+```
+
+**Completion message template:**
+
+```
+Congratulations and thank you for completing {name of course}!
+
+We hope this course has {What do you hope they learned}.
+
+If you have feedback about our course we would greatly appreciate you filling out this form.
+```
+
+Add a link to your feedback form using the link icon in both messages.
+
+## Grading formula
+
+From **Edit Course**, navigate to your version page. Set the percentage each module's assignments contribute to the final grade.
+
+
+
+## Content schedule
+
+Found under the `Content` tab. Assign modules to weeks of your course here.
+
+## Module descriptions
+
+Located just before learning objectives when editing content. Descriptions help learners know what to expect from each module.
+
+## Landing page
+
+Add a course image and consider including:
+
+- Estimated workload
+- Skills covered
+- Recommended background
+- What students will learn
+
+## Multiple reading formats
+
+Because Coursera uses plug-ins and there are accessibility concerns, add a reading at the very start of your course directing students to alternative formats. Create a reading using the **Add Reading** button (next to **Add Quiz**) and move it to the top of the first module by dragging the three-line icon on the left.
+
+Title the reading:
+
+```
+Multiple Lesson Formats
+```
+
+Paste and modify the following:
+
+```
+Like many of our other courses, the content of this course is available in multiple formats.
+You can also find the lessons for this course at [insert Bookdown link here]. This format might be most appropriate for you if you rely on screen-reader technology.
+Our courses are open source, so you can also find all the source material on GitHub by visiting [insert GitHub link here].
+These resources are used throughout this Coursera course in the form of ungraded plug-ins. You are welcome to use those plug-ins here on Coursera or connect to the content in other formats through the links above. Please select the format that most suits your needs.
+Note about links in the plug-ins: The plug-ins used throughout the course feature links to other resources. To follow these links, right-click on them and open in a new tab or window.
+Regardless of the format you choose for the instructional content, you must take and pass the quizzes here on Coursera if you want to earn a Coursera certificate.
+```
+
diff --git a/resources/dictionary.txt b/resources/dictionary.txt
index e1b2790..729a9db 100644
--- a/resources/dictionary.txt
+++ b/resources/dictionary.txt
@@ -82,3 +82,34 @@ glyphicons
repo
RStudio
ottrproject
+GitKraken
+JS
+nav
+OTTR's
+Reproducibility
+RStudio's
+io
+dropdown
+DaSEH
+gcse
+searchbox
+README
+Zapier
+callout
+Openscapes
+quartify
+Coursera's
+Gooding
+img
+jpg
+Loqui
+Markua
+navbar
+px
+src
+uploadable
+useR
+voiceover
+qmd
+theming
+
diff --git a/resources/footer.html b/resources/footer.html
new file mode 100644
index 0000000..4d3d45b
--- /dev/null
+++ b/resources/footer.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+ Your feedback is greatly appreciated! You can fill out this form
+
+ or file a GitHub issue.
+
+
Otter images by Jimin Hwang.
+
+
+
+
diff --git a/resources/ignore-urls.txt b/resources/ignore-urls.txt
index d762bdd..dee52a6 100644
--- a/resources/ignore-urls.txt
+++ b/resources/ignore-urls.txt
@@ -1 +1,15 @@
https://username.github.io/repository_name/
+${r.url}
+choose_template.html
+./choose_template.html
+/choose_template.html
+choose_template.html/
+getting_started.html
+customize-style.html
+customize-robots.html
+more_features_ganalytic.qmd
+more_features_sources.qmd
+more_features_credits.qmd
+choose_template.html
+customize-docker.html
+https://github.com/YOUR-ORG/YOUR-REPO
diff --git a/resources/images/02-chapter_of_course_files/figure-docx/1YmwKdIy9BeQ3EShgZhvtb3MgR8P6iDX4DfFD65W_gdQ_gcc4fbee202_0_141.png b/resources/images/02-chapter_of_course_files/figure-docx/1YmwKdIy9BeQ3EShgZhvtb3MgR8P6iDX4DfFD65W_gdQ_gcc4fbee202_0_141.png
new file mode 100644
index 0000000..b865852
Binary files /dev/null and b/resources/images/02-chapter_of_course_files/figure-docx/1YmwKdIy9BeQ3EShgZhvtb3MgR8P6iDX4DfFD65W_gdQ_gcc4fbee202_0_141.png differ
diff --git a/resources/images/02-chapter_of_course_files/figure-docx/unnamed-chunk-4-1.png b/resources/images/02-chapter_of_course_files/figure-docx/unnamed-chunk-4-1.png
new file mode 100644
index 0000000..3864705
Binary files /dev/null and b/resources/images/02-chapter_of_course_files/figure-docx/unnamed-chunk-4-1.png differ
diff --git a/resources/images/02-chapter_of_course_files/figure-html/1YmwKdIy9BeQ3EShgZhvtb3MgR8P6iDX4DfFD65W_gdQ_gcc4fbee202_0_141.png b/resources/images/02-chapter_of_course_files/figure-html/1YmwKdIy9BeQ3EShgZhvtb3MgR8P6iDX4DfFD65W_gdQ_gcc4fbee202_0_141.png
new file mode 100644
index 0000000..b865852
Binary files /dev/null and b/resources/images/02-chapter_of_course_files/figure-html/1YmwKdIy9BeQ3EShgZhvtb3MgR8P6iDX4DfFD65W_gdQ_gcc4fbee202_0_141.png differ
diff --git a/resources/images/02-chapter_of_course_files/figure-html/unnamed-chunk-4-1.png b/resources/images/02-chapter_of_course_files/figure-html/unnamed-chunk-4-1.png
new file mode 100644
index 0000000..be0f5ca
Binary files /dev/null and b/resources/images/02-chapter_of_course_files/figure-html/unnamed-chunk-4-1.png differ
diff --git a/resources/images/03-test_cases_files/figure-html/12DPZgPteQBwgal6kSPP58zhPhjZ7QSPZLe3NkA8M3eo_gc87451c247_0_17.png b/resources/images/03-test_cases_files/figure-html/12DPZgPteQBwgal6kSPP58zhPhjZ7QSPZLe3NkA8M3eo_gc87451c247_0_17.png
new file mode 100644
index 0000000..55b5a3a
Binary files /dev/null and b/resources/images/03-test_cases_files/figure-html/12DPZgPteQBwgal6kSPP58zhPhjZ7QSPZLe3NkA8M3eo_gc87451c247_0_17.png differ
diff --git a/resources/images/04-figures_files/figure-html/unnamed-chunk-3-1.png b/resources/images/04-figures_files/figure-html/unnamed-chunk-3-1.png
new file mode 100644
index 0000000..0f0641a
Binary files /dev/null and b/resources/images/04-figures_files/figure-html/unnamed-chunk-3-1.png differ
diff --git a/resources/images/GA_Create_Property.png b/resources/images/GA_Create_Property.png
index 6fb30fd..15906ab 100644
Binary files a/resources/images/GA_Create_Property.png and b/resources/images/GA_Create_Property.png differ
diff --git a/resources/images/GA_Property_setup.png b/resources/images/GA_Property_setup.png
index 7e879e1..ef838b6 100644
Binary files a/resources/images/GA_Property_setup.png and b/resources/images/GA_Property_setup.png differ
diff --git a/resources/images/GA_property.png b/resources/images/GA_property.png
index 6cd4db3..e130ae9 100644
Binary files a/resources/images/GA_property.png and b/resources/images/GA_property.png differ
diff --git a/resources/images/GA_start.png b/resources/images/GA_start.png
new file mode 100644
index 0000000..3e8f7ee
Binary files /dev/null and b/resources/images/GA_start.png differ
diff --git a/resources/images/GA_stream_link_correct.png b/resources/images/GA_stream_link_correct.png
index 4a70a7d..d8a1c70 100644
Binary files a/resources/images/GA_stream_link_correct.png and b/resources/images/GA_stream_link_correct.png differ
diff --git a/resources/images/GA_web.png b/resources/images/GA_web.png
index 1bba400..4ea957f 100644
Binary files a/resources/images/GA_web.png and b/resources/images/GA_web.png differ
diff --git a/resources/images/Image_res_72.png b/resources/images/Image_res_72.png
new file mode 100644
index 0000000..0bf9187
Binary files /dev/null and b/resources/images/Image_res_72.png differ
diff --git a/resources/images/basic_otter_circle.PNG b/resources/images/basic_otter_circle.PNG
new file mode 100644
index 0000000..1b84381
Binary files /dev/null and b/resources/images/basic_otter_circle.PNG differ
diff --git a/resources/images/basic_otter_sticker_transparent.PNG b/resources/images/basic_otter_sticker_transparent.PNG
new file mode 100644
index 0000000..8633880
Binary files /dev/null and b/resources/images/basic_otter_sticker_transparent.PNG differ
diff --git a/resources/images/itcr_training_network.png b/resources/images/itcr_training_network.png
new file mode 100644
index 0000000..b696478
Binary files /dev/null and b/resources/images/itcr_training_network.png differ
diff --git a/resources/images/logo.png b/resources/images/logo.png
new file mode 100644
index 0000000..0ade934
Binary files /dev/null and b/resources/images/logo.png differ
diff --git a/resources/images/methods_of_writing.jpg b/resources/images/methods_of_writing.jpg
new file mode 100644
index 0000000..b59a5f5
Binary files /dev/null and b/resources/images/methods_of_writing.jpg differ
diff --git a/resources/images/otter.ico b/resources/images/otter.ico
new file mode 100644
index 0000000..073e63b
Binary files /dev/null and b/resources/images/otter.ico differ
diff --git a/resources/images/pull_request_model.jpg b/resources/images/pull_request_model.jpg
new file mode 100644
index 0000000..1f2f4d4
Binary files /dev/null and b/resources/images/pull_request_model.jpg differ
diff --git a/resources/images/tools.png b/resources/images/tools.png
new file mode 100644
index 0000000..0c74d5d
Binary files /dev/null and b/resources/images/tools.png differ
diff --git a/resources/screenshots/GA_Create_Property.png b/resources/screenshots/GA_Create_Property.png
new file mode 100644
index 0000000..6fb30fd
Binary files /dev/null and b/resources/screenshots/GA_Create_Property.png differ
diff --git a/resources/screenshots/GA_ID.png b/resources/screenshots/GA_ID.png
new file mode 100644
index 0000000..24f98af
Binary files /dev/null and b/resources/screenshots/GA_ID.png differ
diff --git a/resources/screenshots/GA_Property_setup.png b/resources/screenshots/GA_Property_setup.png
new file mode 100644
index 0000000..7e879e1
Binary files /dev/null and b/resources/screenshots/GA_Property_setup.png differ
diff --git a/resources/screenshots/GA_account.png b/resources/screenshots/GA_account.png
new file mode 100644
index 0000000..4dcc02b
Binary files /dev/null and b/resources/screenshots/GA_account.png differ
diff --git a/resources/screenshots/GA_admin.png b/resources/screenshots/GA_admin.png
new file mode 100644
index 0000000..482a34a
Binary files /dev/null and b/resources/screenshots/GA_admin.png differ
diff --git a/resources/screenshots/GA_check.png b/resources/screenshots/GA_check.png
new file mode 100644
index 0000000..a700d23
Binary files /dev/null and b/resources/screenshots/GA_check.png differ
diff --git a/resources/screenshots/GA_property.png b/resources/screenshots/GA_property.png
new file mode 100644
index 0000000..6cd4db3
Binary files /dev/null and b/resources/screenshots/GA_property.png differ
diff --git a/resources/screenshots/GA_reports.png b/resources/screenshots/GA_reports.png
new file mode 100644
index 0000000..fb10a03
Binary files /dev/null and b/resources/screenshots/GA_reports.png differ
diff --git a/resources/screenshots/GA_stream_link.png b/resources/screenshots/GA_stream_link.png
new file mode 100644
index 0000000..96e99a5
Binary files /dev/null and b/resources/screenshots/GA_stream_link.png differ
diff --git a/resources/screenshots/GA_stream_link_correct.png b/resources/screenshots/GA_stream_link_correct.png
new file mode 100644
index 0000000..4a70a7d
Binary files /dev/null and b/resources/screenshots/GA_stream_link_correct.png differ
diff --git a/resources/screenshots/GA_terms.png b/resources/screenshots/GA_terms.png
new file mode 100644
index 0000000..47c125d
Binary files /dev/null and b/resources/screenshots/GA_terms.png differ
diff --git a/resources/screenshots/GA_web.png b/resources/screenshots/GA_web.png
new file mode 100644
index 0000000..1bba400
Binary files /dev/null and b/resources/screenshots/GA_web.png differ
diff --git a/resources/screenshots/GHASetUp.png b/resources/screenshots/GHASetUp.png
new file mode 100644
index 0000000..ea86399
Binary files /dev/null and b/resources/screenshots/GHASetUp.png differ
diff --git a/resources/screenshots/OTTR_Robot_Image.png b/resources/screenshots/OTTR_Robot_Image.png
new file mode 100644
index 0000000..0295d45
Binary files /dev/null and b/resources/screenshots/OTTR_Robot_Image.png differ
diff --git a/resources/screenshots/add-jhudsl-robot.png b/resources/screenshots/add-jhudsl-robot.png
new file mode 100644
index 0000000..e2bf803
Binary files /dev/null and b/resources/screenshots/add-jhudsl-robot.png differ
diff --git a/resources/screenshots/add-repo-sync.png b/resources/screenshots/add-repo-sync.png
new file mode 100644
index 0000000..df5c877
Binary files /dev/null and b/resources/screenshots/add-repo-sync.png differ
diff --git a/resources/screenshots/automatic_checks.png b/resources/screenshots/automatic_checks.png
new file mode 100644
index 0000000..e91952f
Binary files /dev/null and b/resources/screenshots/automatic_checks.png differ
diff --git a/resources/screenshots/branch_settings.png b/resources/screenshots/branch_settings.png
new file mode 100644
index 0000000..1aa3aa5
Binary files /dev/null and b/resources/screenshots/branch_settings.png differ
diff --git a/resources/screenshots/branches.png b/resources/screenshots/branches.png
new file mode 100644
index 0000000..de79550
Binary files /dev/null and b/resources/screenshots/branches.png differ
diff --git a/resources/screenshots/change_https.png b/resources/screenshots/change_https.png
new file mode 100644
index 0000000..3891b0c
Binary files /dev/null and b/resources/screenshots/change_https.png differ
diff --git a/resources/screenshots/change_pages_settings.png b/resources/screenshots/change_pages_settings.png
new file mode 100644
index 0000000..fe0f29e
Binary files /dev/null and b/resources/screenshots/change_pages_settings.png differ
diff --git a/resources/screenshots/check-comments.png b/resources/screenshots/check-comments.png
new file mode 100644
index 0000000..e786593
Binary files /dev/null and b/resources/screenshots/check-comments.png differ
diff --git a/resources/screenshots/check_results.png b/resources/screenshots/check_results.png
new file mode 100644
index 0000000..7855aac
Binary files /dev/null and b/resources/screenshots/check_results.png differ
diff --git a/resources/screenshots/check_results_pass.png b/resources/screenshots/check_results_pass.png
new file mode 100644
index 0000000..4838cb0
Binary files /dev/null and b/resources/screenshots/check_results_pass.png differ
diff --git a/resources/screenshots/clone.png b/resources/screenshots/clone.png
new file mode 100644
index 0000000..42d639b
Binary files /dev/null and b/resources/screenshots/clone.png differ
diff --git a/resources/screenshots/creating_new_course_repo.png b/resources/screenshots/creating_new_course_repo.png
new file mode 100644
index 0000000..61eaa71
Binary files /dev/null and b/resources/screenshots/creating_new_course_repo.png differ
diff --git a/resources/screenshots/edit-sync.yml.png b/resources/screenshots/edit-sync.yml.png
new file mode 100644
index 0000000..1cdb50c
Binary files /dev/null and b/resources/screenshots/edit-sync.yml.png differ
diff --git a/resources/screenshots/example_credits.png b/resources/screenshots/example_credits.png
new file mode 100644
index 0000000..7d4d8b3
Binary files /dev/null and b/resources/screenshots/example_credits.png differ
diff --git a/resources/screenshots/file_pane.png b/resources/screenshots/file_pane.png
new file mode 100644
index 0000000..feae5d8
Binary files /dev/null and b/resources/screenshots/file_pane.png differ
diff --git a/resources/screenshots/gha-actions-error.png b/resources/screenshots/gha-actions-error.png
new file mode 100644
index 0000000..5f0e20a
Binary files /dev/null and b/resources/screenshots/gha-actions-error.png differ
diff --git a/resources/screenshots/gha-checks.png b/resources/screenshots/gha-checks.png
new file mode 100644
index 0000000..3e965c3
Binary files /dev/null and b/resources/screenshots/gha-checks.png differ
diff --git a/resources/screenshots/gha-preview-comment.png b/resources/screenshots/gha-preview-comment.png
new file mode 100644
index 0000000..29ecc60
Binary files /dev/null and b/resources/screenshots/gha-preview-comment.png differ
diff --git a/resources/screenshots/git-secrets.png b/resources/screenshots/git-secrets.png
new file mode 100644
index 0000000..fb541d4
Binary files /dev/null and b/resources/screenshots/git-secrets.png differ
diff --git a/resources/screenshots/guide_issues.png b/resources/screenshots/guide_issues.png
new file mode 100644
index 0000000..b56a6be
Binary files /dev/null and b/resources/screenshots/guide_issues.png differ
diff --git a/resources/screenshots/guides_issues.png b/resources/screenshots/guides_issues.png
new file mode 100644
index 0000000..00f0153
Binary files /dev/null and b/resources/screenshots/guides_issues.png differ
diff --git a/resources/screenshots/guides_issues_2.png b/resources/screenshots/guides_issues_2.png
new file mode 100644
index 0000000..1a87007
Binary files /dev/null and b/resources/screenshots/guides_issues_2.png differ
diff --git a/resources/screenshots/guides_issues_3.png b/resources/screenshots/guides_issues_3.png
new file mode 100644
index 0000000..3b32c1a
Binary files /dev/null and b/resources/screenshots/guides_issues_3.png differ
diff --git a/resources/screenshots/guides_issues_4.png b/resources/screenshots/guides_issues_4.png
new file mode 100644
index 0000000..388b3ca
Binary files /dev/null and b/resources/screenshots/guides_issues_4.png differ
diff --git a/resources/screenshots/issue_enroll.png b/resources/screenshots/issue_enroll.png
new file mode 100644
index 0000000..fcf57c5
Binary files /dev/null and b/resources/screenshots/issue_enroll.png differ
diff --git a/resources/screenshots/main.png b/resources/screenshots/main.png
new file mode 100644
index 0000000..5cfd534
Binary files /dev/null and b/resources/screenshots/main.png differ
diff --git a/resources/screenshots/messages.png b/resources/screenshots/messages.png
new file mode 100644
index 0000000..0b21429
Binary files /dev/null and b/resources/screenshots/messages.png differ
diff --git a/resources/screenshots/new_project.png b/resources/screenshots/new_project.png
new file mode 100644
index 0000000..a5f6c72
Binary files /dev/null and b/resources/screenshots/new_project.png differ
diff --git a/resources/screenshots/numbering_bookdown.png b/resources/screenshots/numbering_bookdown.png
new file mode 100644
index 0000000..b638f6c
Binary files /dev/null and b/resources/screenshots/numbering_bookdown.png differ
diff --git a/resources/screenshots/numbering_leanpub.png b/resources/screenshots/numbering_leanpub.png
new file mode 100644
index 0000000..42fa473
Binary files /dev/null and b/resources/screenshots/numbering_leanpub.png differ
diff --git a/resources/screenshots/output_file_with_GA.png b/resources/screenshots/output_file_with_GA.png
new file mode 100644
index 0000000..feed915
Binary files /dev/null and b/resources/screenshots/output_file_with_GA.png differ
diff --git a/resources/screenshots/pages_settings.png b/resources/screenshots/pages_settings.png
new file mode 100644
index 0000000..4ef82e5
Binary files /dev/null and b/resources/screenshots/pages_settings.png differ
diff --git a/resources/screenshots/pr-prompt.png b/resources/screenshots/pr-prompt.png
new file mode 100644
index 0000000..88ba468
Binary files /dev/null and b/resources/screenshots/pr-prompt.png differ
diff --git a/resources/screenshots/preview_comment.png b/resources/screenshots/preview_comment.png
new file mode 100644
index 0000000..da7c759
Binary files /dev/null and b/resources/screenshots/preview_comment.png differ
diff --git a/resources/screenshots/project_directory.png b/resources/screenshots/project_directory.png
new file mode 100644
index 0000000..4a52269
Binary files /dev/null and b/resources/screenshots/project_directory.png differ
diff --git a/resources/screenshots/project_type.png b/resources/screenshots/project_type.png
new file mode 100644
index 0000000..78c3f1f
Binary files /dev/null and b/resources/screenshots/project_type.png differ
diff --git a/resources/screenshots/pull_request.png b/resources/screenshots/pull_request.png
new file mode 100644
index 0000000..69c96ad
Binary files /dev/null and b/resources/screenshots/pull_request.png differ
diff --git a/resources/screenshots/pull_request_2.png b/resources/screenshots/pull_request_2.png
new file mode 100644
index 0000000..552a8d1
Binary files /dev/null and b/resources/screenshots/pull_request_2.png differ
diff --git a/resources/screenshots/pull_request_3.png b/resources/screenshots/pull_request_3.png
new file mode 100644
index 0000000..7481623
Binary files /dev/null and b/resources/screenshots/pull_request_3.png differ
diff --git a/resources/screenshots/question_example.png b/resources/screenshots/question_example.png
new file mode 100644
index 0000000..9c4696b
Binary files /dev/null and b/resources/screenshots/question_example.png differ
diff --git a/resources/screenshots/request-reviewer.png b/resources/screenshots/request-reviewer.png
new file mode 100644
index 0000000..b8a4cf2
Binary files /dev/null and b/resources/screenshots/request-reviewer.png differ
diff --git a/resources/screenshots/select_directory.png b/resources/screenshots/select_directory.png
new file mode 100644
index 0000000..e9638b5
Binary files /dev/null and b/resources/screenshots/select_directory.png differ
diff --git a/resources/screenshots/slide_url.png b/resources/screenshots/slide_url.png
new file mode 100644
index 0000000..28734b1
Binary files /dev/null and b/resources/screenshots/slide_url.png differ
diff --git a/resources/screenshots/spell_check_comment.png b/resources/screenshots/spell_check_comment.png
new file mode 100644
index 0000000..58161bf
Binary files /dev/null and b/resources/screenshots/spell_check_comment.png differ
diff --git a/resources/screenshots/spell_check_fails.png b/resources/screenshots/spell_check_fails.png
new file mode 100644
index 0000000..a55628b
Binary files /dev/null and b/resources/screenshots/spell_check_fails.png differ
diff --git a/resources/screenshots/template_button.png b/resources/screenshots/template_button.png
new file mode 100644
index 0000000..2dd94b6
Binary files /dev/null and b/resources/screenshots/template_button.png differ
diff --git a/resources/screenshots/templates_to_edit.png b/resources/screenshots/templates_to_edit.png
new file mode 100644
index 0000000..dd8e7ed
Binary files /dev/null and b/resources/screenshots/templates_to_edit.png differ
diff --git a/writing_content_courses.qmd b/writing_content_courses.qmd
new file mode 100644
index 0000000..214f05b
--- /dev/null
+++ b/writing_content_courses.qmd
@@ -0,0 +1,625 @@
+---
+title: "Start writing content"
+format:
+ html:
+ toc: true
+editor_options:
+ markdown:
+ wrap: 72
+---
+
+```{=html}
+
+```
+
+Now you have a course repository on GitHub and you're ready to start writing content!
+
+The OTTR content development process revolves around the use of
+**pull requests**! Pull requests are a way to set up
+**proposed changes** (instead of direct changes) before you publish
+them. They enable OTTR to test your proposed changes for
+potential issues such as broken URLs or spelling errors. Importantly, pull requests
+facilitate discussions with others regarding proposed changes.
+
+