Skip to content

Commit 8a5729d

Browse files
authored
Merge branch 'layer5io:master' into add-academy-contribute-guide
2 parents 0d9fbc0 + 0420e31 commit 8a5729d

File tree

8 files changed

+139
-61
lines changed

8 files changed

+139
-61
lines changed

build/meshery-extensions.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v0.8.122-1
1+
v0.8.123-1
-52.2 KB
Loading

content/en/cloud/academy/creating-your-learning-path/index.md

Lines changed: 115 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ This guide provides a step-by-step walkthrough for creating and organizing a new
1414
Before you dive into creating your first learning path, it's helpful to be familiar with the core technologies and concepts used by the Academy platform.
1515

1616
- **Git and GitHub**: All learning content is managed in a Git repository.
17-
- **Markdown**: All course and chapter content is written in standard Markdown.
17+
- **Markdown**: All content is written in standard Markdown.
1818
- **Hugo**: The entire Academy platform is built on the [Hugo](https://gohugo.io/) static site generator.
1919
- **Academy Template & Theme**: We provide an `academy-example` repository that serves as a pre-configured template. [Layer5 Academy theme](https://github.com/layer5io/academy-theme) to ensure your content is styled correctly right out of the box.
2020
- **A Layer5 Cloud Account**: Required to obtain your Organization ID and Personal Access Token for publishing.
@@ -65,7 +65,7 @@ The Academy uses a specific directory layout to keep each organization's content
6565
Each learning path is tied to a specific organization and secured by a unique identifier (UUID). This is a system-generated ID that ensures your content is scoped only to your organization.
6666
6767
{{< alert type="info" title="How to Find Your Organization UUID?" >}}
68-
You can find and copy your Organization UUID from your organization page on [Layer5 Cloud](https://cloud.layer5.io/identity/organizations).
68+
You can find and copy your Organization UUID from your organization page on [Academy](https://cloud.layer5.io/academy).
6969
{{< /alert >}}
7070
7171
2. **Create the Core Directories**
@@ -79,80 +79,92 @@ You can find and copy your Organization UUID from your organization page on [Lay
7979
8080
3. **Build the Content Hierarchy**
8181
82-
With the main folders in place, you can now structure your first course inside the `content` directory. The content is organized in a clear hierarchy: **Learning PathCourse → Chapter**.
82+
With the main folders in place, you can now structure your first course inside the `content` directory. The content is organized in a clear hierarchy: A **Learning Path** contains **Courses**. A **Course** is primarily broken down into **Modules**, but can also conclude with a final **Quiz** that serves as a course exam. Finally, a **Module** consists of individual **Pages**, **Quizzes**, and **Labs**.
8383
8484
A high-level view of the structure looks like this:
8585
8686
```text
87-
content/
88-
└── learning-paths/
89-
├── _index.md
90-
└── ea124d12-234a-6f78-9df0-1fa2b3e4d567/ // <-- Organization UID
91-
└── mastering-kubernetes/ // <-- Learning Path
92-
├── _index.md
93-
└── advanced-networking/ // <-- Course 1
94-
└── core-concepts/ // <-- Course 2
95-
├── _index.md
96-
├── 01-pods.md // <-- Chapter 1
97-
└── 02-services.md // <-- Chapter 2
98-
└── arch.png // <-- Image
87+
learning-paths/
88+
└── mastering-kubernetes/ // <-- Learning Path
89+
├── _index.md
90+
├── advanced-networking/ // <-- Course 1
91+
│ └── _index.md
92+
└── core-concepts/ // <-- Course 2
93+
├── _index.md
94+
├── course-exam.md // <-- Course Exam (Quiz)
95+
└── 01-pods-and-services/ // <-- Module
96+
├── _index.md
97+
├── 01-pods.md // <-- Page 1
98+
├── 02-services.md // <-- Page 2
99+
├── 03-knowledge-check.md // <-- Quiz
100+
├── 04-hands-on-lab.md // <-- Lab
101+
└── arch.png // <-- Image
102+
99103
```
100104
101-
Each folder represents a level in the hierarchy, and the `_index.md` file within a folder defines the metadata (like title and description) for that level. The final `.md` files are your individual Chapter.
105+
Each folder represents a level in the hierarchy. The `_index.md` file within a folder is crucial as it defines the metadata for that level, such as its `title`, `description`, and `type` (e.g., `type: "course"`). The final `.md` files represent your individual learning activities: **Pages** and **Labs** are typically found inside Modules, while **Quizzes** can be found inside Modules (for knowledge checks) or directly under a Course (as a final exam).
102106
103107
> For a deeper understanding of how Hugo uses `_index.md` to create content sections, you can refer to the official [Hugo Page Bundles documentation](https://gohugo.io/content-management/page-bundles/).
104108
105109
4. **Front matter**
106110
107-
Use this at the top of each **Learning Path** page (`learning-paths/<orgId>/<slug>/_index.md` or similar):
111+
Front matter is the configuration block at the top of every content file that defines its metadata. The most critical field is type, which tells the Academy how to render the content.
112+
113+
The front matter configuration varies slightly depending on whether you are creating a Learning Path/Challengs, Course, Module, or Page. The following examples for a Learning Path and a Course illustrate a typical setup.
114+
115+
**Learing Path Frontmatter**
108116
109117
```yaml
110118
---
111-
title: "Advanced Course"
112-
description: "This ADVANCED - Course is where to get the technical knowledge."
119+
type: "learning-paths"
120+
title: "Cloud Fundamentals"
121+
description: "A learning path focused on providing the technical knowledge required for advanced topics."
113122
weight: 5
114-
banner: "images/exoscale-icon.svg"
115-
id: "754627a3-7993-4b01-a7f0-c66c0212a1a1"
116-
tags: [orchestration]
117-
categories: [introductory]
123+
banner: "images/kubernetes-icon.svg"
124+
id: "754627a3-2323-4545-a7f0-c66c0212a1a1"
125+
tags: [kubernetes, infrastructure]
126+
categories: "cloud"
118127
---
119128
```
120129
121-
> Place this frontmatter in the Markdown file that represents the learning path index page.
122-
123-
**Course Frontmatter (Optional Individual Course Pages)**
130+
**Course Frontmatter**
124131
125132
If each course has its own markdown page, you can use this frontmatter:
126133
127134
```yaml
128135
---
129-
id: "Networks"
130-
title: "Networks"
131-
description: "This course clear your Network concept"
136+
type: "course"
137+
title: "Intro Sustainability"
138+
description: "An introductory course exploring the core concepts of sustainability."
132139
weight: 2
133140
banner: "images/kubernetes-icon.svg"
134-
tags: [network]
135-
categories: [introductory]
141+
tags: [network, infrastructure]
142+
level: "beginner"
143+
categories: "compliance"
136144
---
137145
```
138146
139147
**Summary of Required Fields**
140148
141-
| Applicable To | Field | Required | Notes |
142-
| --------------- | ------------- | :------: | -------------------------------------------------------------------------- |
143-
| All | `title` | ✅ | The main display title. |
144-
| All | `description` | ✅ | A brief summary of the content. |
145-
| All | `weight` | ✅ | Controls the display order (lower numbers appear first). |
146-
| All | `banner` | ❌ | Path to an image in the `static` folder, e.g., `images/icon.svg`. |
147-
| All | `tags` | ❌ | Keywords for content discovery. |
148-
| All | `categories` | ❌ | The main categories for the content. |
149-
| All | `draft` | ❌ | If `true`, the page will not be published. |
150-
| **Learning Path** | `id` | ✅ | **Crucial.** A stable UUID for tracking progress. **Do not change.** [^1]|
151-
| **Course** | `id` | ❌ | A simple, human-readable string identifier for the course. |
152-
| **Course** | `prerequisites` | ❌ | Optional list of prerequisites for the course. |
149+
| Applicable To | Field | Required | Notes |
150+
| ----------------------------- | ------------- | :------: | ------------------------------------------------------------------------------------------------------------- |
151+
| All | `title` | ✅ | The main display title. |
152+
| All | `description` | ✅ | A brief summary of the content. |
153+
| All | `weight` | ✅ | Controls the display order (lower numbers appear first). |
154+
| All | `draft` | ❌ | If `true`, the page will not be published. |
155+
| All | `type` | | Defines the content's role. Optional values: `challenge`, `learning-path`, `course`, `module`, `page`, `quiz`, or `lab`. |
156+
| **Course** | `level` | ❌ | The difficulty level of the content. Optional values: `beginner`, `intermediate`, `advanced`. |
157+
| **Learning Path** | `id` | | **Crucial.** A stable UUID for tracking progress. **Do not change.** [^1] |
158+
| **Learning Path**, **Course**, **module** | `tags` | ❌ | Keywords for content discovery. Multiple tags can be selected. |
159+
| **Learning Path**, **Course**, **module** | `categories` | | The main categories for the content. Only one can be selected. |
160+
| **Learning Path**, **Course** | `banner` | ❌ | Path to an image in the `static` folder, e.g., `images/icon.svg`. |
153161

154162
> For a complete list of all predefined variables and advanced usage, please refer to the official [Hugo Front Matter documentation](https://gohugo.io/content-management/front-matter/).
155163

164+
{{< alert type="info" title="Be Careful About Name Changes" >}}
165+
Renaming a course or module after publication would break the learning path tracking for enrolled learners. It's like changing pages while someone is following the story. Consider updating the module’s description, adding an introductory note, or creating a versioned copy.
166+
{{< /alert >}}
167+
156168
## 3. Add Assets and Interactive Content
157169
158170
Enhance your course with images and other visual aids. The recommended and standard method for adding images is Page Bundling. This approach involves placing your image files directly alongside the Markdown content they belong to, which is simpler and keeps content organized.
@@ -161,11 +173,20 @@ Enhance your course with images and other visual aids. The recommended and stand
161173
For all assets, please use the Page Bundling method. It simplifies asset management by co-locating images with the Markdown files that use them.
162174
{{< /alert >}}
163175
164-
**How to Add an Image**
176+
### Size Limits for Embedded Media
177+
While there's no hard-coded size limit, we enforce these practical constraints:
178+
| Media Type | Recommended Max Size | Impact Beyond Limit |
179+
|------------|----------------------|------------------------------|
180+
| Video | 50 MB | Slow builds, CI failures |
181+
| Image | 5 MB | Hugo memory overflow |
182+
| PDF | 20 MB | Browser loading delays |
183+
165184

166-
1. Place your image file (e.g., `hugo-logo.png`) in the **same directory** as your Markdown file (e.g., `Chapter-1.md`).
185+
### How to Add an Image
167186

168-
2. In your `Chapter-1.md` file, embed the image using a **standard Markdown link**. The path should just be the filename.
187+
1. Place your image file (e.g., `hugo-logo.png`) in the **same directory** as your Markdown file (e.g., `01-pods.md`).
188+
189+
2. In your `01-pods.md` file, embed the image using a **standard Markdown link**. The path should just be the filename.
169190

170191
```markdown
171192
![The Hugo Logo](hugo-logo.png)
@@ -175,18 +196,44 @@ For all assets, please use the Page Bundling method. It simplifies asset managem
175196
The `usestatic` shortcode is **deprecated** and should not be used!
176197
{{< /alert >}}
177198

178-
**How to Add a Video**
199+
### How to Add a Video
200+
201+
**Page Bundling (Recommended)**
202+
```markdown
203+
<video controls width="100%">
204+
<source src="video-demo.mp4" type="video/mp4">
205+
</video>
206+
```
179207

180-
```text
181-
{{</* card
182-
title="Video: Example" */>}}
183-
<video width="100%" height="100%" controls>
184-
<source src="https://exmaple.mp4" type="video/mp4">
185-
Your browser does not support the video tag.
208+
**External Hosting (Large Files)**
209+
```markdown
210+
{{</* card title="Video Tutorial" */>}}
211+
<video controls preload="metadata">
212+
<source src="https://cdn.yourcompany.com/video.mp4" type="video/mp4">
213+
Your browser doesn't support HTML5 video.
186214
</video>
187215
{{</* /card */>}}
188216
```
189217

218+
#### External Hosting Recommendations
219+
For optimal performance, we recommend hosting large videos on dedicated platforms:
220+
- **YouTube** (Free, public/private options)
221+
- **AWS S3** (Requires bucket & CORS configuration)
222+
- **Cloudflare Stream** (Paid, enterprise-grade)
223+
- **Vimeo** (Paid, professional features)
224+
225+
226+
#### Critical Considerations
227+
- Best practice: Page Bundling
228+
229+
- Accessibility: Always include subtitle tracks (VTT format)
230+
231+
- Thumbnails: Set custom posters with ```poster="image.jpg"```
232+
233+
- Bandwidth: Self-hosted videos may incur significant costs
234+
235+
- Authentication: For private videos, use signed URLs (S3) or unlisted (YouTube)
236+
190237
## 4. Build and Preview Locally
191238

192239
Before publishing, it is crucial to preview your content locally to check for formatting errors, broken links, and overall structure.
@@ -334,4 +381,19 @@ make clean
334381

335382
The structure is defined by your folder hierarchy. A learning path is a directory, and each course is a sub-directory within that path. This folder structure in your `content` directory directly maps to the learning path structure presented to users.
336383

384+
6. **Why does my local build fail when adding large videos?**
385+
386+
Hugo's default memory limit is 512MB. For videos >50MB:
387+
```bash
388+
hugo server --memlimit 2GB
389+
```
390+
391+
7. **How to securely host private training videos?**
392+
393+
Use AWS S3 with signed URLs:
394+
```html
395+
<video src="{{</* s3_signed_url path="training/private.mp4" */>}}">
396+
```
397+
398+
337399
[^1]: The auto-generated learning path ID feature will be launched soon.
68.7 KB
Loading

content/en/cloud/academy/extending-the-academy/index.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,13 @@ You don't need to be a web developer to create beautiful and effective learning
3939

4040
Your content is structured hierarchically to create a clear and logical learning experience for your users.
4141

42-
At the highest level, you have a **Learning Path**, which serves as a container for a specific specialization or topic. Each Learning Path is made up of one or more **Courses**, and each Course is further broken down into individual **Chapters**. This modular structure makes your content easy to navigate, manage, and update.
42+
At the highest level, you have a **Learning Path**, which contains one or more **Courses**. Each Course is broken down into **Modules**, and each Module consists of individual learning activities like **Pages** (for text), **Quizzes** (for knowledge checks), and **Labs** (for hands-on practice). This modular structure makes your content easy to navigate, manage, and update.
4343

44-
For example, a Learning Path titled "Mastering Kubernetes" might contain:
45-
- A Course named "Core Concepts", which includes Chapters on "Pods", "Services", and "Deployments".
46-
- Another Course named "Advanced Networking", with Chapters on "Ingress" and "Service Mesh".
44+
For example, a **Learning Path** named **"Mastering Kubernetes"** might contain:
45+
* A **Course** on **"Core Concepts"**, which is broken down into multiple modules:
46+
* **Module 1: "Workload Fundamentals"**, containing a **Page** on the "Anatomy of a Pod" and a hands-on **Lab** for "Scaling Deployments".
47+
* **Module 2: "Networking Principles"**, containing a **Page** that covers "Services and Ingress" and a **Quiz** on networking concepts.
4748

4849
{{< alert type="warning" title="Content Isolation" >}}
4950
To ensure security and isolation, all of your content files must be placed within a directory named for your organization UUID. You'll learn the specifics of how to do this in our [hands-on tutorial](/cloud/academy/creating-your-learning-path/).
50-
{{< /alert >}}
51+
{{< /alert >}}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
title: v0.8.123-1
3+
date: 2025-07-28T06:04:19Z
4+
tag: v0.8.123-1
5+
prerelease: false
6+
---
7+
8+
## What's New
9+
## 🔤 General
10+
- [Chore]: Update to Sistent v0.14.209 @l5io (#3816)
11+
12+
## 👨🏽‍💻 Contributors
13+
14+
Thank you to our contributors for making this release possible:
15+
@aabidsofi19, @l5io, @leecalcote and @ritzorama

data/kanvas_discuss.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)