diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json index 55fac651b41..e323d6309cb 100644 --- a/client/i18n/locales/english/intro.json +++ b/client/i18n/locales/english/intro.json @@ -2299,6 +2299,12 @@ "In these lectures, you will learn about accessibility and its importance, assistive tools for people with disabilities, HTML attributes that let you create inclusive websites, accessibility best practices, and much more." ] }, + "workshop-debug-coding-journey-blog-page": { + "title": "Debug a Coding Journey Blog Page", + "intro": [ + "In this workshop, you will debug and fix accessibility errors in a coding blog page." + ] + }, "lecture-accessible-tables-forms": { "title": "Working with Accessible Tables and Forms", "intro": [ diff --git a/client/src/pages/learn/full-stack-developer/workshop-debug-coding-journey-blog-page/index.md b/client/src/pages/learn/full-stack-developer/workshop-debug-coding-journey-blog-page/index.md new file mode 100644 index 00000000000..1dcb9a91f87 --- /dev/null +++ b/client/src/pages/learn/full-stack-developer/workshop-debug-coding-journey-blog-page/index.md @@ -0,0 +1,9 @@ +--- +title: Introduction to the Debug a Coding Journey Blog Page +block: workshop-debug-coding-journey-blog-page +superBlock: full-stack-developer +--- + +## Introduction to the Debug a Coding Journey Blog Page + +In this workshop, you will debug and fix accessibility errors in a coding blog page. diff --git a/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c2fb153760d075321c5da3.md b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c2fb153760d075321c5da3.md new file mode 100644 index 00000000000..fd0cfbbff9d --- /dev/null +++ b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c2fb153760d075321c5da3.md @@ -0,0 +1,102 @@ +--- +id: 68c2fb153760d075321c5da3 +title: Step 1 +challengeType: 0 +dashedName: step-1 +demoType: onLoad +--- + +# --description-- + +Camperbot has created a coding journey blog page, but it looks like the page has some accessibility issues and bad practices. Your job in this workshop, is to fix these issues for Camperbot. + +The first set of errors has to deal with the use of headings. In a prior lecture, you learned that it is best practice to only use one `h1` per page. But it looks like Camperbot is a using a few `h1`s. + +Leave the `

Welcome to Camperbot's Blog

` alone and change the other `h1` elements to `h2` elements. + +# --hints-- + +You should not alter the `

Welcome to Camperbot's Blog

`. + +```js +const heading = document.querySelectorAll("h1")[0]; +assert.equal(heading?.textContent, "Welcome to Camperbot's Blog"); +``` + +You should change the `h1` element with the text of `My Journey Learning to Code` to an `h2` element. + +```js +const firstPost = document.getElementById("post1"); +assert.equal(firstPost?.tagName, "H2"); +assert.equal(firstPost?.textContent, "My Journey Learning to Code"); +``` + +You should change the `h1` element with the text of `Accessibility Matters` to an `h2` element. + +```js +const secondPost = document.getElementById("post2"); +assert.equal(secondPost?.tagName, "H2"); +assert.equal(secondPost?.textContent, "Accessibility Matters"); +``` + +You should change the `h1` element with the text of `What's Next?` to an `h2` element. + +```js +const thirdPost = document.getElementById("post3"); +assert.equal(thirdPost?.tagName, "H2"); +assert.equal(thirdPost?.textContent, "What's Next?"); +``` + +# --seed-- + +## --seed-contents-- + +```html + + + + + Camperbot's Blog + + +

Welcome to Camperbot's Blog

+ +

Navigation

+ +--fcc-editable-region-- +
+

My Journey Learning to Code

+

I started learning to code a few months ago and it's been a wild ride!

+ +

Early Challenges

+

At first, syntax was really confusing.

+ +

Breakthroughs

+

Eventually things started to click.

+
+ +
+

Accessibility Matters

+

Today I learned that not everyone uses the web the same way I do.

+ +
Screen Readers
+

These tools help visually impaired users browse websites.

+
+ +
+

What's Next?

+

I'm excited to dive into JavaScript and build interactive features!

+ +

Coming soon: My first JavaScript project!

+

Stay tuned for some exciting interactive blog features.

+
+--fcc-editable-region-- +

Contact Me

+

Email me at camperbot@blog.io

+ + +``` diff --git a/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c3144fc395d681180cde15.md b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c3144fc395d681180cde15.md new file mode 100644 index 00000000000..0e307abcc96 --- /dev/null +++ b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c3144fc395d681180cde15.md @@ -0,0 +1,83 @@ +--- +id: 68c3144fc395d681180cde15 +title: Step 2 +challengeType: 0 +dashedName: step-2 +--- + +# --description-- + +It looks like there are still some issues with the use of headings on the page. If you look at the first `div` element, there are two `h4` elements used as subheadings. A better practice would be to use `h3` elements for these subheadings since they are a level below the `h2` element. + +Change the two `h4` elements to `h3` elements. + +# --hints-- + +Your `h4` element with the text of `Early Challenges` should be an `h3` element. + +```js +const post1Subheading = document.querySelector("#post1 + p + h3"); +assert.equal(post1Subheading?.tagName, "H3"); +assert.equal(post1Subheading?.textContent, "Early Challenges"); +``` + +Your `h4` element with the text of `Breakthroughs` should be an `h3` element. + +```js +const post1SecondSubheading = document.querySelector("#post1 + p + h3 + p + h3"); +assert.equal(post1SecondSubheading?.tagName, "H3"); +assert.equal(post1SecondSubheading?.textContent, "Breakthroughs"); +``` + +# --seed-- + +## --seed-contents-- + +```html + + + + + Camperbot's Blog + + +

Welcome to Camperbot's Blog

+ +

Navigation

+ +--fcc-editable-region-- +
+

My Journey Learning to Code

+

I started learning to code a few months ago and it's been a wild ride!

+ +

Early Challenges

+

At first, syntax was really confusing.

+ +

Breakthroughs

+

Eventually things started to click.

+
+--fcc-editable-region-- +
+

Accessibility Matters

+

Today I learned that not everyone uses the web the same way I do.

+ +
Screen Readers
+

These tools help visually impaired users browse websites.

+
+ +
+

What's Next?

+

I'm excited to dive into JavaScript and build interactive features!

+ +

Coming soon: My first JavaScript project!

+

Stay tuned for some exciting interactive blog features.

+
+

Contact Me

+

Email me at camperbot@blog.io

+ + +``` diff --git a/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31763232a4582366eb6fd.md b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31763232a4582366eb6fd.md new file mode 100644 index 00000000000..16f322d1e7f --- /dev/null +++ b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31763232a4582366eb6fd.md @@ -0,0 +1,75 @@ +--- +id: 68c31763232a4582366eb6fd +title: Step 3 +challengeType: 0 +dashedName: step-3 +--- + +# --description-- + +In the second post section, there is an `h5` element being used. It would be more appropriate to use an `h3` element here. + +Change the `h5` element to an `h3` element. + +# --hints-- + +You should change the `h5` element to an `h3` element. + +```js +const secondPostSubheading = document.querySelector("#post2 + p + h3"); +assert.equal(secondPostSubheading?.tagName, "H3"); +assert.equal(secondPostSubheading?.textContent, "Screen Readers"); +``` + +# --seed-- + +## --seed-contents-- + +```html + + + + + Camperbot's Blog + + +

Welcome to Camperbot's Blog

+ +

Navigation

+ + +
+

My Journey Learning to Code

+

I started learning to code a few months ago and it's been a wild ride!

+ +

Early Challenges

+

At first, syntax was really confusing.

+ +

Breakthroughs

+

Eventually things started to click.

+
+--fcc-editable-region-- +
+

Accessibility Matters

+

Today I learned that not everyone uses the web the same way I do.

+ +
Screen Readers
+

These tools help visually impaired users browse websites.

+
+--fcc-editable-region-- +
+

What's Next?

+

I'm excited to dive into JavaScript and build interactive features!

+ +

Coming soon: My first JavaScript project!

+

Stay tuned for some exciting interactive blog features.

+
+

Contact Me

+

Email me at camperbot@blog.io

+ + +``` diff --git a/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c318d9c3b3f382f93d1fd1.md b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c318d9c3b3f382f93d1fd1.md new file mode 100644 index 00000000000..e7b211972ab --- /dev/null +++ b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c318d9c3b3f382f93d1fd1.md @@ -0,0 +1,109 @@ +--- +id: 68c318d9c3b3f382f93d1fd1 +title: Step 4 +challengeType: 0 +dashedName: step-4 +--- + +# --description-- + +Below the main title of the page, there is a navigation section that contains links to each blog post. + +This section should be wrapped in a `nav` element to indicate its purpose as a navigation landmark. + +# --hints-- + +Your page should have a `nav` element. + +```js +const navElement = document.querySelector("nav"); +assert.isNotNull(navElement); +``` + +Your `

Navigation

` should be inside the `nav` element. + +```js +const h2Element = document.querySelector("nav h2"); +assert.isNotNull(h2Element); +assert.strictEqual(h2Element?.textContent, "Navigation"); +``` + +Your `ul` element should be inside the `nav` element. + +```js +const ulElement = document.querySelector("nav ul"); +assert.isNotNull(ulElement); +``` + +Your `li` elements should be inside the `ul` element. + +```js +const liElements = document.querySelectorAll("nav ul li"); +assert.isAtLeast(liElements.length, 3); +``` + +You should not add any additional `ul`, `li` or `h2` elements. + +```js +const liElements = document.querySelectorAll("nav ul li"); +assert.lengthOf(liElements, 3); + +const ulElements = document.querySelectorAll("ul"); +assert.lengthOf(ulElements, 1); + +const h2Elements = document.querySelectorAll("h2"); +assert.lengthOf(h2Elements , 4); +``` + +# --seed-- + +## --seed-contents-- + +```html + + + + + Camperbot's Blog + + +

Welcome to Camperbot's Blog

+--fcc-editable-region-- +

Navigation

+ +--fcc-editable-region-- +
+

My Journey Learning to Code

+

I started learning to code a few months ago and it's been a wild ride!

+ +

Early Challenges

+

At first, syntax was really confusing.

+ +

Breakthroughs

+

Eventually things started to click.

+
+ +
+

Accessibility Matters

+

Today I learned that not everyone uses the web the same way I do.

+ +

Screen Readers

+

These tools help visually impaired users browse websites.

+
+ +
+

What's Next?

+

I'm excited to dive into JavaScript and build interactive features!

+ +

Coming soon: My first JavaScript project!

+

Stay tuned for some exciting interactive blog features.

+
+

Contact Me

+

Email me at camperbot@blog.io

+ + +``` diff --git a/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31a762717d583d90ad31e.md b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31a762717d583d90ad31e.md new file mode 100644 index 00000000000..9f78d26ce04 --- /dev/null +++ b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31a762717d583d90ad31e.md @@ -0,0 +1,91 @@ +--- +id: 68c31a762717d583d90ad31e +title: Step 5 +challengeType: 0 +dashedName: step-5 +--- + +# --description-- + +In the blog page, there are a total of three blog posts wrapped inside generic `div` elements. But it would be better to use semantic elements to wrap each post. + +Change each `div` element that wraps each blog post to an `article` element. + +# --hints-- + +Your first `div` element for the first post should be changed to an `article` element. + +```js +const firstPost = document.querySelector("nav + article"); +assert.isNotNull(firstPost); +``` + +Your second `div` element for the second post should be changed to an `article` element. + +```js +const secondPost = document.querySelector("article + article"); +assert.isNotNull(secondPost); +``` + +Your third `div` element for the third post should be changed to an `article` element. + +```js +const thirdPost = document.querySelector("article + article + article"); +assert.isNotNull(thirdPost); +``` + +# --seed-- + +## --seed-contents-- + +```html + + + + + Camperbot's Blog + + +

Welcome to Camperbot's Blog

+ + +--fcc-editable-region-- +
+

My Journey Learning to Code

+

I started learning to code a few months ago and it's been a wild ride!

+ +

Early Challenges

+

At first, syntax was really confusing.

+ +

Breakthroughs

+

Eventually things started to click.

+
+ +
+

Accessibility Matters

+

Today I learned that not everyone uses the web the same way I do.

+ +

Screen Readers

+

These tools help visually impaired users browse websites.

+
+ +
+

What's Next?

+

I'm excited to dive into JavaScript and build interactive features!

+ +

Coming soon: My first JavaScript project!

+

Stay tuned for some exciting interactive blog features.

+
+--fcc-editable-region-- +

Contact Me

+

Email me at camperbot@blog.io

+ + +``` diff --git a/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31c946d73bf84b108c6fc.md b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31c946d73bf84b108c6fc.md new file mode 100644 index 00000000000..6c856a84c8c --- /dev/null +++ b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31c946d73bf84b108c6fc.md @@ -0,0 +1,82 @@ +--- +id: 68c31c946d73bf84b108c6fc +title: Step 6 +challengeType: 0 +dashedName: step-6 +--- + +# --description-- + +Since the entire section containing the blog posts represents the main content of the page, it should be wrapped in a `main` element. This helps screen readers and other assistive technologies understand the structure of the page better. + +# --hints-- + +You should have a `main` element. + +```js +const mainElement = document.querySelector("main"); +assert.isNotNull(mainElement); +``` + +Your `main` element should contain all three `article` elements. + +```js +const articles = document.querySelectorAll("main article"); +assert.lengthOf(articles, 3); +``` + +# --seed-- + +## --seed-contents-- + +```html + + + + + Camperbot's Blog + + +

Welcome to Camperbot's Blog

+ + +--fcc-editable-region-- +
+

My Journey Learning to Code

+

I started learning to code a few months ago and it's been a wild ride!

+ +

Early Challenges

+

At first, syntax was really confusing.

+ +

Breakthroughs

+

Eventually things started to click.

+
+ +
+

Accessibility Matters

+

Today I learned that not everyone uses the web the same way I do.

+ +

Screen Readers

+

These tools help visually impaired users browse websites.

+
+ +
+

What's Next?

+

I'm excited to dive into JavaScript and build interactive features!

+ +

Coming soon: My first JavaScript project!

+

Stay tuned for some exciting interactive blog features.

+
+--fcc-editable-region-- +

Contact Me

+

Email me at camperbot@blog.io

+ + +``` diff --git a/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31dd917c3ae855e8728c7.md b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31dd917c3ae855e8728c7.md new file mode 100644 index 00000000000..46665858546 --- /dev/null +++ b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31dd917c3ae855e8728c7.md @@ -0,0 +1,96 @@ +--- +id: 68c31dd917c3ae855e8728c7 +title: Step 7 +challengeType: 0 +dashedName: step-7 +--- + +# --description-- + +For the last part of the workshop, there are a few changes needed for the contact section at the bottom. + +The first change would be to wrap the contact section inside of a `footer` element. This will help screen readers identify this section as the footer of the page. + +# --hints-- + +Your page should have a `footer` element. + +```js +const footerElement = document.querySelector("footer"); +assert.isNotNull(footerElement); +``` + +Your `footer` element should contain an `h3` element with the text `Contact Me`. + +```js +const h3Element = document.querySelector("footer h3"); +assert.isNotNull(h3Element); +assert.strictEqual(h3Element?.textContent, "Contact Me"); +``` + +Your `footer` element should contain a `p` element with the text `Email me at camperbot@blog.io`. + +```js +const pElement = document.querySelector("footer p"); +assert.isNotNull(pElement); +assert.strictEqual(pElement?.textContent, "Email me at camperbot@blog.io"); +``` + +# --seed-- + +## --seed-contents-- + +```html + + + + + Camperbot's Blog + + +

Welcome to Camperbot's Blog

+ + + +
+
+

My Journey Learning to Code

+

I started learning to code a few months ago and it's been a wild ride!

+ +

Early Challenges

+

At first, syntax was really confusing.

+ +

Breakthroughs

+

Eventually things started to click.

+
+ +
+

Accessibility Matters

+

Today I learned that not everyone uses the web the same way I do.

+ +

Screen Readers

+

These tools help visually impaired users browse websites.

+
+ +
+

What's Next?

+

I'm excited to dive into JavaScript and build interactive features!

+ +

Coming soon: My first JavaScript project!

+

Stay tuned for some exciting interactive blog features.

+
+
+--fcc-editable-region-- +

Contact Me

+

Email me at camperbot@blog.io

+--fcc-editable-region-- + + +``` diff --git a/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31f3a5de8bf861f616dc8.md b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31f3a5de8bf861f616dc8.md new file mode 100644 index 00000000000..d4b8ddc39e4 --- /dev/null +++ b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c31f3a5de8bf861f616dc8.md @@ -0,0 +1,83 @@ +--- +id: 68c31f3a5de8bf861f616dc8 +title: Step 8 +challengeType: 0 +dashedName: step-8 +--- + +# --description-- + +Right now the `footer` section has an `h3` heading. But it should be an `h2` heading to maintain a proper heading hierarchy. + +Change the `h3` to an `h2`. + +# --hints-- + +Your `footer` element should contain an `h2` element instead of an `h3` element. + +```js +const heading = document.querySelector("footer h2"); +assert.isNotNull(heading); +assert.strictEqual(heading?.textContent, "Contact Me"); +``` + +# --seed-- + +## --seed-contents-- + +```html + + + + + Camperbot's Blog + + +

Welcome to Camperbot's Blog

+ + + +
+
+

My Journey Learning to Code

+

I started learning to code a few months ago and it's been a wild ride!

+ +

Early Challenges

+

At first, syntax was really confusing.

+ +

Breakthroughs

+

Eventually things started to click.

+
+ +
+

Accessibility Matters

+

Today I learned that not everyone uses the web the same way I do.

+ +

Screen Readers

+

These tools help visually impaired users browse websites.

+
+ +
+

What's Next?

+

I'm excited to dive into JavaScript and build interactive features!

+ +

Coming soon: My first JavaScript project!

+

Stay tuned for some exciting interactive blog features.

+
+
+--fcc-editable-region-- + +--fcc-editable-region-- + + +``` diff --git a/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c3215e6826ca00a2d892fc.md b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c3215e6826ca00a2d892fc.md new file mode 100644 index 00000000000..451a01ab58d --- /dev/null +++ b/curriculum/challenges/english/blocks/workshop-debug-coding-journey-blog-page/68c3215e6826ca00a2d892fc.md @@ -0,0 +1,154 @@ +--- +id: 68c3215e6826ca00a2d892fc +title: Step 9 +challengeType: 0 +dashedName: step-9 +--- + +# --description-- + +The last change will be to the email text inside of the footer. In earlier lectures and workshops, you learned how to work with the `mailto` link like this: + +```html +

Email me at janedoe@email.com

+``` + +Start by wrapping the `camperbot@blog.io` email address inside of an anchor element. Then, add the `href` attribute to the anchor element and set it equal to `mailto:camperbot@blog.io`. + +With that last change, you have successfully resolved all of the issues in the blog page! + +# --hints-- + +Your `camperbot@blog.io` email address should be wrapped inside of an anchor element. + +```js +const anchor = document.querySelector("footer a"); +assert.isNotNull(anchor); +assert.strictEqual(anchor?.textContent, "camperbot@blog.io"); +``` + +Your anchor element should have an `href` attribute with a value of `mailto:camperbot@blog.io`. + +```js +const anchor = document.querySelector("footer a"); +assert.strictEqual(anchor?.getAttribute("href"), "mailto:camperbot@blog.io"); +``` + +# --seed-- + +## --seed-contents-- + +```html + + + + + Camperbot's Blog + + +

Welcome to Camperbot's Blog

+ + + +
+
+

My Journey Learning to Code

+

I started learning to code a few months ago and it's been a wild ride!

+ +

Early Challenges

+

At first, syntax was really confusing.

+ +

Breakthroughs

+

Eventually things started to click.

+
+ +
+

Accessibility Matters

+

Today I learned that not everyone uses the web the same way I do.

+ +

Screen Readers

+

These tools help visually impaired users browse websites.

+
+ +
+

What's Next?

+

I'm excited to dive into JavaScript and build interactive features!

+ +

Coming soon: My first JavaScript project!

+

Stay tuned for some exciting interactive blog features.

+
+
+ + + +``` + +# --solutions-- + +```html + + + + + Camperbot's Blog + + +

Welcome to Camperbot's Blog

+ + + +
+
+

My Journey Learning to Code

+

I started learning to code a few months ago and it's been a wild ride!

+ +

Early Challenges

+

At first, syntax was really confusing.

+ +

Breakthroughs

+

Eventually things started to click.

+
+ +
+

Accessibility Matters

+

Today I learned that not everyone uses the web the same way I do.

+ +

Screen Readers

+

These tools help visually impaired users browse websites.

+
+ +
+

What's Next?

+

I'm excited to dive into JavaScript and build interactive features!

+ +

Coming soon: My first JavaScript project!

+

Stay tuned for some exciting interactive blog features.

+
+
+ + + + +``` diff --git a/curriculum/structure/blocks/workshop-debug-coding-journey-blog-page.json b/curriculum/structure/blocks/workshop-debug-coding-journey-blog-page.json new file mode 100644 index 00000000000..cc32570853c --- /dev/null +++ b/curriculum/structure/blocks/workshop-debug-coding-journey-blog-page.json @@ -0,0 +1,21 @@ +{ + "name": "Debug a Coding Journey Blog Page", + "dashedName": "workshop-debug-coding-journey-blog-page", + "helpCategory": "HTML-CSS", + "blockType": "workshop", + "blockLayout": "challenge-grid", + "challengeOrder": [ + { "id": "68c2fb153760d075321c5da3", "title": "Step 1" }, + { "id": "68c3144fc395d681180cde15", "title": "Step 2" }, + { "id": "68c31763232a4582366eb6fd", "title": "Step 3" }, + { "id": "68c318d9c3b3f382f93d1fd1", "title": "Step 4" }, + { "id": "68c31a762717d583d90ad31e", "title": "Step 5" }, + { "id": "68c31c946d73bf84b108c6fc", "title": "Step 6" }, + { "id": "68c31dd917c3ae855e8728c7", "title": "Step 7" }, + { "id": "68c31f3a5de8bf861f616dc8", "title": "Step 8" }, + { "id": "68c3215e6826ca00a2d892fc", "title": "Step 9" } + ], + "isUpcomingChange": false, + "hasEditableBoundaries": true, + "usesMultifileEditor": true +} diff --git a/curriculum/structure/superblocks/full-stack-developer.json b/curriculum/structure/superblocks/full-stack-developer.json index 8cac55cdaf3..4e8a18009fe 100644 --- a/curriculum/structure/superblocks/full-stack-developer.json +++ b/curriculum/structure/superblocks/full-stack-developer.json @@ -58,6 +58,7 @@ "dashedName": "html-and-accessibility", "blocks": [ "lecture-importance-of-accessibility-and-good-html-structure", + "workshop-debug-coding-journey-blog-page", "lecture-accessible-tables-forms", "lecture-introduction-to-aria", "lecture-accessible-media-elements",