Alan Baker ← All work

An admin console for district administrators, and the CPM staff who help them

I led the design of the ELS admin console, where district administrators manage licenses, schools and people. It began as an engineering-only build. I brought design into the workflow, and found that the console also serves the customer success managers who help districts.

Design leadershipRole-based access controlTerminology
Role
Lead Product Designer, functioning as Head of Design
Company
CPM Educational Program, 2026
Platform
ELS, the eBook License System, rebuilt as a React application
Built with
Figma, React, CPM’s design system
The problem
District administrators had a developer-built Angular tool that exposed only the functions needed to finish a task and gave no clear next step. Without help, they could not complete one.
The turning point
The console serves a second audience: CPM’s customer success managers, who use it for higher-level administrative tasks and need a role of their own.
Where it stands
Available to district administrators.

District administrators had a tool with no next step

ELS, the eBook License System, is where district administrators manage who has access to CPM’s curriculum. The original tool was an Angular application built by developers out of necessity, with only the functions it needed. Like the teacher side of the platform, it gave an administrator no clear next step. Without someone to walk them through it, they had almost no support in completing a task.

The new console is a React application. Its home page answers the question an administrator arrives with: what does the district have, and what will it need to buy?

Before. The legacy landing page: a list of eBooks with edition and expiration date.
Legacy eBook License System landing page: a navigation bar with Home, My eBooks, Reports and Account, and a list of eBooks with edition and expiration date, above a list of expired eBooks.
After. The new admin home: license totals and percent assigned, integration status, a notification feed, contracts, and a purchase forecast by year.
New district administrator home: teacher and student license totals with percent assigned, integration status, course configuration, a notification feed, a contracts list, and a license purchase forecast by year.

The work started without design, so I helped the team change how it gets built

The console began as an engineering-only project, and my first view of it was a design review. Development was building toward a different architecture than the role-based access model I had in mind, because the target state had never been shared. I met with the developers and raised it with the CTO. Together we introduced a workflow that includes design, and I mentored the team on product-team practices so that work isn’t duplicated and miscommunication doesn’t become tech debt. I then led the complete design, the workflow across development and product, and the coordination with customer success and other internal stakeholders.

From the whole district down to a single teacher

License management shows assignments by school, teacher, class, student or course, with quick actions to assign licenses and information at each level: active and persisted licenses, classes and students. Any teacher opens to their courses, classes and licenses. Licenses are counted per course, not per class: a teacher uses one license per course, however many classes cover it.

Before. The legacy license manager: classes with student counts, PINs, curriculum and term.
Legacy license manager for a teacher: Current Classes and Past Classes tabs, a Create Class button, and two class cards showing student count, PIN, curriculum and term, each with an expand control.
After. License management: assignments by school, teacher, class, student or course, with actions to assign licenses.
New license management: teacher and student license totals with percent assigned, a License assignments section with tabs for Schools, Teachers, Classes, Students and Courses, a teacher search, Assign exam license and Assign new license buttons, and a table of teachers with classes, students, active and persisted licenses.
Before. The legacy account details: the licenses issued to one user, with dates and source.
Legacy account details: a Licenses Issued to Me list of courses, each with a Teacher Edition label, dates and a source, and a View or Revoke button.

Assigning a license to a teacher opens a side panel with their current licenses and the courses that can be added. The panel states the rule up front, that only courses enabled district-wide can be assigned, and links straight to where to enable them, so nobody is left guessing why a course is missing.

After. License management for one teacher: current licenses, courses that can be added, and an assignment window.
New license management for one teacher: a Manage licenses side panel with current licenses, courses to be assigned grouped by program, and an assignment window with start and end dates, beside the teacher page with classes, students and active licenses.

The console was never only for district administrators

I designed the console for district administrators, the people responsible for a whole district’s access. During a check-in, the lead developer, who was gathering requirements from internal stakeholders, brought up another audience: CPM’s customer success managers use the console to complete higher-level administrative tasks and to help administrators finish theirs. I hadn’t accounted for that, and it meant a role with features I hadn’t planned.

A CSM admin has everything a district admin has, plus actions an administrator can’t take. In a district whose roster syncs automatically, administrators can’t add licenses by hand, because the roster controls assignment. A CSM admin can create a persisted license that overrides roster sync. They also see analytics that inform sales decisions.

The alternative was to keep customer success in the old Angular application, which had less functionality. That would create friction whenever an administrator in the new console needed a CSM to override something and the CSM couldn’t make the change for them. So I added a CSM admin role to the role-based access model, and refined some of its actions after review.

One overage warning, set by CPM, not a setting for every district

When a district approaches or passes the licenses it has purchased, administrators aren’t blocked. A single system-default usage threshold raises a warning in the notification feed, and the next step is a license purchase through the district’s customer success manager.

I chose one default instead of a threshold each district configures. It is simpler to ship, it avoids handing administrators a setting they can misconfigure, and CPM support can still adjust it for a district in the backend.

CPM’s internal words didn’t match what customers expect, so I set a shared vocabulary

CPM has a history of using internal jargon in external sales and customer support, and it doesn’t translate. The acronyms and words used inside the company don’t match what customers are used to seeing, so they can’t connect them to what they expect.

Three examples. “eBook” originally meant any course. When the content delivery platform took over third edition, it came to mean anything that wasn’t third edition, so the word stopped describing the product. “Grant” was a developer’s term for giving someone access, and it was never part of how districts think about it. And licenses that override roster sync carried an internal name customers wouldn’t recognize, so the console says persisted.

I wrote documentation setting out which terms to use and when, and why it matters, and walked through it with development, marketing and the director of customer success. The console now says licenses, not seats, and persisted.

Where it stands

Available to district administrators. Most of it shipped as I designed it. I refined some of the ways data is displayed and some CSM admin actions after review. The product requirements set these targets at kickoff:

  • Administrators can tell whether they have enough licenses in under 10 seconds
  • Teachers have no license-admin surfaces
  • Rostering errors reach administrators with actionable messages
  • A first-year district setup needs no call to CPM

Results will be added here as administrators adopt the console. Until then I am not claiming any, and what I can show is the design and the process behind it.

If I did it again, I would push harder for a single experience

While the Angular and React applications are both available, and the new one is not completely released, an administrator sometimes has to go back to the Angular application for specific tasks that aren’t yet in general release in React. I would push harder for a single experience for the district administrator.

This was an urgent project for the CTO and the business office, so there was a balancing act between releasing each piece properly, so the experience is complete, and hitting dates that could affect sales.