<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
  <url>
    <loc>https://vueschool.io/lessons/why-choose-vitest-the-tools-it-offers-and-the-ones-it-complements</loc>
    <lastmod>2026-08-26T11:34:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/972Cg5zGUZqobOswqKFBGrwcWD3r4DT6ZHzVPgb3.webp</video:thumbnail_loc>
      <video:title>Why Choose Vitest, The Tools it Offers, and the Ones It Complements</video:title>
      <video:description>Vitest is the prescribed test runner for Vite and Vite is the prescribed build tool for Vue, so the choice is a no-brainer. 

In this lesson, we’ll explore all the reasons behind the choice of Vitest as the Vue testing default.

Vitest shares your Vite config, transformers, and plugins (no parallel toolchain). It’s benefits go beyond a simple setup story boasting a wealth of features including:

- **unit tests -** for testing small units of code (function, classes, etc)
- browser-mode component tests - for true to life component specs
- visual regression tests - to ensure pixel perfect output
- REST API checks with fetch - for backend tests that resemble the syntax of a unit test
- higher-confidence integration/E2E - when paired with Playwright for testing across the seams
- and TypeScript type assertions - for the strictest of TS reliability

You’ll also see coverage reporting and the many ways to run tests: CLI watch mode, agents, CI, browser GUI, and IDE extensions By the end of the lesson, you’ll know the toolkit before we dive into the strategy.

**Links**

- [Vue.js - Testing](https://vuejs.org/guide/scaling-up/testing.html)
- [Vitest - Features](https://vitest.dev/guide/features)
- [Vitest - Config](https://vitest.dev/config)
- [Vitest - Component Testing](https://vitest.dev/guide/browser/component-testing.html)
- [Vitest - Browser Mode](https://vitest.dev/guide/browser/)
- [Vitest - Visual Regression Testing](https://vitest.dev/guide/browser/visual-regression-testing)
- [Vitest - Type Testing](https://vitest.dev/guide/testing-types)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6a8ec3eb0784f723ea18e1fd</video:player_loc>
      <video:duration>434</video:duration>
      <video:publication_date>2026-08-26T11:34:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-importance-of-testing-in-the-age-of-ai</loc>
    <lastmod>2026-08-26T11:34:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/Jx5J9nKKRik4GYAz966T2xeuL6ebqxzP0ozumbNS.webp</video:thumbnail_loc>
      <video:title>The Importance of Testing in the Age of AI</video:title>
      <video:description>Automated tests have always been important:

- preventing regressions
- forcing edge cases into the open
- and buying confidence to change code later

In this lesson, you’ll see why that still holds for the Vue and Vite ecosystems (ecosystem CI, real regression fixes in Vue core), and why AI coding agents raise the stakes.

Agents write better code when they have a pass/fail feedback loop, and failing tests catch their mistakes before you become the verification bottleneck. 

Learn how Anthropic, OpenAI, and Cursor frame tests as the harness that keeps agents productive — so you ship faster with less manual review.

## Resources

- [Vite Ecosystem CI](https://github.com/vitejs/vite-ecosystem-ci)
- [Vue Ecosystem CI](https://github.com/vuejs/ecosystem-ci)
- [Nuxt Ecosystem CI](https://github.com/nuxt/ecosystem-ci)
- [Vue core - Teleport regression (#14701)](https://github.com/vuejs/core/issues/14701)
- [Claude Code Best Practices - Give Claude a way to verify its work](https://code.claude.com/docs/en/best-practices#give-claude-a-way-to-verify-its-work)
- [OpenAI - Run long horizon tasks with Codex](https://developers.openai.com/blog/run-long-horizon-tasks-with-codex)
- [Cursor Learn - Test-driven development with agents](https://cursor.com/learn/creating-features#test-driven-development-with-agents)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6a8ec3eb0784f723ea18e1fe</video:player_loc>
      <video:duration>316</video:duration>
      <video:publication_date>2026-08-26T11:34:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-vitest-for-vue-developers-testing-in-the-age-of-ai</loc>
    <lastmod>2026-08-26T11:33:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/gxcc1ZJoxqGNev7qQk6aDNK3EJHkNgK7dSPx208U.webp</video:thumbnail_loc>
      <video:title>Intro to Vitest for Vue Developers: Testing in the Age of AI</video:title>
      <video:description>Hello, and welcome to the course! In this introductory lesson we map out what you’ll learn throughout the rest of the lessons:

- automated tests as an essential AI feedback loop
- why Vitest fits Vite-based Vue apps
- which kinds of tests belong where
- and how clear architecture with distinct seams and contracts so full-stack Vue apps easier to test

Preview what the course will cover in depth (practical Vue and Nitro testing examples, testing auth-walled pages, component tests, etc ) and what it deliberately skips (setup, Vitest internals, and exhaustive syntax tours) so you can focus on the lasting skill: knowing where to cut and which tests are most appropriate where.

**Links**

- [Vitest - Getting Started](https://vitest.dev/guide/)
- [Vue.js - Testing](https://vuejs.org/guide/scaling-up/testing)
- [&quot;The Testing Trophy and Testing Classifications&quot; - Kent C. Dodds](https://kentcdodds.com/blog/the-testing-trophy-and-testing-classifications)
- [&quot;Legacy Seam&quot; - Martin Fowler](https://martinfowler.com/bliki/LegacySeam.html)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6a8ec3eb0784f723ea18e1fc</video:player_loc>
      <video:duration>247</video:duration>
      <video:publication_date>2026-08-26T11:33:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/rolling-back-failed-optimistic-updates-in-pinia-colada</loc>
    <lastmod>2026-02-24T08:14:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/L2lSls6pwi7cEO4Of1IUZwDac2ShdnAnFzELmm1h.png</video:thumbnail_loc>
      <video:title>Rolling Back Failed Optimistic Updates in Pinia Colada</video:title>
      <video:description>Optimistic updates make your app feel snappy, even when the connection isn&apos;t. You update the UI immediately and hope the server agrees — and it usually does. But when it doesn&apos;t, you can&apos;t just leave the user staring at a lie. Roll back the state, surface the error, and let them try again.

In this lesson, we’ll teach you how to do exactly that in Pinia Colada. 

**Links**

- [Pinia Colada Docs &gt; Rollback Optimistic Updates](https://pinia-colada.esm.dev/guide/query-invalidation.html#Optimistic-Updates)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699d58b426981d8913bdd6e1</video:player_loc>
      <video:duration>188</video:duration>
      <video:publication_date>2026-02-24T08:14:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-follow-along-in-this-course</loc>
    <lastmod>2026-02-10T07:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/kn90aYxf0nooy5wHMHdgnqSuuPljbRscelXcpLMA.png</video:thumbnail_loc>
      <video:title>How to Follow Along in this Course</video:title>
      <video:description>In this lesson, learn how to follow along in the course codebase to learn new concepts lesson by lesson. 

Each lesson has it’s own dedicated page. All you need to do is open the corresponding page depending on the lesson you’re watching!

While the codebase is built with Nuxt, it’s not mandatory to know or even like Nuxt to follow along with the course. All Pinia Colada concepts work exactly the same in a vanilla Vue.js project!

**Links**

- [? Clone the course repo to follow along](https://github.com/vueschool/Pinia-Colada-Scalable-Data-Handling-in-Vue)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698ae653873071aec5d91558</video:player_loc>
      <video:duration>187</video:duration>
      <video:publication_date>2026-02-10T07:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-pinia-colada</loc>
    <lastmod>2026-02-10T07:21:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/Yu5w5zRRaEX7COBotiPjMcuQYRxMg3oQpcajCJDb.png</video:thumbnail_loc>
      <video:title>Intro to Pinia Colada</video:title>
      <video:description>Hello and welcome to the course! In this lesson, let’s talk about some reasons you might consider implementing Pinia Colada in your next project for handling server side state.

**Links**

- [Pinia Colada](https://pinia-colada.esm.dev/)
- [Pinia Colada Github](https://github.com/posva/pinia-colada)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698ae653aec3d4e420d1dd73</video:player_loc>
      <video:duration>198</video:duration>
      <video:publication_date>2026-02-10T07:21:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/display-a-custom-ui-component-for-results-of-a-tool-call</loc>
    <lastmod>2026-01-20T08:38:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/kWALqSbkFLLSUEKIGO5tYNECm44mYIIv0VIAXB9I.png</video:thumbnail_loc>
      <video:title>Display a Custom UI Component for Results of a Tool Call</video:title>
      <video:description>In this lesson, learn how the Nuxt UI Chat template uses the AI SDK to to power a generative weather app card.

**Links**

- [AI SDK - Generative User Interfaces](https://ai-sdk.dev/docs/ai-sdk-ui/generative-user-interfaces)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/696f4845bcef432370c92217</video:player_loc>
      <video:duration>325</video:duration>
      <video:publication_date>2026-01-20T08:38:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/getting-usage-data-with-the-ai-sdk</loc>
    <lastmod>2025-12-23T11:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/IdPsAG4tABSt6SdSkHdT4OBTqFfxFTXEFR2cahLd.png</video:thumbnail_loc>
      <video:title>Getting Usage Data with the AI SDK</video:title>
      <video:description>In this lesson, learn how to read token usage data from the AI SDK. Token usage data is easy to access and broken down into input and output (you can even see cached vs uncached and thinking vs normal output!). All of this feedback is, of course, normalized across all providers.

**Links**

- [AI SDK Docs -  generateText Returns](https://v6.ai-sdk.dev/docs/reference/ai-sdk-core/generate-text#returns)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/694a7c487d16fe920f146658</video:player_loc>
      <video:duration>112</video:duration>
      <video:publication_date>2025-12-23T11:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/giving-llms-eyes-to-see-your-images</loc>
    <lastmod>2025-12-23T11:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/gDR8Oaj7R7Ed3XRUasd22FSIilsmAZpMR7f4v9AG.png</video:thumbnail_loc>
      <video:title>Giving LLMs Eyes to See Your Images</video:title>
      <video:description>In this lesson, learn how to pass images (both public and private images) to an LLM along with a prompt. This process opens up a TON of possibilities from auto-generating image alt-text, to extracting text from images, to auto tagging images, NSFW detection, and more!

**Links**

- [AI SDK Docs - Image Parts](https://v6.ai-sdk.dev/docs/foundations/prompts#image-parts)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/694a7be8ce9fe9c0ba7b012b</video:player_loc>
      <video:duration>213</video:duration>
      <video:publication_date>2025-12-23T11:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/text-vs-system-vs-message-prompts</loc>
    <lastmod>2025-12-23T11:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/IcxD9TPHVHGO9fTfmvoun6ZVQm9wIyIuB9z3oz5b.png</video:thumbnail_loc>
      <video:title>Text vs System vs Message Prompts</video:title>
      <video:description>In this lesson, learn the difference between:

1. text prompts
2. system prompts
3. and message prompts

Text prompts are great for one off generation needs while system prompts are meant as weightier, more important rules to constrain the LLM output and steer it despite what a user prompt might instruct. Message prompts are great for use with chat interfaces. They pass multiple messages within a conversation so that the LLM can respond naturally in the context of the whole conversation.

**Links**

- [AI SDK Docs - Prompts](https://v6.ai-sdk.dev/docs/foundations/prompts)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/694a7b351224275c4c313249</video:player_loc>
      <video:duration>330</video:duration>
      <video:publication_date>2025-12-23T11:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/generate-text-with-the-ai-sdk</loc>
    <lastmod>2025-12-16T06:51:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/7GGMzE2REboe9IwINcf33030RNmYq1gPRuhfX8Ez.png</video:thumbnail_loc>
      <video:title>Generate Text with the AI SDK</video:title>
      <video:description>In this lesson, learn how to generate text with the AI SDK and Google Gemini flash 2.5. 

**Links**

- [AI SDK Doc - generateText](https://v6.ai-sdk.dev/docs/reference/ai-sdk-core/generate-text)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/694103dd9c03c66ee7bf99dc</video:player_loc>
      <video:duration>133</video:duration>
      <video:publication_date>2025-12-16T06:51:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/install-the-ai-sdk-and-select-a-provider</loc>
    <lastmod>2025-12-16T06:48:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/KYYVOwXRpnMTK2kWAc8eFJODEBi0lCSRpQ6cStyo.png</video:thumbnail_loc>
      <video:title>Install the AI SDK and Select a Provider</video:title>
      <video:description>In this lesson, learn how to install the AI SDK along with the provider of your choice. We will use the Google AI provider because of it’s best-in-class image generation and it’s affordability.  Feel free to choose another provider if you wish. 

**Links**

- [AI SDK Providers](https://v6.ai-sdk.dev/providers/ai-sdk-providers)
- [Google AI Studio API Keys](https://aistudio.google.com/app/api-keys)
- [Gemini Pricing](https://ai.google.dev/gemini-api/docs/pricing)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/694103ddad648471cb20ee97</video:player_loc>
      <video:duration>220</video:duration>
      <video:publication_date>2025-12-16T06:48:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/bootstrap-new-node-project-for-typescript</loc>
    <lastmod>2025-12-16T06:43:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/y1rH55EwvFl2NcVwtH6qXNqKdfJySzaXftNLmroY.png</video:thumbnail_loc>
      <video:title>Bootstrap New Node Project for TypeScript</video:title>
      <video:description>In this lesson, setup a new Node.js project for following along with the rest of the course. [Alternatively, you can skip the lesson and download the boilerplate code.](https://github.com/vueschool/AI-Interfaces-with-Vue-Nuxt-and-the-AI-SDK/archive/refs/heads/boilerplate.zip) Do note the `tsx` script that’s been added in `package.json` for running typescript files with a `.env` file loaded.

```tsx
// tsconfig.json
{
  &quot;compilerOptions&quot;: {
    &quot;noEmit&quot;: true,
    &quot;target&quot;: &quot;esnext&quot;,
    &quot;module&quot;: &quot;nodenext&quot;,
    &quot;rewriteRelativeImportExtensions&quot;: true,
    &quot;erasableSyntaxOnly&quot;: true,
    &quot;verbatimModuleSyntax&quot;: true
  },
  &quot;include&quot;: [&quot;**/*.ts&quot;],
  &quot;exclude&quot;: [&quot;node_modules&quot;]
}
```

**Links**

- [Node.js Docs - Full TypeScript Support](https://nodejs.org/api/typescript.html#full-typescript-support)
- [Node Version Manager (nvm)](https://github.com/nvm-sh/nvm)
- [Node.js v20.6.0: Introducing Built-in .env File Support](https://medium.com/netanelbasal/node-js-v20-6-0-introducing-built-in-env-file-support-fb1b1de4f1fa)
- [Download Boilerplate Code](https://github.com/vueschool/AI-Interfaces-with-Vue-Nuxt-and-the-AI-SDK/archive/refs/heads/boilerplate.zip)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/694103dd9c03c66ee7bf99df</video:player_loc>
      <video:duration>356</video:duration>
      <video:publication_date>2025-12-16T06:43:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-the-ai-sdk</loc>
    <lastmod>2025-12-16T06:43:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/FcE7KmrDmviQg88NslOKF5qSH4L0tlJzdVjrvixe.png</video:thumbnail_loc>
      <video:title>What is the AI SDK?</video:title>
      <video:description>In this lesson, we introduce the AI SDK and walk you through why it’s one of the best tools for adding AI features to your Vue and Nuxt applications. Core features of the AI SDK include:

1. Unified API Provider
2. Generative UI
3. Framework Agnostic
4. Streaming Responses

Get a clear roadmap of what you’ll learn throughout the course. We’ll cover everything from model setup and streaming structured data to tool calling, agents, MCP integration, and advanced frontend patterns with `useChat`, persisted sessions, generated UI, and AI-powered autocomplete.

This video sets the stage for building real, production-ready AI features with the AI SDK + Vue + Nuxt. 

**Links**

- [AI SDK version 6](https://v6.ai-sdk.dev/)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/694103dd616d7c8c6a6c5df3</video:player_loc>
      <video:duration>374</video:duration>
      <video:publication_date>2025-12-16T06:43:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/nuxt-ui-charts</loc>
    <lastmod>2025-12-09T08:39:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/yEAtr2RhZfaKFFAOgg3ACJpupdZWddbsA1FIRyct.png</video:thumbnail_loc>
      <video:title>Nuxt UI Charts</video:title>
      <video:description>In this lesson, learn how easy it is to add charts to your Nuxt UI apps with Nuxt Charts. It includes support for Line Charts, Bar Charts, Donut Charts, and more!

**Links**

- [Nuxt Charts](https://nuxtcharts.com/) (use promo code `VUESCHOOL` for 20% of the premium offering)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6937d9cbcf9ba947e6b093ac</video:player_loc>
      <video:duration>277</video:duration>
      <video:publication_date>2025-12-09T08:39:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/semantic-colors-as-props-and-adding-custom-semantic-colors</loc>
    <lastmod>2025-10-15T13:02:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68ef47d385d14eb3e33191da/68ef47fa23b33f9d633ae4c9/thumbnail-1-0.png?v=1761237867473</video:thumbnail_loc>
      <video:title>Semantic Colors as Props and Adding Custom Semantic Colors</video:title>
      <video:description>In this lesson, learn how to use the Nuxt UI semantic colors with the `color` prop. This prop exists on many components making it easy to control the colors of different UI elements. Even without the color prop, many components default to using certain semantic colors under the hood for a great first look even without further configuration. 

Also learn how to add your own custom semantic colors in `app.config.ts` and `nuxt.config.ts` for type-safe customizations.

**Links**

- [Nuxt UI Docs - Extend Colors](https://ui.nuxt.com/docs/getting-started/theme/design-system#extend-colors)
- [Nuxt UI Docs - Button Color Prop](https://ui.nuxt.com/docs/components/button#color)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68ef47fa23b33f9d633ae4c9</video:player_loc>
      <video:duration>154</video:duration>
      <video:publication_date>2025-10-15T13:02:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-nuxt-design-system</loc>
    <lastmod>2025-10-15T13:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68ef47d385d14eb3e33191da/68ef47fa23b33f9d633ae4c4/thumbnail-1-0.png?v=1760540313436</video:thumbnail_loc>
      <video:title>The Nuxt Design System</video:title>
      <video:description>Learn how to master the **Nuxt Design System**—built on **Tailwind CSS**—and customize it to match your brand. In this lesson, you’ll explore overriding Tailwind colors and creating custom colors in `main.css.` Also learn how to map tailwind colors to Nuxt UI’s **semantic color system** in `app.config.ts`, so that components look great and fit your needs.

Also learn to customize breakpoints and fonts.

**Links**

- [Nuxt UI Design System](https://ui.nuxt.com/docs/getting-started/theme/design-system)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68ef47fa23b33f9d633ae4c4</video:player_loc>
      <video:duration>457</video:duration>
      <video:publication_date>2025-10-15T13:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/boot-up-a-nuxt-ui-project-from-a-template-and-editor-setup</loc>
    <lastmod>2025-10-15T12:58:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68ef47d385d14eb3e33191da/68ef47fa16308ddf052f6465/thumbnail-1-0.png?v=1760540161054</video:thumbnail_loc>
      <video:title>Boot Up a Nuxt UI Project from a Template and Editor Setup</video:title>
      <video:description>In this lesson, we boot up a Nuxt UI dashboard project starting with an official template. We also setup our IDE (for me that’s [Cursor](https://cursor.com/) but it could also be [VS Code](https://code.visualstudio.com/)) to work best with Nuxt UI.

Make sure you have the following extensions installed for the best experience!

- [TailwindCSS Intellisense](https://open-vsx.org/extension/bradlc/vscode-tailwindcss)
- [ESLint](https://open-vsx.org/extension/dbaeumer/vscode-eslint)
- [Iconify Intellisense](https://open-vsx.org/extension/antfu/iconify)
- [Vue Official (not mentioned in video)](https://open-vsx.org/extension/Vue/volar)

**LInks**

- [Nuxt UI Templates](https://ui.nuxt.com/templates)
- [Recommend VS Code Settings for Tailwind to Work](https://ui.nuxt.com/docs/getting-started/installation/nuxt#import-tailwind-css-and-nuxt-ui-in-your-css)
- Nuxt UI Dashboard Template - [Github](https://github.com/nuxt-ui-templates/dashboard) | [Preview](https://dashboard-template.nuxt.dev/)
- [Ni - package manager shortcuts](https://github.com/antfu-collective/ni)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68ef47fa16308ddf052f6465</video:player_loc>
      <video:duration>592</video:duration>
      <video:publication_date>2025-10-15T12:58:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-nuxt-ui</loc>
    <lastmod>2025-10-15T12:54:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68ef47d385d14eb3e33191da/68ef47fa23b33f9d633ae4c7/thumbnail-1-0.png?v=1760539883910</video:thumbnail_loc>
      <video:title>What is Nuxt UI?</video:title>
      <video:description>[Nuxt UI](https://ui.nuxt.com/) is a completely free and open source component library created and maintained by [Nuxt Labs](https://github.com/nuxtlabs). It’s build on top of [Tailwind CSS](https://vueschool.io/courses/tailwind-css-fundamentals) so it pairs perfectly with everyone’s favorite utility classes.

**Links**

- [Nuxt UI](https://ui.nuxt.com/)
- [Nuxt Labs](https://github.com/nuxtlabs)
- [Tailwind CSS](https://tailwindcss.com/)
- [Tailwind CSS Course](https://vueschool.io/courses/tailwind-css-fundamentals)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68ef47fa23b33f9d633ae4c7</video:player_loc>
      <video:duration>279</video:duration>
      <video:publication_date>2025-10-15T12:54:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/add-mailcatcher-devtools-to-the-email-layer</loc>
    <lastmod>2025-10-07T06:38:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7f540373a93b510570e3b/68e4cb47b0bb97fd980f611a/thumbnail-1-0.png?v=1759826210138</video:thumbnail_loc>
      <video:title>Add Mailcatcher Devtools to the Email Layer</video:title>
      <video:description>In this lesson, learn how ship custom devtools with your layer for the ultimate developer experience. It’s a lot easier than you think! Custom devtools panels are nothing more than iframes that can speak with the main app. The trickiest part is hosting the page for the iframe on it’s own server. After that you can speak to the main app via REST API or Remote Procedure Call (RPC).
Links

Nuxt Devtools Author Guide</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68e4cb47b0bb97fd980f611a</video:player_loc>
      <video:duration>513</video:duration>
      <video:publication_date>2025-10-07T06:38:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/configuring-nuxt-layers</loc>
    <lastmod>2025-09-09T07:06:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7f540373a93b510570e3b/68bfe9e2cfdbcd132cf63378/thumbnail-1-0.png?v=1757408917530</video:thumbnail_loc>
      <video:title>Configuring Nuxt Layers</video:title>
      <video:description>Just like modules, it’s useful to expose configuration options for layers. Such layer options can be defined via 2 primary methods:

via app.config for public options
and runtime config for private options

Links

Nuxt Docs - App Config
Nuxt Docs - Runtime Config
</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68bfe9e2cfdbcd132cf63378</video:player_loc>
      <video:duration>241</video:duration>
      <video:publication_date>2025-09-09T07:06:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/imports-in-nuxt-layers</loc>
    <lastmod>2025-09-03T06:52:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7f540373a93b510570e3b/68b7f5586a218061ab4499ae/thumbnail-1-0.png?v=1756889363554</video:thumbnail_loc>
      <video:title>Imports in Nuxt Layers</video:title>
      <video:description>When dealing with imports in Nuxt layers, some ways work sometimes, other ways don’t work at all, and one way works all the time. Learn the best method for writing import statements in Nuxt layers so that it works everywhere. 

The Nuxt layer import alias `#layers/[layer-name]` was introduced in Nuxt v3.16.0 and makes importing layer JS/TS modules intuitive and type-safe in both the layer source code and the consuming app. 

**Links**

- [Nuxt Docs - Named Layer Aliases](https://nuxt.com/docs/4.x/guide/going-further/layers#named-layer-aliases)
- [Nuxt Docs - Relative Paths and Aliases](https://nuxt.com/docs/4.x/guide/going-further/layers#relative-paths-and-aliases)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b7f5586a218061ab4499ae</video:player_loc>
      <video:duration>253</video:duration>
      <video:publication_date>2025-09-03T06:52:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/bootstrapping-a-new-nuxt-layer</loc>
    <lastmod>2025-09-03T06:48:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7f540373a93b510570e3b/68b7f5586a218061ab4499b0/thumbnail-1-0.png?v=1756889176977</video:thumbnail_loc>
      <video:title>Bootstrapping a New Nuxt Layer</video:title>
      <video:description>The Nuxt Authoring guide is a great resource for bootstrapping a new Nuxt layer. It includes a quick explanation of how layers work and provides an npm command for bootstrapping a new layer.

```tsx
npm create nuxt -- --template layer nuxt-layer
```

**Links**

- [Nuxt Docs - Authoring Layers](https://nuxt.com/docs/4.x/guide/going-further/layers)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b7f5586a218061ab4499b0</video:player_loc>
      <video:duration>347</video:duration>
      <video:publication_date>2025-09-03T06:48:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-nuxt-layers</loc>
    <lastmod>2025-09-03T06:45:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7f540373a93b510570e3b/68b7f5586a218061ab4499a4/thumbnail-1-0.png?v=1756888967541</video:thumbnail_loc>
      <video:title>Introduction to Nuxt Layers</video:title>
      <video:description>Nuxt layers are a powerful way to share code between multiple Nuxt projects. In this course, we’ll teach you the basics of Nuxt layers and then break down a real world email layer to see advanced use cases and strategies.

**Links**

- [Nuxt Docs - Layers](https://nuxt.com/docs/4.x/getting-started/layers)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b7f5586a218061ab4499a4</video:player_loc>
      <video:duration>174</video:duration>
      <video:publication_date>2025-09-03T06:45:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/sidebars-in-shadcn-vue-continued</loc>
    <lastmod>2025-08-19T06:59:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c281e29ae74a34288fe773/thumbnail-1-0.png?v=1774356575365</video:thumbnail_loc>
      <video:title>Sidebars in ShadCN Vue (continued)</video:title>
      <video:description>In this lesson, we continue exploring the Shadcn Vue Sidebar component. It’s an extremely powerful and extendable component. You can add sticky headers and footers to display dropdowns or any other custom content. Add sidebar groups to better organize controls and display then as collapsable or static items. Add action buttons to groups, menu items, and more! Add submenu’s to menus and render them always or as a collapsable control.

**Links**

- [Shadcn Vue - Sidebar](https://www.shadcn-vue.com/docs/components/sidebar.html)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c281e29ae74a34288fe773</video:player_loc>
      <video:duration>411</video:duration>
      <video:publication_date>2025-08-19T06:59:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/course-conclusion-10</loc>
    <lastmod>2025-08-26T06:34:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c2891a9ae74a342890a3a8/thumbnail-1-0.png?v=1774357530370</video:thumbnail_loc>
      <video:title>Course Conclusion</video:title>
      <video:description>Thanks for watching! If you have any questions, comments, concerns, or just want to chat feel free to reach out to us using the comment section or the links below.

**Links**

- [**Vue School on X/Twitter**](https://x.com/VueSchool_io)
- [**Vue School on LinkedIn**](https://www.linkedin.com/company/vueschool/mycompany/)
- [**Vue School on Facebook**](https://www.facebook.com/vueschool/)
- [**Vue School on BlueSky**](https://bsky.app/profile/vueschool.io)
- [**team@vueschool.io**](mailto:team@vueschool.io)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2891a9ae74a342890a3a8</video:player_loc>
      <video:duration>91</video:duration>
      <video:publication_date>2025-08-26T06:34:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/dark-mode-with-shadcn-vue</loc>
    <lastmod>2025-08-26T06:31:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c2891a9ae74a342890a37c/thumbnail-1-0.png?v=1774358350779</video:thumbnail_loc>
      <video:title>Dark mode with ShadCN Vue</video:title>
      <video:description>In this lesson, learn how to combine VueUse with Shadcn to support a dark mode toggle and even full fledged custom theme selection.

- [VueUse - useColorMode](https://vueuse.org/core/useColorMode/)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2891a9ae74a342890a37c</video:player_loc>
      <video:duration>308</video:duration>
      <video:publication_date>2025-08-26T06:31:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/theming-with-shadcn-vue</loc>
    <lastmod>2025-08-26T06:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c2887f9ae74a342890940f/thumbnail-1-0.png?v=1774357473472</video:thumbnail_loc>
      <video:title>Theming with ShadCN Vue</video:title>
      <video:description>In this lesson, learn how to wield css variables to easily theme ShadCN Vue for you needs. CSS variables can be used in a TailwindCSS theme to generate easy to use classes such as `bg-warning` and `text-warning-foreground`. 

**Links**

- [Shadcn Vue Theming](https://www.shadcn-vue.com/docs/theming.html)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2887f9ae74a342890940f</video:player_loc>
      <video:duration>384</video:duration>
      <video:publication_date>2025-08-26T06:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/data-tables-and-sonner-in-shadcn-vue</loc>
    <lastmod>2025-08-26T06:22:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c281e2531f7f7b6ce44711/thumbnail-1-0.png?v=1774365751372</video:thumbnail_loc>
      <video:title>Data Tables and Sonner in ShadCN Vue</video:title>
      <video:description>In this lesson, we take a brief look at data tables and then dive deeply into the Shadcn Sonner component for displaying transient toast messages. With Sonner, you can display toasts that disappear after a timeout, show messages with a status like info, success, warn, or error, provide the user action buttons to act on the message in some way.

You can also customize the appearance of sonner toasts to display in different locations, based on your preference and customize keyboard shortcuts for interacting with the toasts.

**Links**

- [Data Table Lesson from Master Class](https://vueschool.io/lessons/create-a-data-table-for-the-projects-page)
- [Shadcn Docs - Sonner](https://www.shadcn-vue.com/docs/components/sonner)
- [Shadcn Docs - Data Table](https://www.shadcn-vue.com/docs/components/data-table)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c281e2531f7f7b6ce44711</video:player_loc>
      <video:duration>605</video:duration>
      <video:publication_date>2025-08-26T06:22:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/sidebars-in-shadcn-vue</loc>
    <lastmod>2025-08-19T06:54:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c281e2531f7f7b6ce446fb/thumbnail-1-0.png?v=1774365463387</video:thumbnail_loc>
      <video:title>Sidebars in ShadCN Vue</video:title>
      <video:description>In this lesson, let’s take a look at the Shadcn Vue sidebar component. It is an essential component for modern day dashboards and comes packed with features out of the box including:

- Responsive design
- Keyboard shortcuts for open/close
- Persisted open/close state
- Multiple props and related components to customize it’s appearance and function

**Links**

- [Shadcn Vue - Sidebar](https://www.shadcn-vue.com/docs/components/sidebar.html)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c281e2531f7f7b6ce446fb</video:player_loc>
      <video:duration>702</video:duration>
      <video:publication_date>2025-08-19T06:54:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/use-ai-to-create-a-user-settings-form</loc>
    <lastmod>2025-08-19T06:51:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c281e2531f7f7b6ce446f9/thumbnail-1-0.png?v=1774356066114</video:thumbnail_loc>
      <video:title>Use AI to Create a User Settings Form</video:title>
      <video:description>In this video, let’s demo how well AI is at creating UI’s with Shadcn Vue. We’ll use a single prompt to create an impressive account settings form in less than a minute with functioning validation that meets the form creation patterns of our project.

? Interested in getting the most out of AI in your development workflows? [Checkout aidd.io](https://aidd.io/).

**Links**

- [Cursor](https://www.cursor.com/)
- [Github Copilot](https://github.com/features/copilot)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c281e2531f7f7b6ce446f9</video:player_loc>
      <video:duration>255</video:duration>
      <video:publication_date>2025-08-19T06:51:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/forms-and-form-validation-with-shadcn-vue</loc>
    <lastmod>2025-08-19T06:47:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c281e24f62335fd44828f0/thumbnail-1-0.png?v=1774363677946</video:thumbnail_loc>
      <video:title>Forms and Form Validation with ShadCN Vue</video:title>
      <video:description>In this lesson, learn how to combine vee-validate, zod, and the Shadcn Vue Form component for robust, validated forms. Validation rules and messages can be customized via the zod schema and error feedback is taken care of by the Shadcn Vue components. 

**Links**

- [Shadcn Docs - Form](https://www.shadcn-vue.com/docs/components/form.html)
- [VeeValidate](https://vee-validate.logaretm.com/v4/)
- [Zod](https://zod.dev/)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c281e24f62335fd44828f0</video:player_loc>
      <video:duration>546</video:duration>
      <video:publication_date>2025-08-19T06:47:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/dialogs-and-alerts-with-shadcn-vue</loc>
    <lastmod>2025-08-12T06:37:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c281e29ae74a34288fe76b/thumbnail-1-0.png?v=1774357507509</video:thumbnail_loc>
      <video:title>Dialogs and Alerts with ShadCN Vue</video:title>
      <video:description>In this lesson, take a look at Alerts, Alert Dialogs, and Dialogs. Learn how they make your app more accessible, how to use them, and when to choose which one. 
Links

Shadcn Alert
Shadcn AlertDialog
Shadcn Dialog
MDN Docs - Alert Role
MDN Docs - AlertDialog Role
MDN Docs - Dialog Role</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c281e29ae74a34288fe76b</video:player_loc>
      <video:duration>628</video:duration>
      <video:publication_date>2025-08-12T06:37:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/auto-formatting-shadcn-components</loc>
    <lastmod>2025-08-12T06:34:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c281e24f62335fd44828d6/thumbnail-1-0.png?v=1774355196901</video:thumbnail_loc>
      <video:title>Auto Formatting ShadCN Components</video:title>
      <video:description>ShadCN components are not installed with code formatted to your project standards. In this lesson, learn how to run your projects formatter to update the installed ShadCN components to meet project requirements. 
Links

Prettier
ESlint Formatting</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c281e24f62335fd44828d6</video:player_loc>
      <video:duration>67</video:duration>
      <video:publication_date>2025-08-12T06:34:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/shadcn-vue-blocks-for-fast-uis</loc>
    <lastmod>2025-08-12T06:32:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c281e2531f7f7b6ce446ef/thumbnail-1-0.png?v=1774355480150</video:thumbnail_loc>
      <video:title>ShadCN Vue Blocks for Fast UIs</video:title>
      <video:description>In this lesson, learn how to bootstrap common UIs quickly with Shadcn blocks. Blocks are installed and used just like Shadcn components but are full fledged UIs for common use cases like login pages or dashboard layouts.
Links

Shadcn Vue - Blocks</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c281e2531f7f7b6ce446ef</video:player_loc>
      <video:duration>211</video:duration>
      <video:publication_date>2025-08-12T06:32:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/buttons-variants-and-the-as-child-prop-with-shadcn-vue</loc>
    <lastmod>2025-08-05T06:58:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c281e29ae74a34288fe75d/thumbnail-1-0.png?v=1774355384666</video:thumbnail_loc>
      <video:title>Buttons, Variants, and the as-child Prop with ShadCN Vue</video:title>
      <video:description>In this lesson, let’s take a closer look at the button component. In the process, learn about the common variant prop for changing the look (style, color, etc) of many components. Many trigger-type components also accept an as-child prop so you can render your own element while keeping all behavior, accessibility, and style of the original component.
Links

Shadcn Vue Docs - Button</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c281e29ae74a34288fe75d</video:player_loc>
      <video:duration>211</video:duration>
      <video:publication_date>2025-08-05T06:58:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/install-shadcn-vue</loc>
    <lastmod>2025-08-05T06:55:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c281e2531f7f7b6ce446ed/thumbnail-1-0.png?v=1774355742686</video:thumbnail_loc>
      <video:title>Install ShadCN Vue</video:title>
      <video:description>In this lesson, learn how to install ShadCN Vue in a new Vue + Vite project. Learn how to use the shadcn cli commands to install components. Verify everything is working by displaying a button to the page. 
npx shadcn-vue@latest add button
Links

Shadcn Vue + Vite Installation Guide</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c281e2531f7f7b6ce446ed</video:player_loc>
      <video:duration>363</video:duration>
      <video:publication_date>2025-08-05T06:55:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-shadcn-vue</loc>
    <lastmod>2025-08-05T06:53:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd24c4fe0bcfaae52c4f4/69c281e29ae74a34288fe770/thumbnail-1-0.png?v=1774356965080</video:thumbnail_loc>
      <video:title>What is ShadCN Vue?</video:title>
      <video:description>ShadCN Vue is a component library with a unique installation and maintenance approach. Instead of being installed as a dependency, you run a command to copy and paste the source code of each component into your project repo. This gives you a functional and beautiful starting point to use as-is or to customize based on your needs. ShadCN Vue includes many useful components like buttons, cards, data tables, accordions, and more. All components are 100% compatible with Tailwind CSS. 
Links

Shadcn Vue
Reka-UI</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c281e29ae74a34288fe770</video:player_loc>
      <video:duration>252</video:duration>
      <video:publication_date>2025-08-05T06:53:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/setup-page-with-nuxt-ui-to-login-with-github</loc>
    <lastmod>2025-06-10T06:31:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd38a913220ae3bb526aa/69c290189ae74a3428917344/thumbnail-1-0.png?v=1774359276331</video:thumbnail_loc>
      <video:title>Setup Page with Nuxt UI to Login with GitHub</video:title>
      <video:description>Learn how to combine Nuxt UI with Nuxt Auth Utils to create a login with Login with GitHub Button that opens in a popup window.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c290189ae74a3428917344</video:player_loc>
      <video:duration>191</video:duration>
      <video:publication_date>2025-06-10T06:31:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/course-conclusion-9</loc>
    <lastmod>2025-06-03T05:55:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd8b84fe0bcfaae534dab/69c29f609ae74a3428932c28/thumbnail-1-0.png?v=1774362868903</video:thumbnail_loc>
      <video:title>Course Conclusion</video:title>
      <video:description>Congrats you’ve completed the course! Now you know what it takes to build a Google Docs clone in no time with CKEditor. Dive deeper into what’s possible with CKEditor using the links below. If you have any questions, comments, or anything else you’d like to reach out to Vue School about, we’d love to hear from you! 
Links

CKEditor
CKEditor Demos
CKEditor Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c29f609ae74a3428932c28</video:player_loc>
      <video:duration>153</video:duration>
      <video:publication_date>2025-06-03T05:55:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/ckeditor-mentions</loc>
    <lastmod>2025-06-03T05:53:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd8b84fe0bcfaae534dab/69c29f609ae74a3428932c2a/thumbnail-1-0.png?v=1774363035368</video:thumbnail_loc>
      <video:title>CKEditor Mentions</video:title>
      <video:description>In this lesson, learn how to implement a stand-out google docs feature: mentions. This is where you type an @ symbol to notify a user that their attention is required in a specific portion of a document. You can also customize the marker to something like a # to support features like tags. 
Mentions in CKEditor are fully customizable with features like getting mention dropdown options with an async function, providing a custom render function, limiting dropdown options, and more.
Links

CKEditor Mentions</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c29f609ae74a3428932c2a</video:player_loc>
      <video:duration>345</video:duration>
      <video:publication_date>2025-06-03T05:53:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/permanently-store-documents-on-your-server</loc>
    <lastmod>2025-06-03T05:49:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd8b84fe0bcfaae534dab/69c29f609ae74a3428932c34/thumbnail-1-0.png?v=1774363344954</video:thumbnail_loc>
      <video:title>Permanently Store Documents on Your Server</video:title>
      <video:description>CKEditors&apos;s document persistence stores collaboration data like comments, sessions, and revisions indefinitely. But the document content itself is temporary. This data is deleted 24 hours  after the last person leaves the session and only exists to support collaboration. It’s not meant to be permanent storage.
In this lesson, learn how to use the document id and the autosave plugin to permanently persist data to your own servers and retrieve the data from your servers to populate the content on page load.
Links

CKEditor Saving Collaboration Data
CKEditor Autosave Plugin</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c29f609ae74a3428932c34</video:player_loc>
      <video:duration>495</video:duration>
      <video:publication_date>2025-06-03T05:49:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/customize-user-permissions-per-document</loc>
    <lastmod>2025-06-03T05:47:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd8b84fe0bcfaae534dab/69c29f60531f7f7b6ce78c11/thumbnail-1-0.png?v=1774362793756</video:thumbnail_loc>
      <video:title>Customize User Permissions Per Document</video:title>
      <video:description>In this lesson, learn how to use the document id to identify documents and assign user’s permissions on those docs based on the id. Practically speaking, this means you can grant different permissions to different users for different docs.
Links

CKEditor Collaboration Config</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c29f60531f7f7b6ce78c11</video:player_loc>
      <video:duration>238</video:duration>
      <video:publication_date>2025-06-03T05:47:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/ckeditor-real-time-collaboration-and-customizing-users</loc>
    <lastmod>2025-06-03T05:45:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd8b84fe0bcfaae534dab/69c29f609ae74a3428932c31/thumbnail-1-0.png?v=1774363438044</video:thumbnail_loc>
      <video:title>CKEditor Real Time Collaboration and Customizing Users</video:title>
      <video:description>In this lesson, we’ll learn how real time collaboration works and how to setup CKEditor with your system’s users. Unlike some solutions, that take in users as component props on the client side, CKEditor is a fully production ready solution that requires we setup secure JSON web tokens on the server side. 
Because of this, in a Nuxt project we can use a Nitro powered API endpoint. If you aren’t using Nuxt, you can use any server side technology of your choice, as long as you’re returning a valid token.
Links

CKEditor JWT Token Endpoint Documentation
CKEditor Collaboration Roles and Permissions
JSON Web Token Implementation Guide
Nuxt.js API Endpoints Documentation</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c29f609ae74a3428932c31</video:player_loc>
      <video:duration>536</video:duration>
      <video:publication_date>2025-06-03T05:45:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/tweaking-ckeditor-styles-to-be-fully-responsive</loc>
    <lastmod>2025-06-03T05:40:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd8b84fe0bcfaae534dab/69c29f609ae74a3428932c2d/thumbnail-1-0.png?v=1774362750156</video:thumbnail_loc>
      <video:title>Tweaking CKEditor Styles to Be Fully Responsive</video:title>
      <video:description>It’s super easy to tweak the CKEditor styles to meet your exact needs. In this lesson, we get it working for all screen sizes with a few lines of CSS and a little JavaScript.
&amp;lt;!--app.vue--&amp;gt;
&amp;lt;Editor style=&quot;max-width: 100%&quot; /&amp;gt;

&amp;lt;!--Editor.vue--&amp;gt;
&amp;lt;script setup&amp;gt;

function onReady(editor) {
  //...
  const annotationsUIs = editor.plugins.get( &apos;AnnotationsUIs&apos; );
  function refreshDisplayMode() {
    if ( window.innerWidth &amp;lt; 1115) {
      annotationsUIs.switchTo( &apos;inline&apos; );
    } else {
      annotationsUIs.switchTo( &apos;wideSidebar&apos; );
    }
  }

  editor.ui.view.listenTo( window, &apos;resize&apos;, refreshDisplayMode );
  refreshDisplayMode();
}

&amp;lt;/script&amp;gt;
&amp;lt;style scoped&amp;gt;
@media (max-width: 1115px) {
  :deep(.editor-container__sidebar) {
    min-width: 0px;
    width: 0px;
    visibility: hidden;
  }
  :deep(.ck-editor__editable) {
    min-width: 0 !important;
  }
}
&amp;lt;/style&amp;gt;
Links

Git Commit for Annotations Sidebar Fix</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c29f609ae74a3428932c2d</video:player_loc>
      <video:duration>171</video:duration>
      <video:publication_date>2025-06-03T05:40:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/ckeditor-formatting-features-walkthrough</loc>
    <lastmod>2025-06-03T05:38:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd8b84fe0bcfaae534dab/69c29f609ae74a3428932c2f/thumbnail-1-0.png?v=1774362872365</video:thumbnail_loc>
      <video:title>CKEditor Formatting Features Walkthrough</video:title>
      <video:description>In this lesson, we&apos;ll explore the robust text formatting capabilities of CKEditor that make it a true Google Docs alternative. With zero effort you get all the formatting options you’d expect and more:

Text size, color, font, and background color
Paragraphs and headings
Unordered and Ordered Lists
Text justification/alignment
Tables
Standards- compliant keyboard shortcuts
A convenient bubble menu
Notion-style slash commands for mouse free content creation

Best of all, all of these option are configurable for your use case and if you want to remove any of them you can do so at anytime!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c29f609ae74a3428932c2f</video:player_loc>
      <video:duration>126</video:duration>
      <video:publication_date>2025-06-03T05:38:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/get-started-with-ckeditor-in-no-time-with-the-builder</loc>
    <lastmod>2025-06-03T05:35:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd8b84fe0bcfaae534dab/69c29f60531f7f7b6ce78c13/thumbnail-1-0.png?v=1774363328286</video:thumbnail_loc>
      <video:title>Get Started with CKEditor in No Time with the Builder</video:title>
      <video:description>In this hands-on tutorial, learn how to rapidly deploy a professional document editor in your Vue.js application using CKEditor&apos;s powerful builder. 
The builder let’s user choose from some common preset use-cases so we can get started quickly. Then it gives you complete control to pick and choose exactly what features you want to install and how you want toolbars to behave. 
The full process takes only a few minutes and by the end of it, you can copy a few code snippets into a new or existing project.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c29f60531f7f7b6ce78c13</video:player_loc>
      <video:duration>517</video:duration>
      <video:publication_date>2025-06-03T05:35:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-ckeditor</loc>
    <lastmod>2025-06-03T05:31:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd8b84fe0bcfaae534dab/69c29f604f62335fd44b6c82/thumbnail-1-0.png?v=1774362760499</video:thumbnail_loc>
      <video:title>Intro to CKEditor</video:title>
      <video:description>Discover how to implement a professional and collaborative rich text editor in your Vue.js web applications with CKEditor - the same technology powering document editing in enterprise solutions worldwide. 
In this first lesson, get a quick look of what this powerful document editor has to offer. There are lots of features baked right in that rival document editing giants like Google Docs including:

Rich text formatting
Real-time collaboration
Comments and annotations
Revision history and change tracking
Document persistence
and Image and file uploads

Best of all you can use CK Editor within the front-end framework of your choice (Vue, React, Angular, or Vanilla JS)!
Links

CKEditor
CKEditor Official Documentation</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c29f604f62335fd44b6c82</video:player_loc>
      <video:duration>146</video:duration>
      <video:publication_date>2025-06-03T05:31:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/social-logins-in-a-nuxt-app-github</loc>
    <lastmod>2025-04-30T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd38a913220ae3bb526aa/69c29018531f7f7b6ce5d2c5/thumbnail-1-0.png?v=1774359471654</video:thumbnail_loc>
      <video:title>Social Logins in a Nuxt App (GitHub)</video:title>
      <video:description>In this lesson, learn to use Nuxt Auth Utils to login with GitHub. You can also do similar with other OAuth providers with the same pattern.
Links

GitHub Docs - Creating an OAuth App</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c29018531f7f7b6ce5d2c5</video:player_loc>
      <video:duration>471</video:duration>
      <video:publication_date>2025-04-30T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/why-authentication-matters-in-nuxt</loc>
    <lastmod>2025-04-30T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd38a913220ae3bb526aa/69c290184f62335fd449b60f/thumbnail-1-0.png?v=1774359409369</video:thumbnail_loc>
      <video:title>Why Authentication Matters in Nuxt</video:title>
      <video:description>Hello, and welcome to the course ? In this course, we’ll break down user authentication in a Nuxt app step by step. The Nuxt Auth Utils library from Nuxt co-creator Sébastien Chopin is a perfect place to start! Other solutions are available but Nuxt auth utils is the simplest and most flexible production ready solution with support for:

Hybrid Rendering
15+ OAuth Providers
Username/Password Login (via hashing utils)
a Vue composable
Server utils
and more!

Links

Nuxt Auth Utils
Nuxt Supabase Module
Sidebase Auth Nuxt Module
Better Auth</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c290184f62335fd449b60f</video:player_loc>
      <video:duration>171</video:duration>
      <video:publication_date>2025-04-30T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/overview-of-tailwind-css-version-4-changes</loc>
    <lastmod>2025-03-18T12:57:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696915b5a829585863dcb384/696918d6a829585863dd0552/thumbnail-1-0.png?v=1768496154000</video:thumbnail_loc>
      <video:title>Overview of Tailwind CSS Version 4 Changes</video:title>
      <video:description>In this lesson, let&apos;s go through the TailwindCSS version 4 announcement to see what all has changed. Added features include: built-in import support, a modernized color palette, new 3d transform utils, css theme variables,  expanded gradient APIs, a not variant, and more!
Links
Tailwind CSS Blog - V4 Announcement</video:description>
      <video:player_loc>https://play.gumlet.io/embed/696918d6a829585863dd0552</video:player_loc>
      <video:duration>415</video:duration>
      <video:publication_date>2025-03-18T12:57:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/configuring-tailwindcss-version-4</loc>
    <lastmod>2025-03-17T12:45:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696915b5a829585863dcb384/69691879a829585863dcfb84/thumbnail-1-0.png?v=1768496245319</video:thumbnail_loc>
      <video:title>Configuring TailwindCSS Version 4</video:title>
      <video:description>In this lesson, learn how to configure Tailwind CSS version 4 via it&apos;s updated approach. In Tailwind CSS version 4, all theme configuration is done in a .css file with the @theme directive.
You can override existing theme variables or extend the theme with variables of your own. These are more than just css custom properties (though they&apos;re available that way too!) because they generate different utility classes like bg-primary and text-primary.
Links

Tailwind Docs - CSS Theme Variables
Tailwind Repo - Default Theme</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69691879a829585863dcfb84</video:player_loc>
      <video:duration>354</video:duration>
      <video:publication_date>2025-03-17T12:45:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/store-selected-files-in-a-vue-js-variable-ref</loc>
    <lastmod>2025-04-08T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd2744fe0bcfaae52c854/69c2ce034f62335fd4503316/thumbnail-1-0.png?v=1774374811183</video:thumbnail_loc>
      <video:title>Store Selected Files in a Vue.js Variable Ref</video:title>
      <video:description>In this lesson, learn how to capture the files made available in the change event to a reactive ref and then display the file names to the page. With Vue.js it’s easy!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ce034f62335fd4503316</video:player_loc>
      <video:duration>180</video:duration>
      <video:publication_date>2025-04-08T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/capture-files-in-vue-js-with-input-fields</loc>
    <lastmod>2025-04-08T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd2744fe0bcfaae52c854/69c2ce034f62335fd4503312/thumbnail-1-0.png?v=1774374855436</video:thumbnail_loc>
      <video:title>Capture Files in Vue.js With Input Fields</video:title>
      <video:description>In this lesson, learn how to use the html &amp;lt;input type=&quot;file&quot;/&amp;gt; element to add support for choosing files from the filesystem. Listen to the change event on the input to access the files picked by the user. Each file exists as a special File object in a FileList. 
The multiple attribute allows selection of more than one file to add to the FileList.
To get the most control over the style of the input, it’s best to hide the actual input and style a related label.
Links

MDN Docs - FileList
MDN  Docs - File</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ce034f62335fd4503312</video:player_loc>
      <video:duration>289</video:duration>
      <video:publication_date>2025-04-08T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/file-upload-components-in-ui-libraries</loc>
    <lastmod>2025-04-01T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd2744fe0bcfaae52c854/69c2ce03531f7f7b6cec57d2/thumbnail-1-0.png?v=1774375123009</video:thumbnail_loc>
      <video:title>File Upload Components in UI Libraries</video:title>
      <video:description>Many UI libraries already have a file upload component built-in and to save time it’s worth using them if your use case fits. Often times all that’s needed is to listen for changes on the component and then send the files to your backend. If you have such a UI library at your disposable feel free to grab and go but if you’d like more info on how such file upload components work then stay tuned!
Links

ShadCN Vue
Prime Vue
Nuxt UI
Vuetify
Quasar
Element Plus
Flowbite Vue 3</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ce03531f7f7b6cec57d2</video:player_loc>
      <video:duration>147</video:duration>
      <video:publication_date>2025-04-01T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-file-uploads-in-vue-js</loc>
    <lastmod>2025-04-01T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd2744fe0bcfaae52c854/69c2ce03531f7f7b6cec57d8/thumbnail-1-0.png?v=1774375305572</video:thumbnail_loc>
      <video:title>Introduction to File Uploads in Vue.js</video:title>
      <video:description>Master file uploads in Vue.js 3 with this comprehensive course about building a production-ready file upload component. Learn to create an intuitive upload interface supporting drag-and-drop functionality, multiple file selection, instant previews, and robust error handling using the Vue 3 Composition API and TypeScript. 
In this lesson, we’ll introduce you to the component we’ll build and get you started with the boilerplate code for the project. Stay tuned for plenty of action packed lessons to come where we cover essential concepts including FormData handling, the File API, drag-and-drop events, and sending files to RESTful API endpoints. 
Links

Course Boilerplate Code
TODO: add link to Nuxt file uploads article once published</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ce03531f7f7b6cec57d8</video:player_loc>
      <video:duration>289</video:duration>
      <video:publication_date>2025-04-01T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/tailwind-version-4-container-queries</loc>
    <lastmod>2025-03-10T14:59:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696915b5a829585863dcb384/6969185fa829585863dcf8ca/thumbnail-1-0.png?v=1768495886693</video:thumbnail_loc>
      <video:title>Tailwind Version 4 Container Queries</video:title>
      <video:description>In this lesson, learn about how container queries take responsive design to the next level. Style elements based on the size of a parent element instead of the size of the entire viewport. To use Tailwind CSS container queries in a Vue project, all that&apos;s required is to designate an element as a container with @container and then use your project breakpoint variants with a @ prefix on child elements. That&apos;s it! Now you have an element that&apos;s responsive based on the size of it&apos;s ancestor container.
Links
Tailwind CSS Docs - Container Queries</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6969185fa829585863dcf8ca</video:player_loc>
      <video:duration>207</video:duration>
      <video:publication_date>2025-03-10T14:59:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/install-tailwind-version-4-with-vue-and-nuxt</loc>
    <lastmod>2025-03-10T14:28:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696915b5a829585863dcb384/696917aba829585863dce4da/thumbnail-1-0.png?v=1768496720236</video:thumbnail_loc>
      <video:title>Install Tailwind Version-4 with Vue and Nuxt</video:title>
      <video:description>In this lesson, learn how to install Tailwind CSS version 4 (the latest and greatest! ?) with Vue.js and Nuxt.
Links:
Install for Vue (as Vite Plugin)
Install For Nuxt (as Vite Plugin)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/696917aba829585863dce4da</video:player_loc>
      <video:duration>121</video:duration>
      <video:publication_date>2025-03-10T14:28:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/onerrorcaptured-with-slots</loc>
    <lastmod>2025-03-11T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698b69c7aec3d4e420e70329/698b6afc873071aec5ee640d/thumbnail-1-0.png?v=1770744885921</video:thumbnail_loc>
      <video:title>onErrorCaptured with Slots</video:title>
      <video:description>In this lesson, learn about how onErrorCaptured also works to catch errors thrown within a component’s default slot (or any other slot).</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698b6afc873071aec5ee640d</video:player_loc>
      <video:duration>127</video:duration>
      <video:publication_date>2025-03-11T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-can-onerrorcaptured-catch</loc>
    <lastmod>2025-03-11T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698b69c7aec3d4e420e70329/698b6afcfc23d3d76fccd997/thumbnail-1-0.png?v=1770747180228</video:thumbnail_loc>
      <video:title>What Can onErrorCaptured Catch?</video:title>
      <video:description>onErrorCaptured can catch errors thrown at many different times from descendant components. In this lesson, let’s experiment throwing errors at a different times to see if they are indeed captured. The result? onErrorCaptured can catch errors thrown synchronously and asynchronously from script setup, from event handlers, Vue lifecycle hooks like mounted, and more. 
Links

Stackblitz Playground Example
Vue.js Docs - Error Reference</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698b6afcfc23d3d76fccd997</video:player_loc>
      <video:duration>286</video:duration>
      <video:publication_date>2025-03-11T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/catching-errors-at-the-vue-component-level</loc>
    <lastmod>2025-03-11T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698b69c7aec3d4e420e70329/698b6afcaec3d4e420e72f8f/thumbnail-1-0.png?v=1770745245531</video:thumbnail_loc>
      <video:title>Catching Errors at the Vue Component Level</video:title>
      <video:description>In this lesson, learn how to handle errors within a Vue component. To catch an error thrown in the current component, good ol’ fashion try/catch will work great. You can enhance the process by storing the thrown error into some local state to display the error message to the page from within the component.
Links

Vue.js Docs - onErrorCaptured</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698b6afcaec3d4e420e72f8f</video:player_loc>
      <video:duration>307</video:duration>
      <video:publication_date>2025-03-11T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-error-handling-in-vue</loc>
    <lastmod>2025-03-11T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698b69c7aec3d4e420e70329/698b6afc873071aec5ee6408/thumbnail-1-0.png?v=1770747318887</video:thumbnail_loc>
      <video:title>Intro to Error Handling in Vue</video:title>
      <video:description>Hello and welcome to the course! Hope you’re ready to wrangle errors within your Vue.js apps. This course will teach you how! Learn how to handle errors in the context of a Vue.js component, a Vue.js composable, and even at the app level. Learn how to display error messages inline on the page or in a dedicated floating alerts area (typically in the bottom right hand corner of the page). Finally, get a firm grasp on Vue specific tools available for handling errors like the onErrorCaptured lifecycle hook and app.config.errorHandler.
Links

JavaScript Error Handling (Recommended to Watch Before This Course)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698b6afc873071aec5ee6408</video:player_loc>
      <video:duration>302</video:duration>
      <video:publication_date>2025-03-11T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/dealing-with-javascript-fetch-errors</loc>
    <lastmod>2025-03-04T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696fb50a10171a0e16a762bb/696fb6066f4a3a8ce1245714/thumbnail-1-0.png?v=1770654528345</video:thumbnail_loc>
      <video:title>Dealing with JavaScript Fetch Errors</video:title>
      <video:description>In this lesson, learn how to handle errors from fetch requests. One really important take away is that only network layer issues actually throw an error. For server responses that aren’t in the 200 range, you’ll need to check the response.ok property and throw your own errors. 
Links

MDN - Using the Fetch API</video:description>
      <video:player_loc>https://play.gumlet.io/embed/696fb6066f4a3a8ce1245714</video:player_loc>
      <video:duration>552</video:duration>
      <video:publication_date>2025-03-04T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/javascript-custom-error-classes-when-why-how</loc>
    <lastmod>2025-02-25T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696fb50a10171a0e16a762bb/696fb605bcef432370d92ecb/thumbnail-1-0.png?v=1768929411827</video:thumbnail_loc>
      <video:title>JavaScript Custom Error Classes: When, Why, How?</video:title>
      <video:description>In this lesson, learn how to create a custom JavaScript error type. It’s as simple as extending the base Error type like this:
class PaymentError extends Error{
    constructor(code, message){
        super(message);
        this.name = &quot;PaymentError&quot;
    }
}
These custom error classes can then extended with more app specific functionality like introducing app specific error codes and related user friendly error messages. These custom error classes can also be detected with the instanceof keyword to handle different error types in different ways in catch blocks.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/696fb605bcef432370d92ecb</video:player_loc>
      <video:duration>565</video:duration>
      <video:publication_date>2025-02-25T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/types-of-built-in-javascript-errors</loc>
    <lastmod>2025-02-25T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696fb50a10171a0e16a762bb/696fb6056f4a3a8ce12456f9/thumbnail-1-0.png?v=1768929558457</video:thumbnail_loc>
      <video:title>Types of Built-in JavaScript Errors</video:title>
      <video:description>In this lesson, learn about built in error types like TypeError, ReferenceError, and SyntaxError. ReferenceErrors occur when trying to reference a variable or function that doesn’t exist or exists outside of the current scope. RangeErrors occur when a number is outside a valid range depending on the context. TypeErrors occur when a variable or parameter is not of a valid type (number, string, etc). SyntaxErrors occur typically because of typos in your code that result in invalid JS syntax. 
Links

MDN - Error Types</video:description>
      <video:player_loc>https://play.gumlet.io/embed/696fb6056f4a3a8ce12456f9</video:player_loc>
      <video:duration>416</video:duration>
      <video:publication_date>2025-02-25T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/javascript-exceptions-errors-and-try-catch</loc>
    <lastmod>2025-02-25T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696fb50a10171a0e16a762bb/696fb6056f4a3a8ce12456fb/thumbnail-1-0.png?v=1770654275931</video:thumbnail_loc>
      <video:title>JavaScript Exceptions, Errors, and Try Catch</video:title>
      <video:description>In this lesson, learn the fundamental building blocks of error handling: error objects and try/catch blocks. Error objects are structures that represent a program error. They contain information like: a stacktrace to help you find what caused the error, and an error message with more information. By default, thrown errors stop script execution dead in it’s tracks but try/catch blocks allow to “catch” thrown errors and handle them more gracefully. 
Links

MDN - Error
MDN - Try Catch</video:description>
      <video:player_loc>https://play.gumlet.io/embed/696fb6056f4a3a8ce12456fb</video:player_loc>
      <video:duration>213</video:duration>
      <video:publication_date>2025-02-25T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-javascript-error-handling</loc>
    <lastmod>2025-02-25T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696fb50a10171a0e16a762bb/696fb605bcef432370d92ec9/thumbnail-1-0.png?v=1770654195137</video:thumbnail_loc>
      <video:title>Intro to JavaScript Error Handling</video:title>
      <video:description>Hello! Welcome to the course! We’re excited to share with you the ins and outs of error handling in JavaScript. In this lesson, learn:

why error handling is important
what we’ll cover during the course
how to get setup to follow along

Links

VSCode
Boilerplate Code</video:description>
      <video:player_loc>https://play.gumlet.io/embed/696fb605bcef432370d92ec9</video:player_loc>
      <video:duration>219</video:duration>
      <video:publication_date>2025-02-25T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/course-conclusion-8</loc>
    <lastmod>2024-12-17T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f1869c051a86ff59c4c94/699f1974c051a86ff59c6f3a/thumbnail-1-0.png?v=1772037680558</video:thumbnail_loc>
      <video:title>Course Conclusion</video:title>
      <video:description>Thanks for watching! And good luck scraping the web ?
Links

Bright Data
Web Data Master Class
Bright Data Docs
Vue School on X/Twitter
Vue School on LinkedIn
Vue School on Facebook
Vue School on Bluesky
team@vueschool.io</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f1974c051a86ff59c6f3a</video:player_loc>
      <video:duration>102</video:duration>
      <video:publication_date>2024-12-17T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/common-questions-and-answers-about-web-scraping</loc>
    <lastmod>2024-12-17T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f1869c051a86ff59c4c94/699f1974c051a86ff59c6f33/thumbnail-1-0.png?v=1772037552638</video:thumbnail_loc>
      <video:title>Common Questions and Answers About Web Scraping</video:title>
      <video:description>In this lesson, we answer some common questions asked about web scraping including:

How to scrape dynamic JavaScript content
How to manage rate limits when scraping
How to scrape data loaded by infinite scrolling
How to scrape large datasets</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f1974c051a86ff59c6f33</video:player_loc>
      <video:duration>299</video:duration>
      <video:publication_date>2024-12-17T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/bright-data-web-scraper-api</loc>
    <lastmod>2024-12-17T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f1869c051a86ff59c4c94/699f1974f8c697838354efdc/thumbnail-1-0.png?v=1772036897303</video:thumbnail_loc>
      <video:title>Bright Data Web Scraper API</video:title>
      <video:description>In this lesson, learn about Bright Data’s Web Scraper API. It’s a collection of API endpoints with data pre-scraped, managed, cleaned, and regularly updated from popular websites. We can use the Web Scraper API to get data from Amazon just like we did with the homemade scraper but with less time and effort.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f1974f8c697838354efdc</video:player_loc>
      <video:duration>452</video:duration>
      <video:publication_date>2024-12-17T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/ai-and-web-scraping</loc>
    <lastmod>2024-12-17T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f1869c051a86ff59c4c94/699f1974ba6c1c14db16be1a/thumbnail-1-0.png?v=1772035385479</video:thumbnail_loc>
      <video:title>AI and Web Scraping</video:title>
      <video:description>In this lesson, see an example of using claude.ai to help write a scraper with Playwright.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f1974ba6c1c14db16be1a</video:player_loc>
      <video:duration>175</video:duration>
      <video:publication_date>2024-12-17T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/storing-and-managing-scraped-data</loc>
    <lastmod>2024-12-17T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f1869c051a86ff59c4c94/699f1974ba6c1c14db16be1c/thumbnail-1-0.png?v=1772035129117</video:thumbnail_loc>
      <video:title>Storing and Managing Scraped Data</video:title>
      <video:description>In this lesson, learn how to structure scraped data into objects and arrays so that it’s easy to store the data in a database solution of your choice.
Links

MongoDB
Firebase
Postgres
Supabase
Turso
PlanetScale</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f1974ba6c1c14db16be1c</video:player_loc>
      <video:duration>359</video:duration>
      <video:publication_date>2024-12-17T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-scrape-paginated-data</loc>
    <lastmod>2024-12-17T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f1869c051a86ff59c4c94/699f1974f8c697838354efd9/thumbnail-1-0.png?v=1772035950289</video:thumbnail_loc>
      <video:title>How to Scrape Paginated Data</video:title>
      <video:description>In this lesson, we learn how to scrape paginated data with Bright Data and Playwright. Scraping paginated data means writing code that looks a lot like a real user’s journey in which we load the results of one page, click a next page button, await the results of the next page, and rinse and repeat until all the results are scraped.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f1974f8c697838354efd9</video:player_loc>
      <video:duration>494</video:duration>
      <video:publication_date>2024-12-17T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/efficient-data-extraction-techniques</loc>
    <lastmod>2024-12-17T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f1869c051a86ff59c4c94/699f1974f8c697838354efd0/thumbnail-1-0.png?v=1772035366878</video:thumbnail_loc>
      <video:title>Efficient Data Extraction Techniques</video:title>
      <video:description>In this lesson, learn some efficient data extraction techniques to keep your web scrapers running smoothly and without error. Learn techniques such as targeting desired urls directly when possible, writing less brittle query selectors, and extracting your scraper logic into functions for better reuse and legibility.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f1974f8c697838354efd0</video:player_loc>
      <video:duration>276</video:duration>
      <video:publication_date>2024-12-17T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/navigating-a-site-and-scraping-data-with-playwright</loc>
    <lastmod>2024-12-17T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f1869c051a86ff59c4c94/699f1973c051a86ff59c6f07/thumbnail-1-0.png?v=1772036554101</video:thumbnail_loc>
      <video:title>Navigating a Site and Scraping Data with Playwright</video:title>
      <video:description>In this lesson, we get hands on practice scraping books about mars on amazon with Playwright. Learn how to use query selectors and playwright to select elements, trigger events, and scrape data.
Links

Playwright Docs - fill
Playwright Docs - click</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f1973c051a86ff59c6f07</video:player_loc>
      <video:duration>419</video:duration>
      <video:publication_date>2024-12-17T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/write-your-web-scraper-locally-with-playwright</loc>
    <lastmod>2024-12-17T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f1869c051a86ff59c4c94/699f1973f8c697838354efb5/thumbnail-1-0.png?v=1772034958629</video:thumbnail_loc>
      <video:title>Write Your Web Scraper Locally with Playwright</video:title>
      <video:description>In this video, learn how to use Playwright and Bright Data to scrape amazon.com and take a screenshot of the homepage. Getting started with a local scraper is easy to do since Bright Data provides copy/paste boilerplate code.
Links

Playwright
npm-init</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f1973f8c697838354efb5</video:player_loc>
      <video:duration>325</video:duration>
      <video:publication_date>2024-12-17T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/getting-started-with-bright-data-for-web-scraping</loc>
    <lastmod>2024-12-17T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f1869c051a86ff59c4c94/699f1973f8c697838354efb3/thumbnail-1-0.png?v=1772036120785</video:thumbnail_loc>
      <video:title>Getting Started with Bright Data for Web Scraping</video:title>
      <video:description>In this lesson, we create a Bright Data account and go through their hello world scraping example that extracts real hotel data from booking.com.  In the process, we see the Scraping Browser in action and how to use puppeteer to navigate the site and target the data we’d like to scrape.
Links

Bright Data
Booking.com
Puppeteer</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f1973f8c697838354efb3</video:player_loc>
      <video:duration>627</video:duration>
      <video:publication_date>2024-12-17T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-web-scraping</loc>
    <lastmod>2024-12-17T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f1869c051a86ff59c4c94/699f1973c051a86ff59c6f05/thumbnail-1-0.png?v=1772034775538</video:thumbnail_loc>
      <video:title>Intro to Web Scraping</video:title>
      <video:description>Hello and welcome to the course! ? This course is all about using JavaScript to scrape public websites for valuable data and overcoming common web scraping obstacles with the right strategies and with Bright Data. 
In this lesson, we introduce you the what web scraping is, some common use cases for it, and talk about some of the common challenges you’ll encounter. Throughout the rest of the course we will equip you to overcome those challenges so that you can effectively scrape the data you need from any corner of the web.
Links

Bright Data
What is Web Scraping?</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f1973c051a86ff59c6f05</video:player_loc>
      <video:duration>166</video:duration>
      <video:publication_date>2024-12-17T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/measuring-performance-with-the-vue-devtools</loc>
    <lastmod>2025-02-11T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6960c208525cbb3556237c3f/6960c628525cbb355623f063/thumbnail-1-0.png?v=1767950924239</video:thumbnail_loc>
      <video:title>Measuring Performance with the Vue Devtools</video:title>
      <video:description>Learn what tooling the Vue devtools offer for measuring component and route performance. Easily measure component lifecycle timing with the timeline tab and measure how long it takes to switch between routes with the routes timeline.
Links

Vue Devtools</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6960c628525cbb355623f063</video:player_loc>
      <video:duration>218</video:duration>
      <video:publication_date>2025-02-11T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-use-page-speed-insights-to-measure-vue-app-performance</loc>
    <lastmod>2025-02-11T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6960c208525cbb3556237c3f/6960c627195f98d9e15fce38/thumbnail-1-0.png?v=1767951167513</video:thumbnail_loc>
      <video:title>How to Use Page Speed Insights to Measure Vue App Performance</video:title>
      <video:description>In this lesson, learn the various metrics that Google Chrome Lighthouse provides for measuring performance and what they mean for your page. Also learn how to use Page Speed Insights to see similar metrics for real users.
Links

Chrome Lighthouse Docs
Page Speed Insights
UnLighthouse</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6960c627195f98d9e15fce38</video:player_loc>
      <video:duration>372</video:duration>
      <video:publication_date>2025-02-11T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/debouncing-and-throttling-techniques-for-vue-js</loc>
    <lastmod>2025-02-04T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6960c208525cbb3556237c3f/6960c576525cbb355623dab1/thumbnail-1-0.png?v=1767950898559</video:thumbnail_loc>
      <video:title>Debouncing and Throttling Techniques for Vue.js</video:title>
      <video:description>In this lesson, learn the difference between debouncing and throttling. Also look at a practical example where using the watchDebounced or the refDebounced functions from VueUse can be useful to make a search input snappy yet performant.
Links

Regular Events vs Debounce Vs Throttle Demo</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6960c576525cbb355623dab1</video:player_loc>
      <video:duration>432</video:duration>
      <video:publication_date>2025-02-04T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-the-right-architecture-for-your-use-case-impacts-performance</loc>
    <lastmod>2025-01-07T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6960c208525cbb3556237c3f/6960c2a5195f98d9e15f6841/thumbnail-1-0.png?v=1767949624547</video:thumbnail_loc>
      <video:title>How the Right Architecture For Your Use Case Impacts Performance</video:title>
      <video:description>In this lesson, learn how to select and implement the optimal architecture for your Vue.js applications. This lesson covers Single Page Applications (SPA), Static Site Generation (SSG), and Server-Side Rendering (SSR), helping you make informed decisions that impact performance.
Vanilla Vue is great for SPA’s. Nuxt and Astro are great for SSG. But why limit yourself to any one approach when you go do all 3 in a single app with Nuxt?
Links

Hyrid Rendering (Route Rules) Video
Nuxt Docs - Hybrid Rendering
Nuxt Rendering Modes and Hybrid Rendering
Vue SSR Guide
Content Sites with Astro and Vue.js (Complete Astro Course)
Astro Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6960c2a5195f98d9e15f6841</video:player_loc>
      <video:duration>588</video:duration>
      <video:publication_date>2025-01-07T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-prefetch-lazily-loaded-vue-components</loc>
    <lastmod>2024-12-23T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6960c208525cbb3556237c3f/6960c2a6ac93fe08565ddd56/thumbnail-1-0.png?v=1767950484706</video:thumbnail_loc>
      <video:title>How to Prefetch Lazily Loaded Vue Components</video:title>
      <video:description>In this lesson, learn advanced performance optimization techniques to enhance user experience by implementing smart component prefetching. 
Discover how to leverage event-driven preloading, including mouseover detection, to anticipate user interactions and load component chunks before they&apos;re needed. 
This tutorial covers Vue lazy loading of page components and other components as well as Nuxt route prefetching. 
You&apos;ll learn how to reduce perceived loading times  and optimize bundle loading. Perfect for Vue developers looking to build lightning-fast, production-ready applications with optimized client-side performance.
Links

Vue.js Docs - Async Components
Nuxt Docs - NuxtLink Props
console time
Nuxt preloadComponents
Nuxt Global Components
Nuxt Navigation (Preload of Pages)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6960c2a6ac93fe08565ddd56</video:player_loc>
      <video:duration>628</video:duration>
      <video:publication_date>2024-12-23T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-code-splitting-makes-vue-apps-faster</loc>
    <lastmod>2024-12-23T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6960c208525cbb3556237c3f/6960c2a6ac93fe08565ddd58/thumbnail-1-0.png?v=1767950481247</video:thumbnail_loc>
      <video:title>How Code Splitting Makes Vue Apps Faster</video:title>
      <video:description>In this lesson, learn how to split the JavaScript bundle into multiple chunks that are only sent to the browser when the user actually needs them. This approach is called “code splitting” or lazy loading. It is a simple yet extremely effective way of boosting performance in a Vue or Nuxt application.
Code splitting at the page level is a no-brainer and can be done easily with Vue router in a Vanilla Vue.js project. Routes are automatically code split in a Nuxt app.
Code splitting components is an approach to further break up code within a single page. Dynamically loading a code split component only when it’s shown (such as for a modal overlay component) saves precious milliseconds on initial page load since the code isn’t needed immediately needed.
Code splitting components in Vue can be done with defineAsyncComponent and in Nuxt with the Lazy component prefix.
Links

Vue.js Docs - Async Comonents
Nuxt Docs - Components - Dynamic Import
Lazy Load Components in Vue with defineAsyncComponent
The Lazy component prefix and when to use it - Nuxt Performance in Depth</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6960c2a6ac93fe08565ddd58</video:player_loc>
      <video:duration>486</video:duration>
      <video:publication_date>2024-12-23T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/tree-shaking-for-performant-vue-apps</loc>
    <lastmod>2024-12-23T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6960c208525cbb3556237c3f/6960c2a5525cbb35562389fc/thumbnail-1-0.png?v=1767949796176</video:thumbnail_loc>
      <video:title>Tree Shaking for Performant Vue Apps</video:title>
      <video:description>Master the art of tree shaking in Vue.js to dramatically reduce your application&apos;s bundle size. Learn how to properly import dependencies, choose tree-shakable dependencies, and use Vue&apos;s tree-shakeable APIs.
Links

Lodash
Lodash-es
Nuxt Lodash Module
VueUse
Vue.js Docs - Bundle Size and Tree-shaking
Bundlejs.com</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6960c2a5525cbb35562389fc</video:player_loc>
      <video:duration>509</video:duration>
      <video:publication_date>2024-12-23T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-web-performance</loc>
    <lastmod>2024-12-23T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6960c208525cbb3556237c3f/6960c2a5195f98d9e15f6844/thumbnail-1-0.png?v=1767949471822</video:thumbnail_loc>
      <video:title>Introduction to Web Performance</video:title>
      <video:description>Learn the ins-and-outs of web performance optimization for Vue applications. This lesson covers core performance metrics, their impact on user experience and business metrics, and introduces you to some key concepts you&apos;ll master throughout the course.
Get ready for a deep dive into all things performance-related in Vue.js!
Links

13 Website Page Load Time Statistics (2024 Data)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6960c2a5195f98d9e15f6844</video:player_loc>
      <video:duration>271</video:duration>
      <video:publication_date>2024-12-23T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/course-conclusion-6</loc>
    <lastmod>2024-12-24T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f2a0dc051a86ff59ec989/699f2bf8f8c6978383578884/thumbnail-1-0.png?v=1772126051771</video:thumbnail_loc>
      <video:title>Course Conclusion</video:title>
      <video:description>Congratulations! You&apos;ve made it to the end of Vue Component Design! Let&apos;s take a moment to review what we&apos;ve covered and talk about where you can go from here.
Pattern Review
Throughout this course, we&apos;ve explored several fundamental patterns that form the backbone of well-structured Vue applications:

Branching Component Pattern: We learned how extracting conditional logic into separate components can dramatically improve readability and maintainability.
Slots and Template Props: You now understand how to create flexible, reusable components that can adapt to different contexts while maintaining a clean interface.
List with ListItem Pattern: We covered how to organize list-based components for better separation of concerns and reusability.
Smart vs Dumb Components: You learned the power of separating your components by responsibility, making them easier to test and maintain.
Form Component Pattern: We explored how to handle forms more elegantly using v-model at the form level.
Advanced Patterns: We rounded things out with a look at some more sophisticated patterns like recursive components, lazy loading, and provide/inject.

Real-World Application
These patterns aren&apos;t just theoretical concepts - they&apos;re practical solutions to real problems you&apos;ll encounter in your Vue projects. By applying them thoughtfully, you can:

Write components that are easier to understand and maintain
Create more predictable codebases that your team can navigate confidently
Build applications that can scale without becoming unwieldy
Save time by avoiding common pitfalls and anti-patterns

Going Further
If you&apos;re interested in diving deeper into component design, I highly recommend checking out Michael Thiessen&apos;s Clean Component toolkit. It builds on many of the patterns we&apos;ve covered here and introduces additional advanced concepts. I’ve left a link to it in the description below.
Remember, the patterns we&apos;ve covered are guidelines rather than strict rules. As you gain experience, you&apos;ll develop an intuition for wh</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f2bf8f8c6978383578884</video:player_loc>
      <video:duration>180</video:duration>
      <video:publication_date>2024-12-24T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/form-component-pattern</loc>
    <lastmod>2024-12-17T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f2a0dc051a86ff59ec989/699f2bf8ba6c1c14db195efd/thumbnail-1-0.png?v=1772040003625</video:thumbnail_loc>
      <video:title>Form Component Pattern</video:title>
      <video:description>In this lesson, learn how to implement the form component pattern to make entire forms work with v-model , just like individual inputs do.: &amp;lt;UserForm v-model=&quot;user&quot; /&amp;gt;. This approach also takes advantage of native HTML input validation and keeps data within the component local until it’s committed with the submit button. 
Links

Vue Docs - Watchers
Vue Docs - defineModel</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f2bf8ba6c1c14db195efd</video:player_loc>
      <video:duration>621</video:duration>
      <video:publication_date>2024-12-17T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/branching-component-pattern</loc>
    <lastmod>2024-12-10T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f2a0dc051a86ff59ec989/699f2bf8ba6c1c14db195eff/thumbnail-1-0.png?v=1772039705311</video:thumbnail_loc>
      <video:title>Branching Component Pattern</video:title>
      <video:description>In this lesson, learn how to implement the branching component pattern in your Vue components to make them easier to read and maintain. The pattern uses the presence of a v-if and a v-else as a simple prompt to break down one component into more than 1.
Links

The Extract Conditional Pattern in Vue - Michael Thiessen</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f2bf8ba6c1c14db195eff</video:player_loc>
      <video:duration>288</video:duration>
      <video:publication_date>2024-12-10T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-vue-component-design</loc>
    <lastmod>2024-12-10T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699f2a0dc051a86ff59ec989/699f2bf8c051a86ff59f0fb9/thumbnail-1-0.png?v=1772125596591</video:thumbnail_loc>
      <video:title>Introduction to Vue Component Design</video:title>
      <video:description>In this course, we’ll dive into 5+ component patterns to help take your Vue applications to the next level including:

The Branching Component Pattern
The Slots and Template Props Pattern
The List with ListItem Pattern
The Smart Vs Dumb Component Pattern
and the Form Component Pattern

Patterns are useful for maintaining a scalable codebase and learning from the collective wisdom of the Vue community.
Links

Nuxt
Course Repo</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699f2bf8c051a86ff59f0fb9</video:player_loc>
      <video:duration>285</video:duration>
      <video:publication_date>2024-12-10T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/bonus-lesson-github-copilot-for-vue-developers</loc>
    <lastmod>2024-12-04T12:16:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a988b25141dfa4d05172/69ab7bd106a15537d0556bf9/thumbnail-1-0.png?v=1772847463837</video:thumbnail_loc>
      <video:title>Bonus Lesson! Github Copilot for Vue Developers</video:title>
      <video:description>In this lesson, we experiment with Github Copilot to see how useful it can be with Vue apps.
NOTE: Github Copilot is a PAID VS Code extension.
Links

Github Copilot</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab7bd106a15537d0556bf9</video:player_loc>
      <video:duration>701</video:duration>
      <video:publication_date>2024-12-04T12:16:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/generating-basic-data</loc>
    <lastmod>2024-12-03T06:26:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699499b74f875354df27d5da/69949a2672fd6b061941498c/thumbnail-1-0.png?v=1771347100066</video:thumbnail_loc>
      <video:title>Generating Basic Data</video:title>
      <video:description>In this episode, we dive deeper into the versatile capabilities of Faker.js, showcasing its ability to generate a wide range of realistic mock data, from addresses to commercial items and prices. You&apos;ll learn how to utilize Faker.js to create dynamic test data, replacing those hardcoded values with rich, diverse, and more representative fake values that make your tests more resilient.    
Links

Faker.js documentation
Github Repo
Github Repo at tag for episode 2
Git Diff for this lesson</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69949a2672fd6b061941498c</video:player_loc>
      <video:duration>516</video:duration>
      <video:publication_date>2024-12-03T06:26:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/discovering-fakerjs</loc>
    <lastmod>2024-12-03T06:23:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699499b74f875354df27d5da/69949a2669352d156687bebf/thumbnail-1-0.png?v=1771348467882</video:thumbnail_loc>
      <video:title>Discovering FakerJS</video:title>
      <video:description>In this episode, we introduce Faker.js, a powerful JavaScript library that helps developers generate realistic mock data with ease. Faker.js offers a rich set of functions to help you account for real-world complexities you might not anticipate, like names with special characters (e.g., O&apos;Connor) or locale-specific details such as regional address formats. We&apos;ll highlight practical use cases—such as testing, database seeding, and data obfuscation—and finish with a quick installation walkthrough to get you started with Faker.js.
Links

Faker.js documentation
Github Repo
Github Repo at tag for episode 1
Git Diff for this lesson</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69949a2669352d156687bebf</video:player_loc>
      <video:duration>330</video:duration>
      <video:publication_date>2024-12-03T06:23:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-s-landing-after-nuxt-4-major-delayed-hydration</loc>
    <lastmod>2024-11-19T06:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6978ea9d11ec7dfcb9778543/6978eb292b8b17fbb73d274c/thumbnail-1-0.png?v=1769701890677</video:thumbnail_loc>
      <video:title>What’s Landing After Nuxt 4 Major - Delayed Hydration</video:title>
      <video:description>In this lesson, learn about the planned “delayed hydration” feature for Nuxt 4. It promises more control over when components hydrate such as only when it’s visible in the viewport, only when the browser is idle, on custom user events, and more!
Links

Github PR - feat:delayed hydration</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6978eb292b8b17fbb73d274c</video:player_loc>
      <video:duration>153</video:duration>
      <video:publication_date>2024-11-19T06:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/overview-of-other-breaking-changes-in-nuxt-4</loc>
    <lastmod>2024-11-19T06:39:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6978ea9d11ec7dfcb9778543/6978eb292b8b17fbb73d274e/thumbnail-1-0.png?v=1769701654467</video:thumbnail_loc>
      <video:title>Overview of Other Breaking Changes in Nuxt 4</video:title>
      <video:description>In this lesson, we briefly scroll through the Nuxt 4 upgrade guide and take a quick look at some other pertinent breaking changes including: Removal of Experimental Features, Removal of window.NUXT object, Directory index scanning, and Deduplication of Route Metadata.
Links

Nuxt Upgrade Guide - Removal of Experimental Features
Nuxt Upgrade Guide - Removal of window.NUXT object
Nuxt Upgrade Guide - Directory index scanning
NUXT Upgrade Guide - Deduplication of Route Metadata</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6978eb292b8b17fbb73d274e</video:player_loc>
      <video:duration>197</video:duration>
      <video:publication_date>2024-11-19T06:39:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/nuxt-4-directory-structure-the-most-significant-change</loc>
    <lastmod>2024-11-19T06:33:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6978ea9d11ec7dfcb9778543/6978eb2911ec7dfcb97796a9/thumbnail-1-0.png?v=1769701067020</video:thumbnail_loc>
      <video:title>Nuxt 4 Directory Structure - The Most Significant Change</video:title>
      <video:description>The most significant change in Nuxt 4 is the new file structure. Many files and folders will now be nested under a directory called app providing a clear distinction between code that runs in the app environment vs code that runs in the server environment. This is good for performance when booting up the dev server and is good for TypeSafety in your IDE.
Links

Nuxt Upgrade Guide &amp;gt; New Directory Structure</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6978eb2911ec7dfcb97796a9</video:player_loc>
      <video:duration>157</video:duration>
      <video:publication_date>2024-11-19T06:33:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-nuxt-4</loc>
    <lastmod>2024-11-19T06:30:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6978ea9d11ec7dfcb9778543/6978eb29c2fb61ce1930a2ce/thumbnail-1-0.png?v=1769700934903</video:thumbnail_loc>
      <video:title>Intro to Nuxt 4</video:title>
      <video:description>In this course, we’ll look into what’s changing between Nuxt major versions 3 and 4. In this lesson, let us introduce you to what’s coming before we dive more deeply into specific changes. 
Links

Nuxt Upgrade Guide
Dejavue Podcast - The Road to Nuxt 4
Nuxt Version 4 Branch on Github</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6978eb29c2fb61ce1930a2ce</video:player_loc>
      <video:duration>138</video:duration>
      <video:publication_date>2024-11-19T06:30:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/implement-stale-while-revalidate-with-pinia-and-usememoize</loc>
    <lastmod>2024-10-29T06:36:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b5da39373a93b510356a10/68b5f5ce6a218061ab24c4f9/thumbnail-1-0.png?v=1757341217024</video:thumbnail_loc>
      <video:title>Implement Stale While Revalidate with Pinia and useMemoize</video:title>
      <video:description>We now render the cached response immediately to the user. But we&apos;re not stopping there; to keep data current without frequent requests, we’ll implement a &amp;quot;stale-while-revalidate&amp;quot; approach. This way, users get fast, cached data on return visits, and if anything changes, the cache clears to ensure they see the latest updates
Links

Web Dot Dev - Keeping things fresh with stale-while-revalidate</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b5f5ce6a218061ab24c4f9</video:player_loc>
      <video:duration>367</video:duration>
      <video:publication_date>2024-10-29T06:36:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/a-brief-overview-of-other-nuxt-usefetch-configuration-options</loc>
    <lastmod>2024-11-05T06:58:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/697106bc10171a0e16cbc498/697109ce10171a0e16cc1f46/thumbnail-1-0.png?v=1769016235452</video:thumbnail_loc>
      <video:title>A Brief Overview of Other Nuxt useFetch Configuration Options</video:title>
      <video:description>In this lesson, we quickly go over the rest of the useFetch options available that we have not covered in the course so far.

server:false - makes the request ONLY on the client side (even on page load)
immediate: false - keeps useFetch from immediately making the request, meaning you’ll have to call execute yourself
default - sets the default value of the data for when the actual response data isn’t available
dedupe - allows you to configure how to handle overlapping or duplicated requests

All of these options are available for useFetch and useAsyncData. 
useFetch has a few more that are essentially passed on to the underlying $fetch function (like method, baseURL, and headers. 
Links

Nuxt Docs - useFetch</video:description>
      <video:player_loc>https://play.gumlet.io/embed/697109ce10171a0e16cc1f46</video:player_loc>
      <video:duration>422</video:duration>
      <video:publication_date>2024-11-05T06:58:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-minimize-the-payload-size-with-nuxt-usefetch</loc>
    <lastmod>2024-11-05T06:55:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/697106bc10171a0e16cbc498/697108f410171a0e16cc042a/thumbnail-1-0.png?v=1769016170767</video:thumbnail_loc>
      <video:title>How to Minimize the Payload Size with Nuxt useFetch</video:title>
      <video:description>In this lesson, learn how to use pick and transform to make your payloads as small as possible with Nuxt’s useFetch composable.
Links

Nuxt Docs - Minimize Payload Size</video:description>
      <video:player_loc>https://play.gumlet.io/embed/697108f410171a0e16cc042a</video:player_loc>
      <video:duration>356</video:duration>
      <video:publication_date>2024-11-05T06:55:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-cache-data-with-the-key-option-for-useasyncdata-and-usefetch</loc>
    <lastmod>2024-11-05T06:48:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/697106bc10171a0e16cbc498/697108f410171a0e16cc0430/thumbnail-1-0.png?v=1769016100837</video:thumbnail_loc>
      <video:title>How to Cache Data with the Key Option for useAsyncData and useFetch</video:title>
      <video:description>In this lesson, learn how the key affects how data is cached with Nuxt’s useFetch and useAsyncData composables. When combined with the lazy option, it can be useful for showing stale data while fresh data is being fetched.
Links

Nuxt Docs - useAsyncData params
Nuxt Docs - useFetch params
Nuxt Docs - Data Fetching - Caching and Refetching</video:description>
      <video:player_loc>https://play.gumlet.io/embed/697108f410171a0e16cc0430</video:player_loc>
      <video:duration>419</video:duration>
      <video:publication_date>2024-11-05T06:48:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/making-parallel-requests-in-nuxt</loc>
    <lastmod>2024-10-29T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/697106bc10171a0e16cbc498/697108f4bcef432370fdb9c6/thumbnail-1-0.png?v=1769015924715</video:thumbnail_loc>
      <video:title>Making Parallel Requests in Nuxt</video:title>
      <video:description>In this lesson, learn how to make multiple requests in parallel using useAsyncData. This is perfect for boosting performance when one request doesn’t rely on the response of another request.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/697108f4bcef432370fdb9c6</video:player_loc>
      <video:duration>282</video:duration>
      <video:publication_date>2024-10-29T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/error-handling-with-usefetch</loc>
    <lastmod>2024-10-29T06:56:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/697106bc10171a0e16cbc498/697108f46f4a3a8ce14914e1/thumbnail-1-0.png?v=1769016014845</video:thumbnail_loc>
      <video:title>Error Handling with useFetch</video:title>
      <video:description>In this lesson, learn how to handle errors caused by failed requests with useFetch. When working with errors from useFetch in a Nuxt app, it’s important to remember that error’s can happen even after initial page load, as requests can be sent again at various times throughout the life of the page.
Links

Nuxt Docs - Error Handling</video:description>
      <video:player_loc>https://play.gumlet.io/embed/697108f46f4a3a8ce14914e1</video:player_loc>
      <video:duration>352</video:duration>
      <video:publication_date>2024-10-29T06:56:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/to-await-or-not-await-usefetch-blocking-vs-non-blocking</loc>
    <lastmod>2024-10-22T10:46:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/697106bc10171a0e16cbc498/697108f46f4a3a8ce14914df/thumbnail-1-0.png?v=1770912942220</video:thumbnail_loc>
      <video:title>To Await or Not Await useFetch (Blocking vs Non-Blocking)</video:title>
      <video:description>A common question I’ve heard about Nuxt’s useFetch and useAsyncAwait is: should I always await the result? The answer is: it depends! Awaiting the request will result in blocking navigation unless you explicitly provide the lazy option or use the lazy version of the composable. If you omit the await you’ll be non-blocking navigation without the lazy option.
Links

Nuxt Docs - Lazy Data Fetching
Nuxt Docs - useLazyAsyncData
Nuxt Docs - useLazyFetch
Daniel Roe Await Tweet</video:description>
      <video:player_loc>https://play.gumlet.io/embed/697108f46f4a3a8ce14914df</video:player_loc>
      <video:duration>326</video:duration>
      <video:publication_date>2024-10-22T10:46:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/usefetch-vs-useasyncdata-vs-fetch</loc>
    <lastmod>2024-10-22T10:43:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/697106bc10171a0e16cbc498/697108f410171a0e16cc03f9/thumbnail-1-0.png?v=1769016123844</video:thumbnail_loc>
      <video:title>useFetch vs useAsyncData vs $fetch</video:title>
      <video:description>In this video, we break down how $fetch, useFetch, and useAsyncData differ. $fetch is great for responding to user interactions while useAsyncData and useFetch are good for fetching data to display on page load. useAsyncData and useFetch de-duplicate requests by forwarding the data fetched on the server to the client so that the client doesn’t have to make the request again. Finally, useAsyncData is great for working with 3rd party JavaScript clients or SDKs.
Links

Supabase JS Client
Google Firebase
Github Octokit JS Client
useAsyncData vs useFetch YouTube Video</video:description>
      <video:player_loc>https://play.gumlet.io/embed/697108f410171a0e16cc03f9</video:player_loc>
      <video:duration>625</video:duration>
      <video:publication_date>2024-10-22T10:43:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-data-fetching-in-nuxt</loc>
    <lastmod>2024-10-22T10:42:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/697106bc10171a0e16cbc498/697108f4bcef432370fdb9c3/thumbnail-1-0.png?v=1770912786021</video:thumbnail_loc>
      <video:title>Intro to Data Fetching in Nuxt</video:title>
      <video:description>Hello! ? Welcome to the course!
In this video, we intro what data fetching is and why it’s important for modern web applications. We also get a glimpse at the tool Nuxt provides us with to do data fetch: useAsyncData , useFetch and $fetch. We close by putting useFetch into action to fetch some data from a Pokemon API.
Links

Nuxt Docs - Data Fetching</video:description>
      <video:player_loc>https://play.gumlet.io/embed/697108f4bcef432370fdb9c3</video:player_loc>
      <video:duration>290</video:duration>
      <video:publication_date>2024-10-22T10:42:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/typescript-mapping-and-generics</loc>
    <lastmod>2024-10-15T05:35:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b5da39373a93b510356a10/68b5f529373a93b5103703ce/thumbnail-1-0.png?v=1757340732032</video:thumbnail_loc>
      <video:title>TypeScript Mapping and Generics</video:title>
      <video:description>In this lesson, we explore how to use TypeScript mapping and generics to dynamically handle form validation errors. By creating a custom FormErrors type, we can map error messages to each field of a form like LoginForm, maintaining type safety and ensuring accurate error handling for real-time validation across different forms.
Links
TypeScript - Mapped Types
TypeScript - Keyof Type Operator
TypeScript - Generics</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b5f529373a93b5103703ce</video:player_loc>
      <video:duration>332</video:duration>
      <video:publication_date>2024-10-15T05:35:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/conclusion-3</loc>
    <lastmod>2025-02-18T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2df609ae74a342899a601/thumbnail-1-0.png?v=1774379261739</video:thumbnail_loc>
      <video:title>Conclusion</video:title>
      <video:description>Thanks for watching the course! You now have the tools to build rich editing experiences within your Vue.js applications to server an infinite number of use cases. Remember to connect with TinyMCE with the links below so you don’t miss any awesome updates or useful news.
Links

TinyMCE&apos;s YouTube channel
The TinyMCE blog
TinyMCE X/Twitter</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2df609ae74a342899a601</video:player_loc>
      <video:duration>114</video:duration>
      <video:publication_date>2025-02-18T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/pro-tinymce-features-perfectly-fit-for-a-cms</loc>
    <lastmod>2025-02-18T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2de364f62335fd451cc7b/thumbnail-1-0.png?v=1774379691338</video:thumbnail_loc>
      <video:title>Pro TinyMCE Features Perfectly Fit for a CMS</video:title>
      <video:description>In this lesson, learn to support collaborative content creation with TinyMCE&apos;s powerful commenting system and accessibility checker. 
Learn to implement user-specific commenting, manage comment permissions, and ensure content accessibility through automated checking - transforming your CMS into a fully collaborative platform that delivers accessible content to all users.
Links

TinyMCE Docs - Comments Plugin
TinyMCE Docs - Configuring the Comments Plugin in Embedded Mode
TinyMCE Docs - Accessibility Checker Plugin</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2de364f62335fd451cc7b</video:player_loc>
      <video:duration>518</video:duration>
      <video:publication_date>2025-02-18T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/enable-advanced-code-editing-with-tinymce</loc>
    <lastmod>2025-02-18T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2de36531f7f7b6cedf356/thumbnail-1-0.png?v=1774378959271</video:thumbnail_loc>
      <video:title>Enable Advanced Code Editing with TinyMCE</video:title>
      <video:description>In this lesson, enhance your TinyMCE powered CMS with advanced code editing capabilities using the powerful advcode plugin. 
Learn to implement syntax highlighting, inline code editing, and professional HTML manipulation tools to give content creators precise control over their page structure while maintaining a seamless editing experience.
Links

TinyMCE Docs - Enhanced Code Editor Plugin</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2de36531f7f7b6cedf356</video:player_loc>
      <video:duration>136</video:duration>
      <video:publication_date>2025-02-18T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/prevent-loosing-unsaved-changes-with-the-autosave-plugin</loc>
    <lastmod>2025-02-18T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2ddc89ae74a3428997ed3/thumbnail-1-0.png?v=1774378983141</video:thumbnail_loc>
      <video:title>Prevent Loosing Unsaved Changes with the AutoSave Plugin</video:title>
      <video:description>In this lesson, learn how to protect content creators from data loss with TinyMCE&apos;s powerful autosave plugin. 
Learn to implement automatic content backup, configure localStorage persistence, and enable draft restoration features to ensure a seamless and secure content editing experience in your CMS implementation.
Links

TinyMCE Docs - Autosave Plugin
TinyMCE Docs - Save Plugin</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ddc89ae74a3428997ed3</video:player_loc>
      <video:duration>235</video:duration>
      <video:publication_date>2025-02-18T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-in-page-anchors-with-tinymce</loc>
    <lastmod>2025-02-18T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2d947531f7f7b6ced700e/thumbnail-1-0.png?v=1774378699382</video:thumbnail_loc>
      <video:title>Create In-Page Anchors with TinyMCE</video:title>
      <video:description>In this lesson, master in-page navigation with TinyMCE&apos;s anchor plugin to create user-friendly, shareable content sections. 
Learn how to implement anchor links for seamless page navigation, enhance content accessibility, and improve user experience by enabling direct links to specific content sections within your web pages.
Links

TinyMCE Docs - Anchor Plugin</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d947531f7f7b6ced700e</video:player_loc>
      <video:duration>115</video:duration>
      <video:publication_date>2025-02-18T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-custom-style-formats-to-support-buttons-headings-and-more</loc>
    <lastmod>2025-02-11T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2d9474f62335fd4514905/thumbnail-1-0.png?v=1774378898798</video:thumbnail_loc>
      <video:title>Create Custom Style Formats to Support Buttons, Headings, And More</video:title>
      <video:description>Transform TinyMCE into a powerful content management system by implementing custom style formats and advanced formatting options. This lesson demonstrates how to configure the styles toolbar, create custom formats like buttons and headings, and implement a user-friendly formatting system that maintains design consistency while empowering content editors.
Links

TinyMCE Docs - Changing user formatting controls</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d9474f62335fd4514905</video:player_loc>
      <video:duration>306</video:duration>
      <video:publication_date>2025-02-11T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/pro-tinymce-features-perfectly-fit-for-a-crm</loc>
    <lastmod>2025-02-11T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2d9474f62335fd4514901/thumbnail-1-0.png?v=1774378505164</video:thumbnail_loc>
      <video:title>Pro TinyMCE Features Perfectly Fit for a CRM</video:title>
      <video:description>In this lesson, let’s take a look at how the AI plugin works and discuss how it could benefit your Vue.js powered CRM.
Links

TinyMCE Docs - AI Assistant Plugin
TinyMCE AI Assistant
AI Proxy Server Reference Guide
TinyMCE Docs - Import From Word Plugin</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d9474f62335fd4514901</video:player_loc>
      <video:duration>236</video:duration>
      <video:publication_date>2025-02-11T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/enhance-the-crm-challenge</loc>
    <lastmod>2025-02-11T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2d9474f62335fd4514903/thumbnail-1-0.png?v=1774378539095</video:thumbnail_loc>
      <video:title>Enhance the CRM Challenge</video:title>
      <video:description>In this lesson, challenge yourself to practice adding merge tag and link list functionality to the TinyMCE powered CRM messenger.
Links

TinyMCE Docs - Merge Tags Plugin
TinyMCE Docs - Link Lists</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d9474f62335fd4514903</video:player_loc>
      <video:duration>81</video:duration>
      <video:publication_date>2025-02-11T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/auto-resize-the-tinymce-editor-height-based-on-content</loc>
    <lastmod>2025-02-11T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2d947531f7f7b6ced6ff3/thumbnail-1-0.png?v=1774377813632</video:thumbnail_loc>
      <video:title>Auto Resize the TinyMCE Editor Height Based on Content</video:title>
      <video:description>In this lesson, learn to apply an auto adjusting height to the TinyMCE editor so that your Vue powered CRM can stay as streamlined as possible without superfluous scrollbars cluttering the interface.
Links

TinyMCE Docs - Autoresize plugin</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d947531f7f7b6ced6ff3</video:player_loc>
      <video:duration>124</video:duration>
      <video:publication_date>2025-02-11T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/format-the-tinymce-editor-toolbars</loc>
    <lastmod>2025-02-04T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2d9474f62335fd45148e7/thumbnail-1-0.png?v=1774378186417</video:thumbnail_loc>
      <video:title>Format the TinyMCE Editor Toolbars</video:title>
      <video:description>In this lesson, learn how to customize the TinyMCE editor’s appearance by hiding and positioning the various editor menus and bars.
Links

TinyMCE Docs - Configuration Options
TinyMCE Docs - Create a Custom Icon Pack
TinyMCE Docs - Alternate Skins and Icons</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d9474f62335fd45148e7</video:player_loc>
      <video:duration>289</video:duration>
      <video:publication_date>2025-02-04T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/pro-tinymce-features-perfectly-fit-for-email</loc>
    <lastmod>2025-02-04T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2d9479ae74a3428990559/thumbnail-1-0.png?v=1774378546146</video:thumbnail_loc>
      <video:title>Pro TinyMCE Features Perfectly Fit for Email</video:title>
      <video:description>Master email template styling with TinyMCE&apos;s inline CSS plugin. 
In this lesson, learn how to transform clean, editable templates into email-client-friendly HTML with automatically inlined CSS. Learn to implement the plugin, retrieve inlined content, and manage both editable and send-ready versions of your email templates for optimal workflow and compatibility all within the context of your Vue.js app!
Links

TinyMCE Inline CSS Plugin</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d9479ae74a3428990559</video:player_loc>
      <video:duration>346</video:duration>
      <video:publication_date>2025-02-04T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/add-common-links-with-link-lists</loc>
    <lastmod>2025-02-04T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2d9479ae74a3428990569/thumbnail-1-0.png?v=1774378376336</video:thumbnail_loc>
      <video:title>Add Common Links with Link Lists</video:title>
      <video:description>In this lesson, learn how to add link lists to a email editor powered by TinyMCE and Vue.js. Link lists make it easy to add commonly used links to newsletters, e-commerce emails, and more!
Links

TinyMCE Links Plugin</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d9479ae74a3428990569</video:player_loc>
      <video:duration>79</video:duration>
      <video:publication_date>2025-02-04T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/placeholders-in-tinymce-via-merge-tags</loc>
    <lastmod>2025-02-04T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2d947531f7f7b6ced6ff0/thumbnail-1-0.png?v=1774377908228</video:thumbnail_loc>
      <video:title>Placeholders in TinyMCE via Merge Tags</video:title>
      <video:description>Learn how to implement dynamic content in email marketing using TinyMCE&apos;s merge tags plugin. This lesson covers configuring the TinyMCE editor for personalized email templates, defining custom merge tags, and integrating them seamlessly into your email content for enhanced user engagement and conversion rates. With the power of Vue.js and TinyMCE you can add this industry-standard feature in seconds.
Links

TinyMCE Merge Tags Plugin</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d947531f7f7b6ced6ff0</video:player_loc>
      <video:duration>189</video:duration>
      <video:publication_date>2025-02-04T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/setting-up-tinymce-for-email-editing-with-multi-root-editing</loc>
    <lastmod>2025-01-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2d9479ae74a3428990557/thumbnail-1-0.png?v=1774378527266</video:thumbnail_loc>
      <video:title>Setting Up TinyMCE for Email Editing with Multi-Root Editing</video:title>
      <video:description>In this lesson, learn how to create a powerful newsletter editor using Vue.js and TinyMCE. This tutorial covers setting up TinyMCE for email editing, implementing multi-root editing for selective content management, and optimizing the editor for newsletter creation. 
You&apos;ll discover how to load HTML email templates, apply custom styles, and configure TinyMCE options for an enhanced user experience. Perfect for developers looking to build robust email editing tools in their Vue applications.
Links

Boilerplate Code (note all boilerplate code is in this branch called “boilerplate” from the course repo)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d9479ae74a3428990557</video:player_loc>
      <video:duration>434</video:duration>
      <video:publication_date>2025-01-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/customize-the-editor</loc>
    <lastmod>2025-01-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2dfd69ae74a342899b303/thumbnail-1-0.png?v=1774379724453</video:thumbnail_loc>
      <video:title>Customize the Editor</video:title>
      <video:description>In this lesson, let’s examine a couple basic customization options for configuring TinyMCE via plugins and the toolbar.
Links

Plugins For TinyMCE
Toolbar Buttons</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2dfd69ae74a342899b303</video:player_loc>
      <video:duration>358</video:duration>
      <video:publication_date>2025-01-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/install-tinymce-with-vue</loc>
    <lastmod>2025-01-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2dfd64f62335fd451f786/thumbnail-1-0.png?v=1774379486758</video:thumbnail_loc>
      <video:title>Install TinyMCE with Vue</video:title>
      <video:description>In this lesson, we get hands on installing TinyMCE into a Vue project. It’s easy! Just install the TinyMCE Vue package, grab your API key, and use the Editor component to display a rich text editor. It even works with v-model just like you’d expect.
npm install &quot;@tinymce/tinymce-vue&quot;
Links

Register for a FREE TinyMCE Account
Getting Started Guide - Vue</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2dfd64f62335fd451f786</video:player_loc>
      <video:duration>301</video:duration>
      <video:publication_date>2025-01-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-tinymce</loc>
    <lastmod>2025-01-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd223913220ae3bb509b5/69c2d9474f62335fd45148ea/thumbnail-1-0.png?v=1774378136834</video:thumbnail_loc>
      <video:title>Introduction to TinyMCE</video:title>
      <video:description>In this lesson, we’ll learn what TinyMCE has to offer to your Vue.js applications. Despite its most common use case, TinyMCE is more than just a rich text editor. It has the ability to power rich content editing experiences  in a variety of application types. 
TinyMCE can be used to implement anything from the rich text comments on your blog to enterprise-level systems like email editors, learning management systems (LMS), customer relationship management (CRM) Systems, content management systems (CMS), and more!
Best of all it’s easy to setup and just as easy to customize to the needs of your use case.
Links

TinyMCE Website</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d9474f62335fd45148ea</video:player_loc>
      <video:duration>175</video:duration>
      <video:publication_date>2025-01-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/tailwind-css</loc>
    <lastmod>2024-09-03T11:57:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69725ff6deef8702a8ccfe1c/69726bb8deef8702a8ce5f6c/thumbnail-1-0.png?v=1769107735967</video:thumbnail_loc>
      <video:title>Tailwind CSS</video:title>
      <video:description>In this video, we’ll setup Tailwind with Quasar in minutes. First we’ll install tailwindcss, initialize some files with npx, do a little config and we’ll be good to go!
Links

Tailwind Docs - Install Tailwind CSS with Vite</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69726bb8deef8702a8ce5f6c</video:player_loc>
      <video:duration>231</video:duration>
      <video:publication_date>2024-09-03T11:57:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/use-vue-js-suspense-component-to-handle-async-dependencies</loc>
    <lastmod>2024-08-06T05:48:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b5da39373a93b510356a10/68b5ecba6a218061ab243cbb/thumbnail-1-0.png?v=1757083849332</video:thumbnail_loc>
      <video:title>Use Vue.js Suspense Component to Handle Async Dependencies</video:title>
      <video:description>In this lesson, we’ll master handling async dependencies in Vue using the Suspense component. By leveraging this Vue.js feature, we&apos;ll manage top-level promises and their loading states, ensuring our components render smoothly once all data is resolved. 
Along the way, we&apos;ll also use the defineComponent helper function to demonstrate how Suspense works.
Links

Vue.js Docs - defineComponent Function
Vue.js Docs - Suspense</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b5ecba6a218061ab243cbb</video:player_loc>
      <video:duration>384</video:duration>
      <video:publication_date>2024-08-06T05:48:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/qlist</loc>
    <lastmod>2024-08-20T06:56:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69725ff6deef8702a8ccfe1c/69726aa0deef8702a8ce3e4e/thumbnail-1-0.png?v=1769107474528</video:thumbnail_loc>
      <video:title>QList</video:title>
      <video:description>Throughout this series, we’ll be exploring common Quasar components. Let’s take a look at QList. A straightforward way to show lots of different kinds of data. Along the way, we’ll use QItem, QItemSection and QItemLabel to help us better organize and display our list. We’ll also touch on some other components like QAvatar, QChip and QIcon!
Links

Quasar Docs - List and List Items
Quasar Docs - QChip
Vue Router Docs - Exact Active Links</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69726aa0deef8702a8ce3e4e</video:player_loc>
      <video:duration>833</video:duration>
      <video:publication_date>2024-08-20T06:56:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/icons</loc>
    <lastmod>2024-08-20T06:50:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69725ff6deef8702a8ccfe1c/697269b57489edf93490cb4e/thumbnail-1-0.png?v=1769106919538</video:thumbnail_loc>
      <video:title>Icons</video:title>
      <video:description>The way Quasar uses icons is pretty dang smart! In this video we’ll add different webfont icons to our app, then see how we can drasticlly reduce our apps file size with SVG icons. After that, I’ll show you a tool from the Quasar core team, that makes it easy to search through Quasar’s icon libraries.
Links

Quasar Docs - Icons
Icon Explorer</video:description>
      <video:player_loc>https://play.gumlet.io/embed/697269b57489edf93490cb4e</video:player_loc>
      <video:duration>701</video:duration>
      <video:publication_date>2024-08-20T06:50:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/qbtn</loc>
    <lastmod>2024-08-06T08:04:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69725ff6deef8702a8ccfe1c/6972682c7489edf934909d97/thumbnail-1-0.png?v=1769106374827</video:thumbnail_loc>
      <video:title>QBtn</video:title>
      <video:description>Let’s get a feel for Quasar’s component API. We’ll start with the button component covering size, color, style, roundness and icons. We’ll also use the default slot to add a sweet looking badge to our button!
Links

Quasar Docs - Color Palette</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6972682c7489edf934909d97</video:player_loc>
      <video:duration>287</video:duration>
      <video:publication_date>2024-08-06T08:04:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/setting-up-your-editor</loc>
    <lastmod>2024-08-06T08:02:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69725ff6deef8702a8ccfe1c/6972682cfa888578c94efac3/thumbnail-1-0.png?v=1769106004280</video:thumbnail_loc>
      <video:title>Setting up Your Editor</video:title>
      <video:description>Let’s setup ESLint with Quasar, and make sure everything plays nice in VsCode. We’ll be coding like a Quasar pro in no time ?
Links

Official ESLint plugin for Vue.js - Available rules</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6972682cfa888578c94efac3</video:player_loc>
      <video:duration>470</video:duration>
      <video:publication_date>2024-08-06T08:02:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/setup-using-quasar-s-vite-cli</loc>
    <lastmod>2024-08-06T08:01:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69725ff6deef8702a8ccfe1c/6972682c7489edf934909da1/thumbnail-1-0.png?v=1769106213800</video:thumbnail_loc>
      <video:title>Setup Using Quasar&apos;s Vite Cli</video:title>
      <video:description>Getting started with Quasar is easy! In this video, you’ll Learn how to install quasar with your favorite package manager like yarn, pnpm, npm, and bun. Then, run it in spa, ssr and electron mode.
Links

Quasar Docs - Quick Start</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6972682c7489edf934909da1</video:player_loc>
      <video:duration>499</video:duration>
      <video:publication_date>2024-08-06T08:01:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/a-taste-of-what-s-to-come</loc>
    <lastmod>2024-08-06T07:57:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69725ff6deef8702a8ccfe1c/6972682cfa888578c94efaea/thumbnail-1-0.png?v=1769106984219</video:thumbnail_loc>
      <video:title>A Taste of What’s to Come…</video:title>
      <video:description>You are going to love the Quasar Framework, I honestly can&apos;t wait to show you a lot of the cool stuff it can do! In this video, you’ll get a taste of some of the things that make Quasar special. You don’t need to follow a long for this first video… it&apos;s designed to give you a quick taste, show you what Quasar is all about, and get your excited before we dive in and start writing code!
Links

Quasar Docs
Quasar Docs - Components
Chrome - Inspect Devices</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6972682cfa888578c94efaea</video:player_loc>
      <video:duration>561</video:duration>
      <video:publication_date>2024-08-06T07:57:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/build-a-vue-js-data-table-component-with-shadcn-and-tanstack</loc>
    <lastmod>2024-07-23T06:33:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b5da39373a93b510356a10/68b5eafb6a218061ab241f6a/thumbnail-1-0.png?v=1757083308699</video:thumbnail_loc>
      <video:title>Build a Vue.js Data Table Component with Shadcn and TanStack</video:title>
      <video:description>In this video, we’ll use Shadcn-vue and TanStack Table to create a dynamic, reusable data table in Vue.js. You’ll learn how to install and integrate these tools, define a table structure, and render data with features like sorting and pagination. This approach ensures a powerful and customizable data table for your Vue.js projects.
Links

TanStack Table - Vue
Shadcn-vue Table
Dhadcn-vue Data Table</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b5eafb6a218061ab241f6a</video:player_loc>
      <video:duration>384</video:duration>
      <video:publication_date>2024-07-23T06:33:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/real-time-data-with-laravel-reverb-and-vue-js-conclusion</loc>
    <lastmod>2024-06-25T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6995f1abccf4da31c0bc6c35/6995f22cccf4da31c0bc8139/thumbnail-1-0.png?v=1771436179613</video:thumbnail_loc>
      <video:title>Conclusion</video:title>
      <video:description>Thanks for watching the course! We hope you enjoyed this quick guide through working with Laravel Reverb and Vue.js for easy real-time data support.
Links

Laravel Docs - Reverb
Laravel Docs - Broadcasting
Vue School on Twitter
Vue School on LinkedIn
Email us at team@vueschool.io</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6995f22cccf4da31c0bc8139</video:player_loc>
      <video:duration>78</video:duration>
      <video:publication_date>2024-06-25T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/sending-private-scoped-real-time-data-with-reverb</loc>
    <lastmod>2024-06-25T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6995f1abccf4da31c0bc6c35/6995f22cccf4da31c0bc8143/thumbnail-1-0.png?v=1771435025461</video:thumbnail_loc>
      <video:title>Sending Private Scoped Real Time Data with Reverb</video:title>
      <video:description>In this lesson, learn how to scope down subscriptions even further by limiting a channel to only a single user. 
Link

Laravel Docs - Authorizing Channels</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6995f22cccf4da31c0bc8143</video:player_loc>
      <video:duration>234</video:duration>
      <video:publication_date>2024-06-25T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/sending-private-real-time-data-with-reverb</loc>
    <lastmod>2024-06-25T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6995f1abccf4da31c0bc6c35/6995f22cccf4da31c0bc8140/thumbnail-1-0.png?v=1771436037345</video:thumbnail_loc>
      <video:title>Sending Private Real Time Data with Reverb</video:title>
      <video:description>In this lesson, learn how to limit who can subscribe to Reverb’s real time data events by allowing only logged in users to send messages.
Links

Laravel Docs - Authorizing Channels
Laravel Docs - Listening for Events</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6995f22cccf4da31c0bc8140</video:player_loc>
      <video:duration>292</video:duration>
      <video:publication_date>2024-06-25T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/send-messages-in-real-time-with-vue</loc>
    <lastmod>2024-06-25T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6995f1abccf4da31c0bc6c35/6995f22c3151985919a6030f/thumbnail-1-0.png?v=1771435336357</video:thumbnail_loc>
      <video:title>Send Messages in Real Time With Vue</video:title>
      <video:description>In this lesson, we’ll walk through a more realistic example of sending real time data with Laravel Reverb to a Vue.js front-end.
Quickly bootstrap a simple real time chat app in under 15 minutes with Laravel Reverb and Vue.js.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6995f22c3151985919a6030f</video:player_loc>
      <video:duration>853</video:duration>
      <video:publication_date>2024-06-25T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/listening-to-laravel-reverb-events-in-vue</loc>
    <lastmod>2024-06-18T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6995f1abccf4da31c0bc6c35/6995f22cccf4da31c0bc813e/thumbnail-1-0.png?v=1771435907070</video:thumbnail_loc>
      <video:title>Listening to Laravel Reverb Events in Vue</video:title>
      <video:description>In this lesson, learn how to react to real time events from Laravel Reverb in the context of a Vue.js component.
Links

Inertia
Laravel Docs - Routing
Laravel Echo</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6995f22cccf4da31c0bc813e</video:player_loc>
      <video:duration>246</video:duration>
      <video:publication_date>2024-06-18T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-laravel-queue-and-reverb</loc>
    <lastmod>2024-06-18T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6995f1abccf4da31c0bc6c35/6995f22c1dddd5270dca66cc/thumbnail-1-0.png?v=1771435001349</video:thumbnail_loc>
      <video:title>The Laravel Queue and Reverb</video:title>
      <video:description>In this lesson, learn the relationship between Laravel Reverb, Events, and the Job Queue. By default events that implement ShouldBroadcast run on the JobQueue. If you want to run the synchronously, you should implement ShouldBroadcastNow instead or if you just want to run synchronously on local and keep in the queue on production, you can change the QUEUE_CONNECTION in your .env file to sync.
Links

Laravel Queues
Laravel Broadcasting</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6995f22c1dddd5270dca66cc</video:player_loc>
      <video:duration>201</video:duration>
      <video:publication_date>2024-06-18T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/your-first-event-how-every-real-time-message-starts</loc>
    <lastmod>2024-06-18T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6995f1abccf4da31c0bc6c35/6995f22b3151985919a6030b/thumbnail-1-0.png?v=1771435797560</video:thumbnail_loc>
      <video:title>Your First Event (How Every Real-Time Message Starts)</video:title>
      <video:description>In this lesson, create a Laravel Event to broadcast to the client via Laravel Reverb. Use Echo to listen for the event on the client side. Finally, make sure you have all the proper processes running for the app to work including the app server, the reverb server, and the front-end JavaScript dev server.
Links

Laravel Events
Laravel Reverb - Start the Server</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6995f22b3151985919a6030b</video:player_loc>
      <video:duration>331</video:duration>
      <video:publication_date>2024-06-18T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/bootstrap-a-laravel-application-and-install-reverb</loc>
    <lastmod>2024-06-18T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6995f1abccf4da31c0bc6c35/6995f22b1dddd5270dca66ca/thumbnail-1-0.png?v=1771434921339</video:thumbnail_loc>
      <video:title>Bootstrap a Laravel Application and Install Reverb</video:title>
      <video:description>In this lesson, setup a new Laravel Project with Laravel Breeze and Reverb. Get an overview of the various files added and amended during the installation process.
# create a new laravel project
laravel new laravel-reverb-course

# install laravel reverb
cd laravel-reverb-course
php artisan install:broadcasting 
Links

Laravel Docs - Creating a New Laravel Project</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6995f22b1dddd5270dca66ca</video:player_loc>
      <video:duration>358</video:duration>
      <video:publication_date>2024-06-18T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-laravel-reverb</loc>
    <lastmod>2024-06-18T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6995f1abccf4da31c0bc6c35/6995f22b3151985919a602f5/thumbnail-1-0.png?v=1771435619992</video:thumbnail_loc>
      <video:title>What is Laravel Reverb?</video:title>
      <video:description>In this lesson, learn what Laravel Reverb is and why you might need it for you applications. Laravel Reverb provides real time data support and is a great addition to the Laravel + Vue.js stack.
Links

Laravel Reverb
Laravel</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6995f22b3151985919a602f5</video:player_loc>
      <video:duration>95</video:duration>
      <video:publication_date>2024-06-18T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/git-basics-for-every-developer</loc>
    <lastmod>2024-05-28T09:46:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b5da39373a93b510356a10/68b5e2b7373a93b51035e5bf/thumbnail-1-0.png?v=1756913887890</video:thumbnail_loc>
      <video:title>Git Basics for Every Developer</video:title>
      <video:description>This lesson provides a crash course on Git, a fundamental version control system for developers, and Github, the home for your Git repositories.
This lesson equips you with basic Git commands frequently used by developers. Think of it as a cheat sheet, and we will build on it throughout the course. Here’s all commands mentioned in the video:
Checking Git Installation:

git --version - This command verifies if Git is already installed on your system and displays the version.

Git User Setup:

git config --global user.name &quot;John Doe&quot; - Sets your Git username for global use.
git config --global user.email &quot;john@test.com&quot; - Sets your Git email address for global use.

Initializing a Git Repository:

git init -b main (in your project&apos;s root directory) - Initializes a new Git repository in your project directory and creates a new &amp;quot;main&amp;quot; branch.

Adding and Committing Changes:

git add . - Adds all modified files in your project to the staging area.
git commit -m &quot;init&quot; - Creates a commit with a descriptive message (&amp;quot;init&amp;quot; in this example).

Connecting to a Remote Repository:

git remote add origin &amp;lt;URL&amp;gt; (replace &amp;lt;URL&amp;gt; with the repo’s SSH URL) - Adds the remote GitHub repository as &amp;quot;origin&amp;quot; for future operations.
git push -u origin main - Pushes the initial commit (&amp;quot;init&amp;quot;) to the remote &amp;quot;main&amp;quot; branch on GitHub.

Subsequent Updates:
After making changes to your local repository, use these commands to keep your remote repository updated:

git add -A - Adds all modified files to the staging area.
git commit -m &quot;message&quot; - Creates a commit with a descriptive message.
git push origin main - Pushes your local commits to the remote &amp;quot;main&amp;quot; branch on GitHub.

Generating SSH Key:

ls -al ~/.ssh - Checks if you have an existing SSH key on your machine.
ssh-keygen -t ed25519 -C &quot;youremail@example.com&quot; - Generates an SSH key for secure communication with GitHub.
pbcopy &amp;lt; filename (replace &amp;quot;filename&amp;quot; with your key&apos;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b5e2b7373a93b51035e5bf</video:player_loc>
      <video:duration>431</video:duration>
      <video:publication_date>2024-05-28T09:46:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/learning-environment-intro</loc>
    <lastmod>2024-05-28T09:46:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b5da39373a93b510356a10/68b5e2b76a218061ab239c13/thumbnail-1-0.png?v=1756913232925</video:thumbnail_loc>
      <video:title>Learning Environment Intro</video:title>
      <video:description>This video will guide you through the features available in the Vue.js 3 Masterclass learning environment.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b5e2b76a218061ab239c13</video:player_loc>
      <video:duration>195</video:duration>
      <video:publication_date>2024-05-28T09:46:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-and-project-over-vue</loc>
    <lastmod>2024-05-28T09:46:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b5da39373a93b510356a10/68b5e2b7b21dc579f87e172c/thumbnail-1-0.png?v=1757345145986</video:thumbnail_loc>
      <video:title>Introduction and Project Over-Vue</video:title>
      <video:description>In this introductory video, you&apos;ll meet the instructor, Mostafa (Hi!), and get a glimpse of what you&apos;ll be learning. Here&apos;s what you can expect:

Building a Production-Ready App: We&apos;ll be using the latest Vue.js 3 features, including Script Setup with Composition API and TypeScript, to create a modern and efficient application.
Focus on Practical Skills: Each lesson is designed to be clear, concise, and packed with practical knowledge you can use in your own projects.
Rich Feature Set: The product management app we&apos;ll build will be loaded with features for both developers and users, including CRUD operations, authentication, forms, real-time data, and more.

Whether you&apos;re a beginner or an experienced Vue developer, this course will help you solidify your understanding and gain valuable hands-on experience.
Ready to dive in? Let&apos;s get started!
Links:

Vue.js 3 - Official Docs
VueSchool Lesson - Script Setup
VueSchool Blog - Composition API
Vue.js 3 - TypeScript with Composition API
Automated Routing in Vue.js 3
Vue DevTools
FormKit
Supabase</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b5e2b7b21dc579f87e172c</video:player_loc>
      <video:duration>179</video:duration>
      <video:publication_date>2024-05-28T09:46:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/lazy-loading-routes-with-unplugin-vue-router</loc>
    <lastmod>2024-05-21T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69933f78717086bef840e882/6993405e717086bef8410c8b/thumbnail-1-0.png?v=1771259459631</video:thumbnail_loc>
      <video:title>Lazy Loading Routes with Unplugin Vue Router</video:title>
      <video:description>In this lesson, learn how unplugin-vue-router keeps your app performant by automatically lazy loading all your pages.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6993405e717086bef8410c8b</video:player_loc>
      <video:duration>148</video:duration>
      <video:publication_date>2024-05-21T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/catch-all-routes-with-file-based-routing</loc>
    <lastmod>2024-05-21T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69933f78717086bef840e882/69933fee717086bef840fe01/thumbnail-1-0.png?v=1771259212394</video:thumbnail_loc>
      <video:title>Catch all Routes with File-Based Routing</video:title>
      <video:description>In this lesson, learn how to create a catch all path with unplugin-vue-router. Catch all paths are great for displaying 404 pages. The syntax is super easy: [...path].vue.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69933fee717086bef840fe01</video:player_loc>
      <video:duration>108</video:duration>
      <video:publication_date>2024-05-21T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/dynamic-routes-with-file-based-routing</loc>
    <lastmod>2024-05-21T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69933f78717086bef840e882/69933fed717086bef840fdd0/thumbnail-1-0.png?v=1771258637280</video:thumbnail_loc>
      <video:title>Dynamic Routes with File-Based Routing</video:title>
      <video:description>In this lesson, learn how to accept dynamic parameters with unplugin-vue-router. The syntax is really straightforward: [id].vue. But you can also do more complex parameters like:

Optional parameters: [[id]].vue
and Repeatable parameters: [id]+.vue</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69933fed717086bef840fdd0</video:player_loc>
      <video:duration>269</video:duration>
      <video:publication_date>2024-05-21T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/file-based-routing</loc>
    <lastmod>2024-05-14T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69933f78717086bef840e882/69933fed48207737cfc653d5/thumbnail-1-0.png?v=1771258341298</video:thumbnail_loc>
      <video:title>File-Based Routing</video:title>
      <video:description>In this lesson, learn a little more about the basics of file-based routing. See how nested directories affect the route structure.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69933fed48207737cfc653d5</video:player_loc>
      <video:duration>115</video:duration>
      <video:publication_date>2024-05-14T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-install-and-setup-unplugin-vue-router</loc>
    <lastmod>2024-05-14T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69933f78717086bef840e882/69933fed48207737cfc653d7/thumbnail-1-0.png?v=1771258229355</video:thumbnail_loc>
      <video:title>How to Install and Setup Unplugin Vue Router</video:title>
      <video:description>In this lesson, learn how to install unplugin-vue-router and change over your manually registered routes to use the ones autogenerated based on your file system.
Links

Unplugin Vue Router Docs
Unplugin Vue Router Repo</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69933fed48207737cfc653d7</video:player_loc>
      <video:duration>410</video:duration>
      <video:publication_date>2024-05-14T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/course-pre-requisites</loc>
    <lastmod>2024-05-14T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69933f78717086bef840e882/69933fed48207737cfc653cb/thumbnail-1-0.png?v=1771258049630</video:thumbnail_loc>
      <video:title>Course Pre-Requisites</video:title>
      <video:description>Before you get started with this course, you should be familiar with the basics of Vue.js and Vue.js components. It’s also worth noting that we will not dive into practical use cases of using a Router (we kind of assume you already know the basics of routing and you just want to streamline the experience). Finally, you do NOT have to know TypeScript already to complete this course, though it might wet your appetite for this cool tech. 
Links

Vue.js 3 Fundamentals with the Composition API
Vue Component Fundamentals with the Composition API
Vue Router 4 For Everyone
TypeScript with Vue.js 3
TypeScript Fundamentals</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69933fed48207737cfc653cb</video:player_loc>
      <video:duration>110</video:duration>
      <video:publication_date>2024-05-14T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-unplugin-vue-router</loc>
    <lastmod>2024-05-14T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69933f78717086bef840e882/69933fed717086bef840fdce/thumbnail-1-0.png?v=1771258115958</video:thumbnail_loc>
      <video:title>What is Unplugin Vue Router?</video:title>
      <video:description>In this lesson, learn what unplugin-vue-router is and what it’s good for. unplugin-vue-router is a Vite plugin that provides filed-based routing for Vue.js projects. It also comes with error detection and autocomplete powers thanks to it’s built in TypeScript support.
At the time of this recording, the plugin is marked as experimental.
Links

Unplugin Vue Router Docs
Unplugin Vue Router Repo</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69933fed717086bef840fdce</video:player_loc>
      <video:duration>78</video:duration>
      <video:publication_date>2024-05-14T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/course-conclusion-5</loc>
    <lastmod>2024-03-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd7904fe0bcfaae533405/69c110d324ffd038ef6ced16/thumbnail-1-0.png?v=1774260815888</video:thumbnail_loc>
      <video:title>Course Conclusion</video:title>
      <video:description>Thanks for watching! We’d love your feedback and welcome your questions or comments.
Links

Twitter
LinkedIn
team@vueschool.io</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c110d324ffd038ef6ced16</video:player_loc>
      <video:duration>44</video:duration>
      <video:publication_date>2024-03-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/build-an-alert-vue-component</loc>
    <lastmod>2024-03-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd7904fe0bcfaae533405/69c110d338a6314ac39636ee/thumbnail-1-0.png?v=1774261965414</video:thumbnail_loc>
      <video:title>Build an Alert Vue Component</video:title>
      <video:description>This lesson is also a component exercise lesson, where we&apos;re going to use everything we&apos;ve learned about Vue components so far.
In this component exercise, we&apos;re going to build a fun and useful alert component.
Your goal is to create a component that will be passed some content (the message) and the type of notification (info, error, success, warning). The user should also be able to close the notification and it should emit a closed event.
Good luck and have fun!
Links

Daisy UI Alert Component</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c110d338a6314ac39636ee</video:player_loc>
      <video:duration>1044</video:duration>
      <video:publication_date>2024-03-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/build-a-github-user-profile-vue-component</loc>
    <lastmod>2024-03-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd7904fe0bcfaae533405/69c10e4124ffd038ef6cae84/thumbnail-1-0.png?v=1774261439700</video:thumbnail_loc>
      <video:title>Build a GitHub User Profile Vue Component</video:title>
      <video:description>This lesson is a component exercise lesson, where we’re going to practice creating a practical Vue component using some of the concepts we’ve learned so far.
The goal is to create a component that displays a person’s GitHub profile. Including the user&apos;s avatar, name, and followers.
Good luck and have fun!
// Github API URL
https://api.github.com/users/[username]
Links

Tailwind Install Instructions
DaisyUI Install Instructions
Daisy UI Card Component</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c10e4124ffd038ef6cae84</video:player_loc>
      <video:duration>606</video:duration>
      <video:publication_date>2024-03-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-component-slots</loc>
    <lastmod>2024-03-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd7904fe0bcfaae533405/69c10e41c98b51e9c5533004/thumbnail-1-0.png?v=1774260787024</video:thumbnail_loc>
      <video:title>Vue Component Slots</video:title>
      <video:description>In this lesson, we&apos;ll learn how to pass HTML to our Vue components using slots. Slots are an awesome feature of Vue with various levels of functionality including slot defaults, named slots, and scoped slots.
Links

Vue.js Docs - Slots</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c10e41c98b51e9c5533004</video:player_loc>
      <video:duration>561</video:duration>
      <video:publication_date>2024-03-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-component-lifecycle-hooks</loc>
    <lastmod>2024-03-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd7904fe0bcfaae533405/69c10e4124ffd038ef6cae57/thumbnail-1-0.png?v=1774260904274</video:thumbnail_loc>
      <video:title>Vue Component Lifecycle Hooks</video:title>
      <video:description>In this lesson, we learn what Vue component lifecycle hooks are and how we can use them. 
Links

Vue.js Docs - LifeCycle Hooks
Vue.js Docs API - Lifecycle Hooks</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c10e4124ffd038ef6cae57</video:player_loc>
      <video:duration>470</video:duration>
      <video:publication_date>2024-03-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/component-naming-best-practices-in-vue</loc>
    <lastmod>2024-03-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd7904fe0bcfaae533405/69c10e4124ffd038ef6cae5b/thumbnail-1-0.png?v=1774260646448</video:thumbnail_loc>
      <video:title>Component Naming Best Practices in Vue</video:title>
      <video:description>In this lesson, we&apos;ll learn the best practices of naming our Vue.js 3 components. By following the best practices and official Vue.js Style Guide our applications will be easier to understand for other developers, just by taking a look at the component files.
Links

Vue.js Style Guide</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c10e4124ffd038ef6cae5b</video:player_loc>
      <video:duration>256</video:duration>
      <video:publication_date>2024-03-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-component-prop-and-event-validation</loc>
    <lastmod>2024-03-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd7904fe0bcfaae533405/69c10e41c98b51e9c5532ffc/thumbnail-1-0.png?v=1774260268029</video:thumbnail_loc>
      <video:title>Vue Component Prop and Event Validation</video:title>
      <video:description>In this lesson, learn how to provide custom validator functions to Vue component props and events. This gives maximum protection to passed prop values and emitted event payloads.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c10e41c98b51e9c5532ffc</video:player_loc>
      <video:duration>241</video:duration>
      <video:publication_date>2024-03-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/communication-between-vue-components-with-custom-events</loc>
    <lastmod>2024-03-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd7904fe0bcfaae533405/69c10e4124ffd038ef6cae5e/thumbnail-1-0.png?v=1774261363697</video:thumbnail_loc>
      <video:title>Communication Between Vue Components with Custom Events</video:title>
      <video:description>We know how to pass data to a child component through props in Vue. In this lesson, we&apos;ll learn how to communicate from a child to a parent component through custom events.
We will use a custom event to notify the PlanPicker of which plan has been selected, and make sure we have the right logic in place so the user can only select one plan at a time.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c10e4124ffd038ef6cae5e</video:player_loc>
      <video:duration>758</video:duration>
      <video:publication_date>2024-03-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/global-vs-local-vue-components</loc>
    <lastmod>2024-03-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd7904fe0bcfaae533405/69c10e4124ffd038ef6cae61/thumbnail-1-0.png?v=1774260604565</video:thumbnail_loc>
      <video:title>Global vs Local Vue Components</video:title>
      <video:description>Vue.js 3 allows us to register components both globally and locally. In this lesson, we&apos;ll learn the difference between the two types and how it can affect the build size and performance of your application.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c10e4124ffd038ef6cae61</video:player_loc>
      <video:duration>169</video:duration>
      <video:publication_date>2024-03-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/nested-components-in-vue</loc>
    <lastmod>2024-03-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd7904fe0bcfaae533405/69c10e4138a6314ac395f84b/thumbnail-1-0.png?v=1774260553547</video:thumbnail_loc>
      <video:title>Nested Components in Vue</video:title>
      <video:description>Vue components allow us to encapsulate functionality and easily reuse them in multiple places in our applications. It is common to have components inside other components to compose the bigger features of our apps.
In this lesson, we&apos;ll learn how we can create a PlanPicker component, to easily display all our plans wherever we want.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c10e4138a6314ac395f84b</video:player_loc>
      <video:duration>193</video:duration>
      <video:publication_date>2024-03-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/reusable-components-with-props-2</loc>
    <lastmod>2024-03-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd7904fe0bcfaae533405/69c10e4138a6314ac395f84d/thumbnail-1-0.png?v=1774261106368</video:thumbnail_loc>
      <video:title>Reusable Components with Props</video:title>
      <video:description>In this lesson, we&apos;ll see a realistic use case for reusable components and learn about Vue component props.
Props are custom HTML attributes that we can register on our components, which allow us to pass data to our components.
Links

Starter HTML
Starter CSS
Vue.js Docs - Components Basics
Vue.js Docs - Props</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c10e4138a6314ac395f84d</video:player_loc>
      <video:duration>621</video:duration>
      <video:publication_date>2024-03-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-vue-3-components</loc>
    <lastmod>2024-03-28T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd7904fe0bcfaae533405/69c10e41c98b51e9c5532ffa/thumbnail-1-0.png?v=1774260254335</video:thumbnail_loc>
      <video:title>Intro to Vue 3 Components</video:title>
      <video:description>In this lesson, we&apos;ll learn about Vue components. We&apos;ll get an introduction to what a component is, why we need components, and how we can create and use a component in our Vue applications.
Links

Vue.js 3 Fundamentals with the Composition API</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c10e41c98b51e9c5532ffa</video:player_loc>
      <video:duration>286</video:duration>
      <video:publication_date>2024-03-28T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/injecting-plugin-templates</loc>
    <lastmod>2024-02-29T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a1299873071aec5c19eaf/thumbnail-1-0.png?v=1770657396069</video:thumbnail_loc>
      <video:title>Injecting Plugin Templates</video:title>
      <video:description>Unlock the power of Nuxt 3 Plugin templates for flexible app development! This in-depth lesson teaches how to inject custom Embedded JavaScript Template (.ejs) Plugins, control client-side or server-side execution, and leverage Nuxt&apos;s automated plugin creation (virtual or directory-based). Master this technique and elevate your Nuxt.js skillset to build high-performance Nuxt 3 applications.
Links:

Nuxt - Plugin Templates
Embedded Javascript Templates
Virtual Filesystem
Vue - Plugins
Vue - Custom Directives</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a1299873071aec5c19eaf</video:player_loc>
      <video:duration>632</video:duration>
      <video:publication_date>2024-02-29T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/passing-and-exposing-module-options</loc>
    <lastmod>2024-02-22T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a1299aec3d4e420ba6523/thumbnail-1-0.png?v=1770657379162</video:thumbnail_loc>
      <video:title>Passing and Exposing Module Options</video:title>
      <video:description>Empower users with customizable module options and expose those options for dynamic control during runtime.
Links:

Nuxt - Runtime Config Composable
defu - Recursively assign default properties</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a1299aec3d4e420ba6523</video:player_loc>
      <video:duration>450</video:duration>
      <video:publication_date>2024-02-22T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/adding-route-rules-and-route-middlewares</loc>
    <lastmod>2024-03-07T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a1486873071aec5c1dc0c/thumbnail-1-0.png?v=1770657373199</video:thumbnail_loc>
      <video:title>Adding Route Rules and Route Middlewares</video:title>
      <video:description>Time to unlock Nuxt Kit&apos;s power to optimize user experience &amp;amp; performance! Master extendRouteRules to leverage Nitro server engine features for a lightning-fast static generation, Stale While Revalidate caching, custom headers and redirects. Explore seamless middleware integration with addRouteMiddleware for an enhanced user experience.
Links:

Nitro - Route Rules
Nuxt - Route Middleware
Defining Middleware - definePageMeta
Stale While Revalidate
Nuxt Static Site Generation</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a1486873071aec5c1dc0c</video:player_loc>
      <video:duration>470</video:duration>
      <video:publication_date>2024-03-07T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/extend-and-alter-nuxt-pages</loc>
    <lastmod>2024-03-07T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a142baec3d4e420ba9584/thumbnail-1-0.png?v=1770657534244</video:thumbnail_loc>
      <video:title>Extend and Alter Nuxt Pages</video:title>
      <video:description>Are you curious about the magic behind Nuxt&apos;s seamless integration of pages and routes? Join us in this lesson for an insightful journey into the Nuxt codebase on GitHub. We&apos;ll showcase how to leverage the extendPages function from @nuxt/kit, unraveling its relationship with Nuxt hooks. Get ready to deepen your understanding and enhance your Nuxt skills!
Links:

Nuxt Kit - extendPages
Nuxt’s Github Repository
Nuxt Hooks</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a142baec3d4e420ba9584</video:player_loc>
      <video:duration>428</video:duration>
      <video:publication_date>2024-03-07T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/expanding-nuxt-s-auto-imports</loc>
    <lastmod>2024-03-07T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a142a873071aec5c1cfeb/thumbnail-1-0.png?v=1770657335519</video:thumbnail_loc>
      <video:title>Expanding Nuxt&apos;s Auto-Imports</video:title>
      <video:description>Enhance your developer experience with a deep dive into the power of Nuxt auto-imports. Explore the essentials of @nuxt/kit, covering three key functions: addImports, addImportsDir, and addImportsSources to streamline your coding journey.
Links:
Nuxt Kit Auto-Imports
Vue.js 3 APIs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a142a873071aec5c1cfeb</video:player_loc>
      <video:duration>470</video:duration>
      <video:publication_date>2024-03-07T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/injecting-components-and-component-directories</loc>
    <lastmod>2024-02-29T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a142afc23d3d76fa043e2/thumbnail-1-0.png?v=1770657445568</video:thumbnail_loc>
      <video:title>Injecting Components and Component Directories</video:title>
      <video:description>Boost your Nuxt workflow with effortless component injection! This lesson dives into @nuxt/kit&apos;s addComponent and addComponentsDir methods, empowering you to seamlessly integrate components directly from your modules. Simplify your development, enhance your project, and unlock the power of modularized UI.
Links:

Vue Components
Nuxt Components Directory
Nuxt Kit Components
Dynamic Imports</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a142afc23d3d76fa043e2</video:player_loc>
      <video:duration>449</video:duration>
      <video:publication_date>2024-02-29T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/injecting-plugins</loc>
    <lastmod>2024-02-29T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a1299fc23d3d76fa0131d/thumbnail-1-0.png?v=1770657393528</video:thumbnail_loc>
      <video:title>Injecting Plugins</video:title>
      <video:description>This lesson dives into transforming Nuxt modules into Nuxt plugin factories. Watch us build real-world features by injecting custom Nuxt plugins, Vue plugins and integrating Vue community package for Intersection Observer API. We&apos;ll also uncover unique approaches to useFetch Nuxt composable, along with code optimization tricks you wouldn’t want to miss.
Links:

Nuxt Kit - Plugins
Vue - Plugins
Vue - Custom Directives
Injecting Plugins
Nuxt 3 Plugins Directory
Nuxt Composables - useFetch
Intersection Observer API
Intersection Observer Entry
Vue 3 Observe Visibility</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a1299fc23d3d76fa0131d</video:player_loc>
      <video:duration>733</video:duration>
      <video:publication_date>2024-02-29T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/resolving-paths-and-injecting-assets-to-the-app</loc>
    <lastmod>2024-02-29T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a1299fc23d3d76fa01319/thumbnail-1-0.png?v=1770657161781</video:thumbnail_loc>
      <video:title>Resolving Paths and Injecting Assets to the App</video:title>
      <video:description>Streamline asset management in your Nuxt modules! Discover how to leverage createResolver from @nuxt/kit and import.meta property for path resolution, inject your module&apos;s CSS into the Nuxt app&apos;s styles, and effortlessly expose entire public asset folders to Nitro&apos;s public directory using Nuxt hooks.
Links:

Nuxt Kit - Resolving
Nuxt Hooks
Nuxt Advanced - import.meta
Nitro - publicAssets
Nuxt API Configuration - CSS</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a1299fc23d3d76fa01319</video:player_loc>
      <video:duration>386</video:duration>
      <video:publication_date>2024-02-29T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/putting-it-all-together-advanced-feature-integration-in-modules</loc>
    <lastmod>2024-02-22T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a1299873071aec5c19e7c/thumbnail-1-0.png?v=1770657382412</video:thumbnail_loc>
      <video:title>Putting It All Together: Advanced Feature Integration in Modules</video:title>
      <video:description>Elevate your Nuxt app to new heights in this comprehensive guide to advanced module implementation. Join me as we put everything we&apos;ve learned into action, focusing on integrating a powerful new feature using Rollup&apos;s code splitting. We&apos;ll explore the nuances, delve into effective use of Nuxt Hooks, and discover key strategies to supercharge your application&apos;s speed and efficiency. Don&apos;t miss out on this opportunity to unlock peak performance!
Links:

Nuxt Hooks
Nuxt API - Lifecycle Hooks
Vite Key Features
Rollup Configuration Options
Nuxt Docs - Hooks
Search node_modules Extension</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a1299873071aec5c19e7c</video:player_loc>
      <video:duration>891</video:duration>
      <video:publication_date>2024-02-22T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/nuxt-lifecycle-hooks</loc>
    <lastmod>2024-02-22T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a1299aec3d4e420ba6525/thumbnail-1-0.png?v=1770657165427</video:thumbnail_loc>
      <video:title>Nuxt Lifecycle Hooks</video:title>
      <video:description>Nuxt hooks offer unparalleled control over your application&apos;s lifecycle, allowing you to expand almost every aspect of Nuxt. This lesson dives into using Nuxt hooks directly within your modules, empowering you to build truly customized and dynamic experiences.
Links:

Nuxt Hooks
Nuxt API - Lifecycle Hooks</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a1299aec3d4e420ba6525</video:player_loc>
      <video:duration>515</video:duration>
      <video:publication_date>2024-02-22T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/extending-and-altering-nuxt-configuration-and-options</loc>
    <lastmod>2024-02-22T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a1299873071aec5c19e7a/thumbnail-1-0.png?v=1770657009379</video:thumbnail_loc>
      <video:title>Extending and Altering Nuxt Configuration and Options</video:title>
      <video:description>Craft a performance-boosting Nuxt module! Discover within the module how to minimize JavaScript bundles and compress assets using Nitro. Fine-tune esbuild options for improved app behavior, and reduce reactivity overhead for an optimal user experience. Unleash the potential of your module and witness its impact on Nuxt performance. Let&apos;s get building!
Links:

Nuxt Configuration Options
Vite Configuration Options
Nitro Configuration Options
Vue.js Reactivity Overhead
Nuxt - useAsyncData</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a1299873071aec5c19e7a</video:player_loc>
      <video:duration>486</video:duration>
      <video:publication_date>2024-02-22T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/navigating-the-official-starter-template</loc>
    <lastmod>2024-02-15T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a1299aec3d4e420ba6527/thumbnail-1-0.png?v=1770657405436</video:thumbnail_loc>
      <video:title>Navigating the Official Starter Template</video:title>
      <video:description>Nothing fuels developer happiness like a time-saving ecosystem. Dive into the Nuxt Module Starter Template and unlock its secrets! We&apos;ll dissect its anatomy, explore @nuxt/module-builder, and guide you through effortless module creation and publishing with npm run release. You’ll also learn how to test your module locally with an external Nuxt app using npm.
Links:

Nuxt Modules Starter Kit
Nuxt Modules Builder
Modules Author Guide
NPM Symlink
UnJs - MkDist</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a1299aec3d4e420ba6527</video:player_loc>
      <video:duration>705</video:duration>
      <video:publication_date>2024-02-15T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/creating-your-first-module-from-scratch</loc>
    <lastmod>2024-02-15T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a1299fc23d3d76fa0131b/thumbnail-1-0.png?v=1770657236116</video:thumbnail_loc>
      <video:title>Creating Your First Nuxt Module From Scratch</video:title>
      <video:description>Create your very first local Nuxt module from scratch! Dive into its structure, explore low-level and high-level definitions, and explore the benefits of defineNuxtModule with object-syntax.
Links:

Getting Starting with Nuxt
Nuxt Modules Directory
Module Author Guide</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a1299fc23d3d76fa0131b</video:player_loc>
      <video:duration>717</video:duration>
      <video:publication_date>2024-02-15T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/exploring-nuxt-modules-ecosystem-and-module-types</loc>
    <lastmod>2024-02-15T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a1299873071aec5c19e80/thumbnail-1-0.png?v=1770656855008</video:thumbnail_loc>
      <video:title>Exploring Nuxt Modules Ecosystem and Module types</video:title>
      <video:description>Want to supercharge your Nuxt projects? This lesson unlocks the power of official, community, third-party and even private modules. Learn:

All Module Types
Install &amp;amp; integrate modules like a pro
Discover hidden gems with Nuxt DevTools

Links:

Nuxt Modules Ecosystem
Nuxt Modules Types</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a1299873071aec5c19e80</video:player_loc>
      <video:duration>462</video:duration>
      <video:publication_date>2024-02-15T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-are-nuxt-modules-and-why-use-them</loc>
    <lastmod>2024-02-15T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/698a0fb9aec3d4e420ba0970/698a1299aec3d4e420ba6521/thumbnail-1-0.png?v=1770911570877</video:thumbnail_loc>
      <video:title>What are Nuxt Modules? And why use them?</video:title>
      <video:description>Join us in this exciting lesson where we&apos;ll dive into the fundamentals of Nuxt Modules! We&apos;ll uncover what they are, explore why they&apos;re so powerful, and get a sneak peek at the amazing things we&apos;ll learn together about Nuxt 3 Modules.
Links:

Nuxt Modules
Nuxt Modules Concept</video:description>
      <video:player_loc>https://play.gumlet.io/embed/698a1299aec3d4e420ba6521</video:player_loc>
      <video:duration>159</video:duration>
      <video:publication_date>2024-02-15T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuetify-directives</loc>
    <lastmod>2023-11-16T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69988d3c57a7b7f9b00e8261/69988da726981d891342abd3/thumbnail-1-0.png?v=1771607437861</video:thumbnail_loc>
      <video:title>Vuetify Directives</video:title>
      <video:description>In this lesson, learn about the available Vuetify directives and see the v-ripple, v-click-outside, and v-resize directives in action.
Links

Vuetify Docs - Click Outside Directive
Vuetify Docs - Ripple Directive
Vuetify Docs - Resize Directive</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69988da726981d891342abd3</video:player_loc>
      <video:duration>403</video:duration>
      <video:publication_date>2023-11-16T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-data-table-component-and-vuetify-labs</loc>
    <lastmod>2023-11-09T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69988d3c57a7b7f9b00e8261/69988da626981d891342ab8a/thumbnail-1-0.png?v=1771607182863</video:thumbnail_loc>
      <video:title>The Data Table Component and Vuetify Labs</video:title>
      <video:description>In this lesson, learn about experimenting with the cutting-edge Vue components from Vuetify Labs. Also, learn to use a data table to quickly display tabular data in your Vue apps with pagination, filtering, sorting, row selection, and more!
Links

Vuetify Docs - Data Tables</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69988da626981d891342ab8a</video:player_loc>
      <video:duration>896</video:duration>
      <video:publication_date>2023-11-09T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-table-component-and-some-css-utilities</loc>
    <lastmod>2023-11-02T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69988d3c57a7b7f9b00e8261/69988da657a7b7f9b00e946a/thumbnail-1-0.png?v=1771606895989</video:thumbnail_loc>
      <video:title>The Table Component and Some CSS Utilities</video:title>
      <video:description>In this lesson, learn how to use the Vuetify Table component in a Vue.js admin dashboard.
Links

Vuetify Docs - Spacing
Vuetify Docs - Tables</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69988da657a7b7f9b00e946a</video:player_loc>
      <video:duration>470</video:duration>
      <video:publication_date>2023-11-02T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-vuetify</loc>
    <lastmod>2023-10-26T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69988d3c57a7b7f9b00e8261/69988da657a7b7f9b00e9464/thumbnail-1-0.png?v=1771606472642</video:thumbnail_loc>
      <video:title>What is Vuetify?</video:title>
      <video:description>Welcome to the course! ?
In this lesson, get a high-level overview of what Vuetify is and what benefits it has to offer. Benefits include a wealth of accessible components, application layouts, blueprints, themes, fonts, SaaS variables, control based on display size and/or device, tree shaking, and i18n. 
Links

Vuetify Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69988da657a7b7f9b00e9464</video:player_loc>
      <video:duration>204</video:duration>
      <video:publication_date>2023-10-26T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-astro</loc>
    <lastmod>2023-09-28T13:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd3b64fe0bcfaae52e234/69c1bc7138a6314ac3a6b59f/thumbnail-1-0.png?v=1774305245641</video:thumbnail_loc>
      <video:title>What is Astro?</video:title>
      <video:description>In our introductory lesson on Astro and Vue.js, we explore Astro&apos;s unique framework tailored for content-rich sites like blogs and portfolios. With its &apos;no JavaScript by default&apos; approach and flexible &apos;islands architecture&apos;, Astro ensures rapid loading times while allowing seamless integration with popular frameworks like Vue for interactivity when needed. 
Throughout the course, we&apos;ll harness these features to craft a dynamic blog, and then statically generate and host it on Netlify. 
Links

Astro Documentation
Astro GitHub Repository
Netlify
Islands Architecture Explained</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1bc7138a6314ac3a6b59f</video:player_loc>
      <video:duration>183</video:duration>
      <video:publication_date>2023-09-28T13:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/unnecessary-manual-dom-manipulation</loc>
    <lastmod>2023-09-21T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b70104373a93b51047afc5/thumbnail-1-0.png?v=1758033794357</video:thumbnail_loc>
      <video:title>Unnecessary Manual DOM Manipulation</video:title>
      <video:description>In this lesson, learn why, in most cases, it’s a bad idea to do direct DOM manipulation in your Vue.js components. If direct DOM manipulation is a must, be sure to use Vue’s proper solution for this: Template refs.
Links

Vue.js Docs - Template Refs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b70104373a93b51047afc5</video:player_loc>
      <video:duration>117</video:duration>
      <video:publication_date>2023-09-21T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/using-v-html-with-user-provided-data</loc>
    <lastmod>2023-09-21T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b70101373a93b51047af8c/thumbnail-1-0.png?v=1758033730060</video:thumbnail_loc>
      <video:title>Using v-html with User Provided Data</video:title>
      <video:description>In this lesson, learn why you should be cautious with Vue’s v-html directive in order to prevent security issues.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b70101373a93b51047af8c</video:player_loc>
      <video:duration>244</video:duration>
      <video:publication_date>2023-09-21T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/calling-composables-in-the-wrong-place</loc>
    <lastmod>2023-09-21T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b700f7373a93b51047aef8/thumbnail-1-0.png?v=1758033671668</video:thumbnail_loc>
      <video:title>Calling Composables in the Wrong Place</video:title>
      <video:description>In this lesson, learn the limitations of where composables can be called. Avoid subtle bugs by always use composables (and even Vue’s built in composition functions) directly within script setup or at the top level of other composables.
Links

Vue.js Docs - Composables Usage Restrictions</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b700f7373a93b51047aef8</video:player_loc>
      <video:duration>321</video:duration>
      <video:publication_date>2023-09-21T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/destructuring-reactive-data</loc>
    <lastmod>2023-09-21T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b700a8373a93b51047a9fa/thumbnail-1-0.png?v=1758033607225</video:thumbnail_loc>
      <video:title>Destructuring Reactive Data</video:title>
      <video:description>In this video, we learn why it’s not a good idea to de-structure reactive data defined with the reactive function. Instead you should:

Reference the reactive object directly
Define a computed prop (if you’re ok with the data being read only)
Use toRefs

Finally, when creating your composables, definitely make sure you aren’t just returning a reactive object. Why? Because most Vue developers expect composables to be destructurable.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b700a8373a93b51047a9fa</video:player_loc>
      <video:duration>342</video:duration>
      <video:publication_date>2023-09-21T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-nuxtimage-component</loc>
    <lastmod>2023-08-24T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f5a96a218061ab345f85/68b6f702b21dc579f88ef8cb/thumbnail-1-0.png?v=1757951947708</video:thumbnail_loc>
      <video:title>The NuxtImage Component</video:title>
      <video:description>In this lesson, learn how to use the NuxtImg component as a drop-in replacement for the HTML native img tag for optimized performant images. NuxtImage is the easiest way to support optimized images in your Vue.js apps! 
Links

Nuxt Image Docs - NuxtImg Component</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f702b21dc579f88ef8cb</video:player_loc>
      <video:duration>345</video:duration>
      <video:publication_date>2023-08-24T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-nuxt-image</loc>
    <lastmod>2023-08-24T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f5a96a218061ab345f85/68b6f6f06a218061ab34770e/thumbnail-1-0.png?v=1757949535300</video:thumbnail_loc>
      <video:title>Intro to Nuxt Image</video:title>
      <video:description>In this bonus chapter of the course, we tack on some extra goodies all about optimizing images with the Nuxt Image component.
Links

Nuxt Image Module
What is Image Optimization and Why Is it Important for a Website?</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f6f06a218061ab34770e</video:player_loc>
      <video:duration>235</video:duration>
      <video:publication_date>2023-08-24T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/common-vue-js-mistakes-course-conclusion</loc>
    <lastmod>2023-08-17T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b700a86a218061ab3516b6/thumbnail-1-0.png?v=1758033889654</video:thumbnail_loc>
      <video:title>Course Conclusion</video:title>
      <video:description>Thanks for watching! ? Please share your own experience with common mistakes you’ve made and we might just end up adding a new video. 
Links

VueSchool on Twitter</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b700a86a218061ab3516b6</video:player_loc>
      <video:duration>52</video:duration>
      <video:publication_date>2023-08-17T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/not-considering-typescript</loc>
    <lastmod>2023-08-17T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b700a7373a93b51047a9d3/thumbnail-1-0.png?v=1758033555968</video:thumbnail_loc>
      <video:title>Not Considering TypeScript</video:title>
      <video:description>In this lesson, you get a super quick introduction about why avoiding TypeScript for your next Vue.js project might be a mistake.
Links

TypeScript with Vue.js 3 Course
Vue Docs - Using Vue with TypeScript</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b700a7373a93b51047a9d3</video:player_loc>
      <video:duration>145</video:duration>
      <video:publication_date>2023-08-17T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/expecting-changes-to-non-reactive-dependencies-to-trigger-updates</loc>
    <lastmod>2023-08-17T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b700a76a218061ab35168e/thumbnail-1-0.png?v=1758033508225</video:thumbnail_loc>
      <video:title>Expecting Changes to Non-Reactive Dependencies to Trigger Updates</video:title>
      <video:description>In this lesson, learn to avoid the common mistake of confusing reactive data with non-reactive data. It’s easier to do than you think ?

VueUse
VueUse for Everyone Course</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b700a76a218061ab35168e</video:player_loc>
      <video:duration>305</video:duration>
      <video:publication_date>2023-08-17T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/forgetting-to-clean-up-your-manual-event-listeners</loc>
    <lastmod>2023-08-10T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b700a8373a93b51047aa04/thumbnail-1-0.png?v=1758033445545</video:thumbnail_loc>
      <video:title>Forgetting to Clean Up Your Manual Event Listeners</video:title>
      <video:description>In this video, learn how to clean up global event listeners on unMounted in Vue.js. Why are global event listeners necessary? Because sometimes we want the event to fire even outside of the focus of elements within the current component. Why should we clean them up? Failing to do so will result in memory leaks and degrading application performance. 
Links

Vue.js Docs - onUnmounted</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b700a8373a93b51047aa04</video:player_loc>
      <video:duration>506</video:duration>
      <video:publication_date>2023-08-10T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/unintentionally-mutating-props</loc>
    <lastmod>2023-08-10T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b700a7373a93b51047a9de/thumbnail-1-0.png?v=1758033387282</video:thumbnail_loc>
      <video:title>Unintentionally Mutating Props</video:title>
      <video:description>In this lesson, we learn how to avoid the mistake of mutating props in Vue.js. Sometimes it’s easier said than done and unintentional mutations can hide in the most unexpected places. 
Links

Vue Docs - One Way Data Flow
Visual Studio Code for Vue.js Developers Course
ESLint Plugin Vue</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b700a7373a93b51047a9de</video:player_loc>
      <video:duration>600</video:duration>
      <video:publication_date>2023-08-10T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/replacing-reactive-state-the-wrong-way</loc>
    <lastmod>2023-08-10T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b700a76a218061ab35167f/thumbnail-1-0.png?v=1758033026081</video:thumbnail_loc>
      <video:title>Replacing Reactive State the Wrong Way</video:title>
      <video:description>In this lesson, learn why replacing the entirety of a Vue.js reactive array or object can cause unexpected bugs. Use ref to avoid the issue entirely. My suggestion even is to use ref everywhere.
Links

Vue.js Docs - Limitations of Reactive</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b700a76a218061ab35167f</video:player_loc>
      <video:duration>401</video:duration>
      <video:publication_date>2023-08-10T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/watching-arrays-the-wrong-way</loc>
    <lastmod>2023-08-10T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b700a7b21dc579f88f97ca/thumbnail-1-0.png?v=1758032973126</video:thumbnail_loc>
      <video:title>Watching Arrays the Wrong Way</video:title>
      <video:description>In this lesson, learn why watching arrays without the deep option will cause unexpected results for your Vue.js projects.
Links

Vue.js Migration Guide - Watch on Arrays
Vue.js Docs - Deep Watchers
Tweet from Evan on Why it Changed from v2 - v3
Github issue discussing the change from v2 - v3</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b700a7b21dc579f88f97ca</video:player_loc>
      <video:duration>204</video:duration>
      <video:publication_date>2023-08-10T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/prop-drilling</loc>
    <lastmod>2023-08-03T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b700a76a218061ab351681/thumbnail-1-0.png?v=1758032906525</video:thumbnail_loc>
      <video:title>Prop Drilling</video:title>
      <video:description>Prop drilling is an anti-pattern where the developer passes down a prop through multiple levels of components simply to access data defined higher up the tree in a deeply nested level. 
Coding this way can lead to hard-to-maintain code. Learn how to avoid prop drilling with provide/inject or via a global state management solution.
Links

Vue.js Docs - Provide/Inject
Vue School Video - Using Provide Inject with the Composition API
Vue.js Docs - State Management
Pinia Docs
Pinia Course</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b700a76a218061ab351681</video:player_loc>
      <video:duration>551</video:duration>
      <video:publication_date>2023-08-03T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/omitting-the-key-directive-on-v-for</loc>
    <lastmod>2023-08-03T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b700a7b21dc579f88f97c7/thumbnail-1-0.png?v=1758032852553</video:thumbnail_loc>
      <video:title>Omitting the Key Directive on v-for</video:title>
      <video:description>In this lesson, we take a look at one of the most common Vue.js mistakes: forgetting to combine the:key directive with v-for. This mistake can cause very bugs that are hard to track down whenever elements or components within a loop contain some internal state and are re-ordered in any way. 
?BTW reordering doesn’t just mean shuffling, it also includes adding or deleting any new items, that cause other elements to change position.
The rule of thumb is ALWAYS provide the :key directive with your v-for&apos;s no matter what and never use the index as the key.
Links

Visual Studio Code for Vue.js Developers Course
Tips and Gotchas For Using key with v-for in Vue.js 3 Article
Stackblitz example of the issue</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b700a7b21dc579f88f97c7</video:player_loc>
      <video:duration>515</video:duration>
      <video:publication_date>2023-08-03T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/course-intro</loc>
    <lastmod>2023-08-03T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b7006a373a93b51047a62e/68b700a7373a93b51047a9d6/thumbnail-1-0.png?v=1758032788866</video:thumbnail_loc>
      <video:title>Course Intro</video:title>
      <video:description>There are some mistakes that all Vue.js developers make at one time or another. Know what they are so that you can avoid them.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b700a7373a93b51047a9d6</video:player_loc>
      <video:duration>56</video:duration>
      <video:publication_date>2023-08-03T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/your-first-vue-js-chart</loc>
    <lastmod>2023-07-06T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699c7c4571f7bf393a62ce15/699c7cbe57a7b7f9b06ed718/thumbnail-1-0.png?v=1771959614376</video:thumbnail_loc>
      <video:title>Your First Vue.js Chart</video:title>
      <video:description>In this lesson, get hands-on using the vue-chartjs library to create your first bar chart using local data.
// movies 
const movies = [
  &quot;Spider-Man (2002)&quot;,
  &quot;Spider-Man 2 (2004)&quot;,
  &quot;Spider-Man 3 (2007)&quot;,
  &quot;The Amazing Spider-Man (2012)&quot;,
  &quot;The Amazing Spider-Man 2 (2014)&quot;,
  &quot;Spider-Man: Homecoming (2017)&quot;,
  &quot;Spider-Man: Far From Home (2019)&quot;,
  &quot;Spider-Man: No Way Home (2021)&quot;,
  &quot;Spider-Man: Into the Spider-Verse (2018)&quot;,
  &quot;Spider-Man: Across the Spider-Verse (2023)&quot;,
]

// ratings
const ratings = [7.3, 7.3, 6.2, 6.9, 6.6, 7.4, 7.5, 8.0, 8.4, 8.9]
Links

Boilerplate</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699c7cbe57a7b7f9b06ed718</video:player_loc>
      <video:duration>537</video:duration>
      <video:publication_date>2023-07-06T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-charts-for-vue-js-3</loc>
    <lastmod>2023-07-06T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/699c7c4571f7bf393a62ce15/699c7cbe57a7b7f9b06ed6c7/thumbnail-1-0.png?v=1771959544102</video:thumbnail_loc>
      <video:title>Intro to Charts for Vue.js 3</video:title>
      <video:description>In this lesson, I introduce you to vue-chartjs for creating interactive and easy-to-maintain charts and graphs for your Vue.js applications.
Some chart types supported out of the box include bar charts, line charts, doughnut charts, and more!
Links

vue-chartjs
Chart.js</video:description>
      <video:player_loc>https://play.gumlet.io/embed/699c7cbe57a7b7f9b06ed6c7</video:player_loc>
      <video:duration>270</video:duration>
      <video:publication_date>2023-07-06T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/custom-vue-transition-classes-aka-tailwind-css-with-vue-transitions</loc>
    <lastmod>2023-06-22T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c01e5f913220ae3bbb1d9e/69c2a072531f7f7b6ce7a85b/thumbnail-1-0.png?v=1774363451761</video:thumbnail_loc>
      <video:title>Custom Vue Transition Classes (aka Tailwind CSS with Vue Transitions)</video:title>
      <video:description>In this lesson, we learn how to apply arbitrary classes to the different phases of a Vue.js transition. This approach is a great option for using Tailwind CSS with Vue Transitions.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2a072531f7f7b6ce7a85b</video:player_loc>
      <video:duration>257</video:duration>
      <video:publication_date>2023-06-22T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/one-line-transitions-with-the-vue-autoanimate-plugin</loc>
    <lastmod>2023-06-29T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c01e5f913220ae3bbb1d9e/69c2a0729ae74a3428934809/thumbnail-1-0.png?v=1774363551660</video:thumbnail_loc>
      <video:title>One Line Transitions with the Vue AutoAnimate Plugin</video:title>
      <video:description>In this lesson, learn how to support transitions with a single Vue.js directive called v-auto-animate. The Auto Animate plugin from Vue provides a super simple way of adding transitions to your Vue.js app.
Links

Auto Animate</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2a0729ae74a3428934809</video:player_loc>
      <video:duration>310</video:duration>
      <video:publication_date>2023-06-29T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/css-animations-animate-css-and-the-vue-transition-component</loc>
    <lastmod>2023-06-22T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c01e5f913220ae3bbb1d9e/69c2a0724f62335fd44b890c/thumbnail-1-0.png?v=1774363827147</video:thumbnail_loc>
      <video:title>CSS Animations, Animate.css, and the Vue Transition Component</video:title>
      <video:description>In this lesson, we transition from CSS transitions (see what I did there ?), and look at CSS animations with the Vue.js Transition component. CSS animations allow us to insert any amount of steps with different CSS properties, making for more complex animations. Finally, we don’t have to write all of these animation keyframe declarations ourselves. Reach for a library like animate.css to do a lot of the work for you!
Links

Vue.js Docs: CSS Animations
animate.css</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2a0724f62335fd44b890c</video:player_loc>
      <video:duration>411</video:duration>
      <video:publication_date>2023-06-22T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/various-ways-of-triggering-transitions</loc>
    <lastmod>2023-06-15T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c01e5f913220ae3bbb1d9e/69c2a0ad4f62335fd44b8f12/thumbnail-1-0.png?v=1774364164389</video:thumbnail_loc>
      <video:title>Triggering Transitions in Vue</video:title>
      <video:description>Showing and hiding an element with v-if is not the only way to trigger a transition in Vue. In this lesson, we explore more possibilities like using v-show, dynamic components, and key.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2a0ad4f62335fd44b8f12</video:player_loc>
      <video:duration>354</video:duration>
      <video:publication_date>2023-06-15T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/nested-transitions-and-explicit-transition-durations</loc>
    <lastmod>2023-06-08T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c01e5f913220ae3bbb1d9e/69c2a0b94f62335fd44b90a1/thumbnail-1-0.png?v=1774364277852</video:thumbnail_loc>
      <video:title>Nested Vue Transitions and Explicit Transition Durations</video:title>
      <video:description>Did you know you can use a single Vue.js Transition component to animate multiple nested elements? In this lesson, we show you how! Plus, learn how the duration prop is used in such a situation. 
Links

Nested Transitions - Vue.js Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2a0b94f62335fd44b90a1</video:player_loc>
      <video:duration>292</video:duration>
      <video:publication_date>2023-06-08T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/hello-native-vue-js-transitions</loc>
    <lastmod>2023-06-08T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c01e5f913220ae3bbb1d9e/69c2a0c39ae74a3428935121/thumbnail-1-0.png?v=1774363899822</video:thumbnail_loc>
      <video:title>Hello Native Vue.js Transitions</video:title>
      <video:description>In this lesson, we quickly demo the Vue.js Transition component before diving into how it works. The built-in Transition component allows us to quickly and easily add transitions when showing and hiding elements. 
Links

Transition Component - Vue Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2a0c39ae74a3428935121</video:player_loc>
      <video:duration>172</video:duration>
      <video:publication_date>2023-06-08T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/headless-dialogs-with-useconfirmdialog</loc>
    <lastmod>2023-05-25T11:12:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967aac66a1e75f7ab3e8214/69c1125f24ffd038ef6d18a9/thumbnail-1-0.png?v=1774261512487</video:thumbnail_loc>
      <video:title>Headless Dialogs with useConfirmDialog</video:title>
      <video:description>Confirmation dialogs are common features of the modern day web app. There are many off the shelf components you could reach for to support them but why not use the VueUse package you probably already have installed. Plus, retain complete control over how things are styled. 
The VueUse dialog provides confirmation dialog functionality that you can hook-up to the markup and styles of your choice. In other words, it&apos;s a headless confirmation dialog and it works great!
Links

useConfirmDialog - Start | End | Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1125f24ffd038ef6d18a9</video:player_loc>
      <video:duration>341</video:duration>
      <video:publication_date>2023-05-25T11:12:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/formkit-and-zod</loc>
    <lastmod>2023-05-18T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd71b913220ae3bb572b1/69c2caaf4f62335fd44fe0b0/thumbnail-1-0.png?v=1774374411234</video:thumbnail_loc>
      <video:title>FormKit and Zod</video:title>
      <video:description>In this bonus lesson, we take a look at the FormKit Zod plugin.
Zod is a popular schema validation library, that works great with TypeScript. The plugin enables us to define all of a FormKit form’s validation rules with Zod.
The major advantage of using Zod over the built-in validation rules, is the ability to define the rules in one place and then re-use them on both front and backend.
Links

FormKit Zod Plugin Docs
Zod Documentation
Code in Stackblitz - Start
Code in Stackblitz - End
Code in Stackblitz - Invalid Payload Demo</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2caaf4f62335fd44fe0b0</video:player_loc>
      <video:duration>488</video:duration>
      <video:publication_date>2023-05-18T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/use-markdown-and-placeholders-in-training-messages</loc>
    <lastmod>2023-04-27T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd77461788532c94f475e/69c10a2424ffd038ef6c4c83/thumbnail-1-0.png?v=1774260462486</video:thumbnail_loc>
      <video:title>Use Markdown and Placeholders in Training Messages</video:title>
      <video:description>In this lesson, we get a bit creative with training the chatbot’s response to provide a link to a Twitter URL.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c10a2424ffd038ef6c4c83</video:player_loc>
      <video:duration>257</video:duration>
      <video:publication_date>2023-04-27T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-your-open-ai-account</loc>
    <lastmod>2023-04-13T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd77461788532c94f475e/69c108b9c98b51e9c552ae10/thumbnail-1-0.png?v=1774258842306</video:thumbnail_loc>
      <video:title>Create Your Open AI Account</video:title>
      <video:description>In this lesson, signup for your OpenAI account and generate an API token to authenticate your API requests. 
Links

OpenAI Signup
OpenAI Overview
Midjourney</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c108b9c98b51e9c552ae10</video:player_loc>
      <video:duration>195</video:duration>
      <video:publication_date>2023-04-13T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-open-ai-and-gpt-3-4</loc>
    <lastmod>2023-04-13T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd77461788532c94f475e/69c108b938a6314ac3957990/thumbnail-1-0.png?v=1774258924008</video:thumbnail_loc>
      <video:title>Intro to Open AI and GPT-3 &amp; 4</video:title>
      <video:description>ChatGPT has take the internet by storm! The AI that powers the popular app however, is also available via a simple REST API. In this course, we’ll supercharge our own Vue.js app with this powerful technology.
Finally, just for fun, I tried using ChatGPT to write this lesson for me. I didn’t end up going with the result but I think you’ll find it’s ideas pretty impressive!
Links

ChatGPT
Chat Completion API (GPT 3.0 Turbo)
Notion AI
Bing AI
Product Hunt
ChatGPT Generated Video Script ?</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c108b938a6314ac3957990</video:player_loc>
      <video:duration>317</video:duration>
      <video:publication_date>2023-04-13T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/filter-data-on-a-vue-frontend-with-laravel-query-builder-from-spatie</loc>
    <lastmod>2023-03-23T07:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c1bedac98b51e9c56406ac/69c1c2ff38a6314ac3a727f6/thumbnail-1-0.png?v=1774308119362</video:thumbnail_loc>
      <video:title>Filter Data on a Vue Frontend with Laravel Query Builder from Spatie</video:title>
      <video:description>In this lesson, we hook up a search input in our Vue.js app to the Laravel powered backend, using Laravel Query Builder for quick and easy setup. 
Links

Laravel Query Builder Docs: Filtering
qs - a JavaScript library that can parse and stringify nested objects</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1c2ff38a6314ac3a727f6</video:player_loc>
      <video:duration>576</video:duration>
      <video:publication_date>2023-03-23T07:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/tweak-the-axios-base-url-for-best-dev-experience</loc>
    <lastmod>2023-02-09T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c1bedac98b51e9c56406ac/69c1bef6c98b51e9c5640889/thumbnail-1-0.png?v=1774306203824</video:thumbnail_loc>
      <video:title>Tweak the Axios Base URL for Best Dev Experience</video:title>
      <video:description>In this lesson, we cut down having to type the base of the API URL over and over with the axios baseURL option. We also grab the baseURL from Nuxt runtime config defined in nuxt.config.ts so that it can be easily overridden in different environments with a .env variable and to make this project wide configuration in a predictable location. 
Links

Nuxt Docs: Runtime Config
Axios Docs: Defaults</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1bef6c98b51e9c5640889</video:player_loc>
      <video:duration>305</video:duration>
      <video:publication_date>2023-02-09T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/laravel-backends-for-vue-js-frontends-course-introduction</loc>
    <lastmod>2023-01-26T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c1bedac98b51e9c56406ac/69c1bef638a6314ac3a6dfff/thumbnail-1-0.png?v=1774307120801</video:thumbnail_loc>
      <video:title>Laravel Backends for Vue.js Frontends Course Introduction</video:title>
      <video:description>? Hello, and welcome to the course!
Laravel is a powerful PHP framework that can be used in several different ways:

It can render pages server side with PHP
You can create a “modern monolith” with Inertia and Vue (or any other front-end framework for that matter)
Or you can create a REST API with Laravel that’s consumed by a completely separate front-end application (a Vue SPA in our case).

We’ll be going with option 3. In the course, you’ll learn all about using Vue.js to interact with a Laravel powered REST API.
Links

Laravel
Inertia (Cool resource but not the approach we’re taking in this course)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1bef638a6314ac3a6dfff</video:player_loc>
      <video:duration>616</video:duration>
      <video:publication_date>2023-01-26T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/course-introduction</loc>
    <lastmod>2023-01-23T17:46:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a438e39380f186489abe/6967e929b25141dfa4d84121/thumbnail-1-0.png?v=1768417779530</video:thumbnail_loc>
      <video:title>Course Introduction</video:title>
      <video:description>Hello and welcome to the course ?!
Prerequisite Courses

Vue.js 3 Fundamentals
Vue.js 3 Component Fundamentals</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6967e929b25141dfa4d84121</video:player_loc>
      <video:duration>84</video:duration>
      <video:publication_date>2023-01-23T17:46:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/add-remove-columns</loc>
    <lastmod>2023-01-19T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c02c734fe0bcfaae59f04d/69c030a6913220ae3bbc96ac/thumbnail-1-0.png?v=1774209257197</video:thumbnail_loc>
      <video:title>Edit, Add, and Remove Columns</video:title>
      <video:description>In this lesson, we add the ability to add, remove, and edit columns to the Trello Board. Vue.js makes this a pretty straightfoward task!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c030a6913220ae3bbc96ac</video:player_loc>
      <video:duration>658</video:duration>
      <video:publication_date>2023-01-19T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/alt-drag-to-clone-tasks</loc>
    <lastmod>2023-01-12T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c02c734fe0bcfaae59f04d/69c030a661788532c956674f/thumbnail-1-0.png?v=1774203811923</video:thumbnail_loc>
      <video:title>Alt Drag to Clone Tasks</video:title>
      <video:description>In this lesson, we add a fancy keyboard shortcut to our Trello board. This shortcut allows users to clone tasks by Alt (or Option) dragging. We can easily listen for the presence of key modifiers with the useKeyModifiers composable from VueUse. 
Links

VueUse Docs: useKeyModifier</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c030a661788532c956674f</video:player_loc>
      <video:duration>262</video:duration>
      <video:publication_date>2023-01-12T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/sort-the-columns-with-vue-draggable</loc>
    <lastmod>2023-01-05T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c02c734fe0bcfaae59f04d/69c030a661788532c956674b/thumbnail-1-0.png?v=1774203758479</video:thumbnail_loc>
      <video:title>Sort the Columns with Vue Draggable</video:title>
      <video:description>In this lesson, we get to the really exciting part: adding drag and drop functionality with Vue Draggable! The draggable component takes an array as it’s v-model and renders draggable elements for each of the items in the array. Whenever the elements are dragged on the page, the array order updates accordingly. 
Links

Vue Draggable</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c030a661788532c956674b</video:player_loc>
      <video:duration>361</video:duration>
      <video:publication_date>2023-01-05T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-a-task-component-and-style-it-with-tailwind-css</loc>
    <lastmod>2023-01-05T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c02c734fe0bcfaae59f04d/69c030a64fe0bcfaae5a4ce2/thumbnail-1-0.png?v=1774206995561</video:thumbnail_loc>
      <video:title>Create a Task Component and Style it with Tailwind CSS</video:title>
      <video:description>In this lesson, we continue getting the basics styles for the app worked out. In the process, we create a TrelloBoardTask component for displaying the individual column tasks. 
We also add a couple other UI elements including the button for adding new tasks and the page heading.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c030a64fe0bcfaae5a4ce2</video:player_loc>
      <video:duration>501</video:duration>
      <video:publication_date>2023-01-05T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/bootstrap-the-project-trello-board</loc>
    <lastmod>2022-12-29T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c02c734fe0bcfaae59f04d/69c02cb5913220ae3bbc3eee/thumbnail-1-0.png?v=1774203362112</video:thumbnail_loc>
      <video:title>Bootstrap the Project</video:title>
      <video:description>In this lesson, we’ll bootstrap the Trello board project using Nuxt.js. Nuxt is a meta framework built on top of Vue that provides a wealth of developer conveniences for working with Vue 3. 
Nuxt also provides SSR for Vue components but we won’t need that for this course. You can turn off server side rendering with the following setting.
// nuxt.config.ts
export default defineNuxtConfig({
  ssr: false, // ⬅️
});
Links

Vue Draggable Github Repo
Vue Draggable Demo
nanoid
Nuxt Tailwind Module
Nuxt VueUse Module
Nuxt Docs: nuxt.config.ts</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c02cb5913220ae3bbc3eee</video:player_loc>
      <video:duration>303</video:duration>
      <video:publication_date>2022-12-29T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-we-are-building-trello-board</loc>
    <lastmod>2022-12-29T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c02c734fe0bcfaae59f04d/69c02cb54fe0bcfaae59f5cb/thumbnail-1-0.png?v=1774202807190</video:thumbnail_loc>
      <video:title>What We Are Building</video:title>
      <video:description>Hello and welcome to the course! ?
In this course, we’re going to build a Trello-style task board. This will give you the opportunity to:

develop a drag-and-drop interface with Vue.js
style an application with Tailwind CSS
enhance an application with VueUse
and build a simple yet robust real-world interface

Links

Trello
Vue Draggable Github Repo
Vue Draggable Demo
Sortable JS
VueUse
Tailwind CSS</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c02cb54fe0bcfaae59f5cb</video:player_loc>
      <video:duration>200</video:duration>
      <video:publication_date>2022-12-29T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/robust-vue-js-forms-with-formkit-course-conclusion</loc>
    <lastmod>2022-12-08T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd71b913220ae3bb572b1/69c2cca69ae74a342897cdda/thumbnail-1-0.png?v=1774374527270</video:thumbnail_loc>
      <video:title>Course Conclusion</video:title>
      <video:description>Congrats! ? You’ve completed the course. Want to implement FormKit in your next Vue.js project? Use the resources below, along with this course, to help you along the way!
Links

FormKit Docs
FormKit Docs: Community
FormKit Docs: Playground
FormKit Docs: Export and restructure inputs
Vue School on Twitter</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2cca69ae74a342897cdda</video:player_loc>
      <video:duration>244</video:duration>
      <video:publication_date>2022-12-08T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-a-tailwind-css-theme-for-formkit</loc>
    <lastmod>2022-12-08T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd71b913220ae3bb572b1/69c2caaf4f62335fd44fe0b4/thumbnail-1-0.png?v=1774374464150</video:thumbnail_loc>
      <video:title>Create a Tailwind CSS Theme for FormKit</video:title>
      <video:description>In this lesson, we learn how to create a custom theme for styling FormKit inputs with Tailwind CSS. The process makes maintaining styles for a Vue.js form straightforward and maintainable. 
Links

FormKit Docs: Create A Tailwind CSS Theme
FormKit Docs: Styling</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2caaf4f62335fd44fe0b4</video:player_loc>
      <video:duration>735</video:duration>
      <video:publication_date>2022-12-08T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/level-up-with-pro-inputs</loc>
    <lastmod>2022-12-08T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd71b913220ae3bb572b1/69c2cca69ae74a342897cdcb/thumbnail-1-0.png?v=1774374970690</video:thumbnail_loc>
      <video:title>Level Up with Pro Inputs</video:title>
      <video:description>In this video, we learn about the pro features of FormKit. Pro features include various synthetic (non-native) form input types like toggle, repeater, and autocomplete. Native inputs will always be free and open source and the pro offering helps keep it that way. 
Links

FormKit Pro
FormKit Docs: Repeater</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2cca69ae74a342897cdcb</video:player_loc>
      <video:duration>720</video:duration>
      <video:publication_date>2022-12-08T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-a-custom-formkit-input</loc>
    <lastmod>2022-12-08T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd71b913220ae3bb572b1/69c2cc334f62335fd4500625/thumbnail-1-0.png?v=1774374905009</video:thumbnail_loc>
      <video:title>Create a Custom FormKit Input</video:title>
      <video:description>In this lesson, we wrap the popular vue-multiselect component to make it compatible with FormKit. 
Links

vue-multiselect
FormKit Docs: Custom Inputs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2cc334f62335fd4500625</video:player_loc>
      <video:duration>542</video:duration>
      <video:publication_date>2022-12-08T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-validate-a-form-input</loc>
    <lastmod>2022-11-24T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd71b913220ae3bb572b1/69c2caaf4f62335fd44fe0b2/thumbnail-1-0.png?v=1774374515364</video:thumbnail_loc>
      <video:title>How to Validate a Form Input</video:title>
      <video:description>In this lesson, we take a look at validating inputs in FormKit. The built in validation rules make quick work of common scenarios with rules like required, url, length, between, and confirm_. 
Validation messages also show in a timely manner and directly under the input they describe. Furthermore, they disappear immediately after a user provides a valid value. 
Links

FormKit Docs: Validation
FormKit Docs: Available Rules</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2caaf4f62335fd44fe0b2</video:player_loc>
      <video:duration>505</video:duration>
      <video:publication_date>2022-11-24T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/customize-the-form-with-props</loc>
    <lastmod>2022-11-24T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd71b913220ae3bb572b1/69c2caaf531f7f7b6cec048f/thumbnail-1-0.png?v=1774374091678</video:thumbnail_loc>
      <video:title>Customize the Form with Props</video:title>
      <video:description>In this lesson, we’ll customize the form further with some useful props like submit-behavior and submit-label.
Links

FormKit Docs: Forms</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2caaf531f7f7b6cec048f</video:player_loc>
      <video:duration>196</video:duration>
      <video:publication_date>2022-11-24T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/form-population-and-submission</loc>
    <lastmod>2022-11-24T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd71b913220ae3bb572b1/69c2caaf9ae74a3428979bb9/thumbnail-1-0.png?v=1774374169282</video:thumbnail_loc>
      <video:title>Form Population and Submission</video:title>
      <video:description>In this lesson, we use FormKit to generate a form with built in support for initial values, submit handling, and smart submission states. 
Links

Lesson Start Commit (Copy green code from here to start at same place as video)
FormKit Docs: Forms</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2caaf9ae74a3428979bb9</video:player_loc>
      <video:duration>460</video:duration>
      <video:publication_date>2022-11-24T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/powerful-form-fields-with-a-simple-api</loc>
    <lastmod>2022-11-24T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd71b913220ae3bb572b1/69c2caaf531f7f7b6cec0487/thumbnail-1-0.png?v=1774374356810</video:thumbnail_loc>
      <video:title>Powerful Form Fields with a Simple API</video:title>
      <video:description>In this lesson, we create our first form inputs with FormKit. 
Using the FormKit component provides a consistent interface for all input types. The FormKit component also comes with many useful props to like help, validation, and more! 
Finally, we can override FormKit’s smart defaults for ultimate customization with section classes and slots. 
Links

FormKit Docs: Input Sections
FormKit Docs: Input Slots</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2caaf531f7f7b6cec0487</video:player_loc>
      <video:duration>518</video:duration>
      <video:publication_date>2022-11-24T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/project-setup-and-formkit-config</loc>
    <lastmod>2022-11-24T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd71b913220ae3bb572b1/69c2caaf531f7f7b6cec0496/thumbnail-1-0.png?v=1774374203328</video:thumbnail_loc>
      <video:title>Project Setup and FormKit Config</video:title>
      <video:description>In this lesson, we create a new Nuxt 3 project in which to work with FormKit. You can create the project locally by running:
npx nuxi init [project-name]
Or you can follow along in the browser by creating a new Nuxt application in StackBlitz.
To install the FormKit Nuxt module run:
npm install @formkit/nuxt
Links

nuxt.new
Nuxt Docs
FormKit Docs: Installation</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2caaf531f7f7b6cec0496</video:player_loc>
      <video:duration>251</video:duration>
      <video:publication_date>2022-11-24T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-formkit</loc>
    <lastmod>2022-11-24T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd71b913220ae3bb572b1/69c2caaf531f7f7b6cec0485/thumbnail-1-0.png?v=1774374111335</video:thumbnail_loc>
      <video:title>Introduction to FormKit</video:title>
      <video:description>Forms play a major part in making complex and interactive web applications. In this lesson, we take a look at some of the complexities of traditional forms and introduce you to a Vue.js library called FormKit. 
FormKit is a self-proclaimed “framework” that simplifies form structure, generation, validation, theming, submission, error handling, and more.
Links

FormKit</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2caaf531f7f7b6cec0485</video:player_loc>
      <video:duration>200</video:duration>
      <video:publication_date>2022-11-24T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/improve-the-sum-function</loc>
    <lastmod>2022-11-03T13:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a80db25141dfa4d02763/69ab4ac206a15537d0519cff/thumbnail-1-0.png?v=1772833899173</video:thumbnail_loc>
      <video:title>Improve the Sum Function</video:title>
      <video:description>In this lesson, improve our sum function to be more robust and learn about Vitest&apos;s watch mode for super fast feedback.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab4ac206a15537d0519cff</video:player_loc>
      <video:duration>205</video:duration>
      <video:publication_date>2022-11-03T13:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/your-first-test</loc>
    <lastmod>2022-11-03T13:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a80db25141dfa4d02763/69ab4ac206a15537d0519d02/thumbnail-1-0.png?v=1772833777354</video:thumbnail_loc>
      <video:title>Your First Test</video:title>
      <video:description>In this lesson, get started writing your first test in Vitest! Create a simple sum function and test it with Vitest.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab4ac206a15537d0519d02</video:player_loc>
      <video:duration>175</video:duration>
      <video:publication_date>2022-11-03T13:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-install-vitest</loc>
    <lastmod>2022-11-03T13:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a80db25141dfa4d02763/69ab4ac2bb772793aa1a06c6/thumbnail-1-0.png?v=1772833748448</video:thumbnail_loc>
      <video:title>How to Install Vitest</video:title>
      <video:description>In this lesson, learn how to install Vitest manually or via the official Vue starter template.
Links

Vitest Docs: Adding Vitest to your Project 
Vue.js Docs: Create a Vue Application</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab4ac2bb772793aa1a06c6</video:player_loc>
      <video:duration>199</video:duration>
      <video:publication_date>2022-11-03T13:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-vitest</loc>
    <lastmod>2022-11-03T13:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a80db25141dfa4d02763/69ab4ac28b86e9ed04af55d8/thumbnail-1-0.png?v=1772833775705</video:thumbnail_loc>
      <video:title>Introduction to Vitest</video:title>
      <video:description>In this lesson, Anthony Fu, the creator of Vitest introduces the testing framework and provides a brief overview of it&apos;s features and the benefits of testing your Vue.js applications. 
Links

Vitest Docs
antfu.me</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab4ac28b86e9ed04af55d8</video:player_loc>
      <video:duration>103</video:duration>
      <video:publication_date>2022-11-03T13:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/hybrid-rendering-with-nuxt</loc>
    <lastmod>2022-10-27T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f5a96a218061ab345f85/68b6f6ef373a93b510470994/thumbnail-1-0.png?v=1757949349847</video:thumbnail_loc>
      <video:title>Hybrid Rendering with Nuxt</video:title>
      <video:description>In this lesson, we experiment with the routeRules option for nuxt.config.ts. This option allows us to render pages differently based on it’s route. This means we can split up a single application and make some pages an SPA, other pages static (indefinitely or with SWR), and other pages SSR. This is known as &amp;quot;Hybrid Rendering”.
Links

Nuxt Docs: Hybrid Rendering</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f6ef373a93b510470994</video:player_loc>
      <video:duration>641</video:duration>
      <video:publication_date>2022-10-27T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/nuxt-server-api-routes</loc>
    <lastmod>2022-10-27T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f5a96a218061ab345f85/68b6f6d5373a93b5104707be/thumbnail-1-0.png?v=1757948001366</video:thumbnail_loc>
      <video:title>Nuxt Server API Routes</video:title>
      <video:description>In this lesson, we create the nested directory server/api to bootstrap quick support for REST API routes. Files created in this directory make api endpoints with little effort and some magic to coerce data to the proper format. Under the hood, Nuxt uses the unjs softwares Nitro and h3. 
Links

Nuxt Docs - Server Directory
Nitro
h3 github repo
h3 docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f6d5373a93b5104707be</video:player_loc>
      <video:duration>294</video:duration>
      <video:publication_date>2022-10-27T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/define-nuxt-route-middleware</loc>
    <lastmod>2022-10-20T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f5a96a218061ab345f85/68b6f6c3b21dc579f88ef418/thumbnail-1-0.png?v=1757947150181</video:thumbnail_loc>
      <video:title>Define Nuxt Route Middleware</video:title>
      <video:description>In this lesson, we learn how to run code before navigation with Nuxt’s route middleware. There are 3 kinds of route middleware:

inline route middleware
named route middleware
and global route middleware

Links

Nuxt Docs: Route Middleware</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f6c3b21dc579f88ef418</video:player_loc>
      <video:duration>381</video:duration>
      <video:publication_date>2022-10-20T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/fetch-data-with-fetch</loc>
    <lastmod>2022-10-06T13:02:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f5a96a218061ab345f85/68b6f6796a218061ab346e7a/thumbnail-1-0.png?v=1757945733918</video:thumbnail_loc>
      <video:title>Fetch Data with $fetch</video:title>
      <video:description>In this lesson, we use the built in $fetch function for making a request to the OMDB api and getting search results for a movie query.
Links

OMDB API
Nuxt Docs: $fetch</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f6796a218061ab346e7a</video:player_loc>
      <video:duration>562</video:duration>
      <video:publication_date>2022-10-06T13:02:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/dynamic-route-params-in-nuxt-js</loc>
    <lastmod>2022-10-06T13:02:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f5a96a218061ab345f85/68b6f679373a93b510470115/thumbnail-1-0.png?v=1757945658308</video:thumbnail_loc>
      <video:title>Dynamic Route Params in Nuxt.js</video:title>
      <video:description>In this lesson, we learn how to name our page components in order to support dynamic route parameters. This is accomplished by putting the dynamic param in square brackets. 
Links

Nuxt Docs: Dynamic Routes</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f679373a93b510470115</video:player_loc>
      <video:duration>327</video:duration>
      <video:publication_date>2022-10-06T13:02:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-nuxt</loc>
    <lastmod>2022-10-06T13:02:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f5a96a218061ab345f85/68b6f679b21dc579f88eee84/thumbnail-1-0.png?v=1757945384050</video:thumbnail_loc>
      <video:title>What is Nuxt?</video:title>
      <video:description>In this lesson, I’ll introduce you to Nuxt.js 3 and give a brief overview of some of it’s primary features. Features can be broken down roughly into 2 main categories:

A variety of rendering modes
and a developer conveniences

The various rendering modes for Nuxt make it extremely versatile and the developer convenience features make working with Nuxt a delight. 
Links

Nuxt 3 Docs

Icons in this video are by Font Awesome</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f679b21dc579f88eee84</video:player_loc>
      <video:duration>438</video:duration>
      <video:publication_date>2022-10-06T13:02:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/typesafe-plugin-options-with-typescript</loc>
    <lastmod>2022-09-29T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd742913220ae3bb576d1/69c2c81f9ae74a3428975bcf/thumbnail-1-0.png?v=1774374407081</video:thumbnail_loc>
      <video:title>Typesafe Plugin Options with TypeScript</video:title>
      <video:description>In this lesson, learn how to prevent errors and support amazing autocompletion/intellisense by typing your Vue.js plugin’s options. This can be done with typescript and a createMyPlugin function.
Links

Changes made to Prep Project for TS (Commit in Github)
Lesson Starting Point (with TS changes in Stackblitz)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c81f9ae74a3428975bcf</video:player_loc>
      <video:duration>467</video:duration>
      <video:publication_date>2022-09-29T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/use-onupdated-to-make-the-tooltip-reactive</loc>
    <lastmod>2022-09-15T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd742913220ae3bb576d1/69c2c77d9ae74a3428974afc/thumbnail-1-0.png?v=1774373690890</video:thumbnail_loc>
      <video:title>Use onUpdated to Make the ToolTip Reactive</video:title>
      <video:description>In this video, we use the onUpdated composition function from Vue to make the tooltip component reactive. This is just one enhancement we&apos;re providing to the vanilla js library by wrapping it in a Vue plugin.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c77d9ae74a3428974afc</video:player_loc>
      <video:duration>251</video:duration>
      <video:publication_date>2022-09-15T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/define-and-install-a-vue-js-plugin</loc>
    <lastmod>2022-09-15T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd742913220ae3bb576d1/69c2c77d531f7f7b6cebb394/thumbnail-1-0.png?v=1774373654533</video:thumbnail_loc>
      <video:title>Define and Install a Vue.js Plugin</video:title>
      <video:description>In this lesson, you get hands on creating your first Vue.js 3 Plugin. Learn how to define your plugin as an object with an install method and how to register on the Vue application instance with .use().
Links

Vue.js Docs: Plugins
Boilerplate Code on Stackblitz</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c77d531f7f7b6cebb394</video:player_loc>
      <video:duration>164</video:duration>
      <video:publication_date>2022-09-15T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-a-vue-js-plugin</loc>
    <lastmod>2022-09-15T13:05:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd742913220ae3bb576d1/69c2c77d531f7f7b6cebb396/thumbnail-1-0.png?v=1774373661942</video:thumbnail_loc>
      <video:title>What is a Vue.js Plugin?</video:title>
      <video:description>Plugins allow you to quickly install advanced functionality to your Vue.js applications. In this lesson, we introduce you to the concept and browse some popular plugins to see what’s possible.
Officially supported plugins include:

Pinia
and Vue Router

Some Useful 3rd party plugins include:

Floating Vue
Formkit
PrimeVue
and Vuetify</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c77d531f7f7b6cebb396</video:player_loc>
      <video:duration>204</video:duration>
      <video:publication_date>2022-09-15T13:05:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/click-outside-directive-1</loc>
    <lastmod>2022-09-08T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd69b913220ae3bb5680e/69c076bdc98b51e9c54924f8/thumbnail-1-0.png?v=1774254701337</video:thumbnail_loc>
      <video:title>Click Outside Directive</video:title>
      <video:description>In this lesson, you learn how to create a click outside directive. This directive solves a real-world problem and is a very handy custom vue.js directive that we use all the time.
Remember to always clean up your mess in the unmounted hook!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c076bdc98b51e9c54924f8</video:player_loc>
      <video:duration>248</video:duration>
      <video:publication_date>2022-09-08T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-understanding-vue-js-directives</loc>
    <lastmod>2022-09-01T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd69b913220ae3bb5680e/69c076bcc98b51e9c54924db/thumbnail-1-0.png?v=1774221445580</video:thumbnail_loc>
      <video:title>Understanding Vue.js Directives</video:title>
      <video:description>In this lesson, we go through Vue.js directives from top to bottom. We learn what they are and how you use them. We learn that a directive&apos;s job is to apply side effects to the DOM and that they can be modified with modifiers.
Links

Vue.js Docs: Custom Directives</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c076bcc98b51e9c54924db</video:player_loc>
      <video:duration>155</video:duration>
      <video:publication_date>2022-09-01T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/only-show-published-content-on-the-live-site</loc>
    <lastmod>2022-08-18T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c626531f7f7b6ceb8fee/thumbnail-1-0.png?v=1774373442095</video:thumbnail_loc>
      <video:title>Only Show Published Content on the Live Site</video:title>
      <video:description>In this lesson, we use the _storyblok query parameter once more, this time to limit draft content to the editor and only show published content on the live site.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c626531f7f7b6ceb8fee</video:player_loc>
      <video:duration>169</video:duration>
      <video:publication_date>2022-08-18T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/preview-the-live-site</loc>
    <lastmod>2022-08-18T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c6064f62335fd44f6872/thumbnail-1-0.png?v=1774373590521</video:thumbnail_loc>
      <video:title>Preview the Live Site in the Storyblok Editor</video:title>
      <video:description>In this lesson, we combine Storyblok’s special in editor query parameters (specifically _storyblok) with Netlify redirects to support live page previews of both existing and brand new pages.
Links

Storyblok Query Parameters
Netlify Redirects</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c6064f62335fd44f6872</video:player_loc>
      <video:duration>456</video:duration>
      <video:publication_date>2022-08-18T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/fallback-content-for-new-projects</loc>
    <lastmod>2022-08-04T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c4789ae74a342896f7df/thumbnail-1-0.png?v=1774373293697</video:thumbnail_loc>
      <video:title>Fallback Content for New Projects</video:title>
      <video:description>In this lesson, we create some fallback content to display to help boost the user experience for content editors when creating a new project.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c4789ae74a342896f7df</video:player_loc>
      <video:duration>236</video:duration>
      <video:publication_date>2022-08-04T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/jamstack-the-complete-guide-course-conclusion</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c64f4f62335fd44f7076/thumbnail-1-0.png?v=1774373337199</video:thumbnail_loc>
      <video:title>Course Conclusion</video:title>
      <video:description>Thanks for watching! We hope you enjoyed the course and are now better prepared to work on the Jamstack with both Nuxt and Storyblok.
Links

Nuxt Github Repo
Storyblok Community
Project on Stackblitz</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c64f4f62335fd44f7076</video:player_loc>
      <video:duration>76</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/workflows-device-previews-and-the-app-directory</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c64e9ae74a3428972af9/thumbnail-1-0.png?v=1774373346577</video:thumbnail_loc>
      <video:title>Workflows, Device Previews, and the App Directory</video:title>
      <video:description>In this video, we take one last stroll around Storyblok before concluding the course and take note of a couple handy features that we have yet to use. 
Links

Storyblok Docs: Basic Workflows
Storyblok Docs: Commenting and Discussions
Storyblok App Store</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c64e9ae74a3428972af9</video:player_loc>
      <video:duration>166</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/trigger-rebuilds-in-netlify-when-content-changes</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c6264f62335fd44f6be6/thumbnail-1-0.png?v=1774373441929</video:thumbnail_loc>
      <video:title>Trigger Rebuilds in Netlify when Content Changes</video:title>
      <video:description>In this lesson, we learn how to trigger the rebuild of the site&apos;s static HTML whenever we publish or unpublish content in Storyblok. This is as simple as setting up an incoming webhook in Netlify and an outgoing webhook in Storyblok.
Links

Storyblok Docs: Webhooks
Netlify Docs: Build Hooks</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c6264f62335fd44f6be6</video:player_loc>
      <video:duration>215</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/deploy-a-storyblok-nuxt-3-site-to-netlify</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c5d44f62335fd44f634f/thumbnail-1-0.png?v=1774373403698</video:thumbnail_loc>
      <video:title>Deploy a Storyblok + Nuxt 3 Site to Netlify</video:title>
      <video:description>In this lesson, we use Netlify to deploy our Storyblok powered Nuxt app to the world. Netlify’s deploy from Github feature and it’s ability to run our site generation step makes it an awesome service. Plus, it’s great for our end users, since it serves our static files from a CDN with servers all over the world.
Links

Netlify
How to Push Code to Github
Git Basics</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c5d44f62335fd44f634f</video:player_loc>
      <video:duration>266</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/generate-a-static-site-with-nuxt-3</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c5d34f62335fd44f6334/thumbnail-1-0.png?v=1774373541805</video:thumbnail_loc>
      <video:title>Generate a Static Site with Nuxt 3</video:title>
      <video:description>In this lesson, we use the npm run generate command that ships with Nuxt 3 in order to produce static HTML. We also take a look at our site’s performance score using Google Lighthouse devtools, in order to witness the Jamstack’s performance benefits for ourselves. 
Links

What is Google Lighthouse and How to Use it</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c5d34f62335fd44f6334</video:player_loc>
      <video:duration>369</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/content-reusability-with-presets</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c4789ae74a342896f7ea/thumbnail-1-0.png?v=1774373327773</video:thumbnail_loc>
      <video:title>Content Reusability with Presets</video:title>
      <video:description>With a headless architecture you can write your content once and then re-use it across multiple platforms. This is known as &amp;quot;Content Re-Usability&amp;quot;. Storyblok supports just this but also supports another form of content re-usability with it&apos;s presets feature.
Storyblok presets allow you to define blok content as the default values for future bloks and it&apos;s super handy!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c4789ae74a342896f7ea</video:player_loc>
      <video:duration>254</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/related-content</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c478531f7f7b6ceb5ecf/thumbnail-1-0.png?v=1774373555431</video:thumbnail_loc>
      <video:title>Add Featured Projects to the Homepage</video:title>
      <video:description>In this lesson, we reuse our projects content to create a featured projects section on the home page. Storyblok makes this easy with the Multi-Options field type. We also learn about the resolve_relations option for including all the related data in a single request.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c478531f7f7b6ceb5ecf</video:player_loc>
      <video:duration>613</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/content-type-blocks</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c4784f62335fd44f3cf6/thumbnail-1-0.png?v=1774373856251</video:thumbnail_loc>
      <video:title>Storyblok Content Type Blocks</video:title>
      <video:description>In this lesson, we’ll create a custom Content Type Blok for our projects pages. Content Types allow you to create templates for your stories. 
We also learn how to create a page with a dynamic route param in Nuxt to display individual projects. 
Links

Nuxt Pages Directory Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c4784f62335fd44f3cf6</video:player_loc>
      <video:duration>692</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/consume-site-content-with-nuxt</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c4784f62335fd44f3cde/thumbnail-1-0.png?v=1774373383165</video:thumbnail_loc>
      <video:title>Consume Storyblok Content with Nuxt</video:title>
      <video:description>In this lesson, we start making our website look more like an actual portfolio site by adding some pre-made styles and creating a Hero component that works with the Storyblok Hero blok. 
In the process, we’re introduced to the StoryblokComponent and the v-editable directive. 
Finally, we learn about the “Real Path” setting for configuring our home page route to the root path.
Links

CSS Stylesheet</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c4784f62335fd44f3cde</video:player_loc>
      <video:duration>601</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-a-hero-block-in-storyblok</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c4784f62335fd44f3ce0/thumbnail-1-0.png?v=1774373149766</video:thumbnail_loc>
      <video:title>Create a Hero Block in Storyblok</video:title>
      <video:description>In this lesson, we take a look at a mockup for the portfolio site we’re going to build and start modeling some of that content in Storyblok with a nested block. Blocks allow us to create reusable groups of content that contain particular fields, for use in composing stories. 
Links

Storyblok - Structures of Content
Balsamiq</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c4784f62335fd44f3ce0</video:player_loc>
      <video:duration>335</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/hello-storyblok</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c478531f7f7b6ceb5ec2/thumbnail-1-0.png?v=1774373321038</video:thumbnail_loc>
      <video:title>Hello Storyblok</video:title>
      <video:description>In this lesson, we jump into the Storyblok interface for the first time and get our first glimpse of the awesome content editing interface. We also hook-up the Nuxt app with a new Storyblok space in order to see live previews in action!
If you&apos;d like to bundle up the dev server and the proxy into a single command you can follow the instructions in this post by Storyblok on Settting Up HTTS on localhost in Nuxt 3. 
Alternately, you could do what I did in this commit.
Links

Storyblok
Setup Dev Server HTTPS (Mac)
Setup Dev Server HTTPS (Windows)
Setting Up HTTPS on localhost in Nuxt 3</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c478531f7f7b6ceb5ec2</video:player_loc>
      <video:duration>453</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/hello-nuxt</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c478531f7f7b6ceb5ec0/thumbnail-1-0.png?v=1774373060262</video:thumbnail_loc>
      <video:title>Hello Nuxt</video:title>
      <video:description>In this lesson, we create a new project with Nuxt 3 using the official Nuxt CLI tool called nuxi. This bootstraps everything we need to get started with Nuxt 3. 
npx nuxi init jamstack-course
After creating the project, we install the only dependency needed to hook-up storyblock: The official Storyblok Nuxt module.
npm install @storyblok/nuxt</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c478531f7f7b6ceb5ec0</video:player_loc>
      <video:duration>237</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/static-site-generators-for-the-jamstack</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c4784f62335fd44f3cdc/thumbnail-1-0.png?v=1774373179509</video:thumbnail_loc>
      <video:title>Static Site Generators for the Jamstack</video:title>
      <video:description>In this lesson, we’ll briefly survey some of the different Static Site Generators for use on the Jamstack. The selection of SSGs include: Hugo, Eleventy, Next.js, Gatsby, Nuxt, Vitepress, Vuepress, and more. Lastly, we’ll settle in on Nuxt and talk about why it’s the choice SSG for our build.
Links

Registery of Generators</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c4784f62335fd44f3cdc</video:player_loc>
      <video:duration>262</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-jamstack-toolbelt</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c4789ae74a342896f7d1/thumbnail-1-0.png?v=1774373253785</video:thumbnail_loc>
      <video:title>The Jamstack Toolbelt</video:title>
      <video:description>In this lesson, we survey some of the tools available to a developer working on the Jamstack. The exact products and services mentioned in the video aren’t necessarily important. What is most important is getting a good feel for the breadth of available tools.
Links

Jamstack Tools</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c4789ae74a342896f7d1</video:player_loc>
      <video:duration>330</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-the-jamstack</loc>
    <lastmod>2022-07-20T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd5854fe0bcfaae530b2d/69c2c4789ae74a342896f7cf/thumbnail-1-0.png?v=1774373610729</video:thumbnail_loc>
      <video:title>What is the Jamstack?</video:title>
      <video:description>In this lesson, I’ll introduce you to the Nuxt and Storyblok powered project we’ll be building throughout the course. We’ll also consider the question: “What is the Jamstack?” and explore it’s numerous benefits, including optimized performance, higher security, better scalability, improved developer experience, and more!
Links

Storyblok
Nuxt.js
jamstack.org
How Smashing Magazine Manages Content: Migration From WordPress To Jamstack

Icons in this video are by Font Awesome</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2c4789ae74a342896f7cf</video:player_loc>
      <video:duration>386</video:duration>
      <video:publication_date>2022-07-20T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/debugging-vue-apps-in-vs-code</loc>
    <lastmod>2022-05-26T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a988b25141dfa4d05172/69ab7e3206a15537d0559417/thumbnail-1-0.png?v=1772847711447</video:thumbnail_loc>
      <video:title>Debugging Vue Apps in VS Code</video:title>
      <video:description>In this lesson, you learn how to setup Visual Studio Code’s “Javascript Debugger” and how to use it to do basic debugging.
Links

VS Code Docs: Debugging
JSON Placeholder
JSON Placeholder Posts URL</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab7e3206a15537d0559417</video:player_loc>
      <video:duration>793</video:duration>
      <video:publication_date>2022-05-26T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/volar-the-official-language-feature-extension-for-vs-code</loc>
    <lastmod>2022-05-19T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a988b25141dfa4d05172/69ab7bd1bb772793aa1dd660/thumbnail-1-0.png?v=1772847529207</video:thumbnail_loc>
      <video:title>The Official Language Feature Extension for VS Code</video:title>
      <video:description>In this lesson, we learn about the official Vue.js language feature extension for VS Code. The Vue extension gives single file components the syntax highlighting and refactoring conveniences we’re used to in other file types like .html or .js files.
Links

Vue - Official Extension on Visual Studio Marketplace
Extension Repo on Github

Keyboard Shortcuts

Rename Symbol

F2 (Mac)
F2 (Windows)

Open Command Palette

Cmd+Shift+P (Mac)
Ctr+Shift+P (Windows)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab7bd1bb772793aa1dd660</video:player_loc>
      <video:duration>449</video:duration>
      <video:publication_date>2022-05-19T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-visual-studio-code</loc>
    <lastmod>2022-05-12T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a988b25141dfa4d05172/69ab7bd18b86e9ed04b325fe/thumbnail-1-0.png?v=1772846652652</video:thumbnail_loc>
      <video:title>Intro to Visual Studio Code</video:title>
      <video:description>? Hello, and welcome to the course! Are you ready to power up your coding efficiency with Visual Studio Code? If so, then this course is for you! 
Visual Studio code is a powerful and popular open source code editor (IDE) from Microsoft and it’s the officially recommended editor by the  Vue.js docs. Learn how to wield a variety of extensions, keyboard shortcuts, editor settings, and themes to optimize your Vue.js development.
Links

Visual Studio Code
Vue.js Official Recommendation
VS Code Extensions</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab7bd18b86e9ed04b325fe</video:player_loc>
      <video:duration>198</video:duration>
      <video:publication_date>2022-05-12T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-an-image-carousel-with-vueuse</loc>
    <lastmod>2022-04-28T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967aac66a1e75f7ab3e8214/69c11554c98b51e9c553df62/thumbnail-1-0.png?v=1774261964833</video:thumbnail_loc>
      <video:title>Create an Image Carousel with VueUse</video:title>
      <video:description>In this lesson, we use the VueUse useCycleList composable to create a functional image carousel with a minimal amount of code. Besides, just image carousel’s this function has a number of various applications for your Vue.js projects. 
Links

useCycleList - Start | End | Docs
Vue.js Docs: Transitions</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c11554c98b51e9c553df62</video:player_loc>
      <video:duration>254</video:duration>
      <video:publication_date>2022-04-28T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vueuse-utilities-usefetch-and-reactify</loc>
    <lastmod>2022-04-21T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967aac66a1e75f7ab3e8214/69c11505c98b51e9c553d7bf/thumbnail-1-0.png?v=1774262158547</video:thumbnail_loc>
      <video:title>VueUse Utilities: useFetch and Reactify</video:title>
      <video:description>In this lesson, we take a look at useFetch for reactively making ajax requests and reactfy for turning any typical procedural function into a reactive one. 
Both functions bring some handy re-usability to your Vue.js applications.
Links

useFetch - Start | End | Docs
reactify - Start | End | Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c11505c98b51e9c553d7bf</video:player_loc>
      <video:duration>502</video:duration>
      <video:publication_date>2022-04-21T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/ref-history-with-vueuse</loc>
    <lastmod>2022-04-21T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967aac66a1e75f7ab3e8214/69c114b624ffd038ef6d504a/thumbnail-1-0.png?v=1774262148269</video:thumbnail_loc>
      <video:title>Ref History with VueUse</video:title>
      <video:description>In this lesson, we learn how to keep up with the value of a reactive ref over time with the useRefHistory composable.
Links

useRefHistory - Start | End | Docs
useDebouncedRefHistory - Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c114b624ffd038ef6d504a</video:player_loc>
      <video:duration>524</video:duration>
      <video:publication_date>2022-04-21T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-keyboard-and-vueuse</loc>
    <lastmod>2022-04-07T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967aac66a1e75f7ab3e8214/69c1125f38a6314ac396616b/thumbnail-1-0.png?v=1774261441515</video:thumbnail_loc>
      <video:title>The Keyboard and VueUse</video:title>
      <video:description>In this lesson, we learn how to use VueUse’s onKeyStroke composable to react to user key strokes. No matter what’s focused in your Vue.js application, the events still behave as expected.
Links

onKeyStroke - Start | End | Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1125f38a6314ac396616b</video:player_loc>
      <video:duration>367</video:duration>
      <video:publication_date>2022-04-07T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/theming-with-vueuse-usedark-and-usecolormode</loc>
    <lastmod>2022-03-31T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967aac66a1e75f7ab3e8214/69c1126024ffd038ef6d18db/thumbnail-1-0.png?v=1774261572454</video:thumbnail_loc>
      <video:title>Theming with VueUse useDark and useColorMode</video:title>
      <video:description>Besides simple wrappers to provide reactivity, VueUse also gives us composables that interact with several browser APIs at once, to make adding common site features easier. Two such composables are the useDark and useColorMode composables which utilize local storage and system preferences to make dynamic themes a breeze for your Vue.js app. 
Links

useDark - Start | End | Docs
useColorMode - Start | End | Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1126024ffd038ef6d18db</video:player_loc>
      <video:duration>402</video:duration>
      <video:publication_date>2022-03-31T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/reactive-browser-wrappers-in-vueuse-useclipboard</loc>
    <lastmod>2022-03-31T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967aac66a1e75f7ab3e8214/69c1125fc98b51e9c55398fb/thumbnail-1-0.png?v=1774261421923</video:thumbnail_loc>
      <video:title>Reactive Browser Wrappers in Vueuse - useClipboard</video:title>
      <video:description>In this lesson, we continue playing with a common browser API with VueUse. This time we work with useClipboard to reactively get the contents of the user’s clipboard in a Vue.js application.
Links

useClipboard - Start | End | Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1125fc98b51e9c55398fb</video:player_loc>
      <video:duration>245</video:duration>
      <video:publication_date>2022-03-31T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/intro-to-vueuse</loc>
    <lastmod>2022-03-31T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967aac66a1e75f7ab3e8214/69c11260c98b51e9c5539905/thumbnail-1-0.png?v=1774261568091</video:thumbnail_loc>
      <video:title>Intro to VueUse</video:title>
      <video:description>VueUse is a collection of hundreds of essential Vue Composition Utilities for interacting with various browser, sensor, animation, and state apis, plus more! 
In this course, we’ll sample some hand picked functions from each category to give you an idea of what’s possible with VueUse and hopefully wet your appetite to utilize VueUse in your own projects. 
Links

VueUse Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c11260c98b51e9c5539905</video:player_loc>
      <video:duration>224</video:duration>
      <video:publication_date>2022-03-31T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-vue-application-instance</loc>
    <lastmod>2022-03-09T16:15:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6ef43b21dc579f88e6563/68b6ef91373a93b510467ed8/thumbnail-1-0.png?v=1759852189140</video:thumbnail_loc>
      <video:title>The Vue Application Instance</video:title>
      <video:description>In this lesson, we learn about the Vue application instance and how to mount it to the DOM. While working in the Vue.js playground, this was done behind the scenes for us. Working in the local project now, we can see how it works by looking at the generated main.js file.
Links

Vue Docs: Creating a Vue Application
Vue 3 Components Fundamentals Course</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6ef91373a93b510467ed8</video:player_loc>
      <video:duration>200</video:duration>
      <video:publication_date>2022-03-09T16:15:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/using-typescript-with-the-options-api-in-components</loc>
    <lastmod>2022-03-24T13:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a2ade39380f186486b2f/6967b428b25141dfa4d1990f/thumbnail-1-0.png?v=1768411158370</video:thumbnail_loc>
      <video:title>Using TypeScript with the Options API in Components</video:title>
      <video:description>In this lesson, we learn how to use TypeScript with the Vue.js Options API to type things such as component props, computed props, and events. 
Links

Vue Docs: TypeScript with the Options API</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6967b428b25141dfa4d1990f</video:player_loc>
      <video:duration>319</video:duration>
      <video:publication_date>2022-03-24T13:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/declaring-and-typing-component-props</loc>
    <lastmod>2022-03-17T13:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a2ade39380f186486b2f/6967b364b25141dfa4d1847b/thumbnail-1-0.png?v=1768408706477</video:thumbnail_loc>
      <video:title>Declaring and Typing Component Props</video:title>
      <video:description>In this lesson, we’ll examine how to use TypeScript to define types for Vue component props. Along the way, you’ll also get a first hand look at the great DX this provides for interacting with those components.
Links

Vue Docs: Typing Component Props</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6967b364b25141dfa4d1847b</video:player_loc>
      <video:duration>587</video:duration>
      <video:publication_date>2022-03-17T13:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/typing-component-events</loc>
    <lastmod>2022-03-17T13:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a2ade39380f186486b2f/6967b1e1b25141dfa4d15624/thumbnail-1-0.png?v=1768415449570</video:thumbnail_loc>
      <video:title>Typing Component Events</video:title>
      <video:description>In this lesson, we learn how to type the payload of component events in Vue and TypeScript.
Links

Vue Docs: Typing Component Emits
Define Emits VS Code Snippet</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6967b1e1b25141dfa4d15624</video:player_loc>
      <video:duration>320</video:duration>
      <video:publication_date>2022-03-17T13:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/typescript-in-vue-components</loc>
    <lastmod>2022-03-03T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a2ade39380f186486b2f/6967b1e1e39380f1864a3ac1/thumbnail-1-0.png?v=1768406718430</video:thumbnail_loc>
      <video:title>TypeScript in Vue Components</video:title>
      <video:description>In this lesson, we learn how to direct Vue Single File Components to work with typescript.
Links

Vue Docs: TypeScript Usage in Single File Components</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6967b1e1e39380f1864a3ac1</video:player_loc>
      <video:duration>130</video:duration>
      <video:publication_date>2022-03-03T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-typescript-with-vue-js-3</loc>
    <lastmod>2022-03-03T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://vueschool.io/storage/0RX9LeZsFLWd8Y4j21BQGsj4Npvv8p7CfRPpWzYQ.avif</video:thumbnail_loc>
      <video:title>Introduction to TypeScript with Vue.js 3</video:title>
      <video:description>In this lesson, we take a look at some of the benefits of using TypeScript with Vue.js including:

Improved error detection in your IDE and at build time
Safer and less stressful refactoring
More focused and accurate IDE autocompletion

We also answer the question: “Are there any cases when you wouldn’t want to use TypeScript?”. 
Links

Vue.js 3 Fundamentals with the Composition API</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6967b1e1b25141dfa4d15606</video:player_loc>
      <video:duration>333</video:duration>
      <video:publication_date>2022-03-03T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-4-dynamic-routing</loc>
    <lastmod>2022-02-22T15:40:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f541373a93b51046e9d4/thumbnail-1-0.png?v=1757694556334</video:thumbnail_loc>
      <video:title>Dynamic Routing</video:title>
      <video:description>In this lesson, we learn how to dynamically add or remove routes to Vue Router while the application is already running.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f541373a93b51046e9d4</video:player_loc>
      <video:duration>284</video:duration>
      <video:publication_date>2022-02-22T15:40:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-4-advanced-routes-matching-syntax</loc>
    <lastmod>2022-02-22T15:40:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f538373a93b51046e8fb/thumbnail-1-0.png?v=1757694482717</video:thumbnail_loc>
      <video:title>Advanced Routes’ Matching Syntax</video:title>
      <video:description>In this lesson, we take a look at how to utilize regular expressions and other special symbols to take fine tune control over how routes are matched.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f538373a93b51046e8fb</video:player_loc>
      <video:duration>336</video:duration>
      <video:publication_date>2022-02-22T15:40:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-4-detecting-navigation-failures</loc>
    <lastmod>2022-02-22T15:40:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f5376a218061ab34566a/thumbnail-1-0.png?v=1757694422581</video:thumbnail_loc>
      <video:title>Detecting Navigation Failures</video:title>
      <video:description>In this lesson, we learn that navigating programmatically is an asynchronous operation. By waiting for the result, we can detect navigation failures and perform all sorts of custom actions based on the reason for failure.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f5376a218061ab34566a</video:player_loc>
      <video:duration>268</video:duration>
      <video:publication_date>2022-02-22T15:40:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-4-redirect-and-alias</loc>
    <lastmod>2022-02-22T15:40:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f537373a93b51046e8e4/thumbnail-1-0.png?v=1757694371881</video:thumbnail_loc>
      <video:title>Redirect and Alias</video:title>
      <video:description>In this lesson, we learn more about using the redirect and alias route properties for handling alternate urls.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f537373a93b51046e8e4</video:player_loc>
      <video:duration>145</video:duration>
      <video:publication_date>2022-02-22T15:40:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-4-named-views</loc>
    <lastmod>2022-02-22T15:40:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f52f6a218061ab3455a5/thumbnail-1-0.png?v=1757694322894</video:thumbnail_loc>
      <video:title>Named Views</video:title>
      <video:description>In this lesson, we learn how to utilize named views in order to compose custom layouts per route.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f52f6a218061ab3455a5</video:player_loc>
      <video:duration>312</video:duration>
      <video:publication_date>2022-02-22T15:40:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-4-programmatic-navigation</loc>
    <lastmod>2022-02-22T15:40:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f52eb21dc579f88ed57f/thumbnail-1-0.png?v=1757694268577</video:thumbnail_loc>
      <video:title>Programmatic Navigation</video:title>
      <video:description>In this lesson, we learn about using $router.push and $router.replace to navigate to different routes programmatically.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f52eb21dc579f88ed57f</video:player_loc>
      <video:duration>286</video:duration>
      <video:publication_date>2022-02-22T15:40:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-4-bonus-lessons</loc>
    <lastmod>2022-02-22T15:40:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f52bb21dc579f88ed54d/thumbnail-1-0.png?v=1757694214501</video:thumbnail_loc>
      <video:title>Bonus Lessons</video:title>
      <video:description>In this chapter, we provide some more lessons to give you an even more thorough understanding of what’s possible with Vue Router.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f52bb21dc579f88ed54d</video:player_loc>
      <video:duration>49</video:duration>
      <video:publication_date>2022-02-22T15:40:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/access-pinia-getters-in-the-options-api</loc>
    <lastmod>2022-02-17T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6964d86e6a1e75f7abf5b5b0/6964d91b6a1e75f7abf5c6ad/thumbnail-1-0.png?v=1770047699651</video:thumbnail_loc>
      <video:title>Access Pinia Getters in the Options API</video:title>
      <video:description>In this lesson, we learn how to access getters from a Pinia store using the options API. This is possible with the Pinia helper functions mapState.
Links

Pinia Docs: Getters Usage with the Options API</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6964d91b6a1e75f7abf5c6ad</video:player_loc>
      <video:duration>114</video:duration>
      <video:publication_date>2022-02-17T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/access-pinia-actions-in-the-options-api</loc>
    <lastmod>2022-02-17T15:03:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6964d86e6a1e75f7abf5b5b0/6964d91b6a1e75f7abf5c6c6/thumbnail-1-0.png?v=1768217153379</video:thumbnail_loc>
      <video:title>Access Pinia Actions in the Options API</video:title>
      <video:description>In this lesson, we learn how to call actions from a Pinia store in a Vue.js component setup with the options API.
Links

Pinia Docs: Actions - Usage with the Options API</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6964d91b6a1e75f7abf5c6c6</video:player_loc>
      <video:duration>172</video:duration>
      <video:publication_date>2022-02-17T15:03:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/access-pinia-state-in-the-options-api</loc>
    <lastmod>2022-02-17T15:03:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6964d86e6a1e75f7abf5b5b0/6964d917b25141dfa4878f9a/thumbnail-1-0.png?v=1770047596470</video:thumbnail_loc>
      <video:title>Access Pinia State in the Options API</video:title>
      <video:description>In this lesson, we learn how to access state from a Pinia store using the options API. This is possible with the Pinia helper functions mapState and mapWritableState.
Links

Pinia Docs: State - Usage with the Options API</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6964d917b25141dfa4878f9a</video:player_loc>
      <video:duration>397</video:duration>
      <video:publication_date>2022-02-17T15:03:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/getters-in-pinia</loc>
    <lastmod>2022-02-10T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6964d86e6a1e75f7abf5b5b0/6964d8ed6a1e75f7abf5c1ca/thumbnail-1-0.png?v=1768217255714</video:thumbnail_loc>
      <video:title>Getters in Pinia</video:title>
      <video:description>In this lesson, we learn about using getters in Pinia to provide computed data based on the state of the store. 
With this handy feature we’re able to get our Vue.js powered Pineapple Stand showing the correct item count in the cart and show a empty cart message when there are no items.
Links

Pinia Docs: Getters</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6964d8ed6a1e75f7abf5c1ca</video:player_loc>
      <video:duration>397</video:duration>
      <video:publication_date>2022-02-10T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/synchronous-and-asynchronous-actions-in-pinia</loc>
    <lastmod>2022-02-03T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6964d86e6a1e75f7abf5b5b0/6964d8edb25141dfa4878af8/thumbnail-1-0.png?v=1768217133713</video:thumbnail_loc>
      <video:title>Synchronous and Asynchronous Actions in Pinia</video:title>
      <video:description>In this lesson, we learn how to use a Pinia action to mutate the store’s state. In doing so, we also observe a common pattern in Vue.js applications where data is fetched asyncronously from an API and then used to fill the store.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6964d8edb25141dfa4878af8</video:player_loc>
      <video:duration>187</video:duration>
      <video:publication_date>2022-02-03T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/access-state-from-a-pinia-store</loc>
    <lastmod>2022-02-03T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6964d86e6a1e75f7abf5b5b0/6964d8ede39380f1860070ea/thumbnail-1-0.png?v=1768217073919</video:thumbnail_loc>
      <video:title>Access State from a Pinia Store</video:title>
      <video:description>In this lesson, we learn how to access the state defined in a Pinia store. For our Vue.js powered pineapple stand, we use the products state to populate the products on the page. 
Links

Pinia Docs: State</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6964d8ede39380f1860070ea</video:player_loc>
      <video:duration>167</video:duration>
      <video:publication_date>2022-02-03T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/define-your-first-pinia-store</loc>
    <lastmod>2022-01-20T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6964d86e6a1e75f7abf5b5b0/6964d8ede39380f1860070e8/thumbnail-1-0.png?v=1770045559499</video:thumbnail_loc>
      <video:title>Define Your First Pinia Store</video:title>
      <video:description>In this lesson, we define the first Pinia store for our Vue.js 3 application. By default, Pinia is modular so we’re able to break up our stores right away into topic specific files, starting with ProductStore.js where we define the application’s products in the state.
Links

Pinia Docs: Defining a Store</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6964d8ede39380f1860070e8</video:player_loc>
      <video:duration>329</video:duration>
      <video:publication_date>2022-01-20T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-pinia</loc>
    <lastmod>2022-01-20T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6964d86e6a1e75f7abf5b5b0/6964d8edb25141dfa4878afd/thumbnail-1-0.png?v=1770045267091</video:thumbnail_loc>
      <video:title>Introduction to Pinia</video:title>
      <video:description>Hello! And welcome to Pinia, The Enjoyable Vue Store! In this lesson, we introduce you to Pinia and answer a few questions like:

What is Pinia?
What is state management?
When should I use Pinia?
and why should I use Pinia for state management in Vue.js?

Links

Pinia Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6964d8edb25141dfa4878afd</video:player_loc>
      <video:duration>334</video:duration>
      <video:publication_date>2022-01-20T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-fundamentals-capi-course-conclusion</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6ef43b21dc579f88e6563/68b6ef91373a93b510467edf/thumbnail-1-0.png?v=1759852137202</video:thumbnail_loc>
      <video:title>Course Conclusion</video:title>
      <video:description>Congrats! You&apos;ve completed the course and are well on your way to using Vue for your next web development projects!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6ef91373a93b510467edf</video:player_loc>
      <video:duration>73</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-fundamentals-capi-local-setup-with-vite</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6ef43b21dc579f88e6563/68b6ef90373a93b510467eb3/thumbnail-1-0.png?v=1759852109396</video:thumbnail_loc>
      <video:title>Local Setup with Vite</video:title>
      <video:description>In this lesson, we learn how to get a Vue project setup on our local machine with Vite. 
Since a build step is required to use script setup this is the fastest and easiest way to get going. If you don&apos;t want to use the script setup feature then you can install Vue via a script tag linked to CDN.
Links

Rapid Development with Vite Course
Vue 3 Single File Components Course

⚠️ You should use npm init vue@latest to install the latest version of Vue (instead of vue@3)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6ef90373a93b510467eb3</video:player_loc>
      <video:duration>218</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-fundamentals-capi-reactivity-fundamentals</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6ef43b21dc579f88e6563/68b6ef6e6a218061ab33e993/thumbnail-1-0.png?v=1759852056785</video:thumbnail_loc>
      <video:title>Reactivity Fundamentals</video:title>
      <video:description>What&apos;s Vue without it&apos;s powerful reactivity system? In this lesson, we dive into reactive data in Vue and explore the different options for declaring reactive data with the ref() and reactive() functions.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6ef6e6a218061ab33e993</video:player_loc>
      <video:duration>306</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-fundamentals-capi-computed-properties-in-vue-with-the-composition-api</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6880e76606c9d53d5d05d555/6880e78608716f7a30ab1200/thumbnail-1-0.png?v=1753280267773</video:thumbnail_loc>
      <video:title>Computed Properties in Vue with the Composition API</video:title>
      <video:description>Computed properties are another powerful feature from Vue that allows us to transform or perform calculations on our data and then easily reuse the result as an up-to-date variable in our template. Computed properties are very useful and should replace complex in-template expressions.
While this explanation without any code examples might not make much sense right now, it surely will after you&apos;ve watched this lesson about computed properties.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6880e78608716f7a30ab1200</video:player_loc>
      <video:duration>318</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-fundamentals-capi-dynamic-css-classes-with-vue</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6880e76606c9d53d5d05d555/6880e78606c9d53d5d05d85f/thumbnail-1-0.png?v=1753281143100</video:thumbnail_loc>
      <video:title>Dynamic CSS Classes with Vue</video:title>
      <video:description>A common need and use case for attribute bindings is to manipulate the look of elements with CSS classes or style attributes. 
To make this task easier than ever, Vue provides special enhancements when v-bind is used with the class or style attribute. In this lesson, we learn how to apply dynamic classes based on our Vue data.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6880e78606c9d53d5d05d85f</video:player_loc>
      <video:duration>441</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-fundamentals-capi-html-attribute-binding-in-vue</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6ef43b21dc579f88e6563/68b6ef6eb21dc579f88e67df/thumbnail-1-0.png?v=1759851936237</video:thumbnail_loc>
      <video:title>HTML Attribute Binding in Vue</video:title>
      <video:description>We know how to render data in the DOM with Vue 3, and now it&apos;s time to take a closer look at how we can bind HTML attributes to our Vue data. 
This is achieved with Vue&apos;s v-bind directive and would let us change the href (or any other HTML attribute) of a link or swap out an image if we need to.
NOTE: for the link to work properly you should provide the protocol in the input (http:// or https://)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6ef6eb21dc579f88e67df</video:player_loc>
      <video:duration>203</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-fundamentals-capi-conditionals-in-vue</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6880e76606c9d53d5d05d555/6880e786078fd918c8cc7683/thumbnail-1-0.png?v=1753281837469</video:thumbnail_loc>
      <video:title>Conditionals in Vue</video:title>
      <video:description>Conditional rendering is essential on any dynamic website. Vue.js offers two ways to render elements on our page conditionally, and in this lesson we&apos;re learning how the v-if and v-else directives work.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6880e786078fd918c8cc7683</video:player_loc>
      <video:duration>253</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-fundamentals-capi-methods-in-vue-with-the-composition-api</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6ef43b21dc579f88e6563/68b6ef6e6a218061ab33e96a/thumbnail-1-0.png?v=1759851851676</video:thumbnail_loc>
      <video:title>Methods in Vue with the Composition API</video:title>
      <video:description>It is handy to run JavaScript expressions directly in the template or a directive sometimes - but not always. 
When the expression gets too verbose, or we need the same logic in multiple places, we can extract the logic to a function and fire the function instead. These functions are called methods and allow us to DRY up the code.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6ef6e6a218061ab33e96a</video:player_loc>
      <video:duration>233</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-fundamentals-capi-user-events-in-vue-3</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6880e76606c9d53d5d05d555/6880e78606c9d53d5d05d859/thumbnail-1-0.png?v=1753280814098</video:thumbnail_loc>
      <video:title>User Events in Vue 3</video:title>
      <video:description>In this lesson, we&apos;ll learn how to respond to and handle user events with Vue&apos;s v-on directive.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6880e78606c9d53d5d05d859</video:player_loc>
      <video:duration>441</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-fundamentals-capi-user-inputs-in-vue</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6880e76606c9d53d5d05d555/689384da7afab80a3ee14555/thumbnail-1-0.png?v=1754499115190</video:thumbnail_loc>
      <video:title>User Inputs in Vue</video:title>
      <video:description>We will continue to learn about the reactivity system in this lesson. You&apos;ll learn how to handle user inputs with the v-model directive. v-model gives super powers to text inputs, checkboxes, radio buttons, selects, and more!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/689384da7afab80a3ee14555</video:player_loc>
      <video:duration>567</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-fundamentals-capi-list-rendering-in-vue</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6880e76606c9d53d5d05d555/689381c07afab80a3ee11c3f/thumbnail-1-0.png?v=1754498012249</video:thumbnail_loc>
      <video:title>List Rendering in Vue</video:title>
      <video:description>In almost all applications there is a need to iterate or loop through a list of items and render them on the page. 
In this lesson, we&apos;re taking a closer look at Vue&apos;s v-for directive, which lets us iterate through arrays and objects in an elegant matter.
Links

Tips and Gotchas for Using key with v-for in Vue.js 3
</video:description>
      <video:player_loc>https://play.gumlet.io/embed/689381c07afab80a3ee11c3f</video:player_loc>
      <video:duration>424</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-fundamentals-capi-vue-template-syntax-and-expressions</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6ef43b21dc579f88e6563/68b6ef6e6a218061ab33e967/thumbnail-1-0.png?v=1759849294974</video:thumbnail_loc>
      <video:title>Vue Template Syntax and Expressions</video:title>
      <video:description>In the previous lesson, we briefly touched upon the templating syntax to bind Vue data to the DOM.
In this lesson, we&apos;ll dive deeper into Vue&apos;s templating syntax and learn how to run JavaScript expressions directly in the template.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6ef6e6a218061ab33e967</video:player_loc>
      <video:duration>187</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/getting-started-with-vue-js-and-the-composition-api</loc>
    <lastmod>2022-02-14T20:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6880e76606c9d53d5d05d555/6880e78606c9d53d5d05d83d/thumbnail-1-0.png?v=1753281000543</video:thumbnail_loc>
      <video:title>Getting Started with Vue.js and the Composition API</video:title>
      <video:description>In the very first lesson of the Vue Fundamentals with the Composition API course, we take a look at the official playground provided in the Vue.js docs and break down it&apos;s &amp;quot;Hello World&amp;quot; example.
Links

Vue.js Playground
</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6880e78606c9d53d5d05d83d</video:player_loc>
      <video:duration>238</video:duration>
      <video:publication_date>2022-02-14T20:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/application-monitoring-for-vue-with-sentry-course-conclusion</loc>
    <lastmod>2022-01-13T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2bf63531f7f7b6ceacd8f/thumbnail-1-0.png?v=1774372484898</video:thumbnail_loc>
      <video:title>Course Conclusion</video:title>
      <video:description>With the conclusion of this course, you&apos;re ready to start using Sentry to provide application monitoring for your Vue.js 3 applications.
Goodbye!
Links

Sentry
Sentry Vue Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2bf63531f7f7b6ceacd8f</video:player_loc>
      <video:duration>63</video:duration>
      <video:publication_date>2022-01-13T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/release-health-in-sentry</loc>
    <lastmod>2022-01-13T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2bf62531f7f7b6ceacd5d/thumbnail-1-0.png?v=1774372674181</video:thumbnail_loc>
      <video:title>Release Health in Sentry</video:title>
      <video:description>In this lesson, we learn how to monitor the health of our Vue.js 3 application using release health in Sentry.
Release health can give us an idea of how well the latest releases are being adopted, if any crashes have occurred, and how many new issues have come up.
Links

Sentry Docs: Release Health</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2bf62531f7f7b6ceacd5d</video:player_loc>
      <video:duration>164</video:duration>
      <video:publication_date>2022-01-13T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/performance-monitoring-in-sentry</loc>
    <lastmod>2022-01-13T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2be25531f7f7b6ceaa86d/thumbnail-1-0.png?v=1774372674150</video:thumbnail_loc>
      <video:title>Performance Monitoring in Sentry</video:title>
      <video:description>In this lesson, we learn how to monitor a Vue.js 3 application&apos;s performance with Sentry.
Links

Sentry Docs: Performance Monitoring
Sentry Docs: Custom Instrumentation
Sentry Docs: Connect Services</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2be25531f7f7b6ceaa86d</video:player_loc>
      <video:duration>280</video:duration>
      <video:publication_date>2022-01-13T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/adding-context-to-issues-in-sentry</loc>
    <lastmod>2022-01-13T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2be244f62335fd44e85a0/thumbnail-1-0.png?v=1774372418383</video:thumbnail_loc>
      <video:title>Adding Context to Issues in Sentry</video:title>
      <video:description>In this lesson, we learn how to add arbitrary data to an issue in Sentry so that it&apos;s more informed about our Vue.js 3 application. This helps give more domain specific information to the developer trying to resolve the issue.
Links

Sentry Docs: Add Context</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2be244f62335fd44e85a0</video:player_loc>
      <video:duration>283</video:duration>
      <video:publication_date>2022-01-13T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/identifying-end-users-in-sentry</loc>
    <lastmod>2022-01-13T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2be244f62335fd44e859e/thumbnail-1-0.png?v=1774372498327</video:thumbnail_loc>
      <video:title>Identifying End Users in Sentry</video:title>
      <video:description>In this lesson, we learn how to pass a user from a Vue.js 3 application to Sentry in order to better identify who is experiencing particular issues. 
Links

Sentry Docs: Identify Users</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2be244f62335fd44e859e</video:player_loc>
      <video:duration>162</video:duration>
      <video:publication_date>2022-01-13T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/alerts-in-sentry</loc>
    <lastmod>2022-01-13T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2be24531f7f7b6ceaa844/thumbnail-1-0.png?v=1774372635685</video:thumbnail_loc>
      <video:title>Alerts in Sentry</video:title>
      <video:description>In this lesson, we learn how to setup alerts based on a variety of conditions in Sentry. Alerts can be sent to individuals, teams, or even &amp;quot;Issue Owners&amp;quot; based on technical aspects of the issue.
With Sentry alerts you can rest easy knowing that you&apos;ll know about issues with your Vue.js application at the proper times.
Links

Sentry Docs: Alerts</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2be24531f7f7b6ceaa844</video:player_loc>
      <video:duration>367</video:duration>
      <video:publication_date>2022-01-13T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/environments-in-sentry</loc>
    <lastmod>2022-01-13T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2be24531f7f7b6ceaa848/thumbnail-1-0.png?v=1774372311780</video:thumbnail_loc>
      <video:title>Environments in Sentry</video:title>
      <video:description>In this lesson, we learn how to tag issues in Sentry based on the deployment environment. 
For Vue.js applications powered with Vite, this pairs nicely with built in environment &amp;quot;modes&amp;quot;.
Links

Sentry Docs: Environments
Vite Environment Variables</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2be24531f7f7b6ceaa848</video:player_loc>
      <video:duration>233</video:duration>
      <video:publication_date>2022-01-13T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/enable-suspect-commits-in-sentry</loc>
    <lastmod>2022-01-06T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2be244f62335fd44e859c/thumbnail-1-0.png?v=1774372796767</video:thumbnail_loc>
      <video:title>Enable Suspect Commits in Sentry</video:title>
      <video:description>In this lesson, we learn how to link issues to the git commits that likely caused them in the first place. This is very useful, for knowing who best can fix the issue and at what point in the code they&apos;ll need to fix it at. 
Links

Sentry Docs: Suspect Commits
Git Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2be244f62335fd44e859c</video:player_loc>
      <video:duration>373</video:duration>
      <video:publication_date>2022-01-06T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/resolving-issues-in-sentry</loc>
    <lastmod>2022-01-06T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2be249ae74a34289643cc/thumbnail-1-0.png?v=1774372309289</video:thumbnail_loc>
      <video:title>Resolving Issues in Sentry</video:title>
      <video:description>In this lesson, we take a look at the steps you should take in Sentry, once you&apos;ve resolved an issue.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2be249ae74a34289643cc</video:player_loc>
      <video:duration>113</video:duration>
      <video:publication_date>2022-01-06T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/releases-in-sentry-and-enabling-source-maps</loc>
    <lastmod>2022-01-06T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2be244f62335fd44e8599/thumbnail-1-0.png?v=1774372797798</video:thumbnail_loc>
      <video:title>Releases in Sentry and Enabling Source Maps</video:title>
      <video:description>In this lesson, we learn about a few of the advantages of releases in Sentry. We also learn how to utilize releases to include source maps for more useful stacktraces.
Links

Sentry Docs: Releases
Sentry Docs: Source Maps
Vite Sentry Plugin</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2be244f62335fd44e8599</video:player_loc>
      <video:duration>553</video:duration>
      <video:publication_date>2022-01-06T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/capture-your-first-error-with-sentry</loc>
    <lastmod>2022-01-06T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2be24531f7f7b6ceaa846/thumbnail-1-0.png?v=1774372605762</video:thumbnail_loc>
      <video:title>Capture Your First Error with Sentry</video:title>
      <video:description>In this lesson, we capture our first error with Sentry from our Vue.js 3 application. We also learn how to turn browser console logs back on with the logErrors configuration options. Lastly, we get a glimpse of the wealth of data reported for the issue in the Sentry dashboard.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2be24531f7f7b6ceaa846</video:player_loc>
      <video:duration>305</video:duration>
      <video:publication_date>2022-01-06T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-a-sentry-project</loc>
    <lastmod>2022-01-06T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2be249ae74a34289643ce/thumbnail-1-0.png?v=1774372174521</video:thumbnail_loc>
      <video:title>Create a Sentry Project</video:title>
      <video:description>In this lesson, we&apos;re introduced to the Sentry Dashboard where we create our very first project in Sentry, and connect it with our Vue.js codebase.
Links

Vue + Sentry Official Docs
Visual Studio Code
Sentry Docs: Install with Vue
Boilerplate Repo

Boilerplate Install
npx degit vueschool/sentry-course-boilerplate sentry-course</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2be249ae74a34289643ce</video:player_loc>
      <video:duration>284</video:duration>
      <video:publication_date>2022-01-06T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-application-monitoring-and-sentry</loc>
    <lastmod>2022-01-06T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd67761788532c94f331d/69c2be24531f7f7b6ceaa842/thumbnail-1-0.png?v=1774372594790</video:thumbnail_loc>
      <video:title>What is Application Monitoring and Sentry?</video:title>
      <video:description>In this lesson, we introduce Application Monitoring with Sentry. Sentry allows us to know what issues customers are having in real time and provides an intuitive way to understand those issues, direct those issues to the proper party for resolution, and release fixes for them.
Links

Sentry Website</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2be24531f7f7b6ceaa842</video:player_loc>
      <video:duration>230</video:duration>
      <video:publication_date>2022-01-06T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-a-vite-plugin</loc>
    <lastmod>2021-12-30T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a7796a1e75f7ab3e1a63/69ab34d2bb772793aa1797f2/thumbnail-1-0.png?v=1772829830043</video:thumbnail_loc>
      <video:title>Create a Vite Plugin</video:title>
      <video:description>In this lesson, we introduce the basics of creating a Vite plugin by building a markdown to Vue component Vite plugin.
Links 

Vite Docs: Plugin API
Tailwind Typography
Marked</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab34d2bb772793aa1797f2</video:player_loc>
      <video:duration>497</video:duration>
      <video:publication_date>2021-12-30T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/use-a-vite-plugin</loc>
    <lastmod>2021-12-30T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a7796a1e75f7ab3e1a63/69ab34d1bb772793aa1797bb/thumbnail-1-0.png?v=1772829095741</video:thumbnail_loc>
      <video:title>Use a Vite Plugin</video:title>
      <video:description>In this lesson we take a look at some of the official Vite plugins available as well as some community maintained plugins.
Links

Vite Docs: Plugins
Rollup Plugin Compatibility</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab34d1bb772793aa1797bb</video:player_loc>
      <video:duration>160</video:duration>
      <video:publication_date>2021-12-30T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/environment-variables-and-modes-in-vite</loc>
    <lastmod>2021-12-16T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a7796a1e75f7ab3e1a63/69ab34d1bb772793aa1797bd/thumbnail-1-0.png?v=1772829082792</video:thumbnail_loc>
      <video:title>Environment Variables and Modes in Vite</video:title>
      <video:description>In this lesson, we learn about the value of environment variables, how to define them with .env files, and how to access them in the source code. 
When using environment variables in our Vite powered Vue projects we can provide alternate values for different environments and keep secret values secret. 
Links

Official Vite Docs: Environment Variables</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab34d1bb772793aa1797bd</video:player_loc>
      <video:duration>361</video:duration>
      <video:publication_date>2021-12-16T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/glob-imports-in-vite</loc>
    <lastmod>2021-12-09T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a7796a1e75f7ab3e1a63/69ab34d106a15537d04f2be8/thumbnail-1-0.png?v=1772828667369</video:thumbnail_loc>
      <video:title>Glob Imports in Vite</video:title>
      <video:description>In this lesson, we learn how to import multiple modules at one time using a glob pattern. 
Matched modules can be imported either asynchronously as dynamic imports or synchronously as static imports.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab34d106a15537d04f2be8</video:player_loc>
      <video:duration>300</video:duration>
      <video:publication_date>2021-12-09T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/json-and-vite</loc>
    <lastmod>2021-12-09T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a7796a1e75f7ab3e1a63/69ab33d906a15537d04f10c6/thumbnail-1-0.png?v=1772828008888</video:thumbnail_loc>
      <video:title>JSON and Vite</video:title>
      <video:description>In this lesson, we learn how Vite handles JSON imports for our Vue.js projects.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab33d906a15537d04f10c6</video:player_loc>
      <video:duration>212</video:duration>
      <video:publication_date>2021-12-09T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/images-and-vite</loc>
    <lastmod>2021-12-09T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a7796a1e75f7ab3e1a63/69ab33d906a15537d04f10c0/thumbnail-1-0.png?v=1772828280790</video:thumbnail_loc>
      <video:title>Images and Vite</video:title>
      <video:description>In this lesson, we examine how to import static assets like images into a Vite project. 
With Vite, the process is simple and intuitive and for production builds we get some built in optimizations. Such optimizations include hashed filenames for automatic cache busting and small images that are auto inlined with base64 encoding.
Links

Tiny Vue Logo</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab33d906a15537d04f10c0</video:player_loc>
      <video:duration>504</video:duration>
      <video:publication_date>2021-12-09T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/css-and-vite</loc>
    <lastmod>2021-12-02T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a7796a1e75f7ab3e1a63/69ab33d906a15537d04f10c3/thumbnail-1-0.png?v=1772828364901</video:thumbnail_loc>
      <video:title>CSS and Vite</video:title>
      <video:description>In this lesson we take a look at the different options for including CSS styles into our Vite powered projects. Options include using style tags in Vue SFCs, importing stylsheets using a JS import or using a CSS import.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab33d906a15537d04f10c3</video:player_loc>
      <video:duration>366</video:duration>
      <video:publication_date>2021-12-02T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-vite</loc>
    <lastmod>2021-12-02T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a7796a1e75f7ab3e1a63/69ab33d9bb772793aa177c83/thumbnail-1-0.png?v=1772828575306</video:thumbnail_loc>
      <video:title>Introduction to Vite</video:title>
      <video:description>In this lesson, we take a look at what Vite is and the problems that it aims to solve.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab33d9bb772793aa177c83</video:player_loc>
      <video:duration>238</video:duration>
      <video:publication_date>2021-12-02T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/typescript-fundamentals-introduction-to-typescript</loc>
    <lastmod>2021-10-21T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967962cb25141dfa4ce4ba0/69c2a1734f62335fd44ba460/thumbnail-1-0.png?v=1774364553977</video:thumbnail_loc>
      <video:title>Introduction to TypeScript</video:title>
      <video:description>Welcome to the TypeScript Fundamentals course! 
Typescript is a super set of Javascript that provides static typing. With static typing we reap a number of benefits including:

Tighter integration with IDE
Better Refactoring with Errors at Compile Time
And Self Documented Code that&apos;s Easier to Understand

Finally, TypeScript compiles JavaScript, so you can run your TypeScript anywhere you&apos;d run your JavaScript code.
Links

TypeScript Playground</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2a1734f62335fd44ba460</video:player_loc>
      <video:duration>160</video:duration>
      <video:publication_date>2021-10-21T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-setup-attribute</loc>
    <lastmod>2021-09-01T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a438e39380f186489abe/6967eab9b25141dfa4d868b1/thumbnail-1-0.png?v=1768418360514</video:thumbnail_loc>
      <video:title>Script Setup</video:title>
      <video:description>In this lesson, we learn about the script tag setup attribute. This attribute allows us to eliminate much of the boilerplate code associated with the Vue.js Composition API.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6967eab9b25141dfa4d868b1</video:player_loc>
      <video:duration>251</video:duration>
      <video:publication_date>2021-09-01T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/using-provide-inject-with-the-composition-api</loc>
    <lastmod>2021-09-01T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a438e39380f186489abe/6967ea82e39380f1865145ae/thumbnail-1-0.png?v=1768418524208</video:thumbnail_loc>
      <video:title>Using provide / inject with the Composition API</video:title>
      <video:description>In this lesson, we take a look at using provide/inject with the composition API. Provide/inject gives us the ability to share data from a parent component to deeply nested child components without having to pass the data down through multiple components as props.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6967ea82e39380f1865145ae</video:player_loc>
      <video:duration>521</video:duration>
      <video:publication_date>2021-09-01T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-composition-api-watcheffect-function</loc>
    <lastmod>2021-09-01T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a438e39380f186489abe/6967ea64b25141dfa4d860b9/thumbnail-1-0.png?v=1768418415202</video:thumbnail_loc>
      <video:title>The Composition API watchEffect Function</video:title>
      <video:description>In this lesson we compare the Vue Composition API watchEffect function to the watch function and talk about when we should which.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6967ea64b25141dfa4d860b9</video:player_loc>
      <video:duration>171</video:duration>
      <video:publication_date>2021-09-01T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/using-watch-with-the-composition-api</loc>
    <lastmod>2021-09-01T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a438e39380f186489abe/6967e929e39380f1865122d2/thumbnail-1-0.png?v=1768418532805</video:thumbnail_loc>
      <video:title>Using Watch with the Composition API</video:title>
      <video:description>In this lesson, we learn about watching data in the composition API in order to perform side affects whenever that data changes. With the composition API we also have the ability to watch multiple variables at once and the ability to remove a watcher altogether.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6967e929e39380f1865122d2</video:player_loc>
      <video:duration>540</video:duration>
      <video:publication_date>2021-09-01T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/computed-properties-in-the-composition-api</loc>
    <lastmod>2021-09-01T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a438e39380f186489abe/6967e929e39380f1865122b1/thumbnail-1-0.png?v=1768418239450</video:thumbnail_loc>
      <video:title>Computed Properties in the Composition API</video:title>
      <video:description>In this lesson, we learn about utilizing computed properties inside of the setup method. Thankfully, making the leap from using them with the Options API to using them with the Composition API is only a small mental leap that doesn&apos;t take too much conceptual or syntactical change.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6967e929e39380f1865122b1</video:player_loc>
      <video:duration>314</video:duration>
      <video:publication_date>2021-09-01T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-the-vue-js-3-composition-api</loc>
    <lastmod>2021-08-19T05:57:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a438e39380f186489abe/6967e929b25141dfa4d84123/thumbnail-1-0.png?v=1768418145187</video:thumbnail_loc>
      <video:title>Introduction to the Vue.js 3 Composition API</video:title>
      <video:description>In this lesson, we get acquainted with the Composition API which is introduced in Vue.js 3. We summarize briefly what it is, and examine why it&apos;s beneficial. 
The Composition API consists of a number of different Vue.js internals exposed via utility functions. It helps to better organize component code by logical concern and makes it easier to separate component logic from the component template and even reuse that logic across multiple components. Finally, it brings better Typescript support to Vue.js. 
Resources

Composition API Official Docs
Using the Composition API with Typescript
Vue 2 Composition API Plugin</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6967e929b25141dfa4d84123</video:player_loc>
      <video:duration>525</video:duration>
      <video:publication_date>2021-08-19T05:57:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-introduction-to-single-file-components</loc>
    <lastmod>2021-06-23T13:05:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69a1cb3a98dac99517600bea/69a1cb91825d3351d5394779/thumbnail-1-0.png?v=1772211558418</video:thumbnail_loc>
      <video:title>Introduction to Single File Components</video:title>
      <video:description>In this lesson we learn about some of the drawbacks of global components and components defined outside .vue files. We also learn how to structure our Single File Components and get a brief glimpse of how we can use pre-processors like Pug, Jade, or Styles in our Vue.js 3 components.
Watch our lesson on Component Names Best Practices
Watch our course on Modern Javascript ES6 and Beyond
Links

Vue 3 Single File Component Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69a1cb91825d3351d5394779</video:player_loc>
      <video:duration>302</video:duration>
      <video:publication_date>2021-06-23T13:05:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-build-a-notification-vue-component</loc>
    <lastmod>2021-06-23T13:04:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a545b25141dfa4cfd2c7/69c3ed41e018a8d70347aad9/thumbnail-1-0.png?v=1774448819604</video:thumbnail_loc>
      <video:title>Build a Notification Vue Component</video:title>
      <video:description>This lesson is also a component exercise lesson, where we&apos;re going to use everything we&apos;ve learned about Vue.js 3 components so far.
In this component exercise, we&apos;re going to build a fun and useful component that is a notification message.
In the exercise, we&apos;ll be using Semantic UI, we&apos;ll specifically use the message element. We&apos;ve prepared a boilerplate as a starting point for the exercise.
Your goal is to create a component that will be passed some content (the message) and the type of notification (info, error, success). The user should also be able to close the notification.
We encourage you to go back and rewatch videos if you&apos;re stuck, but if want to, you can peak at the solution.
Good luck and have fun!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3ed41e018a8d70347aad9</video:player_loc>
      <video:duration>486</video:duration>
      <video:publication_date>2021-06-23T13:04:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-build-a-github-user-profile-vue-component</loc>
    <lastmod>2021-06-23T13:04:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a545b25141dfa4cfd2c7/69c3ed41123b739cbbb489ee/thumbnail-1-0.png?v=1774455899717</video:thumbnail_loc>
      <video:title>Build a Github User Profile Vue Component</video:title>
      <video:description>This lesson is a component exercise lesson, where we&apos;re going to use everything we&apos;ve learned about Vue.js 3 components so far.
The goal is to create a component that displays a person’s GitHub profile. Including the user&apos;s avatar, name, register date, bio, and followers.
In the exercise, we&apos;ll be using Semantic UI, we&apos;ll specifically use the card element. We&apos;ve prepared a boilerplate as a starting point for the exercise.
The Github API endpoint we&apos;ll be using is: https://api.github.com/users
We encourage you to go back and rewatch videos if you&apos;re stuck, but if want to, you can peak at the solution.
Good luck and have fun!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3ed41123b739cbbb489ee</video:player_loc>
      <video:duration>596</video:duration>
      <video:publication_date>2021-06-23T13:04:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-component-slots</loc>
    <lastmod>2021-06-23T13:04:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a545b25141dfa4cfd2c7/69c3ed41e018a8d70347aadd/thumbnail-1-0.png?v=1774456003779</video:thumbnail_loc>
      <video:title>Vue Component Slots</video:title>
      <video:description>In this lesson, we&apos;ll learn how to pass HTML to our Vue.js 3 components using slots. Slots are an awesome feature of Vue.js, and this lesson will teach you what you need to know to get started.
Links

Starter Files
Slots Exercise Solution</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3ed41e018a8d70347aadd</video:player_loc>
      <video:duration>598</video:duration>
      <video:publication_date>2021-06-23T13:04:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-component-lifecycle-hooks</loc>
    <lastmod>2021-06-23T13:03:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a545b25141dfa4cfd2c7/69c3ed41b365493ac059a260/thumbnail-1-0.png?v=1774448337909</video:thumbnail_loc>
      <video:title>Vue Component Lifecycle Hooks</video:title>
      <video:description>In this lesson, we learn what Vue.js 3 component lifecycle hooks are and how we can use them. If you want to learn more about Vue.js lifecycle hooks, we recommend our Understanding the Vue.js Lifecycle Hooks lesson.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3ed41b365493ac059a260</video:player_loc>
      <video:duration>191</video:duration>
      <video:publication_date>2021-06-23T13:03:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-component-naming-best-practices-in-vue</loc>
    <lastmod>2021-06-23T13:03:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a545b25141dfa4cfd2c7/69c3ed41e018a8d70347aae6/thumbnail-1-0.png?v=1774456021791</video:thumbnail_loc>
      <video:title>Component Naming Best Practices In Vue</video:title>
      <video:description>In this lesson, we&apos;ll learn the best practices of naming our Vue.js 3 components. By following the best practices and official Vue.js Style Guide our applications will be easier to understand for other developers, just by taking a look at the component files.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3ed41e018a8d70347aae6</video:player_loc>
      <video:duration>544</video:duration>
      <video:publication_date>2021-06-23T13:03:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-communication-between-vue-components-with-custom-events</loc>
    <lastmod>2021-06-23T13:03:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a545b25141dfa4cfd2c7/69c3ed41b365493ac059a26e/thumbnail-1-0.png?v=1774449811310</video:thumbnail_loc>
      <video:title>Communication Between Vue Components with Custom Events</video:title>
      <video:description>We know how to pass data to a child component through props in Vue.js 3. In this lesson, we&apos;ll learn how to communicate from a child to a parent component through custom events.
We will use a custom event to notify the plan-picker of which plan has been selected, and make sure we have the right logic in place so the user can only select one plan at a time.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3ed41b365493ac059a26e</video:player_loc>
      <video:duration>587</video:duration>
      <video:publication_date>2021-06-23T13:03:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-global-vs-local-vue-components</loc>
    <lastmod>2021-06-23T13:03:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a545b25141dfa4cfd2c7/69c3ed41e018a8d70347ab01/thumbnail-1-0.png?v=1774448578060</video:thumbnail_loc>
      <video:title>Global vs Local Vue Components</video:title>
      <video:description>Vue.js 3 allows us to register components both globally and locally. In this lesson, we&apos;ll learn the difference between the two types and how it can affect the build size and performance of your application.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3ed41e018a8d70347ab01</video:player_loc>
      <video:duration>275</video:duration>
      <video:publication_date>2021-06-23T13:03:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-nested-components-in-vue</loc>
    <lastmod>2021-06-23T13:03:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a545b25141dfa4cfd2c7/69c3ed41e018a8d70347ab05/thumbnail-1-0.png?v=1774448510026</video:thumbnail_loc>
      <video:title>Nested Components In Vue</video:title>
      <video:description>Vue.js 3 components allow us to encapsulate functionality and easily reuse them in multiple places in our applications. It is common to have components inside other components to compose the bigger features of our apps.
In this lesson, we&apos;ll learn how we can create a plan-picker component, to easily display all our plans wherever we want.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3ed41e018a8d70347ab05</video:player_loc>
      <video:duration>168</video:duration>
      <video:publication_date>2021-06-23T13:03:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-reusable-components-with-props</loc>
    <lastmod>2021-06-23T13:03:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a545b25141dfa4cfd2c7/69c3ed42123b739cbbb48a10/thumbnail-1-0.png?v=1774448981599</video:thumbnail_loc>
      <video:title>Reusable Components with Props</video:title>
      <video:description>In this lesson, we&apos;ll see a realistic use case for reusable components and learn about Vue.js 3 component props.
Props are custom HTML attributes that we can register on our components, which allow us to pass data to our components.
Links

Boilerplate and Assets</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3ed42123b739cbbb48a10</video:player_loc>
      <video:duration>544</video:duration>
      <video:publication_date>2021-06-23T13:03:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-component-template</loc>
    <lastmod>2021-06-23T13:03:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a545b25141dfa4cfd2c7/69c3ed41b365493ac059a25e/thumbnail-1-0.png?v=1774448281539</video:thumbnail_loc>
      <video:title>Vue Component Template</video:title>
      <video:description>In this lesson, we&apos;re going to learn about component templates in Vue 3. The template is where we define our HTML and general markup for our component. We also bind our component&apos;s data to the DOM in the template.
In Vue.js, we can define our template in a few different ways. In this lesson, we&apos;ll move away from the inline template and use the x-template technique, which is great when you&apos;re getting started.
You can read more about Vue&apos;s Template Syntax in the documentation.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3ed41b365493ac059a25e</video:player_loc>
      <video:duration>136</video:duration>
      <video:publication_date>2021-06-23T13:03:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-3-intro-to-components</loc>
    <lastmod>2021-06-23T13:02:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a545b25141dfa4cfd2c7/69c3ed41e018a8d70347aae4/thumbnail-1-0.png?v=1774448438299</video:thumbnail_loc>
      <video:title>Intro to Vue 3 Components</video:title>
      <video:description>In this lesson, we&apos;ll learn about Vue components. We&apos;ll get an introduction to what a component is, why we need components, and how we can create and use a component in our Vue.js 3 applications. 
Links

Starter Files</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3ed41e018a8d70347aae4</video:player_loc>
      <video:duration>220</video:duration>
      <video:publication_date>2021-06-23T13:02:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/router-and-the-composition-api</loc>
    <lastmod>2021-06-09T12:16:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f5276a218061ab3454f0/thumbnail-1-0.png?v=1757694151362</video:thumbnail_loc>
      <video:title>Router and the Composition API</video:title>
      <video:description>In this lesson (optional), we take a look at how to work with Vue Router with the Composition API. While Vue Router provides a few helper functions, available as imports, to access the router from within the setup function, much of Vue Router remains unchanged. 
This lesson is not essential to being successful with Vue Router, so if you are not interested in working with the composition API at this time, consider yourself done with the course. 
Thanks for watching!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f5276a218061ab3454f0</video:player_loc>
      <video:duration>495</video:duration>
      <video:publication_date>2021-06-09T12:16:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/extending-router-link-for-external-urls</loc>
    <lastmod>2021-06-09T12:15:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f51a6a218061ab3453c4/thumbnail-1-0.png?v=1757694091891</video:thumbnail_loc>
      <video:title>Extending Router Link for External URLs</video:title>
      <video:description>In this lesson, we wrap Vue Router&apos;s router-link component with a custom app-link component that is able to handle bother internal and external URLs. This approach allows not just for intuitive handling of external and internal links but makes links throughout your app easily extensible from one place.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f51a6a218061ab3453c4</video:player_loc>
      <video:duration>511</video:duration>
      <video:publication_date>2021-06-09T12:15:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/router-query-params</loc>
    <lastmod>2021-06-09T12:15:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f519b21dc579f88ed39a/thumbnail-1-0.png?v=1757694036378</video:thumbnail_loc>
      <video:title>Router Query Params</video:title>
      <video:description>In this lesson, we learn about query params in Vue Router. Query params can be used for a number of different things, including storing search parameters for a search results page or, in our case, storing the path of a route to redirect to after user login.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f519b21dc579f88ed39a</video:player_loc>
      <video:duration>425</video:duration>
      <video:publication_date>2021-06-09T12:15:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/route-meta-fields</loc>
    <lastmod>2021-06-09T12:14:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f50bb21dc579f88ed293/thumbnail-1-0.png?v=1757693979150</video:thumbnail_loc>
      <video:title>Route Meta Fields</video:title>
      <video:description>In this lesson, we take a look at Vue Router&apos;s route meta fields and their ability to attach arbitrary information to a route. 
A common use case for route meta fields is to mark some routes as protected. We implement just this for the travel app to see route meta fields in action.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f50bb21dc579f88ed293</video:player_loc>
      <video:duration>737</video:duration>
      <video:publication_date>2021-06-09T12:14:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/scroll-behavior</loc>
    <lastmod>2021-06-09T12:14:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f50a6a218061ab345292/thumbnail-1-0.png?v=1757693908504</video:thumbnail_loc>
      <video:title>Scroll Behavior</video:title>
      <video:description>In this lesson, we learn how to customize the scroll behavior between route changes in Vue Router.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f50a6a218061ab345292</video:player_loc>
      <video:duration>289</video:duration>
      <video:publication_date>2021-06-09T12:14:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/route-guards</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f5006a218061ab3451ea/thumbnail-1-0.png?v=1757693848368</video:thumbnail_loc>
      <video:title>Route Guards</video:title>
      <video:description>In this lesson, we further solidify our 404 pages by making sure they work for destination pages. This is necessary as certain urls will match the destination.show route but there will not be a corresponding destination existant to show.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f5006a218061ab3451ea</video:player_loc>
      <video:duration>272</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/404-not-found-page</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f4f7b21dc579f88ed11d/thumbnail-1-0.png?v=1757693761719</video:thumbnail_loc>
      <video:title>Learn How to Handle 404 Not Found</video:title>
      <video:description>In this lesson, we wire up a Not Found so that users get a helpful not found message when they visit a route that doesn&apos;t exist.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f4f7b21dc579f88ed11d</video:player_loc>
      <video:duration>220</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/route-transitions</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f4f6373a93b51046e2f1/thumbnail-1-0.png?v=1757692646936</video:thumbnail_loc>
      <video:title>Route Transitions</video:title>
      <video:description>In this lesson, we take advantage of the SPA architecture and Vue.js transitions to transition our page navigations, making them look and feel more like native applications. While we&apos;ve settled on a simple fade transition the possibilities for page transitions with Vue.js and Vue Router are endless!
Links

Vue Router Docs - Route Transitions</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f4f6373a93b51046e2f1</video:player_loc>
      <video:duration>422</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/go-back</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f4f6373a93b51046e2db/thumbnail-1-0.png?v=1757692587741</video:thumbnail_loc>
      <video:title>Go Back</video:title>
      <video:description>In this lesson, we use Vue Router&apos;s back method to create a simple yet fully functional back button. Clicking the custom back button is the equivalent of clicking the back button in the browser. 
Links

Vue Router Docs - Back</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f4f6373a93b51046e2db</video:player_loc>
      <video:duration>141</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/nested-routes</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f4eab21dc579f88ecfd6/thumbnail-1-0.png?v=1757692524468</video:thumbnail_loc>
      <video:title>Nested Routes</video:title>
      <video:description>In this lesson, we improve the user experience by nesting the Experience page inside of it&apos;s parent desination. This is accomplished with Vue Router&apos;s nested routes feature.
Links

Vue Router Docs - Nested Routes</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f4eab21dc579f88ecfd6</video:player_loc>
      <video:duration>236</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/experience-cards</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f4e96a218061ab344f9e/thumbnail-1-0.png?v=1757692462402</video:thumbnail_loc>
      <video:title>Experience Cards</video:title>
      <video:description>In this lesson, we create an Experience Card component to display each of the different experiences for each Vue School Travel App destination. We loop over each experience for the different destinations using Vue&apos;s v-for and link to an Experience page with router link.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f4e96a218061ab344f9e</video:player_loc>
      <video:duration>708</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/route-props</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f4e3b21dc579f88ecf28/thumbnail-1-0.png?v=1757692391216</video:thumbnail_loc>
      <video:title>Route Props</video:title>
      <video:description>In this lesson, we decouple our Vue.js page components from the route params via component props. Vue Router 4 provides multiple ways of doing this: from setting the props property on the route record to true and automatically passing all params as props, setting the props property to a static object to provide static props, or setting it to a function that returns the desired props.
Setting the route records props property to a function is the most versatile. It allows you to cast parameters into other types, combine static values with route-based values, and much more. 
Links

Vue Router Docs - Passing Props</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f4e3b21dc579f88ecf28</video:player_loc>
      <video:duration>311</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/reacting-to-param-changes</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f4d86a218061ab344d74/thumbnail-1-0.png?v=1757692303271</video:thumbnail_loc>
      <video:title>Reacting to Param Changes</video:title>
      <video:description>In this lesson, we take a look at a common gotcha when it comes to using route params with Vue Router and how to account for it. Since the same component instance will be reused when navigating between pages registered to use the same component, some Vue lifecycle hooks that you might expect to fire, will not. There is good reason for this, but you must be aware of it and respond appropriately. 
Links

Vue Router Docs - Reacting to Param Changes
Vue 3 Docs - key attribtue
Fetch MDN Docs
Dummy API

⚠️ IMPORTANT: If the dummy api is giving you CORS issues you can simulate the API in your local project by doing the following:  

Provide a JSON file for each location in the public directory (and for the sake of organization in a new api directory) 
Make your async requests to the local endpoints like this: fetch(&quot;/api/brazil.json&quot;)
You can copy the json file contents from this commit in the repo (also notice the repo shows the location where you would store these - @/public/api)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f4d86a218061ab344d74</video:player_loc>
      <video:duration>742</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/clean-up</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f4d7b21dc579f88ece16/thumbnail-1-0.png?v=1757692237240</video:thumbnail_loc>
      <video:title>Clean Up</video:title>
      <video:description>In this lesson, we clean up some lingering boilerplate and stale code. We also cleanup the URL for the destination show pages with SEO in mind.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f4d7b21dc579f88ece16</video:player_loc>
      <video:duration>399</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/named-routes</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f4d26a218061ab344cea/thumbnail-1-0.png?v=1757692183251</video:thumbnail_loc>
      <video:title>Named Routes</video:title>
      <video:description>In this lesson, we examine route names and how they can be useful for identifying routes and updating route paths without having to change any links throughout your application. 
Links

Vue Router Docs - Named Routes</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f4d26a218061ab344cea</video:player_loc>
      <video:duration>214</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/dynamic-routes</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f4c76a218061ab344bda/thumbnail-1-0.png?v=1757692091353</video:thumbnail_loc>
      <video:title>Dynamic Routes</video:title>
      <video:description>In this lesson, we take a look at dynamic routes in Vue Router 4 and how to utlize params to identify different destinations and show them all via a single route and page. 
Links

Vue Router Docs - Dynamic Route Matching With Params</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f4c76a218061ab344bda</video:player_loc>
      <video:duration>547</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/router-link-active-class</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f4c6b21dc579f88ecc89/thumbnail-1-0.png?v=1757692027443</video:thumbnail_loc>
      <video:title>Router Link Active Class</video:title>
      <video:description>In this lesson, we learn how to target links for the currently visited page in order to style them differently from other links. This is common practice and provides a good user experience as it gives them more context about where they are on your site. With Vue.js, all that&apos;s needed is to provide the desired styles on the router-link-active class, and Vue Router takes care of the rest!
Links 

Vue Router Docs Active Class</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f4c6b21dc579f88ecc89</video:player_loc>
      <video:duration>212</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/navigation-component</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f49f373a93b51046db49/thumbnail-1-0.png?v=1757691961235</video:thumbnail_loc>
      <video:title>Navigation Component</video:title>
      <video:description>In this lesson, we extract the links in App.vue to their own dedicated and semantically name component file. We also follow the Vue.js styleguide, calling it TheNavigation since it&apos;s a component that&apos;s only meant to be used throughout the application. 
Links

Vue 3 Styleguide</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f49f373a93b51046db49</video:player_loc>
      <video:duration>101</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/lazy-loading-routes-vue-cli-only</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f49e373a93b51046db1e/thumbnail-1-0.png?v=1757691894252</video:thumbnail_loc>
      <video:title>Lazy Loading Routes (Vue CLI Only)</video:title>
      <video:description>In this lesson, we use dynamic imports to lazy load different javascript chunks per page. This practice keeps the application lightweight and fast, as code is only requested from the server when it is needed.
If you&apos;re using Vite and don&apos;t want to see how lazy loading differs with Vue CLI, you can skip this lesson (suggested). Skip to next lesson using Vite: Navigation Component Lesson.
Links

Vue Router 4 Docs - Lazy Loading Routes
Vue School Lesson - Load Vue Components Asyncronously</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f49e373a93b51046db1e</video:player_loc>
      <video:duration>395</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/lazy-loading-routes-vite-only</loc>
    <lastmod>2021-06-03T10:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f49e6a218061ab3448b7/thumbnail-1-0.png?v=1757520272940</video:thumbnail_loc>
      <video:title>Lazy Loading Routes (Vite Only)</video:title>
      <video:description>In this lesson, we use dynamic imports to lazy load different javascript chunks per page. This practice keeps the application lightweight and fast, as code is only requested from the server when it is needed.
If you&apos;re using Vue CLI and don&apos;t want to see how lazy loading works with Vite, you can skip this lesson (not suggested). Skip to next lesson on Lazy Loading with Vue CLI.
Links

Vue Router 4 Docs - Lazy Loading Routes
Vue School Lesson - Load Vue Components Asyncronously</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f49e6a218061ab3448b7</video:player_loc>
      <video:duration>332</video:duration>
      <video:publication_date>2021-06-03T10:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/history-mode</loc>
    <lastmod>2021-06-03T10:43:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f49e6a218061ab3448b5/thumbnail-1-0.png?v=1757517783747</video:thumbnail_loc>
      <video:title>History Mode: HTML5 vs Hash</video:title>
      <video:description>What&apos;s the difference between HTML5 mode and Hash mode in Vue Router 4? In this lesson we find out! We also examine how to enable each one, the pros and cons of each, and when it&apos;s appropriate to use which.
Links 

Vue Router History Mode Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f49e6a218061ab3448b5</video:player_loc>
      <video:duration>239</video:duration>
      <video:publication_date>2021-06-03T10:43:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/adding-routes-and-content</loc>
    <lastmod>2021-06-03T10:43:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f49eb21dc579f88ec927/thumbnail-1-0.png?v=1757517684318</video:thumbnail_loc>
      <video:title>Adding Routes and Content</video:title>
      <video:description>In this lesson, we import project assets, like images, a stylesheet, and the data, into the Vue.js application via a dowload. Then we start making our own routes, pages, and links for the Vue School Travel App destinations using Vue Router 4. 
Links

Starter Files</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f49eb21dc579f88ec927</video:player_loc>
      <video:duration>702</video:duration>
      <video:publication_date>2021-06-03T10:43:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-scaffolded-codebase-vue-cli-only</loc>
    <lastmod>2021-06-03T10:43:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f49e373a93b51046db20/thumbnail-1-0.png?v=1757516606124</video:thumbnail_loc>
      <video:title>The Scaffolded Codebase (Vue CLI Only)</video:title>
      <video:description>In this lesson, we take a look at the files and directories that Vue CLI created for us. We especially zone in on the Vue Router 4 related code such as the Vue Router setup, route record registration, and the router-link and router-view components. This code was generated because we chose to include Vue Router in the project during installation.
If you already setup the project with Vite and don&apos;t want to use Vue CLI as an alternative, you can skip this lesson (suggested).
Skip to next lesson using Vite.
Links

Vue Router Docs</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f49e373a93b51046db20</video:player_loc>
      <video:duration>349</video:duration>
      <video:publication_date>2021-06-03T10:43:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/creating-the-project-with-vue-cli-vue-cli-only</loc>
    <lastmod>2021-06-03T10:43:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f49e6a218061ab3448af/thumbnail-1-0.png?v=1757516483154</video:thumbnail_loc>
      <video:title>Creating the Project with Vue CLI (Vue CLI Only)</video:title>
      <video:description>In this lesson, we use the more traditional build tool Vue CLI. Vue CLI is a great tool for rapid Vue.js development and will guide you through setting up the Vue School Travel App project. 
If you already setup the project with Vite and don&apos;t want to use Vue CLI as an alternative, you can skip this lesson (suggested).
Skip to next lesson using Vite.
Links

Vue CLI Docs
Alternative setup with Vite</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f49e6a218061ab3448af</video:player_loc>
      <video:duration>346</video:duration>
      <video:publication_date>2021-06-03T10:43:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/installing-and-setting-up-vue-router-with-vite-vite-only</loc>
    <lastmod>2021-06-03T10:43:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6880e76606c9d53d5d05d555/6880e78608716f7a30ab11fe/thumbnail-1-0.png?v=1753281315480</video:thumbnail_loc>
      <video:title>Installing and Setting Up Vue Router with Vite (Vite Only)</video:title>
      <video:description>In this lesson, we&apos;ll learn how to install and set up the project with Vite.
Unlike Vue CLI, Vite does not provide an option to setup Vue Router for you. That&apos;s ok though, because it allows us a great opportunity to see how to install Vue Router 4 from scratch. This will be helpful not only for the projects you create using Vite but also anytime you need to add Vue Router to an existing project.
Links

Vue Router Docs
Vite Resolving File Extensions
</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6880e78608716f7a30ab11fe</video:player_loc>
      <video:duration>719</video:duration>
      <video:publication_date>2021-06-03T10:43:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-scaffolded-codebase-vite-only</loc>
    <lastmod>2021-06-03T10:43:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f49eb21dc579f88ec923/thumbnail-1-0.png?v=1757516329299</video:thumbnail_loc>
      <video:title>The Scaffolded Codebase (Vite Only)</video:title>
      <video:description>In this lesson, we take a look at the files that Vite produces for us. We also configure Vite to support the @ alias that you&apos;re probably used to using if you&apos;re coming from the Vue CLI. 
Links

Vite Config Options
Setup Attribute Release Notes</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f49eb21dc579f88ec923</video:player_loc>
      <video:duration>319</video:duration>
      <video:publication_date>2021-06-03T10:43:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/creating-the-project-with-vite-vite-only</loc>
    <lastmod>2021-06-03T10:43:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/68b6f1d3373a93b51046a9ac/68b6f49e373a93b51046db1c/thumbnail-1-0.png?v=1757516190866</video:thumbnail_loc>
      <video:title>Creating the Project with Vite (Vite Only)</video:title>
      <video:description>In this lesson, we&apos;ll use the modern build tool Vite, to scaffold our Vue.js project. Vite provides a faster and leaner development experience that is well suited to our Vue School Travel App.
Links

Vite

Notes
Since this video was created, an official scaffolding tool for Vue.js projects with Vite has been released. You can get a more comprehensive Vue + Vite setup by running:
npm init vue@latest</video:description>
      <video:player_loc>https://play.gumlet.io/embed/68b6f49e373a93b51046db1c</video:player_loc>
      <video:duration>191</video:duration>
      <video:publication_date>2021-06-03T10:43:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-vue-router-4</loc>
    <lastmod>2021-06-03T10:32:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6880e76606c9d53d5d05d555/6880e786078fd918c8cc7660/thumbnail-1-0.png?v=1753281524427</video:thumbnail_loc>
      <video:title>Introduction to Vue Router 4</video:title>
      <video:description>In this lesson, we take a look at the Vue.js application we&apos;re going to build together throughout this course. You&apos;ll see Vue Router 4 in action as we browse through the application pages, use a back button, see smooth page transitions and more!
Links 

Visual Studio Code
Chrome Dev Tools
Finished Application
Starter Files
</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6880e786078fd918c8cc7660</video:player_loc>
      <video:duration>227</video:duration>
      <video:publication_date>2021-06-03T10:32:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/using-vue-dev-tools-with-vuejs-3</loc>
    <lastmod>2021-04-27T12:25:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679604e39380f1864729e0/69c2d8899ae74a342898f0a2/thumbnail-1-0.png?v=1774377773692</video:thumbnail_loc>
      <video:title>Using Vue Devtools with Vue.js 3</video:title>
      <video:description>The Vue Devtools is an invaluable browser extension to Chrome and Firefox that will speed up your development and bug hunting.
Vue Devtools 6 supports Vue 3 and as of right now it&apos;s in beta and available for Chrome and Firefox.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d8899ae74a342898f0a2</video:player_loc>
      <video:duration>277</video:duration>
      <video:publication_date>2021-04-27T12:25:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/computed-properties-in-vue-3</loc>
    <lastmod>2021-03-24T10:22:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679604e39380f1864729e0/69c2d889531f7f7b6ced5cbd/thumbnail-1-0.png?v=1774377523726</video:thumbnail_loc>
      <video:title>Computed Properties in Vue 3</video:title>
      <video:description>Computed properties are another powerful feature from Vue that allows us to transform or perform calculations on our data and then easily reuse the result as an up-to-date variable in our template. Computed properties are very useful and should replace complex in-template expressions.
While this explanation without any code examples might not make much sense right now, it surely will after you&apos;ve watched this lesson about computed properties.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d889531f7f7b6ced5cbd</video:player_loc>
      <video:duration>270</video:duration>
      <video:publication_date>2021-03-24T10:22:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/dynamic-css-classes-with-vue-3</loc>
    <lastmod>2021-03-24T10:13:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679604e39380f1864729e0/69c2d8899ae74a342898f0a0/thumbnail-1-0.png?v=1774377862189</video:thumbnail_loc>
      <video:title>Dynamic CSS classes with Vue 3</video:title>
      <video:description>A common need and use case for attribute bindings is to manipulate the look of elements with CSS classes or style attributes. 
To make this task easier than ever, Vue provides special enhancements when v-bind is used with the class or style attribute. In this lesson, we&apos;re learning how to apply dynamic classes based on our Vue data.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d8899ae74a342898f0a0</video:player_loc>
      <video:duration>472</video:duration>
      <video:publication_date>2021-03-24T10:13:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/html-attribute-binding-in-vue-3</loc>
    <lastmod>2021-03-24T10:21:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679604e39380f1864729e0/69c2d8894f62335fd4513567/thumbnail-1-0.png?v=1774377414728</video:thumbnail_loc>
      <video:title>HTML Attribute Binding in Vue 3</video:title>
      <video:description>We know how to render data in the DOM with Vue 3, and now it&apos;s time to take a closer look at how we can bind HTML attributes to our Vue data. 
This is achieved with Vue&apos;s v-bind directive and would let us change the href (or any other HTML attribute) of a link or swap out an image if we need to.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d8894f62335fd4513567</video:player_loc>
      <video:duration>175</video:duration>
      <video:publication_date>2021-03-24T10:21:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/conditional-rendering-in-vue-3</loc>
    <lastmod>2021-03-24T10:11:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679604e39380f1864729e0/69c2d8894f62335fd451356d/thumbnail-1-0.png?v=1774377706920</video:thumbnail_loc>
      <video:title>Conditional Rendering in Vue 3</video:title>
      <video:description>Conditional rendering is essential on any dynamic website. Vue.js offers two ways to render elements on our page conditionally, and in this lesson we&apos;re learning how the v-if and v-else directives work.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d8894f62335fd451356d</video:player_loc>
      <video:duration>253</video:duration>
      <video:publication_date>2021-03-24T10:11:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/methods-in-vue-3</loc>
    <lastmod>2021-03-24T10:11:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679604e39380f1864729e0/69c2d8894f62335fd4513569/thumbnail-1-0.png?v=1774377762681</video:thumbnail_loc>
      <video:title>Methods in Vue 3</video:title>
      <video:description>It is handy to run JavaScript expressions directly in the template or a directive sometimes - but not always. 
When the expression is getting too verbose, or we need the same logic in multiple places, we can extract the logic to a function and fire the function instead. These functions are called methods and allow us to DRY up the code.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d8894f62335fd4513569</video:player_loc>
      <video:duration>318</video:duration>
      <video:publication_date>2021-03-24T10:11:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/user-events-in-vue-3</loc>
    <lastmod>2021-03-24T10:10:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6880e76606c9d53d5d05d555/6880e78606c9d53d5d05d859/thumbnail-1-0.png?v=1753280814098</video:thumbnail_loc>
      <video:title>User Events in Vue 3</video:title>
      <video:description>In this lesson, we&apos;ll learn how to respond to and handle user events with Vue&apos;s v-on directive.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6880e78606c9d53d5d05d859</video:player_loc>
      <video:duration>441</video:duration>
      <video:publication_date>2021-03-24T10:10:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/user-inputs-vue-devtools-in-vue-3</loc>
    <lastmod>2021-03-24T10:10:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6880e76606c9d53d5d05d555/6880e78606c9d53d5d05d857/thumbnail-1-0.png?v=1753280693603</video:thumbnail_loc>
      <video:title>User Inputs in Vue 3</video:title>
      <video:description>We will continue to learn about the reactivity system in this lesson. You&apos;ll learn how to handle user inputs with the v-model directive. v-model gives super powers to text inputs, checkboxes, radio buttons, selects, and more!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6880e78606c9d53d5d05d857</video:player_loc>
      <video:duration>667</video:duration>
      <video:publication_date>2021-03-24T10:10:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/list-rendering-in-vue-3</loc>
    <lastmod>2021-03-24T10:09:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6880e76606c9d53d5d05d555/6880e786078fd918c8cc7663/thumbnail-1-0.png?v=1753280550095</video:thumbnail_loc>
      <video:title>List Rendering in Vue 3</video:title>
      <video:description>In almost all applications there is a need to iterate or loop through a list of items and render them on the page. 
In this lesson, we&apos;re taking a closer look at Vue&apos;s v-for directive, which lets us iterate through arrays and objects in an elegant matter.
Links

Tips and Gotchas for Using key with v-for in Vue.js 3
</video:description>
      <video:player_loc>https://play.gumlet.io/embed/6880e786078fd918c8cc7663</video:player_loc>
      <video:duration>466</video:duration>
      <video:publication_date>2021-03-24T10:09:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-js-3-template-syntax-and-expressions</loc>
    <lastmod>2021-03-24T10:08:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679604e39380f1864729e0/69c2d8894f62335fd451356b/thumbnail-1-0.png?v=1774377428436</video:thumbnail_loc>
      <video:title>Vue.js 3 template Syntax and Expressions</video:title>
      <video:description>In the previous lesson, we briefly touched upon the templating syntax to bind Vue data to the DOM.
In this lesson, we&apos;ll dive deeper into Vue&apos;s templating syntax and learn how to run JavaScript expressions directly in the template.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d8894f62335fd451356b</video:player_loc>
      <video:duration>146</video:duration>
      <video:publication_date>2021-03-24T10:08:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/getting-started-with-vue-js-3</loc>
    <lastmod>2021-03-24T10:07:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679604e39380f1864729e0/69c2d8894f62335fd4513564/thumbnail-1-0.png?v=1774377600542</video:thumbnail_loc>
      <video:title>Getting Started with Vue.js 3</video:title>
      <video:description>In the very first lesson of our Vue.js 3 Fundamentals course, besides of learning how to easily add Vue.js from a CDN to our site we&apos;re going to take a look at Vue.js enjoyable and automatic reactivity system.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d8894f62335fd4513564</video:player_loc>
      <video:duration>232</video:duration>
      <video:publication_date>2021-03-24T10:07:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/dynamic-named-slots</loc>
    <lastmod>2020-12-30T11:55:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ae10b25141dfa4d0e115/69c2ea4dc99612552fced5d4/thumbnail-1-0.png?v=1774382154477</video:thumbnail_loc>
      <video:title>Dynamic Named Slots</video:title>
      <video:description>In this lesson, we&apos;ll learn how we can use dynamic slot names, so we can determine which slot to render based on a variable.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ea4dc99612552fced5d4</video:player_loc>
      <video:duration>444</video:duration>
      <video:publication_date>2020-12-30T11:55:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/composing-components</loc>
    <lastmod>2020-12-24T15:07:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ae10b25141dfa4d0e115/69c2ea4dc99612552fced5c5/thumbnail-1-0.png?v=1774381902186</video:thumbnail_loc>
      <video:title>Composing Components</video:title>
      <video:description>In this lesson, we&apos;ll extend the example from the previous lesson and learn how to pass methods to slots, so we can compose components without repeating our logic.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ea4dc99612552fced5c5</video:player_loc>
      <video:duration>162</video:duration>
      <video:publication_date>2020-12-24T15:07:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/using-scoped-slots-with-functions</loc>
    <lastmod>2020-12-24T15:06:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ae10b25141dfa4d0e115/69c2ea4dc99612552fced5cc/thumbnail-1-0.png?v=1774382040994</video:thumbnail_loc>
      <video:title>Using Scoped Slots with Functions</video:title>
      <video:description>In this lesson, we&apos;ll learn how to pass methods to scoped slots, so we can make our slot-based component more interactive.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ea4dc99612552fced5cc</video:player_loc>
      <video:duration>222</video:duration>
      <video:publication_date>2020-12-24T15:06:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/refactor-user-list-component-using-slots</loc>
    <lastmod>2020-11-12T12:07:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ae10b25141dfa4d0e115/69c2ea4d36217516b58fe818/thumbnail-1-0.png?v=1774382139939</video:thumbnail_loc>
      <video:title>Refactor User List Component Using Slots</video:title>
      <video:description>In this lesson, we&apos;ll learn about component composition using nested slots.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ea4d36217516b58fe818</video:player_loc>
      <video:duration>338</video:duration>
      <video:publication_date>2020-11-12T12:07:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/passing-data-to-the-parent-using-scoped-slot</loc>
    <lastmod>2020-11-12T12:05:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ae10b25141dfa4d0e115/69c2ea4d36217516b58fe816/thumbnail-1-0.png?v=1774381939790</video:thumbnail_loc>
      <video:title>Passing Data to the Parent Using Scoped Slot</video:title>
      <video:description>In this lesson, we&apos;ll learn how to use scoped slots to pass data to the parent component. Scoped slots allow us to not only be flexible on which data we show, but we can also customize the appearance.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ea4d36217516b58fe816</video:player_loc>
      <video:duration>218</video:duration>
      <video:publication_date>2020-11-12T12:05:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/fake-scoped-slots-with-functions</loc>
    <lastmod>2020-10-29T15:35:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ae10b25141dfa4d0e115/69c2ea4d3b13b4783935d2b1/thumbnail-1-0.png?v=1774382024827</video:thumbnail_loc>
      <video:title>Fake Scoped Slots with Functions</video:title>
      <video:description>In this lesson, we&apos;ll start learning about scoped slots. To gain a deeper understanding of scoped slots, we&apos;ll learn how to create fake scoped slots with functions before using actual scoped slots.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ea4d3b13b4783935d2b1</video:player_loc>
      <video:duration>341</video:duration>
      <video:publication_date>2020-10-29T15:35:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-a-user-list-component</loc>
    <lastmod>2020-10-29T15:34:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ae10b25141dfa4d0e115/69c2ea4d36217516b58fe811/thumbnail-1-0.png?v=1774382105794</video:thumbnail_loc>
      <video:title>Create a User List Component</video:title>
      <video:description>In this lesson, we’re going to see how we can use multiple named slots to display a loading and an error state in a  component.
Lesson Resources

Starting point</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ea4d36217516b58fe811</video:player_loc>
      <video:duration>259</video:duration>
      <video:publication_date>2020-10-29T15:34:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/named-slots</loc>
    <lastmod>2020-10-22T15:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ae10b25141dfa4d0e115/69c2ea4d36217516b58fe814/thumbnail-1-0.png?v=1774382096381</video:thumbnail_loc>
      <video:title>Named Slots</video:title>
      <video:description>In this lesson, we&apos;ll learn about named slots. Named slots allow us to use multiple slots in one component.
We&apos;ll also learn how to define fallback content for our slots.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ea4d36217516b58fe814</video:player_loc>
      <video:duration>226</video:duration>
      <video:publication_date>2020-10-22T15:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/using-slots</loc>
    <lastmod>2020-10-08T12:19:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ae10b25141dfa4d0e115/69c2ea4dc99612552fced5c3/thumbnail-1-0.png?v=1774381949151</video:thumbnail_loc>
      <video:title>Using Slots</video:title>
      <video:description>In this lesson, we&apos;ll dive deeper into how slots are helpful when we need to pass HTML and other Vue.js components to our components.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ea4dc99612552fced5c3</video:player_loc>
      <video:duration>235</video:duration>
      <video:publication_date>2020-10-08T12:19:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-are-slots</loc>
    <lastmod>2020-10-08T12:19:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ae10b25141dfa4d0e115/69c2ea4dc99612552fced5d6/thumbnail-1-0.png?v=1774382052175</video:thumbnail_loc>
      <video:title>What are Slots</video:title>
      <video:description>In this lesson, we&apos;ll learn what slots are and the basics of how to use slots to create reusable Vue.js components.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ea4dc99612552fced5d6</video:player_loc>
      <video:duration>228</video:duration>
      <video:publication_date>2020-10-08T12:19:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-vue-apollo</loc>
    <lastmod>2020-10-01T09:41:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2a3e0531f7f7b6ce7ff24/69c2a4054f62335fd44be2b7/thumbnail-1-0.png?v=1774366774207</video:thumbnail_loc>
      <video:title>What is Vue-Apollo?</video:title>
      <video:description>This course uses Vue-Apollo to connect to the SpaceX GraphQL API.
In this lesson, we&apos;ll take a look at what Vue-Apollo and the Apollo client is.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2a4054f62335fd44be2b7</video:player_loc>
      <video:duration>124</video:duration>
      <video:publication_date>2020-10-01T09:41:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-vue-3</loc>
    <lastmod>2020-09-08T12:55:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2aaab4f62335fd44c87de/69c2aacd4f62335fd44c8a8b/thumbnail-1-0.png?v=1774365706547</video:thumbnail_loc>
      <video:title>Introduction to Vue 3</video:title>
      <video:description>Vue 3 is smaller and faster than Vue 2, it exposes some lower lever APIs, and it comes with improved TypeScript support and a more maintainable codebase.
In this lesson, we&apos;ll introduce the third version of Vue.js and give an overview of what the course covers, and what you&apos;ll learn from the course.
Lesson Resources

Vue.js Fundamentals course
Vue.js Composition API course</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2aacd4f62335fd44c8a8b</video:player_loc>
      <video:duration>123</video:duration>
      <video:publication_date>2020-09-08T12:55:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-graphql</loc>
    <lastmod>2020-07-30T04:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69bfd8714fe0bcfaae534743/69c1bbc6c98b51e9c563d497/thumbnail-1-0.png?v=1774304565408</video:thumbnail_loc>
      <video:title>What is GraphQL</video:title>
      <video:description>In this lesson, we&apos;ll learn what GraphQL is and what some of the benefits of using GraphQL are.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1bbc6c98b51e9c563d497</video:player_loc>
      <video:duration>242</video:duration>
      <video:publication_date>2020-07-30T04:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-storybook</loc>
    <lastmod>2020-06-11T12:40:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2e1d63fe452f53abc171d/69c2e4d605651df01cd297e6/thumbnail-1-0.png?v=1774380737047</video:thumbnail_loc>
      <video:title>What is Storybook</video:title>
      <video:description>In this lesson, we&apos;ll explain what Storybook is and demonstrate the benefits of having a component library for our Vue.js components.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2e4d605651df01cd297e6</video:player_loc>
      <video:duration>166</video:duration>
      <video:publication_date>2020-06-11T12:40:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-are-functional-components</loc>
    <lastmod>2020-05-14T10:30:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2dfb19ae74a342899af94/69c2e7583fe452f53abc9300/thumbnail-1-0.png?v=1774381243350</video:thumbnail_loc>
      <video:title>What are functional components</video:title>
      <video:description>In this lesson, we&apos;ll start looking at what functional components are and see a demonstration of the performance gains we can get by using functional components where applicable.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2e7583fe452f53abc9300</video:player_loc>
      <video:duration>255</video:duration>
      <video:publication_date>2020-05-14T10:30:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-i18n-number-localization</loc>
    <lastmod>2020-04-23T09:21:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f31fe018a8d7034858c8/69c3f3acb365493ac05a6429/thumbnail-1-0.png?v=1774450129572</video:thumbnail_loc>
      <video:title>Number Localization</video:title>
      <video:description>When it comes to localization, all countries do not display the currency and dates in the same way, even if they have the same language.
In this lesson, we&apos;ll learn how to configure different number formatting with the vue-i18n plugin to support the differences.
Lesson Resources

Intl.NumberFormat MDN documentation</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3f3acb365493ac05a6429</video:player_loc>
      <video:duration>292</video:duration>
      <video:publication_date>2020-04-23T09:21:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/format-dates-and-time</loc>
    <lastmod>2020-01-30T12:37:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f31fe018a8d7034858c8/69c3f3acb365493ac05a642f/thumbnail-1-0.png?v=1774450346229</video:thumbnail_loc>
      <video:title>Format Dates and Time</video:title>
      <video:description>One thing that can be challenging when working with a multilingual website is to manage the different date and time formats. In this lesson, we&apos;ll learn some powerful techniques that make it easy to work with vue-i18n and the different date and time formats.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3f3acb365493ac05a642f</video:player_loc>
      <video:duration>436</video:duration>
      <video:publication_date>2020-01-30T12:37:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/pluralisation</loc>
    <lastmod>2020-01-23T08:34:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f31fe018a8d7034858c8/69c3f3ace018a8d70348696b/thumbnail-1-0.png?v=1774450032334</video:thumbnail_loc>
      <video:title>Pluralisation</video:title>
      <video:description>In this lesson, we&apos;ll learn how to use vue-i18n and translate with pluralization. We&apos;ll learn how to cover singular and plural, how to pass in and use the actual count, and also take a look at how we would handle irregular pluralization.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3f3ace018a8d70348696b</video:player_loc>
      <video:duration>260</video:duration>
      <video:publication_date>2020-01-23T08:34:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/named-formatting</loc>
    <lastmod>2020-01-17T11:46:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f31fe018a8d7034858c8/69c3f3acb365493ac05a642d/thumbnail-1-0.png?v=1774449976917</video:thumbnail_loc>
      <video:title>Named Formatting</video:title>
      <video:description>In this lesson, we&apos;ll learn how to use named formatting with vue-i18n to include dynamic text in our translations.
Named formatting are essentially variables in our translation files that we can use to insert dynamic data.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3f3acb365493ac05a642d</video:player_loc>
      <video:duration>168</video:duration>
      <video:publication_date>2020-01-17T11:46:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/getting-the-locale-from-the-browser</loc>
    <lastmod>2020-01-17T11:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f31fe018a8d7034858c8/69c3f3ace018a8d70348696d/thumbnail-1-0.png?v=1774450120199</video:thumbnail_loc>
      <video:title>Getting the Locale from the Browser</video:title>
      <video:description>In this lesson, we&apos;ll learn another technique to detect which language a user prefers. We&apos;ll learn how to get the user&apos;s locale directly from the browser.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3f3ace018a8d70348696d</video:player_loc>
      <video:duration>225</video:duration>
      <video:publication_date>2020-01-17T11:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/persist-locale-changes</loc>
    <lastmod>2020-01-09T09:06:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f31fe018a8d7034858c8/69c3f3acb365493ac05a6432/thumbnail-1-0.png?v=1774450061968</video:thumbnail_loc>
      <video:title>Persist Locale Changes</video:title>
      <video:description>In the previous lesson, we learned how to change the active locale programmatically and how users can set their preferred locale through the user interface. However, we didn&apos;t persist the changes, which offers a bad user experience.
In this lesson, we&apos;ll learn how to persist the locale change with local storage, so our users don&apos;t have to choose their language on every page load.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3f3acb365493ac05a6432</video:player_loc>
      <video:duration>179</video:duration>
      <video:publication_date>2020-01-09T09:06:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/changing-locale</loc>
    <lastmod>2020-01-09T09:06:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f31fe018a8d7034858c8/69c3f3ac123b739cbbb54e7c/thumbnail-1-0.png?v=1774449860124</video:thumbnail_loc>
      <video:title>Changing Locale</video:title>
      <video:description>It is important that users are able to change the language on our website when we support multiple languages.
In this lesson, we&apos;ll learn how to change the locale programmatically and from the user interface.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3f3ac123b739cbbb54e7c</video:player_loc>
      <video:duration>96</video:duration>
      <video:publication_date>2020-01-09T09:06:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/translations-in-action</loc>
    <lastmod>2020-01-02T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f31fe018a8d7034858c8/69c3f3acb365493ac05a642b/thumbnail-1-0.png?v=1774450562217</video:thumbnail_loc>
      <video:title>Translations in Action</video:title>
      <video:description>In this lesson, you&apos;ll learn how to add, modify, and delete translations. We&apos;ll see how we can add additional languages, work directly with JSON files, and also explore the power of Vue CLI when working with i18n.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3f3acb365493ac05a642b</video:player_loc>
      <video:duration>554</video:duration>
      <video:publication_date>2020-01-02T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduce-vue-i18n-through-the-gui</loc>
    <lastmod>2019-12-26T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f31fe018a8d7034858c8/69c3f3adb365493ac05a6468/thumbnail-1-0.png?v=1774450320663</video:thumbnail_loc>
      <video:title>Introduce Vue i18n through the GUI</video:title>
      <video:description>In this lesson, we&apos;ll learn how to install the vue-i18n plugin through the Vue CLI Graphical User Interface (GUI).
The plugin can be installed with npm or yarn

npm install vue-i18n
# OR
yarn add vue-i18n

When using a module system, we must explicitly install the plugin with the Vue.use() method.

import Vue from &apos;vue&apos;
import VueI18n from &apos;vue-i18n&apos;

Vue.use(VueI18n)

For other installation instructions, please see the vue-i18n documentation</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3f3adb365493ac05a6468</video:player_loc>
      <video:duration>396</video:duration>
      <video:publication_date>2019-12-26T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/do-it-yourself-i18n</loc>
    <lastmod>2019-12-26T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f31fe018a8d7034858c8/69c3f3ace018a8d70348696f/thumbnail-1-0.png?v=1774450045196</video:thumbnail_loc>
      <video:title>Do it Yourself i18n</video:title>
      <video:description>Before we start using the vue-i18n plugin, we&apos;ll create a DIY solution for internationalization.
This helps us get a better understanding of the task ahead, and how the plugin will be of great help to us.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3f3ace018a8d70348696f</video:player_loc>
      <video:duration>187</video:duration>
      <video:publication_date>2019-12-26T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-web-accessibility-fundamentals</loc>
    <lastmod>2019-10-02T11:22:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2ae16531f7f7b6ce8fc11/69c2b4c99ae74a342895402b/thumbnail-1-0.png?v=1774368217469</video:thumbnail_loc>
      <video:title>Introduction to Web Accessibility Fundamentals</video:title>
      <video:description>In this lesson, we’ll give a quick walkthrough of what we’ll learn in this accessibility course. We’ll also learn why we often refer to accessibility as A11y.
During the course, we’ll be using Google Chrome with Vue devtools installed. We’ll also be using Visual Studio Code with Vetur (Vue extension) installed.
We recommend that you install the resources above if you want to follow along.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2b4c99ae74a342895402b</video:player_loc>
      <video:duration>63</video:duration>
      <video:publication_date>2019-10-02T11:22:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-query-parameters</loc>
    <lastmod>2019-09-11T20:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d3dbe018a8d7034509d8/thumbnail-1-0.png?v=1774441965373</video:thumbnail_loc>
      <video:title>Vue Router Query Parameters</video:title>
      <video:description>In this lesson, we&apos;ll learn what query parameters are and how we can use them in our Vue.js applications with Vue Router.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d3dbe018a8d7034509d8</video:player_loc>
      <video:duration>270</video:duration>
      <video:publication_date>2019-09-11T20:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-configure-an-authentication-middleware-route-guard-with-vue-router</loc>
    <lastmod>2019-09-11T20:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d54c123b739cbbb211f1/thumbnail-1-0.png?v=1774442655821</video:thumbnail_loc>
      <video:title>How to configure an authentication middleware (route guard) with Vue Router</video:title>
      <video:description>In this lesson, we&apos;ll learn how to create authentication middleware by using route guards and meta fields.
Meta fields are a powerful feature that we can use to customize or tackle advanced routing needs.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d54c123b739cbbb211f1</video:player_loc>
      <video:duration>559</video:duration>
      <video:publication_date>2019-09-11T20:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-control-the-scroll-behavior-of-vue-router</loc>
    <lastmod>2019-08-29T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d3dbe018a8d7034509dc/thumbnail-1-0.png?v=1774442149086</video:thumbnail_loc>
      <video:title>How to control the scroll behavior of Vue Router</video:title>
      <video:description>In this lesson, we learn how to add and control scroll behavior when navigating to sections on the same page. This technique is very handy and can provide a much better user experience to our applications when used correctly.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d3dbe018a8d7034509dc</video:player_loc>
      <video:duration>310</video:duration>
      <video:publication_date>2019-08-29T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-create-a-404-not-found-route-and-page-with-vue-router</loc>
    <lastmod>2019-08-29T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d3dbe018a8d7034509de/thumbnail-1-0.png?v=1774442192323</video:thumbnail_loc>
      <video:title>How to create a 404 Not Found route and page with Vue Router</video:title>
      <video:description>In this lesson, we&apos;re learning how to create a route that catches all non-existing routes with vue router. This is the classic 404 Not found behavior.
We also learn how to use a navigation guard to make sure nested routes exists.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d3dbe018a8d7034509de</video:player_loc>
      <video:duration>299</video:duration>
      <video:publication_date>2019-08-29T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-create-route-transitions-with-vue-router</loc>
    <lastmod>2019-08-22T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d3dbe018a8d7034509da/thumbnail-1-0.png?v=1774441905662</video:thumbnail_loc>
      <video:title>How to create route transitions with Vue Router</video:title>
      <video:description>In this lesson, we learn how to create cool transitions when users navigate between pages on our website with the transition classes provided by Vue and Vue Router.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d3dbe018a8d7034509da</video:player_loc>
      <video:duration>208</video:duration>
      <video:publication_date>2019-08-22T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/creating-a-go-back-button</loc>
    <lastmod>2019-08-22T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d3db123b739cbbb1e92d/thumbnail-1-0.png?v=1774441744337</video:thumbnail_loc>
      <video:title>Creating a Go-Back button</video:title>
      <video:description>In this lesson, we learn how to create a go-back button and programmatically navigate to the previously visited page with Vue Router.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d3db123b739cbbb1e92d</video:player_loc>
      <video:duration>117</video:duration>
      <video:publication_date>2019-08-22T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-nested-routes</loc>
    <lastmod>2019-08-22T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d3dbb365493ac05701de/thumbnail-1-0.png?v=1774442258996</video:thumbnail_loc>
      <video:title>Vue Router Nested Routes</video:title>
      <video:description>In this lesson, we&apos;re learning how to work with nested routes. Nested routes and multiple router-views are a common pattern. However, there are a few things you have to do correctly to make it work properly. 
Learn how to use multiple router-views in this lesson by adding experiences to each destination in our travel app.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d3dbb365493ac05701de</video:player_loc>
      <video:duration>453</video:duration>
      <video:publication_date>2019-08-22T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-pass-vue-router-params-as-props-to-components</loc>
    <lastmod>2019-08-15T05:50:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d3db123b739cbbb1e941/thumbnail-1-0.png?v=1774449378110</video:thumbnail_loc>
      <video:title>How to pass Vue Router params as props to components</video:title>
      <video:description>In this lesson, we’ll do some refactoring to improve our travel app. First we&apos;ll refactor our route params from using an ID to using a slug. At the end of the lesson, we learn how to pass route params as props to our route components.
We also learn about the history mode of Vue router, which will remove the hash symbol in our URLs.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d3db123b739cbbb1e941</video:player_loc>
      <video:duration>232</video:duration>
      <video:publication_date>2019-08-15T05:50:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-rerender-components-when-vue-router-params-changes</loc>
    <lastmod>2019-08-08T10:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d3db123b739cbbb1e93f/thumbnail-1-0.png?v=1774449263771</video:thumbnail_loc>
      <video:title>How to rerender components when vue router params changes</video:title>
      <video:description>In this lesson, we learn how to re-render components when Vue Router params of the same route changes.
We learn about the special key attribute of the router-view and refactor  TheNavigation  component to use dynamic routes.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d3db123b739cbbb1e93f</video:player_loc>
      <video:duration>269</video:duration>
      <video:publication_date>2019-08-08T10:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-dynamic-routes</loc>
    <lastmod>2019-08-08T10:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d3dbe018a8d7034509e7/thumbnail-1-0.png?v=1774441982441</video:thumbnail_loc>
      <video:title>Vue Router Dynamic Routes</video:title>
      <video:description>In this lesson, we’ll learn how to work with dynamic routes in Vue router.
We’ll learn how to declare the dynamic routes and also how to fetch and use the dynamic data in our components.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d3dbe018a8d7034509e7</video:player_loc>
      <video:duration>235</video:duration>
      <video:publication_date>2019-08-08T10:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-named-routes-and-params</loc>
    <lastmod>2019-08-01T11:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d3db123b739cbbb1e92f/thumbnail-1-0.png?v=1774449117187</video:thumbnail_loc>
      <video:title>Vue Router Named Routes and Params</video:title>
      <video:description>In this lesson, we learn how to work with Vue router and named routes. We also learn how to pass dynamic parameters to the router, called params.
Named routes are highly recommended as they allow us to do changes to the URL without the need for refactoring the links in our apps.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d3db123b739cbbb1e92f</video:player_loc>
      <video:duration>226</video:duration>
      <video:publication_date>2019-08-01T11:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-active-class</loc>
    <lastmod>2019-08-01T11:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d3dcb365493ac05701e4/thumbnail-1-0.png?v=1774442096907</video:thumbnail_loc>
      <video:title>Vue Router Active Class</video:title>
      <video:description>In this lesson, we learn about Vue router active class. The active class is automatically handled by the router-link component and allows us to mark which route we are currently viewing with CSS.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d3dcb365493ac05701e4</video:player_loc>
      <video:duration>199</video:duration>
      <video:publication_date>2019-08-01T11:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-lazy-load-routes-with-vue-router</loc>
    <lastmod>2019-07-25T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d4c8123b739cbbb202cf/thumbnail-1-0.png?v=1774442918816</video:thumbnail_loc>
      <video:title>How to lazy load routes with Vue Router</video:title>
      <video:description>In this lesson, we’re going to learn how to lazy load Vue Router routes and what it actually means to lazy load components and routes.
You can learn more about webpack’s code splitting feature here.
If you want to learn more about how you can lazy load your Vue.js components in general, we recommend watching the Load Vue Components Asynchronously lesson.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d4c8123b739cbbb202cf</video:player_loc>
      <video:duration>299</video:duration>
      <video:publication_date>2019-07-25T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-router-creating-routes</loc>
    <lastmod>2019-07-25T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d4e4123b739cbbb20604/thumbnail-1-0.png?v=1774442987916</video:thumbnail_loc>
      <video:title>Creating Routes</video:title>
      <video:description>In this lesson, we’re going to learn how to add new routes and pages to the Vue Router.
Before we can dive into creating our travel app we need to download and import the starter files and do some light refactoring.
If you&apos;re following along, make sure you


Copy all the files in the assets folder to src/assets


Copy the store.js file to the src folder</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d4e4123b739cbbb20604</video:player_loc>
      <video:duration>414</video:duration>
      <video:publication_date>2019-07-25T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/understanding-how-vue-router-is-setup</loc>
    <lastmod>2019-07-18T08:06:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d4e5b365493ac0571ee7/thumbnail-1-0.png?v=1774442676420</video:thumbnail_loc>
      <video:title>Understanding how Vue Router is setup</video:title>
      <video:description>In this lesson, we’re getting a tour in our newly created Vue project that we created with Vue CLI GUI.
We’re also going to learn about the two core components we need to work with Vue Router, namely router-link and router-view. The lesson also covers why we should not use a tags when we use Vue router to create Single Page Applications.
We’re also going to learn about the logic behind Single Page Applications, and why they tend to have faster page changes compared to traditional websites.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d4e5b365493ac0571ee7</video:player_loc>
      <video:duration>300</video:duration>
      <video:publication_date>2019-07-18T08:06:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-a-new-project-with-vue-router-using-the-vue-cli-ui</loc>
    <lastmod>2019-07-18T08:06:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d520b365493ac05725cf/thumbnail-1-0.png?v=1774442335540</video:thumbnail_loc>
      <video:title>Create a new project with Vue Router using the Vue CLI UI</video:title>
      <video:description>In this lesson, we’re learning how to create a new Vue project that includes the Vue router with the Vue CLI GUI.
If you haven’t worked with Vue CLI before, you’ll need to install it.
Install Vue CLI
Open up your terminal and type.
npm install -g @vue/cli
# OR
yarn global add @vue/cli

Open Vue CLI GUI
vue ui</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d520b365493ac05725cf</video:player_loc>
      <video:duration>171</video:duration>
      <video:publication_date>2019-07-18T08:06:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-router-course-and-resource-overview</loc>
    <lastmod>2019-07-18T08:06:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679fab6a1e75f7ab3d347c/69c3d520e018a8d703452dd7/thumbnail-1-0.png?v=1774442361332</video:thumbnail_loc>
      <video:title>Vue Router Course and Resource overview</video:title>
      <video:description>In this lesson, we&apos;re demonstrating the travel app that we are going to build while learning how to master the Vue.js Router.
You can enjoy the course by just watching. However, we strongly recommend that you follow along.
We will also go through some resources that are optional to use while following along. You can find links to each resource below.
Vue Router Course Resources
Vue Router for Everyone starter files
Vue.js devtools can be downloaded for Google Chrome and Mozilla Firefox
Editor and Extensions
VS Code Editor
VS Code Vetur Extension
VS Code Vue VS Code Extension Pack</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d520e018a8d703452dd7</video:player_loc>
      <video:duration>201</video:duration>
      <video:publication_date>2019-07-18T08:06:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/learn-how-to-set-default-parameter-values-in-javascript-functions</loc>
    <lastmod>2019-08-27T10:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a74d6a1e75f7ab3e15db/69c433efe018a8d7034f0540/thumbnail-1-0.png?v=1774466763040</video:thumbnail_loc>
      <video:title>Learn how to set default parameter values in JavaScript functions</video:title>
      <video:description>Prior to ES6, it wasn&apos;t possible to set default parameter values when defining our functions in JavaScript. In this lesson, we learn how to create default values to our function parameters.
We also see a few examples of how this can come in handy in our applications.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c433efe018a8d7034f0540</video:player_loc>
      <video:duration>239</video:duration>
      <video:publication_date>2019-08-27T10:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-the-difference-between-var-let-and-const</loc>
    <lastmod>2019-07-04T08:49:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a74d6a1e75f7ab3e15db/69c433efe018a8d7034f053e/thumbnail-1-0.png?v=1774467118149</video:thumbnail_loc>
      <video:title>What is the difference between var, let and const?</video:title>
      <video:description>In this lesson from our modern JavaScript course about ES6, ES7, ES8, we will answer the commonly asked question, &amp;quot;What is the difference between the var, let and const keywords in JavaScript?&amp;quot;
Click here to play with the codesandbox used in this lesson.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c433efe018a8d7034f053e</video:player_loc>
      <video:duration>266</video:duration>
      <video:publication_date>2019-07-04T08:49:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/why-is-es6-and-beyond-considered-to-be-modern-javascript</loc>
    <lastmod>2019-07-04T08:49:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967a74d6a1e75f7ab3e15db/69c433f0e018a8d7034f0553/thumbnail-1-0.png?v=1774466308084</video:thumbnail_loc>
      <video:title>Why is ES6 and beyond considered to be modern JavaScript?</video:title>
      <video:description>In the first lesson of our course about modern JavaScript, including ES6, ES7, and ES8, we briefly explain the differences between older and newer versions of JavaScript.
We also showcase some examples of ES6 features and syntaxes you will learn in this course.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c433f0e018a8d7034f0553</video:player_loc>
      <video:duration>94</video:duration>
      <video:publication_date>2019-07-04T08:49:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-test-vuejs-component-with-vuex-store</loc>
    <lastmod>2019-06-27T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f344e018a8d703485cb7/69c47bcbb365493ac0674149/thumbnail-1-0.png?v=1774485319659</video:thumbnail_loc>
      <video:title>How to test that a Vuex Store is injected into a Vue.js component</video:title>
      <video:description>Sometimes when we&apos;re working with Vuex, it&apos;s essential to test that our components are properly integrated with Vuex.
In this lesson, we&apos;re learning how to test that a Vuex Store is injected into our Vue.js component.
We&apos;ll also show you a neat tip you should use to not pollute your global Vue instance when working with Vue plugins (such as Vuex).
This testing lesson requires knowledge about Vuex and is optional. If you want to learn Vuex, you can watch our popular Vuex for Everyone course.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c47bcbb365493ac0674149</video:player_loc>
      <video:duration>344</video:duration>
      <video:publication_date>2019-06-27T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/traversing-the-dom</loc>
    <lastmod>2019-06-20T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f344e018a8d703485cb7/69c47bcbe018a8d703554ab9/thumbnail-1-0.png?v=1774485001865</video:thumbnail_loc>
      <video:title>Traversing The DOM</video:title>
      <video:description>In this lesson, we&apos;ll learn the handy techniques of traversing the DOM of a mounted vue.js component and how to interact with it through triggering native DOM events, like click and input events.
The techniques we learn in this testing lesson can bring you a long way in making sure that our vue.js component&apos;s works for your users.
You can use any valid CSS Selector to find the DOM element you need to locate.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c47bcbe018a8d703554ab9</video:player_loc>
      <video:duration>276</video:duration>
      <video:publication_date>2019-06-20T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/learn-how-to-test-vuejs-lifecycle-methods</loc>
    <lastmod>2019-06-13T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f344e018a8d703485cb7/69c47bcb123b739cbbc23719/thumbnail-1-0.png?v=1774485345267</video:thumbnail_loc>
      <video:title>Learn How to Test Vue.js Lifecycle Methods</video:title>
      <video:description>Lifecycle methods are a very power Vue.js feature, that we use all time time.
In this lesson, we’re learning how to test the vue.js lifecycle methods or lifecycle hooks as they’re also called.
The lesson contains examples of how to test the mounted, beforeDestroy and destroyed hook. It should give you the insights to test any lifecycle method you desire.
We will use a spy to test the beforeDestroy hook. Follow the link to learn more about spies in testing.
You can find the demo on codesandbox</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c47bcb123b739cbbc23719</video:player_loc>
      <video:duration>471</video:duration>
      <video:publication_date>2019-06-13T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-wrapper-object</loc>
    <lastmod>2019-06-06T14:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f344e018a8d703485cb7/69c47bcbb365493ac067414e/thumbnail-1-0.png?v=1774485430590</video:thumbnail_loc>
      <video:title>The Wrapper Object</video:title>
      <video:description>In this lesson, we’ll learn about the wrapper object, and how we can access the component through the vm property, as we would when we&apos;re tinkering with our components in the browser console.
Amongst other things, this allow us to easily get and set our component data when testing them.
This lesson also explains why the snapshots are so easy to read. This is thanks to the jest-serializer-vue package.
The package was provided with the boilerplate. If you wish to use it in your own projects, you’ll have to install it:
Install jest-serializer-vue
yarn add --dev jest-serializer-vue
# OR
npm install --save-dev jest-serializer-vue
Then add this to your  jest.config.js
snapshotSerializers: [
  &quot;&amp;lt;rootDir&amp;gt;/node_modules/jest-serializer-vue&quot;
]</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c47bcbb365493ac067414e</video:player_loc>
      <video:duration>260</video:duration>
      <video:publication_date>2019-06-06T14:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/mounting-components-with-vue-test-utils</loc>
    <lastmod>2019-05-30T10:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f344e018a8d703485cb7/69c47bcbe018a8d703554acc/thumbnail-1-0.png?v=1774485378677</video:thumbnail_loc>
      <video:title>Mounting Components with Vue Test Utils</video:title>
      <video:description>When we’re testing our vue.js components, we need a way to mount and render the component.
In this lesson, we’ll see the mount function in action. Mount creates a Wrapper that contains the mounted and rendered Vue component. We use this wrapper to test our component in various ways.
In this lesson, we’ll take a look at the Wrapper HTML function, which returns the entire component DOM node as a string.
If you want to learn more about snapshots, check out Snapshot Testing with Jest.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c47bcbe018a8d703554acc</video:player_loc>
      <video:duration>420</video:duration>
      <video:publication_date>2019-05-30T10:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/installing-vue-test-utils</loc>
    <lastmod>2019-05-30T10:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3f344e018a8d703485cb7/69c47bcbb365493ac067414c/thumbnail-1-0.png?v=1774485217430</video:thumbnail_loc>
      <video:title>Installing Vue Test Utils</video:title>
      <video:description>Before we learn how to test our vue.js components, we need to install a few packages that will be the tools we use.
In this lesson, we&apos;ll walk you through the project that we&apos;ve prepared and show you how to install the required packages before we continue with testing vue.js components.
We have created a boilerplate that contains the components that we will test in this course. Make sure to download or clone it (instructions below) if you want to follow along.
Clone project and Install the dependencies
cd ~
git clone https://github.com/vueschool/testing-vue-components.git
cd testing-vue-components

yarn
# OR
npm install
Install vue-template-compiler and vue-jest
yarn add vue-template-compiler vue-jest
# OR
npm install vue-template-compiler vue-jest
Install vue-test-utils
yarn add @vue/test-utils
# OR
npm install @vue/test-utils
If you&apos;re not familiar with Jest, the testing framework, we recommend watching Test with Jest before continuing with this course.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c47bcbb365493ac067414c</video:player_loc>
      <video:duration>315</video:duration>
      <video:publication_date>2019-05-30T10:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/dynamically-load-components</loc>
    <lastmod>2019-05-24T12:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2dc794f62335fd451a185/69c2e5a73fe452f53abc7044/thumbnail-1-0.png?v=1774381355129</video:thumbnail_loc>
      <video:title>Load Vue Components Asynchronously</video:title>
      <video:description>In this lesson, we&apos;ll learn how to lazy-load vue.js components to improve performance.
This is an important technique to have in your tool belt when you are building kickass Vue.js applications.
By lazy-loading our single file components, we reduce the size of the JavaScript bundle our users has to download before they can interact with our applications.
We&apos;ll use a technique called Code Splitting, which is a common technique that has become the defacto golden standard.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2e5a73fe452f53abc7044</video:player_loc>
      <video:duration>513</video:duration>
      <video:publication_date>2019-05-24T12:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-single-file-components</loc>
    <lastmod>2019-04-24T03:37:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2dc794f62335fd451a185/69c2e5a705651df01cd2aae0/thumbnail-1-0.png?v=1774381058433</video:thumbnail_loc>
      <video:title>Introduction to Single File Components</video:title>
      <video:description>In the first lesson in our course about Single File Components in Vue.js, we&apos;re learning about the drawbacks of global components. We also learn how to structure our Single File Components and get a brief glimpse of how we can use pre-processors like Pug, Jade or Styles in our vue.js components.
Watch our lesson on Component Names Best Practices</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2e5a705651df01cd2aae0</video:player_loc>
      <video:duration>240</video:duration>
      <video:publication_date>2019-04-24T03:37:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-component-naming-best-practices</loc>
    <lastmod>2019-03-21T10:23:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679c7be39380f18647c66d/69c3d19bb365493ac056c4e7/thumbnail-1-0.png?v=1774441737436</video:thumbnail_loc>
      <video:title>Component Naming Best Practices</video:title>
      <video:description>In this lesson, we&apos;ll learn the best practices of naming our Vue.js components. By following the best practices and official Vue.js Style Guide our applications will be easier to understand for other developers, just by taking a look at the component files.
Important Note
Since Vue.js 3 became the default you must now specify version 2 when getting Vue from a CDN.
&amp;lt;script src=&quot;https://unpkg.com/vue@2&quot;&amp;gt;&amp;lt;/script&amp;gt;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d19bb365493ac056c4e7</video:player_loc>
      <video:duration>412</video:duration>
      <video:publication_date>2019-03-21T10:23:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-a-notification-message-component</loc>
    <lastmod>2019-03-01T09:29:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679c7be39380f18647c66d/69c3d19be018a8d70344cd2b/thumbnail-1-0.png?v=1774441373812</video:thumbnail_loc>
      <video:title>#2 Create a Notification Message Component</video:title>
      <video:description>This lesson is also a component exercise lesson, where we&apos;re going to use everything we&apos;ve learned about Vue.js components so far.
In this component exercise, we&apos;re going to build a fun and useful component that is a notification message.
In the exercise, we&apos;ll be using Semantic UI, we&apos;ll specifically use the message element. We&apos;ve prepared a boilerplate as a starting point for the exercise.
Your goal is to create a component that will be passed some content (the message) and the type of notification (info, error, success). The user should also be able to close the notification.
We encourage you to go back and rewatch videos if you&apos;re stuck, but if want to, you can peak at the solution.
Good luck and have fun!
Important Note
Since Vue.js 3 became the default you must now specify version 2 when getting Vue from a CDN.
&amp;lt;script src=&quot;https://unpkg.com/vue@2&quot;&amp;gt;&amp;lt;/script&amp;gt;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d19be018a8d70344cd2b</video:player_loc>
      <video:duration>273</video:duration>
      <video:publication_date>2019-03-01T09:29:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/build-a-github-user-profile-component</loc>
    <lastmod>2019-03-01T09:28:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679c7be39380f18647c66d/69c3d19b123b739cbbb1ad49/thumbnail-1-0.png?v=1774441685435</video:thumbnail_loc>
      <video:title>#1 Build a GitHub User Profile Component</video:title>
      <video:description>This lesson is a component exercise lesson, where we&apos;re going to use everything we&apos;ve learned about Vue.js components so far.
The goal is to create a component that displays a person’s GitHub profile. Including the user&apos;s avatar, name, register date, bio, and followers.
In the exercise, we&apos;ll be using Semantic UI, we&apos;ll specifically use the card element. We&apos;ve prepared a boilerplate as a starting point for the exercise.
The Github API endpoint we&apos;ll be using is: https://api.github.com/users
We encourage you to go back and rewatch videos if you&apos;re stuck, but if want to, you can peak at the solution.
Good luck and have fun!
Important Note
Since Vue.js 3 became the default you must now specify version 2 when getting Vue from a CDN.
&amp;lt;script src=&quot;https://unpkg.com/vue@2&quot;&amp;gt;&amp;lt;/script&amp;gt;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d19b123b739cbbb1ad49</video:player_loc>
      <video:duration>468</video:duration>
      <video:publication_date>2019-03-01T09:28:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/component-slots</loc>
    <lastmod>2019-03-07T09:27:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679c7be39380f18647c66d/69c3d19b123b739cbbb1ad47/thumbnail-1-0.png?v=1774442050760</video:thumbnail_loc>
      <video:title>Component Slots</video:title>
      <video:description>In this lesson, we&apos;ll learn how to pass HTML to our Vue.js components using slots. Slots are an awesome feature of Vue.js, and this lesson will teach you what you need to know to get started.
Solution to the slots exercise
Remember
If you need to pass HTML to your components, use slots. If you need to pass data, use props.
Important Note
Since Vue.js 3 became the default you must now specify version 2 when getting Vue from a CDN.
&amp;lt;script src=&quot;https://unpkg.com/vue@2&quot;&amp;gt;&amp;lt;/script&amp;gt;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d19b123b739cbbb1ad47</video:player_loc>
      <video:duration>477</video:duration>
      <video:publication_date>2019-03-07T09:27:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/component-lifecycle-hooks</loc>
    <lastmod>2019-03-07T09:26:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679c7be39380f18647c66d/69c3d19b123b739cbbb1ad45/thumbnail-1-0.png?v=1774441285843</video:thumbnail_loc>
      <video:title>Component Lifecycle Hooks</video:title>
      <video:description>In this lesson, we learn what Vue.js component lifecycle hooks are and how we can use them. If you want to learn more about Vue.js lifecycle hooks, we recommend our Understanding the Vue.js Lifecycle Hooks lesson.
Important Note
Since Vue.js 3 became the default you must now specify version 2 when getting Vue from a CDN.
&amp;lt;script src=&quot;https://unpkg.com/vue@2&quot;&amp;gt;&amp;lt;/script&amp;gt;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d19b123b739cbbb1ad45</video:player_loc>
      <video:duration>134</video:duration>
      <video:publication_date>2019-03-07T09:26:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/communication-between-components</loc>
    <lastmod>2019-03-21T08:20:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679c7be39380f18647c66d/69c3d19bb365493ac056c502/thumbnail-1-0.png?v=1774441540347</video:thumbnail_loc>
      <video:title>Communication Between Components with Custom Events</video:title>
      <video:description>We know how to pass data to a child component through props. In this lesson, we&apos;ll learn how to communicate from a child to a parent component through custom events.
We will use a custom event to notify the plan-picker of which plan has been selected, and make sure we have the right logic in place so the user can only select one plan at a time.
Important Note
Since Vue.js 3 became the default you must now specify version 2 when getting Vue from a CDN.
&amp;lt;script src=&quot;https://unpkg.com/vue@2&quot;&amp;gt;&amp;lt;/script&amp;gt;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d19bb365493ac056c502</video:player_loc>
      <video:duration>444</video:duration>
      <video:publication_date>2019-03-21T08:20:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/global-vs-local-components</loc>
    <lastmod>2019-04-03T07:12:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679c7be39380f18647c66d/69c3d19bb365493ac056c4e5/thumbnail-1-0.png?v=1774441203928</video:thumbnail_loc>
      <video:title>Global vs Local Components</video:title>
      <video:description>Vue.js allows us to register components both globally and locally. In this lesson, we&apos;ll learn the difference between the two types and how it can affect the build size and performance of your application.
Important Note
Since Vue.js 3 became the default you must now specify version 2 when getting Vue from a CDN.
&amp;lt;script src=&quot;https://unpkg.com/vue@2&quot;&amp;gt;&amp;lt;/script&amp;gt;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d19bb365493ac056c4e5</video:player_loc>
      <video:duration>191</video:duration>
      <video:publication_date>2019-04-03T07:12:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/nested-components</loc>
    <lastmod>2019-04-03T06:51:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679c7be39380f18647c66d/69c3d19be018a8d70344cd0c/thumbnail-1-0.png?v=1774441064861</video:thumbnail_loc>
      <video:title>Nested Components</video:title>
      <video:description>Components allow us to encapsulate functionality and easily reuse them in multiple places in our applications. It is common to have components inside other components to compose the bigger features of our apps.
In this lesson, we&apos;ll learn how we can create a plan-picker component, to easily display all our plans wherever we want.
Important Note
Since Vue.js 3 became the default you must now specify version 2 when getting Vue from a CDN.
&amp;lt;script src=&quot;https://unpkg.com/vue@2&quot;&amp;gt;&amp;lt;/script&amp;gt;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d19be018a8d70344cd0c</video:player_loc>
      <video:duration>110</video:duration>
      <video:publication_date>2019-04-03T06:51:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/reusable-components-with-props</loc>
    <lastmod>2019-04-17T06:47:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679c7be39380f18647c66d/69c3d19bb365493ac056c4e3/thumbnail-1-0.png?v=1774441682026</video:thumbnail_loc>
      <video:title>Reusable Components with Props</video:title>
      <video:description>In this lesson, we&apos;ll see a realistic use case for reusable components and learn about Vue.js component props.
Props are custom HTML attributes that we can register on our components, which allow us to pass data to our components.
You can find the starting point of the demo in this lesson in the link. We&apos;ve also created a jsfiddle if you want to play around with the code.
Important Note
Since Vue.js 3 became the default you must now specify version 2 when getting Vue from a CDN.
&amp;lt;script src=&quot;https://unpkg.com/vue@2&quot;&amp;gt;&amp;lt;/script&amp;gt;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d19bb365493ac056c4e3</video:player_loc>
      <video:duration>406</video:duration>
      <video:publication_date>2019-04-17T06:47:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/components-template</loc>
    <lastmod>2019-02-21T07:21:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679c7be39380f18647c66d/69c3d19be018a8d70344cd05/thumbnail-1-0.png?v=1774441206455</video:thumbnail_loc>
      <video:title>Component&apos;s Template</video:title>
      <video:description>In this lesson, we&apos;re going to learn about a Vue component&apos;s template. Essentially, the template is where we define our HTML and general markup for our component. We also bind our component&apos;s data to the DOM in the template.
In Vue.js, we can define our template in a few different ways. In this lesson, we&apos;ll move away from the inline template and use the x-template technique, which is great when you&apos;re getting started.
Remember! Component template must contain exactly one root element.
You can read more about Vue&apos;s Template Syntax in the documentation.
Important Note
Since Vue.js 3 became the default you must now specify version 2 when getting Vue from a CDN.
&amp;lt;script src=&quot;https://unpkg.com/vue@2&quot;&amp;gt;&amp;lt;/script&amp;gt;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d19be018a8d70344cd05</video:player_loc>
      <video:duration>140</video:duration>
      <video:publication_date>2019-02-21T07:21:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-components</loc>
    <lastmod>2019-02-21T07:04:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69679c7be39380f18647c66d/69c3d19b123b739cbbb1ad5b/thumbnail-1-0.png?v=1774441279804</video:thumbnail_loc>
      <video:title>Introduction to Components</video:title>
      <video:description>In this lesson, we&apos;ll learn about Vue components. We&apos;ll get an introduction to what a component is, why we need components and lastly how we can create and use a component in our Vue.js app.
Important Note
Since Vue.js 3 became the default you must now specify version 2 when getting Vue from a CDN.
&amp;lt;script src=&quot;https://unpkg.com/vue@2&quot;&amp;gt;&amp;lt;/script&amp;gt;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3d19b123b739cbbb1ad5b</video:player_loc>
      <video:duration>171</video:duration>
      <video:publication_date>2019-02-21T07:04:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-pre-rendering</loc>
    <lastmod>2019-01-02T10:45:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2a8339ae74a34289407b8/69c2a84c531f7f7b6ce86e30/thumbnail-1-0.png?v=1774365499751</video:thumbnail_loc>
      <video:title>What is Prerendering?</video:title>
      <video:description>In the first lesson of this course, you will learn what prerendering is. Prerendering is also known as static site generation and is easily confused with server-side rendering. This lesson will break it down for you and address the difference too.
You can find the starting point here</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2a84c531f7f7b6ce86e30</video:player_loc>
      <video:duration>114</video:duration>
      <video:publication_date>2019-01-02T10:45:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-axios-module</loc>
    <lastmod>2018-12-17T09:23:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3c9a6e018a8d70343dde6/69c4351b123b739cbbbc0e6b/thumbnail-1-0.png?v=1774467510017</video:thumbnail_loc>
      <video:title>The Axios Module</video:title>
      <video:description>Nuxt modules are extensions to the framework that allows us to extend its core functionality. 
In this lesson, we&apos;ll learn about the axios module and how we benefit from using the module.
Install with yarn:
yarn add @nuxtjs/axios
Install with npm:
npm install @nuxtjs/axios</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c4351b123b739cbbbc0e6b</video:player_loc>
      <video:duration>210</video:duration>
      <video:publication_date>2018-12-17T09:23:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/fetch-async-data-with-axios</loc>
    <lastmod>2018-12-17T09:05:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3c9a6e018a8d70343dde6/69c4351b123b739cbbbc0e67/thumbnail-1-0.png?v=1774467198988</video:thumbnail_loc>
      <video:title>Fetch Async Data with Axios</video:title>
      <video:description>In this lesson, we will switch to axios, which is a full-blown, promise-based HTTP client that both works in the browser and the Node environment.
Since we&apos;ll be pre-rendering our website in this course, Nuxt needs an HTTP client that also works server side.
Install axios with yarn
yarn add axios
Install axios with npm
npm install axios</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c4351b123b739cbbbc0e67</video:player_loc>
      <video:duration>100</video:duration>
      <video:publication_date>2018-12-17T09:05:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-asynchronous-data-with-nuxt.js</loc>
    <lastmod>2018-12-17T08:31:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3c9a6e018a8d70343dde6/69c4351ce018a8d7034f2566/thumbnail-1-0.png?v=1774467650493</video:thumbnail_loc>
      <video:title>Introduction to Asynchronous Data with Nuxt.js</video:title>
      <video:description>This course is all about asynchronous data. To work along you will need an API. We recommend the JSON Placeholder API if you want to get up and running quickly.
You can find the boilerplate that we use in the course here. In this lesson, we&apos;ll set ourselves up and fetch our first async data.
This course requires that you are familiar with the Nuxt.js Fundamentals.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c4351ce018a8d7034f2566</video:player_loc>
      <video:duration>292</video:duration>
      <video:publication_date>2018-12-17T08:31:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/running-the-first-test</loc>
    <lastmod>2018-11-20T09:55:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69ab6a0806a15537d0543927/69ab6a4b8b86e9ed04b1f9ab/thumbnail-1-0.png?v=1772841868127</video:thumbnail_loc>
      <video:title>Running the First Test</video:title>
      <video:description>In this lesson, we&apos;ll learn how to define our first test, also called specs which is short for specifications. 
We also learn how we can group our tests with the describe function for organizational purposes. As well as where to place our tests to make sure Jest knows about them.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab6a4b8b86e9ed04b1f9ab</video:player_loc>
      <video:duration>182</video:duration>
      <video:publication_date>2018-11-20T09:55:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/install-jest</loc>
    <lastmod>2018-11-20T09:11:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69ab6a0806a15537d0543927/69ab6a4bbb772793aa1caa56/thumbnail-1-0.png?v=1772842112697</video:thumbnail_loc>
      <video:title>Install Jest</video:title>
      <video:description>This course is all about unit testing with Jest and in this lesson, we&apos;ll learn how to install Jest in our project.
To get started, we need a package.json. Go to your project directory and run the following commands in your terminal:
yarn init -y
Then we need to install Jest:
yarn add --dev jest
Add support for babel:
yarn add --dev babel-core babel-jest babel-preset-env
Create a babel preset file:
touch .babelrc
And add the current preset, to .babelrc:
{
  &quot;presets&quot;: [
    &quot;env&quot;
  ]
}
And voilà, Jest is installed!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab6a4bbb772793aa1caa56</video:player_loc>
      <video:duration>178</video:duration>
      <video:publication_date>2018-11-20T09:11:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-deploy-nuxtjs-to-netlify</loc>
    <lastmod>2018-11-06T13:34:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696795d8e39380f186472567/69c2d191531f7f7b6cecb0a8/thumbnail-1-0.png?v=1774375871329</video:thumbnail_loc>
      <video:title>How to Deploy Nuxt.js to Netlify</video:title>
      <video:description>A cool feature of Nuxt is that it can generate a static version of your application which you can deploy without the need of a server. This means that you can host your application in a service like Netlify or GitHub pages which are actually free even when you have a ton of traffic.
In this lesson, we&apos;re learning how to pre-render our application and deploying it to Netlify. Pre-rendering makes our application load faster, it improves SEO and can actually reduce our hosting costs drastically.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d191531f7f7b6cecb0a8</video:player_loc>
      <video:duration>234</video:duration>
      <video:publication_date>2018-11-06T13:34:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/how-to-deploy-nuxtjs-to-heroku</loc>
    <lastmod>2018-11-06T13:32:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696795d8e39380f186472567/69c2d1914f62335fd4508b97/thumbnail-1-0.png?v=1774375976105</video:thumbnail_loc>
      <video:title>How to Deploy Nuxt.js to Heroku</video:title>
      <video:description>Heroku is an easy and affordable service that we can use to host our Nuxt applications. In this lesson, we&apos;ll learn how to deploy our nuxt.js application to Heroku.
Learn more about deploying your Nuxt.js app to Heroku</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d1914f62335fd4508b97</video:player_loc>
      <video:duration>227</video:duration>
      <video:publication_date>2018-11-06T13:32:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/nuxtjs-seo-and-meta-tags</loc>
    <lastmod>2018-11-06T12:45:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696795d8e39380f186472567/69c2d1914f62335fd4508ba4/thumbnail-1-0.png?v=1774375864623</video:thumbnail_loc>
      <video:title>SEO and Meta Tags</video:title>
      <video:description>In this lesson, we&apos;re going to learn how Nuxt.js can make our JavaScript applications SEO friendly with pre-rendering and meta tags.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d1914f62335fd4508ba4</video:player_loc>
      <video:duration>194</video:duration>
      <video:publication_date>2018-11-06T12:45:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/utilising-the-vuex-store-nuxtjs</loc>
    <lastmod>2018-11-06T12:42:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696795d8e39380f186472567/69c2d1919ae74a342898460c/thumbnail-1-0.png?v=1774375822863</video:thumbnail_loc>
      <video:title>Utilising the Vuex Store</video:title>
      <video:description>Another great feature of Nuxt.js is that it supports Vuex out of the box. In this lesson, we&apos;re learning what we need to know to work with Vuex and Nuxt.
You can safely skip this lesson if you do not want to use Vuex in your Nuxt.js applications 
We will not cover what Vuex is in this lesson. Check out our Vuex for Everyone course if you want to learn Vuex.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d1919ae74a342898460c</video:player_loc>
      <video:duration>253</video:duration>
      <video:publication_date>2018-11-06T12:42:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/nuxtjs-dynamic-routes</loc>
    <lastmod>2018-11-06T12:38:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696795d8e39380f186472567/69c2d1919ae74a342898460e/thumbnail-1-0.png?v=1774375609780</video:thumbnail_loc>
      <video:title>Dynamic Routes</video:title>
      <video:description>In this Nuxt.js lesson, we&apos;re looking into the router and dynamic routes. When we are working with dynamic content we need to pass the ID (or similar) of the content we would like to visit.
Luckily, Nuxt handles this automagically for us.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d1919ae74a342898460e</video:player_loc>
      <video:duration>113</video:duration>
      <video:publication_date>2018-11-06T12:38:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/adding-a-navbar-to-nuxt-apps</loc>
    <lastmod>2018-11-06T12:36:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696795d8e39380f186472567/69c2d1914f62335fd4508b9c/thumbnail-1-0.png?v=1774375685490</video:thumbnail_loc>
      <video:title>Adding a Navbar to Nuxt Apps</video:title>
      <video:description>In this lesson, we&apos;re exploring where to put your navbar and other parts of your application that will be present on all pages.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d1914f62335fd4508b9c</video:player_loc>
      <video:duration>89</video:duration>
      <video:publication_date>2018-11-06T12:36:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/global-css</loc>
    <lastmod>2018-11-06T12:33:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696795d8e39380f186472567/69c2d1914f62335fd4508b9f/thumbnail-1-0.png?v=1774375850901</video:thumbnail_loc>
      <video:title>Global CSS</video:title>
      <video:description>While scoped styles are handy, they cannot solve all our CSS needs. You often need to have a set of global CSS rules to take care of your fundamental styling needs.
Luckily Nuxt.js has a very elegant solution that allows us to inject global CSS in our project directly from the config file. Whether it is a custom CSS file from your assets directory or an NPM package.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d1914f62335fd4508b9f</video:player_loc>
      <video:duration>151</video:duration>
      <video:publication_date>2018-11-06T12:33:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/nuxtjs-page-components</loc>
    <lastmod>2018-11-06T12:21:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696795d8e39380f186472567/69c2d191531f7f7b6cecb0af/thumbnail-1-0.png?v=1774375872363</video:thumbnail_loc>
      <video:title>Nuxt.js Page Components</video:title>
      <video:description>In this lesson, we will learn how to create new pages in a Nuxt.js application. We also see a real-world example of why you should always use multi-worded names on your components.
We have prepared CSS for the Post Page and the default layout component for this course. Click the links to download them individually.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d191531f7f7b6cecb0af</video:player_loc>
      <video:duration>179</video:duration>
      <video:publication_date>2018-11-06T12:21:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/customize-the-home-page</loc>
    <lastmod>2018-11-06T12:16:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696795d8e39380f186472567/69c2d1919ae74a3428984625/thumbnail-1-0.png?v=1774375651578</video:thumbnail_loc>
      <video:title>Customize the home page</video:title>
      <video:description>In this lesson, we start to customize our home page of our Nuxt project.
Click here to get the CSS we use in the video.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d1919ae74a3428984625</video:player_loc>
      <video:duration>56</video:duration>
      <video:publication_date>2018-11-06T12:16:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/guided-nuxtjs-project-tour</loc>
    <lastmod>2018-11-06T11:53:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696795d8e39380f186472567/69c2d224531f7f7b6cecbd12/thumbnail-1-0.png?v=1774375930203</video:thumbnail_loc>
      <video:title>Guided Nuxt.js Project Tour</video:title>
      <video:description>In this lesson, we&apos;ll show you around in our newly created Nuxt project. 
Please note that each directory includes a readme file, that explains what the directory is. You can safely delete the directories of the features you do not need.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d224531f7f7b6cecbd12</video:player_loc>
      <video:duration>122</video:duration>
      <video:publication_date>2018-11-06T11:53:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-nuxt-app</loc>
    <lastmod>2018-11-06T11:36:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696795d8e39380f186472567/69c2d2264f62335fd45097e6/thumbnail-1-0.png?v=1774375711945</video:thumbnail_loc>
      <video:title>Create Nuxt App</video:title>
      <video:description>Nuxt.js has an official scaffolding tool (create-nuxt-app), that you can use from your package manager. 
In this lesson, we will use yarn to set up our new Nuxt.js project, with this command:
yarn create nuxt-app nuxt-fundamentals
You can also use npx (´npx´ is shipped by default since NPM ´5.2.0´)
npx create-nuxt-app nuxt-fundamentals</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d2264f62335fd45097e6</video:player_loc>
      <video:duration>98</video:duration>
      <video:publication_date>2018-11-06T11:36:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-nuxtjs</loc>
    <lastmod>2018-11-06T11:27:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696795d8e39380f186472567/69c2d2309ae74a34289853fa/thumbnail-1-0.png?v=1774375921632</video:thumbnail_loc>
      <video:title>What is Nuxt.js?</video:title>
      <video:description>Nuxt.js is a framework for creating Vue.js applications. Its goal is to help Vue developers take advantage of top-notch technologies, fast, easy and in an organized way.
In this lesson, we talk about some of the awesome features Nuxt.js brings to the table:

SEO with Server Side Rendering (SSR)
Pre Rendering
Code Splitting

You do not need to know Nuxt.js to take this course, but you should know Vue.js. Check out our other courses if you want to learn Vue.js.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2d2309ae74a34289853fa</video:player_loc>
      <video:duration>225</video:duration>
      <video:publication_date>2018-11-06T11:27:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/custom-vuejs-directive-values</loc>
    <lastmod>2018-10-15T10:51:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c4806c123b739cbbc2895d/69c480a2b365493ac067994c/thumbnail-1-0.png?v=1774486142124</video:thumbnail_loc>
      <video:title>Custom Directive&apos;s Value</video:title>
      <video:description>Many directives require a value, and in this lesson, we&apos;re learning how to pass, receive and act upon the custom directive&apos;s value.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c480a2b365493ac067994c</video:player_loc>
      <video:duration>201</video:duration>
      <video:publication_date>2018-10-15T10:51:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-vuejs-directive</loc>
    <lastmod>2018-10-15T10:47:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c4806c123b739cbbc2895d/69c480a2123b739cbbc28df0/thumbnail-1-0.png?v=1774486078910</video:thumbnail_loc>
      <video:title>Create Vue.js Directive</video:title>
      <video:description>In this lesson, you&apos;ll learn how to create a custom Vue.js directive.
We will create a very important directive that we simply cannot live without. We will create the v-purple directive.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c480a2123b739cbbc28df0</video:player_loc>
      <video:duration>83</video:duration>
      <video:publication_date>2018-10-15T10:47:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/understanding-vuejs-directives</loc>
    <lastmod>2018-10-15T10:37:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c4806c123b739cbbc2895d/69c480a2123b739cbbc28df9/thumbnail-1-0.png?v=1774486267246</video:thumbnail_loc>
      <video:title>Understanding Vue.js Directives</video:title>
      <video:description>In this lesson, we go through Vue.js directives from top to bottom. We learn what they are and how you use them. We learn that a directive&apos;s job is to apply side effects to the DOM and that they can be modified with modifiers.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c480a2123b739cbbc28df9</video:player_loc>
      <video:duration>155</video:duration>
      <video:publication_date>2018-10-15T10:37:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/why-is-testing-important</loc>
    <lastmod>2018-10-15T07:22:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ac30b25141dfa4d0a48a/69c3e222123b739cbbb3703b/thumbnail-1-0.png?v=1774445881679</video:thumbnail_loc>
      <video:title>Why is testing important?</video:title>
      <video:description>Testing your software is important, and in this lesson, we will tell you why.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3e222123b739cbbb3703b</video:player_loc>
      <video:duration>200</video:duration>
      <video:publication_date>2018-10-15T07:22:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-are-stubs</loc>
    <lastmod>2018-10-15T07:06:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ac30b25141dfa4d0a48a/69c3e222e018a8d703468f7b/thumbnail-1-0.png?v=1774445461302</video:thumbnail_loc>
      <video:title>What are stubs?</video:title>
      <video:description>In this lesson, we&apos;re learning what stubs are when it comes to JavaScript testing.
Stubs are similar to mocks, but they only replace small parts of your code compared to Mocks who replace the entire dependency.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3e222e018a8d703468f7b</video:player_loc>
      <video:duration>188</video:duration>
      <video:publication_date>2018-10-15T07:06:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-are-spies-javascript-testing</loc>
    <lastmod>2018-10-15T06:37:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ac30b25141dfa4d0a48a/69c3e222123b739cbbb37039/thumbnail-1-0.png?v=1774445330808</video:thumbnail_loc>
      <video:title>What are spies?</video:title>
      <video:description>In this lesson, we&apos;re going to learn what spies are when it comes to testing in JavaScript. Spies are very handy and often has a lighter footprint than mocks.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3e222123b739cbbb37039</video:player_loc>
      <video:duration>144</video:duration>
      <video:publication_date>2018-10-15T06:37:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-are-mocks-and-mocking-javascript-testing</loc>
    <lastmod>2018-10-15T06:05:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ac30b25141dfa4d0a48a/69c3e222123b739cbbb3703d/thumbnail-1-0.png?v=1774445478291</video:thumbnail_loc>
      <video:title>What are mocks and mocking?</video:title>
      <video:description>Mocks are a common tool when writing tests for your software. In this lesson, we&apos;re learning what mocks are and why and when they are useful.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3e222123b739cbbb3703d</video:player_loc>
      <video:duration>250</video:duration>
      <video:publication_date>2018-10-15T06:05:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/types-of-testing</loc>
    <lastmod>2018-10-15T05:57:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ac30b25141dfa4d0a48a/69c3e222e018a8d703468f79/thumbnail-1-0.png?v=1774445520921</video:thumbnail_loc>
      <video:title>Types of Testing</video:title>
      <video:description>In this lesson about testing, we&apos;re learning about the different types of tests we can create. 
We&apos;ll talk about 

Unit Tests
Integration Tests
Acceptance Tests (often called end-to-end tests)</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3e222e018a8d703468f79</video:player_loc>
      <video:duration>290</video:duration>
      <video:publication_date>2018-10-15T05:57:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-to-test</loc>
    <lastmod>2018-10-15T05:00:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967ac30b25141dfa4d0a48a/69c3e222e018a8d703468f76/thumbnail-1-0.png?v=1774445441682</video:thumbnail_loc>
      <video:title>What to test?</video:title>
      <video:description>In this testing lesson, we&apos;re going to learn how to evaluate our code and identify what we should test. We walk through a User class and evaluate each method.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3e222e018a8d703468f76</video:player_loc>
      <video:duration>259</video:duration>
      <video:publication_date>2018-10-15T05:00:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/control-child-component-through-refs</loc>
    <lastmod>2018-09-15T15:56:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2eb963b13b4783935ee09/69c2ee986eaf6261464c55b5/thumbnail-1-0.png?v=1774383385282</video:thumbnail_loc>
      <video:title>Control Child Component Through refs</video:title>
      <video:description>In this lesson, we&apos;ll learn how to control a component through the powerful ref feature of Vue.js.
By assigning a ref to the component, we have full access and control over the step, which is exactly what our mama form needs.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ee986eaf6261464c55b5</video:player_loc>
      <video:duration>341</video:duration>
      <video:publication_date>2018-09-15T15:56:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/communication-between-forms</loc>
    <lastmod>2018-09-15T15:07:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2eb963b13b4783935ee09/69c2ee986eaf6261464c55b3/thumbnail-1-0.png?v=1774383581435</video:thumbnail_loc>
      <video:title>Communication Between Forms</video:title>
      <video:description>In this lesson, we&apos;ll walk through the boilerplate that we have prepared for you and work on the communication between the steps and the mother form, using events.
Make sure you have the boilerplate by either downloading the starting-point branch directly from GitHub or cloning it in your terminal:
git clone --single-branch -b starting-point git@github.com:vueschool/dynamic-forms.git
See our Form Validation Course if you want to learn more about the topic or the Event Documentation if needed.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ee986eaf6261464c55b3</video:player_loc>
      <video:duration>511</video:duration>
      <video:publication_date>2018-09-15T15:07:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/the-dynamic-form</loc>
    <lastmod>2018-09-15T14:48:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2eb963b13b4783935ee09/69c2ef2006e4c3b9a357ce7b/thumbnail-1-0.png?v=1774383127016</video:thumbnail_loc>
      <video:title>The Badass Dynamic Form</video:title>
      <video:description>This course is all about dynamic forms and in this lesson, we&apos;ll go through what we will build.
The dynamic form of this vue.js course will have the following steps:

Pick a Coffee plan
Login or register
Enter shipping details
A summary page where you can add additional treats
Confirm order

The course requires some markup and CSS that we have prepared beforehand, make sure you download the starting point. 
You can run this command in your favorite terminal:
git clone --single-branch -b starting-point git@github.com:vueschool/dynamic-forms.git
Or download the starting-point branch directly from GitHub.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2ef2006e4c3b9a357ce7b</video:player_loc>
      <video:duration>100</video:duration>
      <video:publication_date>2018-09-15T14:48:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-form-validation-with-vuelidate</loc>
    <lastmod>2018-08-21T07:54:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967acf36a1e75f7ab3ec406/69c3ca95e018a8d703440090/thumbnail-1-0.png?v=1774439734129</video:thumbnail_loc>
      <video:title>Form Validation with Vuelidate</video:title>
      <video:description>In this lesson, we&apos;ll get started with Vuelidate and take a look at how we can validate our forms with Vuelidates validators.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3ca95e018a8d703440090</video:player_loc>
      <video:duration>309</video:duration>
      <video:publication_date>2018-08-21T07:54:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-form-validation-diy</loc>
    <lastmod>2018-08-21T07:29:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967acf36a1e75f7ab3ec406/69c3caca123b739cbbb0ea92/thumbnail-1-0.png?v=1774439946500</video:thumbnail_loc>
      <video:title>Do It Yourself Form Validation</video:title>
      <video:description>Form validation is important for most applications, and while some forms can be validated through simple techniques it often comes as an expense to the user experience. 
This lesson works as an intro to the form validation chapter. We will take a look at what&apos;s required from our end to validate forms and provide a rich user experience when validation forms in this lesson.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3caca123b739cbbb0ea92</video:player_loc>
      <video:duration>385</video:duration>
      <video:publication_date>2018-08-21T07:29:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/global-navigation-guards-and-meta-fields</loc>
    <lastmod>2018-06-27T08:16:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793cbb25141dfa4ce0854/69c6f7f81f1dc34da84fb7be/thumbnail-1-0.png?v=1774650618646</video:thumbnail_loc>
      <video:title>Global Navigation Guards and Meta Fields</video:title>
      <video:description>A third alternative to protecting sections of your vue.js applications is to use Global Navigation Guards with meta fields. With this method, we&apos;d register the guards in the Vue routers beforeEach hook and make decisions based on a routes meta fields (e.g. requiresAuth: true).
In this lesson, we&apos;ll learn how to set up global navigation guards and get a few ideas on how we can benefit from storing data in the route meta fields.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c6f7f81f1dc34da84fb7be</video:player_loc>
      <video:duration>298</video:duration>
      <video:publication_date>2018-06-27T08:16:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-computed-properties</loc>
    <lastmod>2018-06-21T14:49:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793f5b25141dfa4ce0cf1/69c1c661c98b51e9c5647eae/thumbnail-1-0.png?v=1774316263969</video:thumbnail_loc>
      <video:title>Computed Properties</video:title>
      <video:description>Computed properties are another powerful feature from Vue that allows us to transform or perform calculations on our data and then easily reuse the result as an up-to-date variable in our template. Computed properties are very useful and should replace complex in-template expressions.
While this explanation without any code examples might not make much sense right now, it surely will after you&apos;ve watched this lessons on computed properties.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1c661c98b51e9c5647eae</video:player_loc>
      <video:duration>270</video:duration>
      <video:publication_date>2018-06-21T14:49:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-dynamic-classes</loc>
    <lastmod>2018-06-21T11:30:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793f5b25141dfa4ce0cf1/69c1c66124ffd038ef7e030f/thumbnail-1-0.png?v=1774309308619</video:thumbnail_loc>
      <video:title>Dynamic Classes</video:title>
      <video:description>A common need and use case for attribute bindings is to manipulate the look of elements through CSS classes or style attributes. To make this task easier than ever, Vue provides special enhancements when v-bind is used with the class or style attribute. In this lesson, we&apos;re learning how to apply classes based on our Vue data conditionally.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1c66124ffd038ef7e030f</video:player_loc>
      <video:duration>472</video:duration>
      <video:publication_date>2018-06-21T11:30:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-attribute-bindings</loc>
    <lastmod>2018-06-21T11:26:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793f5b25141dfa4ce0cf1/69c1c66138a6314ac3a75736/thumbnail-1-0.png?v=1774308428475</video:thumbnail_loc>
      <video:title>Attribute Bindings</video:title>
      <video:description>We do know how to render data in the DOM, and now it&apos;s time to take a closer look at how we can bind HTML attributes to our Vue data. 
This is achieved with Vue&apos;s v-bind directive and would let us change the href of a link or swap out an image if we need to.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1c66138a6314ac3a75736</video:player_loc>
      <video:duration>175</video:duration>
      <video:publication_date>2018-06-21T11:26:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-conditionals</loc>
    <lastmod>2018-06-21T11:12:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793f5b25141dfa4ce0cf1/69c1c66124ffd038ef7e0309/thumbnail-1-0.png?v=1774308818676</video:thumbnail_loc>
      <video:title>Conditional Rendering</video:title>
      <video:description>Conditional rendering is essential on any dynamic website. Vue.js offers two ways to conditionally render elements on our page and in this lesson we&apos;re learning how the v-if and v-else directives work.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1c66124ffd038ef7e0309</video:player_loc>
      <video:duration>253</video:duration>
      <video:publication_date>2018-06-21T11:12:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vue-methods</loc>
    <lastmod>2018-06-21T11:08:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793f5b25141dfa4ce0cf1/69c1c66124ffd038ef7e02e8/thumbnail-1-0.png?v=1774308630582</video:thumbnail_loc>
      <video:title>Vue Methods</video:title>
      <video:description>It is handy to be able to run JavaScript expressions directly in the template or a directive sometimes - but not always. 
When the expression is getting too verbose or needs to be reused in multiple places, we can extract the logic to a function and fire the function instead. These functions are called methods and allow us to DRY up the code.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1c66124ffd038ef7e02e8</video:player_loc>
      <video:duration>318</video:duration>
      <video:publication_date>2018-06-21T11:08:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-user-events</loc>
    <lastmod>2018-06-21T11:01:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793f5b25141dfa4ce0cf1/69c1c66124ffd038ef7e030d/thumbnail-1-0.png?v=1774308812632</video:thumbnail_loc>
      <video:title>User Events</video:title>
      <video:description>In this lesson, we&apos;ll learn how to respond to user events with Vue&apos;s v-on directive.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1c66124ffd038ef7e030d</video:player_loc>
      <video:duration>340</video:duration>
      <video:publication_date>2018-06-21T11:01:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-user-inputs-vue-devtools</loc>
    <lastmod>2018-06-21T10:56:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793f5b25141dfa4ce0cf1/69c1c66138a6314ac3a75738/thumbnail-1-0.png?v=1774309041993</video:thumbnail_loc>
      <video:title>User Inputs &amp; Vue Devtools</video:title>
      <video:description>We will continue to learn about the reactivity system in this lesson. You&apos;ll learn how to handle user inputs with the v-model directive, and we will also introduce the Vue Devtools. The Vue Devtools is an invaluable browser extension to Chrome and Firefox that will speed up your development and bug hunting.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1c66138a6314ac3a75738</video:player_loc>
      <video:duration>667</video:duration>
      <video:publication_date>2018-06-21T10:56:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-loops</loc>
    <lastmod>2018-06-21T10:48:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793f5b25141dfa4ce0cf1/69c1c66138a6314ac3a75734/thumbnail-1-0.png?v=1774308933660</video:thumbnail_loc>
      <video:title>List Rendering</video:title>
      <video:description>In almost all applications there is a need to loop or filter through a list of items and render them on the site. In this lesson, we&apos;re taking a closer look at Vue&apos;s v-for directive, which lets us filter through arrays and objects in an elegant matter.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1c66138a6314ac3a75734</video:player_loc>
      <video:duration>466</video:duration>
      <video:publication_date>2018-06-21T10:48:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-template-syntax-and-expressions</loc>
    <lastmod>2018-06-21T10:36:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793f5b25141dfa4ce0cf1/69c1c66138a6314ac3a75732/thumbnail-1-0.png?v=1774308437914</video:thumbnail_loc>
      <video:title>Vue.js Template Syntax And Expressions</video:title>
      <video:description>In the previous lesson, we briefly touched upon the templating syntax where we bind Vue data to the DOM.
In this lesson, we&apos;ll take deeper dive into the Vue&apos;s templating syntax and learn how to run JavaScript expressions in the template.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1c66138a6314ac3a75732</video:player_loc>
      <video:duration>146</video:duration>
      <video:publication_date>2018-06-21T10:36:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/getting-started-with-vuejs</loc>
    <lastmod>2018-06-21T10:33:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793f5b25141dfa4ce0cf1/69c1c661c98b51e9c5647ebf/thumbnail-1-0.png?v=1774308825621</video:thumbnail_loc>
      <video:title>Getting Started With Vue.js 2</video:title>
      <video:description>In the very first lesson of our Vue.js 2 Fundamentals course, besides of learning how to easily add Vue.js from a CDN to our site we&apos;re going to take a look at Vue.js enjoyable and automatic reactivity system.
Install Snippet
&amp;lt;script src=&quot;https://unpkg.com/vue@2&quot;&amp;gt;&amp;lt;/script&amp;gt;</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c1c661c98b51e9c5647ebf</video:player_loc>
      <video:duration>232</video:duration>
      <video:publication_date>2018-06-21T10:33:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/componentless-routes-with-navigation-guards</loc>
    <lastmod>2018-06-19T08:02:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793cbb25141dfa4ce0854/69c6f7f7f7bf88d62b0e33f8/thumbnail-1-0.png?v=1774650318566</video:thumbnail_loc>
      <video:title>Componentless Routes with Navigation Guards</video:title>
      <video:description>In-component guards are useful in certain scenarios, in this lesson we&apos;re learning how to set the guard directly in the Vue router.
We will also learn how we can create navigation guards for componentless routes (such as logout).</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c6f7f7f7bf88d62b0e33f8</video:player_loc>
      <video:duration>174</video:duration>
      <video:publication_date>2018-06-19T08:02:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/in-component-navigation-guards</loc>
    <lastmod>2018-06-19T07:28:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793cbb25141dfa4ce0854/69c6f7c2f7bf88d62b0e2e32/thumbnail-1-0.png?v=1774650540824</video:thumbnail_loc>
      <video:title>In Component Navigation Guards</video:title>
      <video:description>Route protection is essential in any application that allows users to authenticate and in this lesson, we&apos;re learning how to protect Vue components with navigation guards. A navigation guard acts as a middleware that can protect a route component.
We&apos;re also learning how to access data from child components through component refs and how to prevent navigation if a user has made changes to a form.
Click here for the exercise solution.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c6f7c2f7bf88d62b0e2e32</video:player_loc>
      <video:duration>424</video:duration>
      <video:publication_date>2018-06-19T07:28:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/sign-up-in-or-out-with-firebase-authentication</loc>
    <lastmod>2018-05-11T11:41:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2e5f41f4c44c59079249e/69c2e8173fe452f53abca467/thumbnail-1-0.png?v=1774381896240</video:thumbnail_loc>
      <video:title>Sign up, in, or out with Firebase Authentication</video:title>
      <video:description>In this lesson, we&apos;re implementing Firebase Authentication in our application. We&apos;ll learn how to register new users with Firebase&apos;s email and password provider. We&apos;re also learning how to create an event listener to manage the authenticated state of the Firebase user when he or she signs in and out.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2e8173fe452f53abca467</video:player_loc>
      <video:duration>468</video:duration>
      <video:publication_date>2018-05-11T11:41:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/introduction-to-firebase-authentication</loc>
    <lastmod>2018-05-11T11:36:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c2e5f41f4c44c59079249e/69c2e8171f4c44c5907953bd/thumbnail-1-0.png?v=1774382271830</video:thumbnail_loc>
      <video:title>Introduction to Firebase Authentication</video:title>
      <video:description>In this lesson, we&apos;re giving you a quick introduction to what Firebase Authentication is, why it&apos;s so powerful and why we want to use Firebase Authentication in our JavaScript and Vue.js applications.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c2e8171f4c44c5907953bd</video:player_loc>
      <video:duration>95</video:duration>
      <video:publication_date>2018-05-11T11:36:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/understanding-the-vuejs-lifecycle-hooks</loc>
    <lastmod>2018-04-07T12:38:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793cbb25141dfa4ce0854/69c6fa9f1f1dc34da850084e/thumbnail-1-0.png?v=1774652358617</video:thumbnail_loc>
      <video:title>Understanding the Vue.js Lifecycle Hooks</video:title>
      <video:description>Each Vue instance has many lifecycle hooks that let us run code at certain stages of the lifecycle of a vue instance or vue component. In this lesson, we&apos;re taking a deeper look at the Vue.js lifecycle hooks.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c6fa9f1f1dc34da850084e</video:player_loc>
      <video:duration>262</video:duration>
      <video:publication_date>2018-04-07T12:38:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/meet-firebase-realtime-database</loc>
    <lastmod>2018-03-27T07:35:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3c984e018a8d70343d85a/69c3e7b0b365493ac0590b29/thumbnail-1-0.png?v=1774454600966</video:thumbnail_loc>
      <video:title>Meet Firebase Realtime Database</video:title>
      <video:description>In this lesson, we&apos;ll create our first realtime database in Firebase, and prepare the necessary data structure for our realtime chatroom.
You can find the JSON file on GitHub.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3e7b0b365493ac0590b29</video:player_loc>
      <video:duration>186</video:duration>
      <video:publication_date>2018-03-27T07:35:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-firebase-and-why-is-it-so-great</loc>
    <lastmod>2018-03-27T07:33:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/69c3c984e018a8d70343d85a/69c3e7b0123b739cbbb3f2e0/thumbnail-1-0.png?v=1774447023485</video:thumbnail_loc>
      <video:title>What is Firebase and Why is it so Great?</video:title>
      <video:description>Firebase is a platform with different services, that helps us develop applications quicker. Firebase is developed with mobile development in mind, but it&apos;s absolutely not limited to mobile apps.
In this intro lesson, we&apos;ll run a short introduction to Firebase, some of their features, prices, and lastly answer a common question: Who uses Firebase in production?</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c3e7b0123b739cbbb3f2e0</video:player_loc>
      <video:duration>126</video:duration>
      <video:publication_date>2018-03-27T07:33:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/what-is-a-higher-order-function</loc>
    <lastmod>2018-03-15T08:03:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793cbb25141dfa4ce0854/69c6fa2b7a8212fa5f91c6f3/thumbnail-1-0.png?v=1774652085315</video:thumbnail_loc>
      <video:title>What is a Higher Order Function?</video:title>
      <video:description>In this episode, we&apos;re going to take a look at a cool concept of functional programming in JavaScript - higher order functions. Higher order function is just fancy terminology for a function that either accepts a function or returns a function, but let&apos;s see how we would use them in our applications.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c6fa2b7a8212fa5f91c6f3</video:player_loc>
      <video:duration>273</video:duration>
      <video:publication_date>2018-03-15T08:03:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuejs-custom-prop-validation</loc>
    <lastmod>2018-03-05T10:33:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/696793cbb25141dfa4ce0854/69c6fa147a8212fa5f91c41c/thumbnail-1-0.png?v=1774652098847</video:thumbnail_loc>
      <video:title>Vue.js Custom Prop Validation</video:title>
      <video:description>In this vue.js tutorial, we&apos;ll take a look at the custom prop validation, which is an exciting and convenient feature of Vue.js. With a custom prop validator, you can create custom logic to validate that the component received precisely what it needs.
In this lesson, we&apos;ll create a custom validator for our post prop, and also throw errors in the console if the post is invalid.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69c6fa147a8212fa5f91c41c</video:player_loc>
      <video:duration>188</video:duration>
      <video:publication_date>2018-03-05T10:33:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/split-vuex-store-in-multiple-files</loc>
    <lastmod>2018-01-31T13:20:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab60b28b86e9ed04b14302/thumbnail-1-0.png?v=1772839646094</video:thumbnail_loc>
      <video:title>Split Vuex Store in Multiple Files</video:title>
      <video:description>The Vuex store can quickly become big and bloated in a large application. In this vue.js tutorial, we’ll show you how you can split your Vuex store into multiple files.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab60b28b86e9ed04b14302</video:player_loc>
      <video:duration>71</video:duration>
      <video:publication_date>2018-01-31T13:20:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/module-namespaces</loc>
    <lastmod>2018-01-25T06:44:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab612206a15537d05391c5/thumbnail-1-0.png?v=1772840224408</video:thumbnail_loc>
      <video:title>Namespaced Vuex Modules</video:title>
      <video:description>In the previous Vuex tutorial, we learned that by default, getters, actions, and mutations inside modules are registered under the global namespace, which allows multiple modules to react to the same mutation or action.
In this lesson we’re going to learn how to namespace our Vuex modules, to control this behavior.
This lesson is the final tutorial in our Vuex for Everyone course. If you’re enrolled in The Vue.js Master Class, we’ll show you how to implement and use everything we’ve learned in this course in a real-world application.
If you like this Vue.js course, please share it with your friends.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab612206a15537d05391c5</video:player_loc>
      <video:duration>387</video:duration>
      <video:publication_date>2018-01-25T06:44:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuex-modules</loc>
    <lastmod>2018-01-25T06:43:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab662d06a15537d053ef84/thumbnail-1-0.png?v=1772848396238</video:thumbnail_loc>
      <video:title>Vuex Modules</video:title>
      <video:description>When splitting the store into multiple files isn’t enough, you can extract the store into multiple Vuex modules. 
Each Vuex modules can contain its own state, mutations, actions, getters and even their own modules. In this vue.js tutorial, we’ll learn how to use Vuex Modules and implement it in our shopping cart app.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab662d06a15537d053ef84</video:player_loc>
      <video:duration>443</video:duration>
      <video:publication_date>2018-01-25T06:43:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuex-mapping-state-mutations-getters-and-actions</loc>
    <lastmod>2018-01-25T06:42:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab60b206a15537d053897c/thumbnail-1-0.png?v=1772840149371</video:thumbnail_loc>
      <video:title>Vuex Map Helpers</video:title>
      <video:description>In this vue.js tutorial, we’ll show you how the Vuex map helpers work and how they can be beneficial by making your code less verbose. We’ll cover Vuex mapState, mapGetters, mapActions and mapMutations.
We also use and explain the ES7 Object Spread Operator, which we use to combine maps and ordinary properties.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab60b206a15537d053897c</video:player_loc>
      <video:duration>484</video:duration>
      <video:publication_date>2018-01-25T06:42:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/dynamic-vuex-getters</loc>
    <lastmod>2018-01-25T06:40:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab60b206a15537d0538986/thumbnail-1-0.png?v=1772839853954</video:thumbnail_loc>
      <video:title>Dynamic Vuex Getters</video:title>
      <video:description>In this Vue.js tutorial, we’ll look into how we can use higher order functions to create dynamic getters in Vuex. Dynamic getters allow us to pass arguments to a getter. This is particularly useful if you want to query your store.
A common use case is to create a getter to find an item in the state using its id.
getProductById (state, getters) {
    return id =&amp;gt; {
        return state.products.find(product =&amp;gt; product.id === id)
    }
}</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab60b206a15537d0538986</video:player_loc>
      <video:duration>151</video:duration>
      <video:publication_date>2018-01-25T06:40:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuex-mutation-history-and-vue-devtools</loc>
    <lastmod>2018-01-25T05:55:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab60b206a15537d0538966/thumbnail-1-0.png?v=1772839966308</video:thumbnail_loc>
      <video:title>Vuex Mutation History and Vue Devtools</video:title>
      <video:description>In this tutorial, we’ll show you how you can test drive your shopping cart functionality with the Vue Devtools.
The devtools have a Vuex tab, and whenever Vuex dispatches a mutation, a history event is logged. This makes it easy to see that your Vue application works as expected and debug it if needed. Watch the lesson to learn more about this Vue necessity!
Vue Devtools are available for Firefox and Chrome, if you haven’t installed it yet, you definitely should!</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab60b206a15537d0538966</video:player_loc>
      <video:duration>166</video:duration>
      <video:publication_date>2018-01-25T05:55:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/checkout</loc>
    <lastmod>2018-01-19T17:22:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab60b206a15537d0538988/thumbnail-1-0.png?v=1772840082975</video:thumbnail_loc>
      <video:title>Checkout</video:title>
      <video:description>In this lesson of the Vuex course, it’s time to let the users check out after they’ve added some sweet stuff to their shopping cart.
A checkout process is usually responsible for multiple things, some of them could be:

Checking if the items are still in stock
Interacting with the payment processor
Emptying the cart
Reporting back to the user if the purchase was successful or not

In this vue.js tutorial, we’re doing a simplified version of a checkout process, but what we already know is that multiple things will need to take place.
We’ve said it before, and you probably remember, but we’re going to repeat ourselves:
In Vuex, actions are responsible for the logic of when a mutation should be dispatched, while each mutation is only responsible for one single state change.
Can you imagine how we’re going to structure our checkout action?</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab60b206a15537d0538988</video:player_loc>
      <video:duration>229</video:duration>
      <video:publication_date>2018-01-19T17:22:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/cart-items-and-total</loc>
    <lastmod>2018-01-19T17:21:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab60b2bb772793aa1bf28a/thumbnail-1-0.png?v=1772839726323</video:thumbnail_loc>
      <video:title>Cart items and total</video:title>
      <video:description>When you’re developing, it’s very handy to test drive the application with the Vue devtools, but it’s not enough for the end users.
In this tutorial we’ll create the ShoppingCart component and interact with the Vuex state through getters, to get the items in the cart along with the cart total.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab60b2bb772793aa1bf28a</video:player_loc>
      <video:duration>272</video:duration>
      <video:publication_date>2018-01-19T17:21:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/add-products-to-the-cart</loc>
    <lastmod>2018-01-19T17:20:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab60b2bb772793aa1bf28e/thumbnail-1-0.png?v=1772846944042</video:thumbnail_loc>
      <video:title>Add products to the cart</video:title>
      <video:description>We’ve gained a theoretical overview of Vuex so far in this course, and in this tutorial, it’s time to implement what we’ve learned.
We’ll create the actual shopping cart in the state and make it functional by setting up the action and mutations necessary.
Remember that Vuex actions are responsible for handling the logic of when a mutation should be fired (dispatched), while mutations have the single responsibility of altering the state.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab60b2bb772793aa1bf28e</video:player_loc>
      <video:duration>308</video:duration>
      <video:publication_date>2018-01-19T17:20:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/store-access-from-all-components</loc>
    <lastmod>2018-01-19T10:54:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab60b206a15537d053895d/thumbnail-1-0.png?v=1772839413666</video:thumbnail_loc>
      <video:title>Store Access from all Components</video:title>
      <video:description>In this lesson, we’ll learn how we can easily access the Vuex store from all child components.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab60b206a15537d053895d</video:player_loc>
      <video:duration>53</video:duration>
      <video:publication_date>2018-01-19T10:54:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuex-actions</loc>
    <lastmod>2018-01-19T10:42:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab60b2bb772793aa1bf28c/thumbnail-1-0.png?v=1772840162064</video:thumbnail_loc>
      <video:title>Vuex Actions</video:title>
      <video:description>In this lesson, we’ll dive into what Vuex actions are, and how and where to define in our application. 
We’ll point out a true benefit of using actions to fetch our products from the store compared to fetching products directly inside a component.
Since actions usually are asynchronous we’ve added a little bonus section with promises.
As always we’ll implement what we’ve learned and progressively build our shopping cart.
You can find the spinner image here.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab60b2bb772793aa1bf28c</video:player_loc>
      <video:duration>265</video:duration>
      <video:publication_date>2018-01-19T10:42:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuex-getters</loc>
    <lastmod>2018-01-19T10:34:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab60b206a15537d0538968/thumbnail-1-0.png?v=1772840579267</video:thumbnail_loc>
      <video:title>Vuex Getters</video:title>
      <video:description>Think of the Vuex getters as computed properties - perfect when we need to filter or calculate something at runtime.
This lesson explains how the getters work, and how and where to define them. We’ll also implement what we’ve learned in our shopping cart.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab60b206a15537d0538968</video:player_loc>
      <video:duration>117</video:duration>
      <video:publication_date>2018-01-19T10:34:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/vuex-mutations</loc>
    <lastmod>2018-01-19T10:27:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab61418b86e9ed04b14d27/thumbnail-1-0.png?v=1772840159535</video:thumbnail_loc>
      <video:title>Vuex Mutations</video:title>
      <video:description>Mutations are a responsible for single state changes. We’ll show you how and create the mutation needed to set the products in our store, and we’ll stress the importance of understanding the true difference between actions and mutations.
We’ll also implement what we’ve learned in our shopping cart app.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab61418b86e9ed04b14d27</video:player_loc>
      <video:duration>202</video:duration>
      <video:publication_date>2018-01-19T10:27:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/install-and-use-vuex</loc>
    <lastmod>2018-01-19T10:14:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab6141bb772793aa1bfd1d/thumbnail-1-0.png?v=1772840040459</video:thumbnail_loc>
      <video:title>Install and use Vuex</video:title>
      <video:description>In this Vuex lesson, we’ll learn how to install and use Vuex in any application.
We’ll then take a brief theoretical look at the different Vuex options available. The available options are state, getters, actions, and mutations. Modules will be introduced later in the course.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab6141bb772793aa1bfd1d</video:player_loc>
      <video:duration>117</video:duration>
      <video:publication_date>2018-01-19T10:14:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/create-a-new-project-with-vue-cli</loc>
    <lastmod>2018-01-19T10:04:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab61228b86e9ed04b14b28/thumbnail-1-0.png?v=1772840047197</video:thumbnail_loc>
      <video:title>Create a new project with vue-cli</video:title>
      <video:description>Before we start our quest to learn Vuex, we’ll need a fresh Vue project. In this lesson, we’ll set up a new Vue.js project using the vue-cli. 
Did you know that our Vuex course is based on the official Vuex example?
Since it is, we’ll grab the shop.js from the official Github repo which will serve as our simulated API.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab61228b86e9ed04b14b28</video:player_loc>
      <video:duration>225</video:duration>
      <video:publication_date>2018-01-19T10:04:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
  <url>
    <loc>https://vueschool.io/lessons/meet-vuex</loc>
    <lastmod>2018-01-19T09:35:00.000Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://video.gumlet.io/6967948cb25141dfa4ce1eec/69ab612206a15537d05391d4/thumbnail-1-0.png?v=1772847078575</video:thumbnail_loc>
      <video:title>Meet Vuex</video:title>
      <video:description>Vuex is a state management library for Vue applications. In this lesson, we&apos;ll go through an imaginary app and look at two different ways to handle the application data. By the end of this introductory lesson to Vuex, you&apos;ll have a deeper understanding of how Vuex works and the benefit of using Vuex as a centralized store.
We&apos;ll also answer the frequently asked question of when to use Vuex.</video:description>
      <video:player_loc>https://play.gumlet.io/embed/69ab612206a15537d05391d4</video:player_loc>
      <video:duration>166</video:duration>
      <video:publication_date>2018-01-19T09:35:00.000Z</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:requires_subscription>no</video:requires_subscription>
    </video:video>
  </url>
</urlset>
