Course management – 5 design takes (instructor + admin)

Current – card grid

Today: a 3-column grid of cards, 12 per page, filtered by status tabs (Published default). Each card shows image, title, 1–2 badges, lesson count + categories, and a Manage / Settings button plus a menu. Numbers like students, ungraded work, or pending reviews are not shown, so you must open each course to know if it needs you.

Instructor dashboard
AllPublishedArchivedDraft
PublishedOpen
Python for Data Analysis
📖 42 lessons · Programming
PublishedClosed
SQL Fundamentals
📖 28 lessons · Data
PublishedOpen
Machine Learning 101
📖 0 lessons · AI
PublishedOpen
Git & GitHub
📖 18 lessons · Tools
PublishedClosed
Excel for Managers
📖 22 lessons · Business
+
New course
Start building a course
Showing 1–12 of 14

1. Ledger table – "one row per course, everything in columns" LOCKED IN · 2026-09-05

Replace the card grid with a dense, sortable table. Every important number is a column, so you scan down instead of reading each card. Colored dot + short label for status. Row hover reveals actions. Checkboxes give bulk publish / archive / close enrollment.

Published14Draft6Archived9Needs attention4
All instructors
2 selected ·
CourseStatusEnrollmentStudentsUngradedReviewsLessonsRatingOwnerUpdated ↓
Python for Data Analysis
Programming · Beginner
PublishedOpen31273424.8KNKhang2h ago
SQL Fundamentals
Data · Beginner
PublishedClosed1,20400284.6LTLinhYesterday
Machine Learning 101
AI · Intermediate
PublishedOpen88000KNKhang3d ago
React Deep Dive (copy)
Web · Advanced
Draft31KNKhang41d ago
Viettel Onboarding (licensed)
From: Skill Pixel
LicensedOpen56124.2VTPartner1w ago
Row menu: Manage · Settings · Students · Reviews · Open/Close enrollment · Publish/Archive · Duplicate · Partner distribution. Table is virtualized, page size 50.

2. Status board – "the lifecycle is the layout"

Columns are the course lifecycle: Draft → Published (open) → Published (closed) → Archived. Drag a card between columns to change status (with the same confirm dialogs). Cards are tiny: title, 3 numbers, and a left stripe when something needs attention. Column headers show counts so you know the shape of your catalog in one look.

Category ▾Instructor ▾Needs attention only

Draft 6

React Deep Dive (copy)
31 lessonsuntouched 41d
Docker Basics
8 lessonsedited 2h ago
New course
0 lessonsno image
Prompt Engineering
14 lessonsready to publish ✓

Published · Open 9

Python for Data Analysis
312 students7 ungraded3 reviews
Machine Learning 101
88 students0 lessons
Git & GitHub
540 students4.7★

Published · Closed 5

SQL Fundamentals
1,204 students4.6★
Excel for Managers
230 students4.4★

Archived 9

Java 8 Legacy
archived Mar 2026
Old Landing Course
archived Jan 2026
Drop targets enforce allowed transitions only (Draft→Published, Published→Archived, Archived→Draft, Open⇄Closed). Licensed courses are pinned and not draggable.

3. Inbox split view – "pick on the left, work on the right"

A narrow, scrollable list on the left (like an email inbox) and a course workspace on the right. Selecting a course never leaves the page. The right pane has the course's own sub-nav (Content, Students, Reviews, Settings, Distribution) and a stats strip, so 80% of daily tasks happen without a full page change.

Python for Data Analysis
312 students · 2h ago
73
Machine Learning 101
88 students · 3d ago
!
SQL Fundamentals
1,204 students · closed
Git & GitHub
540 students · 1w ago
React Deep Dive (copy)
Draft · 41d ago
stale
Docker Basics
Draft · 2h ago
Viettel Onboarding
Licensed · 56 students

Python for Data Analysis

PublishedEnrollment open
Programming · Beginner · 42 lessons in 8 chapters · Owner: Khang · Updated 2h ago
312
Students (+18 this week)
7
Ungraded submissions
4.8 ★
Rating · 3 reviews waiting
To do
• Grade 7 submissions in "Week 3 – Pandas"
• Approve 3 pending reviews
• Chapter 8 has 2 lessons without video
Recent activity
Lesson "GroupBy tricks" edited · Trial enabled (2 lessons) · 5 new enrollments today
Mobile: the list is the page; selecting a course pushes the pane as a full screen.

4. Triage first – "show me what needs me, then the catalog"

The top of the page is not the course list. It is a set of work queues generated from course data: ungraded submissions, reviews waiting, published courses with problems, stale drafts. Each item deep-links to the exact screen. Below, the catalog is grouped by status as compact rows with a 7-day enrollment sparkline.

Good morning, Khang29 courses · 14 published · 2,430 students

Grading waiting 12

Python for Data Analysis · Week 37 submissions →
Git & GitHub · Final project4 submissions →
Excel for Managers · Quiz 21 submission →

Reviews to approve 5

Python for Data Analysis3 reviews →
SQL Fundamentals2 reviews →

Published with problems 2

Machine Learning 101 · 0 lessons, 88 enrolledFix content →
Git & GitHub · 2 lessons missing videoOpen chapter 5 →

Stale drafts 2

React Deep Dive (copy) · 41 daysContinue · Archive
New course · empty, 60 daysDelete
Published · 14
CourseEnrollmentStudentsRating7-day enrollUpdated
Python for Data AnalysisOpen3124.8 ★2h ago
Machine Learning 101 no contentOpen883d ago
SQL FundamentalsClosed1,2044.6 ★Yesterday
Draft · 6
Docker Basics8 lessonsready ✓2h ago
React Deep Dive (copy)31 lessonsstale41d ago
Queues need small backend aggregates: ungraded count, pending review count, lessons-without-video, last content edit. All are cheap counts per course.

5. Portfolio + command palette – "numbers on top, keyboard everywhere"

A KPI strip for the whole catalog (or the whole tenant for admins) sits above an ultra-compact one-line list. Hover reveals inline actions; ⌘K opens a palette to jump to any course or run any action ("close enrollment on SQL Fundamentals") without touching the mouse. Clicking a row expands it inline to show chapters, latest students, and quick toggles.

2,430
Active students
▲ 4.2% vs last week
14 / 29
Published / total
6 drafts, 9 archived
12
Ungraded
▲ 5 since yesterday
4.7 ★
Avg rating · 5 pending
▲ 0.1
₫48.2M
Revenue 30d
▲ 12%
All29Published14Draft6Archived9
Press ⌘K to jump or act
CourseStatusEnrollmentStudentsRatingUpdated
Python for Data Analysis 7 ungraded 3 reviewsPublishedOpen3124.82h ago
Machine Learning 101 0 lessonsPublishedOpen883d ago
Chapters
1. Intro (0 lessons)
2. Regression (0 lessons)
+ Add lesson
Latest students
Minh T. · today
An P. · yesterday
Hoa L. · 2d ago
Quick toggles
Enrollment Open
Trial Off
Contact-only Off
SQL FundamentalsPublishedClosed1,2044.6Yesterday
React Deep Dive (copy) stale 41dDraft41d ago
⌘K   close enrollment sql
Close enrollment · SQL Fundamentals
Open · SQL Fundamentals → Students
Open · SQL Fundamentals → Settings
KPI strip is optional per role; instructors see their own numbers, admins see tenant totals with a "by instructor" breakdown.

Compare

What each design is best at, and what it costs.

DesignBest forGlanceabilityNavigationBackend needsRisk
1 Ledger tableMany courses, admins, bulk opsHigh – all numbers in columnsGood – column deep linksCounts per course (ungraded, pending reviews); bulk endpointsDense on mobile; needs card fallback
2 Status boardSeeing catalog shape, lifecycle workMedium – status obvious, numbers smallMedium – peek drawer neededNone new (uses existing status endpoints)Drag-drop = accidental status changes; weak beyond ~40 courses
3 Inbox splitDaily instructor work on a few coursesHigh for selected course, medium for listBest – no page changesPer-course summary endpointBiggest rewrite; sub-pages must become embeddable
4 Triage first"What do I do today?"Highest for work, medium for catalogBest deep linksAggregates: ungraded, pending reviews, content health, stale draftsEmpty queues look boring; needs good empty state
5 Portfolio + palettePower users, admins tracking KPIsHighFastest (keyboard)KPI endpoint + countsPalette is extra work; KPI accuracy matters
Decision 2026-09-05: design 1 (Ledger table) locked in. Original suggestion: start with 1 (table) as the base list, add the 4 (triage) queues above it, and grow toward 3 (split) later. Designs 2 and 5 can be view toggles on the same data.