Full spec for ordered, sequentially unlocked, bundle-priced learning paths, plus 16 clickable prototypes (public org site, learner LMS, and teacher workspace) built on the packages/ui tokens and the minimal org-landing theme. The prototypes are the UX source of truth; start at prototypes/learning-paths/index.html. Also adds the write-prd skill codifying the clarify -> write -> prototype workflow.
140 lines
11 KiB
HTML
140 lines
11 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>Path People · ClassroomIO</title>
|
|
<link href="https://fonts.googleapis.com/css2?family=Geist:wght@300..800&display=swap" rel="stylesheet" />
|
|
<link rel="stylesheet" href="app-theme.css" />
|
|
<script>
|
|
if (localStorage.cioTheme === 'dark' || (!localStorage.cioTheme && matchMedia('(prefers-color-scheme: dark)').matches))
|
|
document.documentElement.classList.add('dark');
|
|
</script>
|
|
<style>
|
|
.toolbar { display: flex; gap: 10px; margin-bottom: 16px; flex-wrap: wrap; }
|
|
.toolbar .input { max-width: 280px; }
|
|
.grid-cols { grid-template-columns: 1.8fr 1.4fr 1.1fr 0.8fr 36px; }
|
|
.person { display: flex; align-items: center; gap: 10px; min-width: 0; }
|
|
.person .nm { font-size: 14px; font-weight: 500; }
|
|
.person .em { font-size: 12px; color: var(--muted-foreground); }
|
|
.prog-cell { display: flex; align-items: center; gap: 10px; }
|
|
.prog-cell .p { font-size: 12.5px; font-weight: 600; min-width: 34px; text-align: right; }
|
|
.cur { font-size: 13px; color: var(--foreground); display: flex; align-items: center; gap: 6px; min-width: 0; }
|
|
.cur .n { width: 20px; height: 20px; border-radius: 999px; background: color-mix(in oklab, var(--primary) 10%, transparent); color: var(--primary); display: grid; place-items: center; font-size: 11px; font-weight: 600; flex-shrink: 0; }
|
|
.cur span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
.mini { width: 30px; height: 30px; border-radius: var(--radius-md); border: none; background: transparent; display: grid; place-items: center; color: var(--muted-foreground); cursor: pointer; }
|
|
.mini:hover { background: var(--accent); color: var(--foreground); }
|
|
.mini svg { width: 15px; height: 15px; stroke-width: 2; }
|
|
.note-banner { display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-radius: var(--radius-md); background: color-mix(in oklab, var(--primary) 7%, transparent); border: 1px solid color-mix(in oklab, var(--primary) 20%, transparent); font-size: 13px; color: var(--foreground); margin-bottom: 16px; }
|
|
.note-banner svg { width: 15px; height: 15px; stroke-width: 2; color: var(--primary); flex-shrink: 0; }
|
|
@media (max-width: 860px) { .thead { display: none; } .trow.grid-cols { grid-template-columns: 1fr auto; } }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="app">
|
|
<aside class="sidebar">
|
|
<a class="back-link" href="teacher-paths.html"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M19 12H5M12 19l-7-7 7-7"/></svg>All Learning Paths</a>
|
|
<div class="path-id">
|
|
<div class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M6 3v12"/><circle cx="6" cy="18" r="3"/><circle cx="18" cy="6" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></svg></div>
|
|
<div><div class="nm">Frontend Engineering Bootcamp</div><div class="st st-active"><span class="dot"></span>Active</div></div>
|
|
</div>
|
|
<a class="nav-item" href="teacher-path-builder.html"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></svg>Courses<span class="nav-tail tnum">5</span></a>
|
|
<a class="nav-item active" href="teacher-path-people.html"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/></svg>People<span class="nav-tail tnum">48</span></a>
|
|
<a class="nav-item" href="teacher-path-analytics.html"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M3 3v18h18"/><path d="m19 9-5 5-4-4-3 3"/></svg>Analytics</a>
|
|
<a class="nav-item" href="teacher-path-landing-editor.html"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="12" r="10"/><path d="M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>Landing page</a>
|
|
<a class="nav-item" href="teacher-path-certificate.html"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="8" r="6"/><path d="M15.5 13.5 17 22l-5-3-5 3 1.5-8.5"/></svg>Certificate</a>
|
|
<a class="nav-item" href="teacher-path-settings.html"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="12" r="3"/><path d="M12 3v2M12 19v2M3 12h2M19 12h2M5.6 5.6l1.4 1.4M17 17l1.4 1.4M5.6 18.4 7 17M17 7l1.4-1.4"/></svg>Settings</a>
|
|
<div class="sidebar-foot"><div class="avatar">JD</div><div class="who"><div class="nm">Jordan Diallo</div><div class="rl">Admin</div></div></div>
|
|
</aside>
|
|
|
|
<div class="main">
|
|
<header class="topbar">
|
|
<nav class="crumbs">
|
|
<a href="teacher-paths.html">Learning Paths</a><span class="sep">/</span>
|
|
<a href="teacher-path-builder.html">Frontend Engineering Bootcamp</a><span class="sep">/</span>
|
|
<span class="here">People</span>
|
|
</nav>
|
|
<div class="top-actions">
|
|
<button class="icon-btn" id="theme" title="Toggle theme" aria-label="Toggle theme"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg></button>
|
|
</div>
|
|
</header>
|
|
|
|
<main class="content">
|
|
<div class="wrap" style="max-width: 980px">
|
|
<div class="page-head">
|
|
<div>
|
|
<h1 class="page-title">People</h1>
|
|
<p class="page-sub">48 learners enrolled in this path.</p>
|
|
</div>
|
|
<a class="btn btn-primary"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M19 8v6M22 11h-6"/></svg>Add learners</a>
|
|
</div>
|
|
|
|
<div class="note-banner">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="12" r="9"/><path d="M12 8v4M12 16h.01"/></svg>
|
|
Adding a learner to this path automatically enrolls them in all 5 courses. Removing them preserves their course access and progress.
|
|
</div>
|
|
|
|
<div class="toolbar">
|
|
<input class="input" placeholder="Search by name or email…" />
|
|
<select class="select" style="max-width: 180px">
|
|
<option>All progress</option><option>Not started</option><option>In progress</option><option>Completed</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="card" style="overflow: hidden">
|
|
<div class="thead grid-cols"><span>Learner</span><span>Path progress</span><span>Current course</span><span>Enrolled</span><span></span></div>
|
|
|
|
<div class="trow grid-cols">
|
|
<div class="person"><span class="avatar">AO</span><div style="min-width: 0"><div class="nm">Ada Okafor</div><div class="em">a•••@gmail.com</div></div></div>
|
|
<div class="prog-cell"><div class="progress progress-thin"><span style="width: 49%"></span></div><span class="p tnum">49%</span></div>
|
|
<span class="cur"><span class="n tnum">3</span><span>React</span></span>
|
|
<span class="text-muted tnum" style="font-size: 13px">May 2</span>
|
|
<button class="mini"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="5" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="12" cy="19" r="1"/></svg></button>
|
|
</div>
|
|
|
|
<div class="trow grid-cols">
|
|
<div class="person"><span class="avatar">TB</span><div style="min-width: 0"><div class="nm">Tunde Bello</div><div class="em">t•••@yahoo.com</div></div></div>
|
|
<div class="prog-cell"><div class="progress progress-thin progress-success"><span style="width: 100%"></span></div><span class="p tnum" style="color: var(--success)">100%</span></div>
|
|
<span class="badge badge-success-soft"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="8" r="6"/><path d="M15.5 13.5 17 22l-5-3-5 3 1.5-8.5"/></svg>Certificate earned</span>
|
|
<span class="text-muted tnum" style="font-size: 13px">Mar 18</span>
|
|
<button class="mini"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="5" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="12" cy="19" r="1"/></svg></button>
|
|
</div>
|
|
|
|
<div class="trow grid-cols">
|
|
<div class="person"><span class="avatar">MK</span><div style="min-width: 0"><div class="nm">Mariam Kone</div><div class="em">m•••@outlook.com</div></div></div>
|
|
<div class="prog-cell"><div class="progress progress-thin"><span style="width: 74%"></span></div><span class="p tnum">74%</span></div>
|
|
<span class="cur"><span class="n tnum">4</span><span>State & Data</span></span>
|
|
<span class="text-muted tnum" style="font-size: 13px">Apr 11</span>
|
|
<button class="mini"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="5" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="12" cy="19" r="1"/></svg></button>
|
|
</div>
|
|
|
|
<div class="trow grid-cols">
|
|
<div class="person"><span class="avatar">SD</span><div style="min-width: 0"><div class="nm">Sam Diallo</div><div class="em">s•••@gmail.com</div></div></div>
|
|
<div class="prog-cell"><div class="progress progress-thin"><span style="width: 12%"></span></div><span class="p tnum">12%</span></div>
|
|
<span class="cur"><span class="n tnum">1</span><span>HTML & CSS</span></span>
|
|
<span class="text-muted tnum" style="font-size: 13px">Jul 8</span>
|
|
<button class="mini"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="5" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="12" cy="19" r="1"/></svg></button>
|
|
</div>
|
|
|
|
<div class="trow grid-cols">
|
|
<div class="person"><span class="avatar">LN</span><div style="min-width: 0"><div class="nm">Lara Nwosu</div><div class="em">l•••@proton.me</div></div></div>
|
|
<div class="prog-cell"><div class="progress progress-thin"><span style="width: 0%"></span></div><span class="p tnum">0%</span></div>
|
|
<span class="badge badge-muted">Not started</span>
|
|
<span class="text-muted tnum" style="font-size: 13px">Jul 21</span>
|
|
<button class="mini"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="5" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="12" cy="19" r="1"/></svg></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
document.getElementById('theme').onclick = () => {
|
|
const dark = document.documentElement.classList.toggle('dark');
|
|
localStorage.cioTheme = dark ? 'dark' : 'light';
|
|
};
|
|
</script>
|
|
</body>
|
|
</html>
|