Fueled by Goodwill
In April 2024, the United States Department of Justice issued a mandate. Online content for public-facing websites, including course content inside learning management systems like Canvas, had to be made accessible for all learners. Every faculty member at my institution needed to know this was coming, what it meant for their courses, and what they were expected to do about it.
Simple enough problem. Except the communication channels available to me were all broken.
Email gets deleted before it gets read, especially email that arrives with the faint bureaucratic odor of compliance. There’s no single webpage every employee visits regularly enough to post a message that actually lands. Announcements inside Canvas get scrolled past. I needed every faculty member who teaches a Canvas course to see this information, understand it, and acknowledge it. I can’t speak to thousands of personnel to make them aware of the situation; there just aren’t enough hours in the day.
So I thought about where they were already going.
Every term, teachers import their course content from a prior term into their new course shell. It’s a ritual as reliable as the academic calendar itself. To do it, they have to navigate to a specific location inside their course. That location, that specific moment of navigation, was my intercept point.
I sat down with an AI agent and started a conversation in plain English. I’m a Canvas administrator. Here’s my situation. Here’s what I’m envisioning. Is this possible? What followed was an iterative dialogue, part problem-solving session, part debugging exercise, part aesthetic negotiation. I guided the agent back out of the weeds more than once when it provided JavaScript and Cascading Style Sheets that wasn’t applicable to what I needed. I fed it error messages from my test environment and asked it to help me understand what went wrong. I made requests that had nothing to do with syntax: I only want this popup to appear one time per browser session for teachers. I want it prettified, modern sans-serif font, clean background. I know my clients.
What came out the other side was a customized JS and CSS modification to my Canvas UI theme. When a teacher navigated to that specific course location, a popup appeared explaining the accessibility mandate, a clickable link to official resources, and a close button they had to click to dismiss it. Not a checkbox. Not a scroll-past. A required interaction. Nobody could claim they hadn’t been made aware.
I tested it the way I test everything: by putting myself in my clients’ shoes. As a Canvas administrator I can masquerade as any account in my institution for support purposes. I picked a handful of faculty I know well, the ones who would tell me immediately if something felt off about their Canvas experience, masqueraded as their accounts, navigated to the course import location, and watched the popup appear exactly as designed. Clean workflow. Easy dismissal. Every time. Management tested it independently and found no issues.
The popup worked because it didn’t ask faculty to come find the information. It put the information exactly where they were already going, at the moment they were already paying attention, with no way to not see it. I was able to solve a human attention problem with a little behavioral architecture and a conversation with an AI agent.
Around the same time, a different friction problem arrived from a different corner of the university.
The Provost’s office handles cases of academic integrity, the situations that arise when students find academic shortcuts through non-traditional means in submitting assignments or completing assessments. When a case is referred, the student is required to complete a Canvas training course on academic integrity. The staff in the Provost’s office were responsible for enrolling those students. For a while, that meant emailing me.
I had a concern with that arrangement from a privacy standpoint. Being handed student names in an email meant I knew things about people I might recognize through other channels. I didn’t want that information. Nobody had designed the workflow to protect either of us from it.
So I elevated the Provost’s office staff’s permissions in Canvas, moved the academic integrity course into an area they could access directly, and then sat down with an AI agent to solve the friction problem they were about to inherit.
The existing process involved a fairly complex series of steps and an Excel spreadsheet manipulation. What I built through iteration and plain English conversation was a clean web application launched via a Python script. The staff’s new workflow looked like this: double-click a desktop shortcut icon to launch a command prompt window, open a bookmark in their browser that I had customized for them, enter a unique student ID into a form field, click a button labeled “Enroll this Student,” confirm the green box showing “student added into course,” close the browser tab, close the command prompt window, move on with their day.
That double-click is the whole philosophy. A high-ranking university office, handling sensitive student conduct cases, accomplishing a formerly cumbersome workflow through a single gesture I built for them in a conversation with an AI agent. They didn’t need to know what was running under the hood. They needed it to work cleanly, every time. And it did. They told me so.
A few months after deploying the accessibility popup, I found myself at an educational technology conference. I wasn’t on the agenda. But they had an hour blocked for lightning rounds, five-minute presentations from attendees who had something worth sharing. I had been reading the room all conference. Accessible content and AI were the two topics consuming every hallway conversation. I knew what I had. I put my name on the list. It turns out I was the first lightning rounder.
In five minutes I introduced myself, described the mandate, explained the situation every Canvas administrator in that room was navigating, and walked through what I had built. I was direct about one thing from the start: this was not my original coding creation. I had help. An AI agent wrote the syntax. I supplied the problem, the constraints, the client knowledge, and the judgment about when we’d gone sideways and needed to redirect.
Here is my email address, I told them. If you want the code, it contains no sensitive or classified information, and I’m happy to send it. If you want to walk through the implementation together, we can meet via Zoom.
A few institutions took me up on it. It felt good to share something useful without an invoice attached, without an agenda beyond the sharing itself.
Here’s what I want to be clear about, because I think it matters in a moment when everyone is trying to figure out what AI is actually for. I didn’t learn JavaScript. I didn’t learn Python. I didn’t need to. What I brought to those conversations was thirty years of knowing my clients, knowing what friction looks like from the inside, knowing what “one time per browser session” means in human terms before it means anything in code. The AI knew the syntax. I knew the people.
That combination, domain expertise plus plain English plus the judgment to know when you’ve gone off course, is something that accumulates slowly, over decades, through ten thousand small interactions with humans who needed something and trusted you to help them find it.
The popup told faculty what they needed to know. The double-click gave the Provost’s office their time back. The conference room got code they could use the next week.
Nobody paid me for any of it. That was never the point.
More later...

