// courses.jsx — Courses listing + Course detail (function () { const { useState, useMemo } = React; const Icon = window.Icon; const D = window.DATA; const { Placeholder, CourseCard, CAT_LABEL } = window; function PageHero({ eyebrow, title, sub, crumb, navigate }) { return (
{eyebrow}

{title}

{sub &&

{sub}

}
); } function Courses({ navigate }) { const [cat, setCat] = useState("all"); const [q, setQ] = useState(""); const list = useMemo(() => D.COURSES.filter((c) => (cat === "all" || c.cat === cat) && (q.trim() === "" || (c.title + " " + c.tagline + " " + c.software.join(" ")).toLowerCase().includes(q.toLowerCase()))), [cat, q]); return (
{/* controls */}
{D.CATEGORIES.map((c) => ( ))}
setQ(e.target.value)} style={{ paddingLeft: 44 }} />
{list.length === 0 ? (

No courses found

Try a different category or search term.

) : (
{list.map((c) => )}
)}
); } function CourseDetail({ slug, navigate }) { const c = D.COURSES.find((x) => x.slug === slug); if (!c) { return (
); } const related = D.COURSES.filter((x) => x.cat === c.cat && x.slug !== c.slug).slice(0, 3); return (

About this course

{c.blurb} You'll work through guided projects and finish with portfolio-ready pieces and the confidence to apply your skills professionally.

What you'll learn

{c.outcomes.map((o) => (
{o}
))}

Course curriculum

{c.modules.map((m, i) => (
{String(i + 1).padStart(2, "0")} {m.t}
{m.d}
))}
{/* sticky enroll card */}
{related.length > 0 && (
Keep exploring

Related courses

{related.map((r) => )}
)}
); } Object.assign(window, { Courses, CourseDetail, PageHero }); })();