|
| 1 | +{ |
| 2 | + "cells": [ |
| 3 | + { |
| 4 | + "cell_type": "markdown", |
| 5 | + "id": "06e8fcaf-9d9a-4584-9747-d7129c96b31c", |
| 6 | + "metadata": {}, |
| 7 | + "source": [ |
| 8 | + "# New Course Checklist and Timeline\n", |
| 9 | + "\n", |
| 10 | + "## Timescales & Ordering\n", |
| 11 | + "\n", |
| 12 | + "- **12 weeks before launch** \n", |
| 13 | + " - Hold initial logistics call with Programme Management to define learning objectives, course scope, and high-level timeline \n", |
| 14 | + " - Confirm roles (Developer, Lead, Helper) and schedule regular check-ins \n", |
| 15 | + "\n", |
| 16 | + "- **10 weeks before launch** \n", |
| 17 | + " - Developer begins drafting core materials (notebooks, slides, datasets, etc.) \n", |
| 18 | + " - Create a feature branch on the [CfRR_Courses repo](https://github.com/coding-for-reproducible-research/CfRR_Courses) \n", |
| 19 | + "\n", |
| 20 | + "- **5 weeks before launch** \n", |
| 21 | + " - Submit the first complete draft of materials for internal review \n", |
| 22 | + " - Draft metadata in `programme_information` and `section_landing_page` (titles, descriptions, prerequisites) \n", |
| 23 | + " - Create the “Where Is My Understanding?” quiz; confirm the quiz `JSON` files render via `JupyterQuiz`\n", |
| 24 | + " - Conduct accessibility review (alt text, colour contrast, headings, tables) \n", |
| 25 | + "\n", |
| 26 | + "- **4 weeks before launch** \n", |
| 27 | + " - Integrate content into `JupyterBook`; perform a dry-run build on staging \n", |
| 28 | + " - Link all assets (images, data files, interactive widgets) \n", |
| 29 | + " - Add course pages to `_toc.yml` \n", |
| 30 | + " - If non-Python kernels are used, add them to the non-run list in `_config.yml` \n", |
| 31 | + "\n", |
| 32 | + "- **1 week before launch** \n", |
| 33 | + " - Freeze content; perform final proofreading and complete “top-to-bottom” code execution \n", |
| 34 | + " - Hold sign-off meeting with Programme Management \n", |
| 35 | + " - Merge the feature branch and add the new course to the live website \n", |
| 36 | + "\n", |
| 37 | + "- **Post-launch (within 1 week)** \n", |
| 38 | + " - Collect initial learner feedback via online form; log any issues as GitHub issues \n", |
| 39 | + " - Plan the first update cycle based on participant feedback \n", |
| 40 | + "\n", |
| 41 | + "## Checklist\n", |
| 42 | + "\n", |
| 43 | + "### Logistics & Planning\n", |
| 44 | + "- [ ] Schedule and hold **initial logistics call** with Programme Management and Delivery Team \n", |
| 45 | + "- [ ] Define roles: Developer, Leader, Helper, Participant, Programme Management \n", |
| 46 | + "- [ ] Open GitHub Issue for the new course; create feature branch \n", |
| 47 | + "\n", |
| 48 | + "### Content Creation & Structure\n", |
| 49 | + "- [ ] Draft **course objectives** and detailed **learning objectives** for each section of the course\n", |
| 50 | + "- [ ] Develop Jupyter notebooks (`.ipynb`) for Python or learnr tutorials (`.Rmd`) for R. Other types of course should be discussed with the central CfRR team\n", |
| 51 | + "- [ ] Include slides or PDFs as needed; confirm static content links \n", |
| 52 | + "\n", |
| 53 | + "### Metadata & Site Integration\n", |
| 54 | + "- [ ] Populate `programme_information` \n", |
| 55 | + "- [ ] Populate `section_landing_page`\n", |
| 56 | + "- [ ] Populate `where_is_my_understanding`\n", |
| 57 | + "- [ ] Ensure no overlap or missing sections \n", |
| 58 | + "\n", |
| 59 | + "### Rendering & Functionality\n", |
| 60 | + "- [ ] Build with Jupyter Book on the PR; confirm notebooks render without errors \n", |
| 61 | + "- [ ] Test interactive plots, embedded HTML, and widgets \n", |
| 62 | + "- [ ] Validate “Where Is My Understanding?” quiz (`display_quiz(\"path/to/quiz.json\")`) \n", |
| 63 | + "\n", |
| 64 | + "### Asset Linking & URL Encoding\n", |
| 65 | + "- [ ] Verify all file paths (spaces, special characters) are realtive paths as used in JupyterBook\n", |
| 66 | + "- [ ] Confirm images, data files, and HTML assets load correctly \n", |
| 67 | + "\n", |
| 68 | + "### Accessibility & Style\n", |
| 69 | + "- [ ] Use descriptive headings (H1–H3) and labels \n", |
| 70 | + "- [ ] Provide concise alt text for all images \n", |
| 71 | + "- [ ] Check colour contrast with a Contrast Checker \n", |
| 72 | + "- [ ] Avoid conveying information by colour alone; add text indicators, change shapes of points etc \n", |
| 73 | + "- [ ] Use clear, simple language and accessible tables \n", |
| 74 | + "\n", |
| 75 | + "### Testing & QA\n", |
| 76 | + "- [ ] Execute all notebooks end-to-end \n", |
| 77 | + "- [ ] Peer-review code comments and markdown explanations \n", |
| 78 | + "- [ ] Conduct cross-browser and device checks \n", |
| 79 | + "\n", |
| 80 | + "\n", |
| 81 | + "## Highlighting Issues\n", |
| 82 | + "\n", |
| 83 | + "Auditing materials refreshes your understanding and helps improve accuracy. Types of issues include: \n", |
| 84 | + "- Typographical errors \n", |
| 85 | + "- Factual errors \n", |
| 86 | + "- Content clarity and comprehension \n", |
| 87 | + "- Formatting and layout issues \n", |
| 88 | + "- Technical errors (broken links, non-functional elements) \n", |
| 89 | + "- Cultural and bias concerns \n", |
| 90 | + "- Outdated content \n", |
| 91 | + "- Logical fallacies or reasoning errors \n", |
| 92 | + "\n", |
| 93 | + "## Ensuring Understanding\n", |
| 94 | + "- **Multiple-Choice Questions** via JupyterQuiz (`display_quiz(\"path/to/quiz.json\")`) \n", |
| 95 | + "- **Coding Exercises** with clear instructions, hints, and dropdown solutions (use Jupyter Book admonitions) \n", |
| 96 | + "\n", |
| 97 | + "## Language-Specific Standards\n", |
| 98 | + "\n", |
| 99 | + "### Python\n", |
| 100 | + "- Use Jupyter notebooks (`.ipynb`) with well-commented code and markdown \n", |
| 101 | + "- Include visualizations, interactive elements, and test notebooks end-to-end \n", |
| 102 | + "\n", |
| 103 | + "### R\n", |
| 104 | + "- Use learnr tutorials (`.Rmd`) distributed via the `cfrr-r-tutorials` repo \n", |
| 105 | + "- Define prerequisites, embed interactive exercises/quizzes, and self-contain data and instructions \n", |
| 106 | + "\n", |
| 107 | + "\n", |
| 108 | + " \n" |
| 109 | + ] |
| 110 | + }, |
| 111 | + { |
| 112 | + "cell_type": "code", |
| 113 | + "execution_count": null, |
| 114 | + "id": "64cc4c3d-6356-4d44-b804-63cffb851b44", |
| 115 | + "metadata": {}, |
| 116 | + "outputs": [], |
| 117 | + "source": [] |
| 118 | + } |
| 119 | + ], |
| 120 | + "metadata": { |
| 121 | + "kernelspec": { |
| 122 | + "display_name": "Python 3 (ipykernel)", |
| 123 | + "language": "python", |
| 124 | + "name": "python3" |
| 125 | + }, |
| 126 | + "language_info": { |
| 127 | + "codemirror_mode": { |
| 128 | + "name": "ipython", |
| 129 | + "version": 3 |
| 130 | + }, |
| 131 | + "file_extension": ".py", |
| 132 | + "mimetype": "text/x-python", |
| 133 | + "name": "python", |
| 134 | + "nbconvert_exporter": "python", |
| 135 | + "pygments_lexer": "ipython3", |
| 136 | + "version": "3.9.19" |
| 137 | + } |
| 138 | + }, |
| 139 | + "nbformat": 4, |
| 140 | + "nbformat_minor": 5 |
| 141 | +} |
0 commit comments