Blackboard program health dashboard for department chairs

By General Input

See how every section in the term is really doing, with class averages shown next to how much has actually been graded, and no instructor screenshots needed.

Integrations

  • Blackboard
  • Google Sheets

Type

App

Categories

  • Operations

Build me a program health dashboard for Blackboard that department chairs and program directors open each week to see how every section in the current term is actually performing, without asking instructors for screenshots or exports.

The landing view is a sortable table of the term's courses, pulled with Get Courses and filtered to the term I select. Each row is one section with a computed health summary: the class average across graded work, the share of assignments that have already been graded, and the count of submissions still sitting ungraded. Let me sort by any of those columns so the sections in trouble float to the top, and let me search the table by course name or code.

Build each row from the gradebook. For a course, Get Grade Columns lists the assignments, Get Column Grades returns the scores recorded against a column, and Get Column Attempts shows the submissions and their grading status, so an attempt that has been submitted but not yet scored counts toward the ungraded backlog. Compute the class average over graded scores only, normalized against each column's possible points, so assignments worth different amounts do not distort the number.

Never show an average as a bare number. Every average needs its graded coverage sitting next to it, and when a section has almost nothing graded yet, the row should say so rather than implying the class is struggling. Sections below a small coverage floor, for example fewer than a couple of graded assignments or under a low percentage of graded work, render as not enough graded yet with the average de-emphasized, and they must not be ranked among the worst performers when I sort by average. Make that coverage floor a setting rather than a hardcoded number.

Clicking a section opens a detail page. Show each assignment in that course with its grade distribution, built from Get Grade Column for the column definition and Get Column Grades for the scores, so I can tell whether a low average comes from one brutal assignment or a broad slide. Below that, list the enrolled students from Get Course Memberships whose running score sits below the passing threshold I set in the app, showing each student's current score and how many pieces of work they are missing. Expanding a student row calls Get User Grades so I can see how that person is doing across their other courses too, which tells me whether it is this section or a wider problem.

Give me a button that writes the current snapshot to a Google Sheet with Append Values: one row per section carrying the term, course name and code, class average, graded coverage, ungraded count, number of students below the threshold, and the snapshot date. Appending rather than overwriting is the whole point, so we can track section performance week over week and share the tab with the dean. Let me pick the spreadsheet and tab, and remember that choice.

Store the passing threshold, the coverage floor, the term filter, and the snapshot destination per user, so each chair sees their own settings when they open the app and those choices are still there the following week.

Be careful with Blackboard's request budget. The site quota is 10,000 requests per 24 hours, so the landing view should load the course list first and pull per-assignment detail only when I open a section, instead of walking every gradebook up front. Blackboard list endpoints page with offset and limit and return a paging.nextPage link, so follow that until it is absent when a course list, roster, or grade list runs long. Render section rows as they resolve rather than blocking the whole table on the slowest course, and let me refresh a single section without reloading everything.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads