diff --git a/src/content/learning-paths/application-security.json b/src/content/learning-paths/application-security.json index aa547fcfe07f6a..3c71493dd0e4c5 100644 --- a/src/content/learning-paths/application-security.json +++ b/src/content/learning-paths/application-security.json @@ -1,10 +1,7 @@ { "title": "Application Security", "path": "/learning-paths/application-security/account-security/", - "priority": 6, "description": "Learn more about the tools Cloudflare offers to protect your website against malicious traffic and bad actors.", "pcx_content_type": "learning-path", - "products": ["fundamentals", "ssl", "waf", "ddos-protection", "bots"], - "product_group": "Application security", - "additional_groups": ["Application security"] + "products": ["fundamentals", "ssl", "waf", "ddos-protection", "bots"] } diff --git a/src/content/learning-paths/china-network-overview.json b/src/content/learning-paths/china-network-overview.json index f47b4567524a8b..93eae50574b016 100644 --- a/src/content/learning-paths/china-network-overview.json +++ b/src/content/learning-paths/china-network-overview.json @@ -1,11 +1,7 @@ { "title": "Introduction to the China Network", "path": "/learning-paths/china-network-overview/series/china-network-main-features-1/", - "priority": 1, "description": "Watch to learn how Cloudflare's China Network can help you improve performance, compliance, and connectivity for your users in mainland China.", "pcx_content_type": "learning-path", - "products": ["china-network"], - "product_group": "Application performance", - "additional_groups": ["Application security"], - "video": true + "products": ["china-network"] } diff --git a/src/content/learning-paths/clientless-access.json b/src/content/learning-paths/clientless-access.json index cb3f8a7cef8803..782a784ac1d29c 100644 --- a/src/content/learning-paths/clientless-access.json +++ b/src/content/learning-paths/clientless-access.json @@ -1,10 +1,7 @@ { "title": "Deploy clientless access", "path": "/learning-paths/clientless-access/concepts/", - "priority": 2, "description": "Learn how to set up clientless access to internal applications with Cloudflare Zero Trust.", "pcx_content_type": "learning-path", - "products": ["access", "cloudflare-tunnel", "browser-isolation"], - "product_group": "Cloudflare One", - "additional_groups": ["Application security", "Application performance"] + "products": ["access", "cloudflare-tunnel", "browser-isolation"] } diff --git a/src/content/learning-paths/cybersafe.json b/src/content/learning-paths/cybersafe.json index 736ae574a63d07..1bcae4f0b2c2fd 100644 --- a/src/content/learning-paths/cybersafe.json +++ b/src/content/learning-paths/cybersafe.json @@ -1,10 +1,7 @@ { "title": "Project Cybersafe Schools", "path": "/learning-paths/cybersafe/concepts/", - "priority": 5, "description": "Prevent children from accessing obscene or harmful content over the Internet.", "pcx_content_type": "learning-path", - "products": ["gateway", "zero-trust-warp", "dns"], - "product_group": "Cloudflare One", - "additional_groups": ["Application security"] + "products": ["gateway", "zero-trust-warp", "dns"] } diff --git a/src/content/learning-paths/data-center-protection.json b/src/content/learning-paths/data-center-protection.json index 8ce0d1fdaae848..a89bd4b1577383 100644 --- a/src/content/learning-paths/data-center-protection.json +++ b/src/content/learning-paths/data-center-protection.json @@ -1,9 +1,7 @@ { "title": "Protect your data center", "path": "/learning-paths/data-center-protection/concepts/", - "priority": 2, "description": "Learn how to use Magic Transit to protect your data centers from distributed denial-of-service (DDoS) attacks.", "pcx_content_type": "learning-path", - "products": ["magic-transit"], - "product_group": "Network security" + "products": ["magic-transit"] } diff --git a/src/content/learning-paths/durable-objects-course.json b/src/content/learning-paths/durable-objects-course.json index bd073ad5bfab25..cbf5843ad0805a 100644 --- a/src/content/learning-paths/durable-objects-course.json +++ b/src/content/learning-paths/durable-objects-course.json @@ -1,10 +1,7 @@ { "title": "Introduction to Durable Objects", "path": "/learning-paths/durable-objects-course/series/introduction-to-series-1/", - "priority": 2, "pcx_content_type": "learning-path", "description": "Dive into a hands-on Durable Objects project and learn how to build stateful apps using serverless architecture", - "products": ["durable-objects", "workers"], - "product_group": "Developer platform", - "video": true + "products": ["durable-objects", "workers"] } diff --git a/src/content/learning-paths/holistic-ai-security.json b/src/content/learning-paths/holistic-ai-security.json index f87b49d36be169..8358eae3d6d078 100644 --- a/src/content/learning-paths/holistic-ai-security.json +++ b/src/content/learning-paths/holistic-ai-security.json @@ -1,9 +1,7 @@ { "title": "Holistic AI security with Cloudflare One", "path": "/learning-paths/holistic-ai-security/concepts/", - "priority": 18, "description": "Address new security challenges and mitigate risks like shadow AI and data loss.", "pcx_content_type": "learning-path", - "products": ["casb", "access", "gateway"], - "product_group": "Cloudflare One" + "products": ["casb", "access", "gateway"] } diff --git a/src/content/learning-paths/load-balancing.json b/src/content/learning-paths/load-balancing.json index e0d36e41530582..bdf725122b2f12 100644 --- a/src/content/learning-paths/load-balancing.json +++ b/src/content/learning-paths/load-balancing.json @@ -1,9 +1,7 @@ { "title": "Load balancing", "path": "/learning-paths/load-balancing/concepts/", - "priority": 2, "description": "Maximize application performance and availability.", "pcx_content_type": "learning-path", - "products": ["load-balancing"], - "product_group": "Application performance" + "products": ["load-balancing"] } diff --git a/src/content/learning-paths/mtls.json b/src/content/learning-paths/mtls.json index 8443efbe600e6d..ca3f98fea7ff8d 100644 --- a/src/content/learning-paths/mtls.json +++ b/src/content/learning-paths/mtls.json @@ -1,10 +1,7 @@ { "title": "mTLS at Cloudflare", "path": "/learning-paths/mtls/concepts/", - "priority": 5, "description": "Safeguard APIs and Devices on Cloudflare's network.", "pcx_content_type": "learning-path", - "products": ["api-shield", "access", "ssl"], - "product_group": "Cloudflare One", - "additional_groups": ["Application security"] + "products": ["api-shield", "access", "ssl"] } diff --git a/src/content/learning-paths/prevent-ddos-attacks.json b/src/content/learning-paths/prevent-ddos-attacks.json index 7712efb47aedc2..b6a75e24af1c88 100644 --- a/src/content/learning-paths/prevent-ddos-attacks.json +++ b/src/content/learning-paths/prevent-ddos-attacks.json @@ -1,9 +1,7 @@ { "title": "Prevent DDoS attacks", "path": "/learning-paths/prevent-ddos-attacks/concepts/", - "priority": 2, "pcx_content_type": "learning-path", "description": "Protect your application from distributed (DDoS) and regular denial of service (DoS) attacks.", - "products": ["cache", "ddos-protection", "ssl", "waf"], - "product_group": "Application security" + "products": ["cache", "ddos-protection", "ssl", "waf"] } diff --git a/src/content/learning-paths/r2-intro.json b/src/content/learning-paths/r2-intro.json index 06e062f30635c8..da242a9ae26635 100644 --- a/src/content/learning-paths/r2-intro.json +++ b/src/content/learning-paths/r2-intro.json @@ -1,10 +1,7 @@ { "title": "Introduction to R2", "path": "/learning-paths/r2-intro/series/r2-1/", - "priority": 2, "pcx_content_type": "learning-path", "description": "Learn about Cloudflare R2, an object storage solution designed to handle your data and files efficiently. It is ideal for storing large media files, creating data lakes, or delivering web assets.", - "products": ["r2", "workers"], - "product_group": "Developer platform", - "video": true + "products": ["r2", "workers"] } diff --git a/src/content/learning-paths/replace-vpn.json b/src/content/learning-paths/replace-vpn.json index f92632d9e62d1c..62cc34fb4920e3 100644 --- a/src/content/learning-paths/replace-vpn.json +++ b/src/content/learning-paths/replace-vpn.json @@ -1,10 +1,7 @@ { "title": "Replace your VPN", "path": "/learning-paths/replace-vpn/concepts/", - "priority": 1, "description": "Learn how to replace your VPN with Cloudflare Zero Trust.", "pcx_content_type": "learning-path", - "products": ["gateway", "cloudflare-tunnel", "zero-trust-warp"], - "product_group": "Cloudflare One", - "additional_groups": ["Application security", "Application performance"] + "products": ["gateway", "cloudflare-tunnel", "zero-trust-warp"] } diff --git a/src/content/learning-paths/sase-overview-course.json b/src/content/learning-paths/sase-overview-course.json index 67fe1a5459a7f7..f94f4ef5fd9e0c 100644 --- a/src/content/learning-paths/sase-overview-course.json +++ b/src/content/learning-paths/sase-overview-course.json @@ -1,11 +1,7 @@ { "title": "Build and secure your SASE corporate network", "path": "/learning-paths/sase-overview-course/series/evolution-corporate-networks-1/", - "priority": 1, "pcx_content_type": "learning-path", "description": "Watch this series and learn all about Cloudflare's Secure Access Service Edge (SASE) platform to learn how it can revolutionize your corporate network.", - "products": ["cloudflare-one"], - "product_group": "Cloudflare One", - "additional_groups": ["Cloudflare One", "Core platform"], - "video": true + "products": ["cloudflare-one"] } diff --git a/src/content/learning-paths/secure-internet-traffic.json b/src/content/learning-paths/secure-internet-traffic.json index 114b660a9bc8de..e3a1d5c3b9f2ac 100644 --- a/src/content/learning-paths/secure-internet-traffic.json +++ b/src/content/learning-paths/secure-internet-traffic.json @@ -1,9 +1,7 @@ { "title": "Secure your Internet traffic and SaaS apps", "path": "/learning-paths/secure-internet-traffic/concepts/", - "priority": 2, "pcx_content_type": "learning-path", "description": "Provide your users and networks with a secure, performant, and flexible path to the Internet.", - "products": ["dns", "gateway", "casb", "dlp", "browser-isolation"], - "product_group": "Cloudflare One" + "products": ["dns", "gateway", "casb", "dlp", "browser-isolation"] } diff --git a/src/content/learning-paths/secure-o365-email.json b/src/content/learning-paths/secure-o365-email.json index c268f9c1a1f7fb..9c0cda54c005ef 100644 --- a/src/content/learning-paths/secure-o365-email.json +++ b/src/content/learning-paths/secure-o365-email.json @@ -1,9 +1,7 @@ { "title": "Secure Microsoft 365 email with Email Security", "path": "/learning-paths/secure-o365-email/concepts/", - "priority": 2, "pcx_content_type": "learning-path", "description": "Use Cloudflare's Email Security to protect your Microsoft 365 email inbox from phishing and malware attacks.", - "products": ["email-security-cf1"], - "product_group": "Cloudflare One" + "products": ["email-security-cf1"] } diff --git a/src/content/learning-paths/surge-readiness.json b/src/content/learning-paths/surge-readiness.json index 075f3c9000ba1c..06d07d914d001a 100644 --- a/src/content/learning-paths/surge-readiness.json +++ b/src/content/learning-paths/surge-readiness.json @@ -1,9 +1,7 @@ { "title": "Prepare for surges or spikes in web traffic", "path": "/learning-paths/surge-readiness/concepts/", - "priority": 5, "pcx_content_type": "learning-path", "description": "Learn how to protect your website for potential surges or spikes in web traffic.", - "products": ["cache", "waf"], - "product_group": "Application security" + "products": ["cache", "waf"] } diff --git a/src/content/learning-paths/warp-overview-course.json b/src/content/learning-paths/warp-overview-course.json index 930158c573831b..ff3e8cac5a9e47 100644 --- a/src/content/learning-paths/warp-overview-course.json +++ b/src/content/learning-paths/warp-overview-course.json @@ -1,11 +1,7 @@ { "title": "Understand and troubleshoot Cloudflare WARP", "path": "/learning-paths/warp-overview-course/series/warp-basics-1/", - "priority": 1, "pcx_content_type": "learning-path", "description": "In this series, we cover the basics of Cloudflare WARP, share useful troubleshooting tips, and explain the warp-diag logs in detail.", - "products": ["cloudflare-one"], - "product_group": "Cloudflare One", - "additional_groups": ["Cloudflare One", "Core platform"], - "video": true + "products": ["cloudflare-one"] } diff --git a/src/content/learning-paths/workers.json b/src/content/learning-paths/workers.json index 02641c7aec6164..bd8a8effcff86e 100644 --- a/src/content/learning-paths/workers.json +++ b/src/content/learning-paths/workers.json @@ -2,9 +2,7 @@ "title": "Build applications with Cloudflare Workers", "uid": "workers-intro", "path": "/learning-paths/workers/concepts/", - "priority": 4, "pcx_content_type": "learning-path", "description": "Deploy serverless code, globally with exceptional performance, reliability, and scale.", - "products": ["workers"], - "product_group": "Developer platform" + "products": ["workers"] } diff --git a/src/content/learning-paths/workflows-course.json b/src/content/learning-paths/workflows-course.json index 9c0e6ce72d7052..92b89cce6c894c 100644 --- a/src/content/learning-paths/workflows-course.json +++ b/src/content/learning-paths/workflows-course.json @@ -1,10 +1,7 @@ { "title": "Introduction to Cloudflare Workflows", "path": "/learning-paths/workflows-course/series/workflows-1/", - "priority": 2, "pcx_content_type": "learning-path", "description": "In this series, we introduce Cloudflare Workflows and the term 'Durable Execution' which comes from the desire to run applications that can resume execution from where they left off, even if the underlying host or compute fails.", - "products": ["durable-objects", "workers", "workflows"], - "product_group": "Developer platform", - "video": true + "products": ["durable-objects", "workers", "workflows"] } diff --git a/src/schemas/learning-paths.ts b/src/schemas/learning-paths.ts index af1d3d5206cb56..56b69411f02a72 100644 --- a/src/schemas/learning-paths.ts +++ b/src/schemas/learning-paths.ts @@ -6,7 +6,6 @@ export const learningPathsSchema = z title: z.string(), uid: z.string().optional(), path: z.string(), - priority: z.number(), description: z.string(), pcx_content_type: z.string().default("learning-path"), products: z @@ -15,9 +14,12 @@ export const learningPathsSchema = z .describe( "The names of related products (according to their file name in `src/content/products`). Usually, these correspond to file paths, but not always, such as with `cloudflare-tunnel`", ), - product_group: z.string(), tags: z.string().array().optional(), - additional_groups: z.string().array().optional(), - video: z.boolean().default(false), + reviewed: z + .date() + .optional() + .describe( + "A `YYYY-MM-DD` value that signals when the page was last explicitly reviewed from beginning to end. This is used to sort learning paths presented in the [ResourcesBySelector component](/style-guide/components/resources-by-selector/).", + ), }) .strict(); diff --git a/src/schemas/stream.ts b/src/schemas/stream.ts index d23096fc8dab3a..0e38de93aa08d2 100644 --- a/src/schemas/stream.ts +++ b/src/schemas/stream.ts @@ -17,6 +17,12 @@ export const streamSchema = z.object({ tags: z.array(z.string()).optional(), updated: z.date().optional(), pcx_content_type: z.string().default("video"), + reviewed: z + .date() + .optional() + .describe( + "A `YYYY-MM-DD` value that signals when the page was last explicitly reviewed from beginning to end. This is used to sort learning paths presented in the [ResourcesBySelector component](/style-guide/components/resources-by-selector/).", + ), thumbnail: z .object({ url: z.string(),