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.
- 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?


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.



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.

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.