Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
81db09a
Move ITD blocks to common-content
illicitonion Mar 17, 2026
add4e98
Skip empty links in breadcrumbs
illicitonion Mar 17, 2026
4df51d1
Course-overview uses a different template
illicitonion Mar 17, 2026
1e659e1
Add page name to error message
illicitonion Mar 17, 2026
046e142
Update course data and overview templates
illicitonion Mar 17, 2026
d8781e9
Register gets course from section not site
illicitonion Mar 17, 2026
600814f
Move ITP into org-cyf
illicitonion Mar 17, 2026
3c6e22e
Layout ITP index page as map
illicitonion Mar 17, 2026
fd32e41
Move piscine into org-cyf
illicitonion Mar 17, 2026
132e2ba
Update course link
illicitonion Mar 17, 2026
eb78a51
Move itd content
illicitonion Mar 17, 2026
c5c7ab4
Map animation is configurable, not overridable
illicitonion Mar 17, 2026
f995b53
Move SDC into common site
illicitonion Mar 17, 2026
3f18276
Update SDC metadata
illicitonion Mar 17, 2026
b14dd19
Move Launch blocks to common-content
illicitonion Mar 17, 2026
fc576eb
Move tracks blocks to common-content
illicitonion Mar 17, 2026
ef9cc56
Move tracks into common site
illicitonion Mar 17, 2026
36c055f
Fix up tracks taxonomies
illicitonion Mar 17, 2026
0524efd
Update metadata
illicitonion Mar 17, 2026
b23c82b
Update links
illicitonion Mar 17, 2026
73b66b1
Update menu names
illicitonion Mar 17, 2026
c3beb88
Move How This Works
illicitonion Mar 17, 2026
9bab05c
Disambiguate menus
illicitonion Mar 17, 2026
9dcfeed
Overview supports nested sections
illicitonion Mar 17, 2026
2467828
Enable register
illicitonion Mar 18, 2026
0b25488
Move ITP static files
illicitonion Mar 18, 2026
11c3699
Move Launch content
illicitonion Mar 18, 2026
4fd1a2b
Update Launch layout
illicitonion Mar 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ Each org or team configures its own Hugo site that mounts the common theme and c
## Examples

- https://curriculum.codeyourfuture.io/
- https://programming.codeyourfuture.io/
- https://curriculum.codeyourfuture.io/itp/
- https://curriculum.codeyourfuture.io/guides/
- https://workshops.codeyourfuture.io/
- https://piscine.codeyourfuture.io/
- https://sdc.codeyourfuture.io/
- https://curriculum.codeyourfuture.io/piscine/
- https://curriculum.codeyourfuture.io/sdc/
- https://curriculum.migracode.org/

## Contributing
Expand Down
37 changes: 37 additions & 0 deletions common-content/en/module/itd/how-itd-works/useful-links/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
+++
title="Useful links"
author="Tony Beaumont"
time=2
+++

Here is a quick list of useful links (some are for applicants only, but it is helpful to know them if an applicant has a problem):

**The ITD Syllabus:**
[https://curriculum.codeyourfuture.io/itd/](https://curriculum.codeyourfuture.io/itd/). It's right here.

**ITD signup page (for applicants only):**
[https://codeyourfuture.io/itc/](https://codeyourfuture.io/itc/)

**CYF Learning Platform (for applicants only):**
[https://course1.codeyourfuture.io/](https://course1.codeyourfuture.io/)

**ITD Slack Channel:**
[https://codeyourfuture.slack.com/archives/C01332PNRTN](https://codeyourfuture.slack.com/archives/C01332PNRTN). Post into the slack channel if you have questions or problems.

**ITD Canvas:**
[https://codeyourfuture.slack.com/canvas/C01332PNRTN](https://codeyourfuture.slack.com/canvas/C01332PNRTN). The canvas is the official CYF information about ITD. The canvas is attached to the ITD slack channel.

**CYF Dashboard:**
[https://dashboard.codeyourfuture.io/](https://dashboard.codeyourfuture.io/). Use the dashboard to view applicant progress.

**Acceptance Criteria:** These are what you refer to when approving applicants work:

- **Step 1**: [https://curriculum.codeyourfuture.io/itd/steps/one/#acceptance-criteria](https://curriculum.codeyourfuture.io/itd/steps/one/#acceptance-criteria)
- **Step 2**: [https://curriculum.codeyourfuture.io/itd/steps/two/#acceptance-criteria](https://curriculum.codeyourfuture.io/itd/steps/two/#acceptance-criteria)
- **Step 3**: [https://curriculum.codeyourfuture.io/itd/steps/three/#acceptance-criteria](https://curriculum.codeyourfuture.io/itd/steps/three/#acceptance-criteria)
- **Step 4**: [https://curriculum.codeyourfuture.io/itd/steps/four/#acceptance-criteria](https://curriculum.codeyourfuture.io/itd/steps/four/#acceptance-criteria)
- **Step 5**: [https://curriculum.codeyourfuture.io/itd/steps/five/#acceptance-criteria](https://curriculum.codeyourfuture.io/itd/steps/five/#acceptance-criteria)
- **Step 6**: [https://curriculum.codeyourfuture.io/itd/steps/six/#acceptance-criteria](https://curriculum.codeyourfuture.io/itd/steps/six/#acceptance-criteria)
- **Step 7**: [https://curriculum.codeyourfuture.io/itd/steps/seven/#acceptance-criteria](https://curriculum.codeyourfuture.io/itd/steps/seven/#acceptance-criteria)

## To be continued...
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ This is the ITD syllabus.

Applicants will work through the steps week by week. Each step contains instructions for the applicants to do complete a task which they should then submit. Volunteers can find these submissions on the dashboard and give feedback.

Tip: You can read all the steps right here in the menu ["Steps"](https://itd.codeyourfuture.io/).
Tip: You can read all the steps right here in the menu ["Steps"](https://curriculum.codeyourfuture.io/itd/).

The Workshops will be organised by each region, and are designed to be face-to-face opportunities for applicants to ask questions and clarify their learning. Workshops will be advertised on Eventbrite and advertised in Slack.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ The information you will find here is the information I found useful as a volunt

### Introduction

The Introduction to Digital course is known as ITD. You can find an overview of how ITD works here [https://itd.codeyourfuture.io/how-itd-works/](https://itd.codeyourfuture.io/how-itd-works/)
The Introduction to Digital course is known as ITD. You can find an overview of how ITD works here [https://curriculum.codeyourfuture.io/itd/how-itd-works/](https://curriculum.codeyourfuture.io/itd/how-itd-works/)

The role of volunteers is to review submissions by applicants and respond with feedback. The submissions will be found on the Dashboard. See the side menu for the instructions on how to access the dashboard.
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ You must do this in the [CYF Course Platform](https://application-process.codeyo
1. Upload a screenshot of your Duolingo test result

> [!NOTE]
> To qualify as a CYF trainee and access later, funded courses like [The Piscine](https://piscine.codeyourfuture.io/), you will be required to take a proctored English exam. This will be a free, certified exam, donated by our partners, Duolingo.
> To qualify as a CYF trainee and access later, funded courses like [The Piscine](https://curriculum.codeyourfuture.io/piscine/), you will be required to take a proctored English exam. This will be a free, certified exam, donated by our partners, Duolingo.
2 changes: 1 addition & 1 deletion common-content/en/module/js3/fetch-films/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ time = 30
Now that we have a basic understanding of Web APIs and Promises, let's use look again at our code for fetching film data:

```js
const endpoint = "https://programming.codeyourfuture.io/dummy-apis/films.json";
const endpoint = "https://curriculum.codeyourfuture.io/itp/dummy-apis/films.json";

const fetchFilms = async () => {
const response = await fetch(endpoint);
Expand Down
2 changes: 1 addition & 1 deletion common-content/en/module/js3/using-fetch/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ const state = {
searchTerm: "",
};

const endpoint = "https://programming.codeyourfuture.io/dummy-apis/films.json";
const endpoint = "https://curriculum.codeyourfuture.io/itp/dummy-apis/films.json";

const fetchFilms = async () => {
const response = await fetch(endpoint);
Expand Down
2 changes: 1 addition & 1 deletion common-content/en/module/onboarding/application/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ objectives = [

### Welcome

To take this course you must have completed [Intro to Digital](https://itd.codeyourfuture.io) and received a micro-credential badge by email. Check your email. This badge is your ticket to access this course.
To take this course you must have completed [Intro to Digital](https://curriculum.codeyourfuture.io/itd) and received a micro-credential badge by email. Check your email. This badge is your ticket to access this course.

You will receive an email within two weeks of completing ITD, inviting you to begin this course as a Learner. All operational details should be linked in this email. If you have not received an email, please tell us at contact@codeyourfuture.io.

Expand Down
2 changes: 1 addition & 1 deletion common-content/en/module/piscine/interviews/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ You will be asked to explain the code. You may be asked to:

- Your interview will be recorded and scored against a rubric you can read before the interview.
- You will not get feedback in the interview itself. You will be sent feedback within a few days of the interview.
- If you passed, you will be invited to join the next [SDC](https://sdc.codeyourfuture.io/).
- If you passed, you will be invited to join the next [SDC](https://curriculum.codeyourfuture.io/sdc/).
- If you failed, you will be given feedback and invited to discuss the best next steps for you.


Expand Down
2 changes: 1 addition & 1 deletion common-content/en/module/ux/usability-workshop/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ objectives = [

The goal of this workshop is to help trainees understand the usability principles that enable them to create functional and user-friendly digital products.

Trainees should have done [the prep](https://programming.codeyourfuture.io/data-flows/sprints/1/prep/#usability-workshop-prep) before this workshop.
Trainees should have done [the prep](https://curriculum.codeyourfuture.io/itp/data-flows/sprints/1/prep/#usability-workshop-prep) before this workshop.

This workshop is expected to accompany [the associated slides in Figma](https://www.figma.com/slides/UaetXlZZwG3VGYpdxd84Zm/CYF-Usability?node-id=1-177&t=jWgI37RMiLG5Z1pj-1) (passcode: `cyf2025`) - make sure to present them and work through them.

Expand Down
13 changes: 12 additions & 1 deletion common-theme/assets/styles/04-components/card.scss
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
line-height: 1;
}
}
&__description {
&__description-animation {
margin: 0 auto auto 0; // pin top left
.c-map & {
position: absolute;
Expand All @@ -42,6 +42,17 @@
animation: text-appear cubic-bezier(0.25, 1.375, 0.25, 1) 0.5s forwards;
}
}
&__description-noanimation {
margin: 0 auto auto 0; // pin top left
.c-map & {
position: static;
font-size: inherit;
opacity: 100%;
background-color: transparent;
padding: var(--theme-spacing--1);
}
animation: none;
}
&__cta {
display: flex;
margin: var(--theme-spacing--1) auto;
Expand Down
16 changes: 16 additions & 0 deletions common-theme/assets/styles/04-components/map.scss
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,19 @@
rotate(-3.5deg);
}
}

.noanimation .c-map .c-card {
&__description {
position: static;
font-size: inherit;
opacity: 100%;
background-color: transparent;
}
&:hover,
&:focus,
&:active {
.c-card__description {
animation: none;
}
}
}
3 changes: 2 additions & 1 deletion common-theme/layouts/_default/day-plan.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<time-stamper start-time="{{$startTime}}">
<div class="c-block__series c-block__series--timeline">
{{ if ne .Params.noRegister true }}
{{ $courseSection := $.Page.Section }}
{{ $moduleSection := $.Page.CurrentSection }}
{{/* Most of our modules have two levels of hierarchy - course > module > sprint. But some go straight course > sprint or module > sprint - allow opting into this with a param. */}}
{{ $parentsToTraverseToModule := $moduleSection.Params.parentsToTraverseToModule }}
Expand All @@ -28,7 +29,7 @@
{{ with $moduleSection.Params.moduleForRegister }}
{{ $module = . }}
{{ end }}
{{ partial "register-attendance.html" (dict "course" site.Title "module" $module "day" $.Page.CurrentSection.Title) }}
{{ partial "register-attendance.html" (dict "course" $courseSection "module" $module "day" $.Page.CurrentSection.Title) }}
{{ end }}
{{ range $index, $block := .Params.blocks }}

Expand Down
4 changes: 2 additions & 2 deletions common-theme/layouts/_default/overview.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
{{ errorf "You must define a menu in your overview_menu front matter param" }}
{{ end }}
{{ if not (index .Site.Menus $overviewMenu) }}
{{ errorf "Overview page tried to generate overview for menu %s which is empty" $overviewMenu }}
{{ errorf "Overview page at %s tried to generate overview for menu %s which is empty" .Page.Path $overviewMenu }}
{{ end }}

{{ range index .Site.Menus $overviewMenu }}
Expand All @@ -22,7 +22,7 @@
{{ $moduleTitle := .Page.Params.Title }}
{{/* <!-- We lazily show the module title only if there's actual content under it.--> */}}
{{ $hasShownModuleTitle := false }}
{{ range where $site.Pages "Section" .Page.Section }}
{{ range .Page.Pages }}
{{/* ==========================================
for each page in each sprint in the module <= this isn't looping over the sprints, it's a level higher
=============================================
Expand Down
50 changes: 27 additions & 23 deletions common-theme/layouts/partials/breadcrumbs.html
Original file line number Diff line number Diff line change
@@ -1,30 +1,34 @@
{{ with .Parent }}
<nav class="c-breadcrumbs">
<ol class="c-breadcrumbs__list">
{{/* Skip the first ancestor which is the root page for the whole site - we already have a link here in the site logo. */}}
{{- range after 1 .Ancestors.Reverse }}
<li class="c-breadcrumbs__item">
<a
class="c-breadcrumbs__link"
href="{{ .RelPermalink }}"
{{- if eq (len .Ancestors) 1 -}}
data-pagefind-filter="module"
{{- end -}}
><span class="c-breadcrumbs__text">{{ .Title }}</span>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
width="24px"
stroke-width="1.5"
stroke="currentColor"
class="c-breadcrumbs__icon">
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M8.25 4.5l7.5 7.5-7.5 7.5" />
</svg>
</a>
</li>
{{/* Skip any ancestors that don't have a link, e.g. ones that set build.render = "never". */}}
{{ if .RelPermalink }}
<li class="c-breadcrumbs__item">
<a
class="c-breadcrumbs__link"
href="{{ .RelPermalink }}"
{{- if eq (len .Ancestors) 1 -}}
data-pagefind-filter="module"
{{- end -}}
><span class="c-breadcrumbs__text">{{ .Title }}</span>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
width="24px"
stroke-width="1.5"
stroke="currentColor"
class="c-breadcrumbs__icon">
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M8.25 4.5l7.5 7.5-7.5 7.5" />
</svg>
</a>
</li>
{{- end }}
{{- end }}
{{ if ne .Params.Build.render "never" }}
<li class="c-breadcrumbs__item">
Expand Down
22 changes: 15 additions & 7 deletions common-theme/layouts/partials/card.html
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
{{ $url := relURL .Page.RelPermalink }}
{{ if .Page.Params.external_url }}
{{ $url = .Page.Params.external_url }}
{{ $module := index . "module" }}
{{ $animation := index . "animation" }}

{{ $url := relURL $module.Page.RelPermalink }}
{{ if $module.Page.Params.external_url }}
{{ $url = $module.Page.Params.external_url }}
{{ end }}

{{ $animationClassSuffix := "-noanimation" }}
{{ if $animation }}
{{ $animationClassSuffix = "-animation" }}
{{ end }}

<a class="c-card" href="{{ $url }}">
<h3 class="c-card__title">{{ .Name }}</h3>
{{ with .Page.Description }}
<p class="c-card__description">{{ . }}</p>
<h3 class="c-card__title">{{ $module.Name }}</h3>
{{ with $module.Page.Description }}
<p class="c-card__description c-card__description{{$animationClassSuffix}}">{{ . }}</p>
{{ end }}
<!-- Display emoji -->
<div class="c-card__image c-emoji">
{{ .Page.Params.emoji | default "🤖" }}
{{ $module.Page.Params.emoji | default "🤖" }}
</div>
</a>
6 changes: 3 additions & 3 deletions common-theme/layouts/partials/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@
</section>
{{ end }}
{{ if .Params.menus_to_map }}
{{ partial "map-menu.html" .Params.menus_to_map }}
{{ partial "map-menu.html" (dict "menus_to_map" .Params.menus_to_map "menu_prefix_to_strip" (default "" .Page.Params.menu_prefix_to_strip) "animation" (default true .Page.Params.animation)) }}
{{ else if .Params.map }}
{{ partial "map.html" . }}
{{ else if .Params.menus_to_map_for_courses }}
{{ partial "map-menu-for-courses.html" .Params.menus_to_map_for_courses }}
{{ else if .Params.taxonomy_to_map }}
{{ partial "map-taxonomy.html" .Params.taxonomy_to_map }}
{{ partial "map-taxonomy.html" (dict "taxonomy_to_map" .Params.taxonomy_to_map "section" .Page.Section "animation" (default true .Page.Params.animation)) }}
{{ else }}
<ol class="c-timeline c-timeline--card">
{{- range site.Menus.syllabus }}
<li class="c-timeline__entry">{{ partial "card.html" . }}</li>
<li class="c-timeline__entry">{{ partial "card.html" (dict "module" . "animation" true) }}</li>
{{- end }}
</ol>
{{ end }}
Expand Down
20 changes: 13 additions & 7 deletions common-theme/layouts/partials/map-common.html
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
{{/* Expects a slice[dict] param containing an ordered list of dicts with the following keys, one per section in the map to render:
* title (string) - The heading to display for the section.
* values (slice[Page]) - A slice of Pages, one per page in the section which should be listed.
* metadata (slice[dict[string, string]]) - Ordered key-value pairs of extra metadata to display about the section. Each dict should contain a key named "name" and a key named "value".
{{/* Expects a dict param containing:
* animation (bool) - Whether to animate description cards
* menu_prefix_to_strip (string) - Menu prefix to strip for display
* sections (slice[dict]) - an ordered list of dicts with the following keys, one per section in the map to render:
* title (string) - The heading to display for the section.
* values (slice[Page]) - A slice of Pages, one per page in the section which should be listed.
* metadata (slice[dict[string, string]]) - Ordered key-value pairs of extra metadata to display about the section. Each dict should contain a key named "name" and a key named "value".
*/}}

{{ $sections := index . "sections" }}
{{ $animation := index . "animation" }}
{{ $menuPrefixToStrip := index . "menu_prefix_to_strip" }}

<div class="c-map">
<h1 class="e-heading c-map__start is-none--lt-container">👉🏾</h1>
{{ range $i, $section := index . "sections" }}
{{ $sectionTitle := index $section "title" }}
{{ range $i, $section := $sections }}
{{ $sectionTitle := strings.TrimPrefix $menuPrefixToStrip (index $section "title") }}
{{ $sectionTermPageLink := index $section "termPageLink" }}
{{ $sectionValues := index $section "values" }}
<section class="c-map__block">
Expand Down Expand Up @@ -40,7 +46,7 @@ <h2 class="e-heading c-map__title">
<li
class="c-map__stop"
style="--layer:{{ sub (len $sectionValues) (add $iterator 1) }}">
{{ partial "card.html" $module }}
{{ partial "card.html" (dict "module" $module "animation" $animation) }}
</li>
{{ end }}
{{ else }}
Expand Down
2 changes: 1 addition & 1 deletion common-theme/layouts/partials/map-menu-for-courses.html
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ <h3 class="c-card__title">{{ $course.name }}</h3>
{{ end }}</span
>
{{ with .description }}
<p class="c-card__description">
<p class="c-card__description c-card__description-animation">
{{ . }}
<span class="c-card__cta e-button">Learn more</span>
</p>
Expand Down
13 changes: 10 additions & 3 deletions common-theme/layouts/partials/map-menu.html
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
{{/* Expects slice[string] param which is the name of the menus to render as sections. */}}
{{/* Expects dict param containing:
* menus_to_map (slice[string]) - Names of site menus to map.
* animation (bool) - Whether to animate descriptions on cards.
* menu_prefix_to_strip (string) - Prefix to strip from menu names for display.
*/}}
{{ $menusToMap := index . "menus_to_map" }}
{{ $animation := index . "animation" }}
{{ $menuPrefixToStrip := index . "menu_prefix_to_strip" }}

{{ $sections := slice }}

{{ range $menuName := . }}
{{ range $menuName := $menusToMap }}
{{ $section := dict "title" $menuName "values" (index site.Menus $menuName) }}
{{ $sections = append $section $sections }}
{{ end }}

{{ $params := dict "sections" $sections }}
{{ $params := dict "sections" $sections "animation" $animation "menu_prefix_to_strip" $menuPrefixToStrip }}

{{ partial "map-common.html" $params }}
Loading
Loading