Canvas knows which students are struggling. It just doesn’t tell you.

On a Monday morning, you open Canvas and see a grid filled with dozens of students across the top, a dozen or more assignments down the side, and several hundred cells overall. Most of these cells are perfectly fine, but among them are the students who have quietly stopped submitting their assignments.

The data isn’t hidden. Canvas has all of it. But a gradebook answers what did everyone get?, and the question I actually have on a Monday is who do I need to write to? Those are different questions. Getting from one to the other means scrolling, sorting, and keeping a running tally in your head per course, every week, for as many sections as you teach.

So I built EarlyARC. It’s a free, native Mac app that reads your Canvas courses and gives you the list: who needs attention, worst first, with a reason on every line.

Every flag says why

The rule I set at the start: EarlyARC never shows you a number without a reason. Not a risk score, not a colored dot, not “82% confidence.”

Each flagged student gets plain English: “3 of 15 assignments missing — 23% of the grade,” “current score 61%, below 70%,” and ” how long since they were last active in the course. You can see, in one line, whether this is someone who’s drifting or someone who had one bad week.

That’s partly so you can act on it. It’s also because you may end up explaining the flag to the student, and “the algorithm said so” is not an explanation either of you deserves.That’s partly so you can act on it. It’s also because you may end up explaining the flag to the student, and “the algorithm said so” is not an explanation either of you deserves.

Read-only, and it keeps almost nothing

EarlyARC only reads from Canvas. It cannot change a grade, post an announcement, or alter your course. There’s no path in the code that writes to Canvas at all.

Rosters live in memory while the app is running and are gone when you quit. No cache, no database, no file of student work sitting on your laptop. Your access token goes in the macOS Keychain, protected like a saved password.

This is student data. The safest place to put it is nowhere.

The part that was genuinely hard

The way out was to store the app’s opinion instead of the student’s work. EarlyARC keeps a course ID, a Canvas student ID, a date, the risk level it assigned, and how many pieces of work were missing. No name, no grade, no score, no assignment titles, no message text.

I want to be precise about what that is and isn’t, because “no name” is not the same as “anonymous.” A Canvas student ID is an identifier — under FERPA’s definition, it is personally identifiable information, just as a name would be. Anyone at your institution who can already see your course could resolve one to a student.

What the design buys is smaller and more honest than anonymity: the file holds the least that will answer the question, nothing in it is a grade or a piece of student work, and it never leaves your Mac. It’s a much thinner record than the gradebook export most of us have sitting in a Downloads folder right now. One entry per student per day, forgotten after a year, switched off or deleted from Settings in one click.

Storing grades would have been easier and would have bought nothing except a file I’d have to defend.

What it won’t do

It won’t tell you why a student stopped. That part is still your job, and it always should be. EarlyARC doesn’t predict, doesn’t reduce anyone to a percentage, and doesn’t contact anyone on your behalf. When you’re ready to reach out, it fills in your own message template and hands it to you to send.

It surfaces. You decide.

Try it out! It’s free


EarlyARC is free, runs on macOS 14 or later, and has a sample-data mode so you can see exactly how it works before you connect it to anything real.

I built it alone, with Claude Code. One instructor, no dev team, no budget.

LibreBar Is Now Listed on MacMenuBar.com

A few days ago, I wrote about LibreBar, the small macOS app I built to keep my current FreeStyle Libre glucose reading in the menu bar.

Today, I’m happy to share that LibreBar is now listed on MacMenuBar.com, a popular directory devoted entirely to Mac menu bar apps.

The listing describes LibreBar as a native macOS app that displays your latest glucose reading, trend arrows, and a 12-hour chart. It also highlights the desktop widgets, automatic updates, and support for both mg/dL and mmol/L. LibreBar appears in the site’s Health Apps collection alongside other menu bar tools designed to help people keep useful information close at hand.

There’s something satisfying about seeing LibreBar included on a site dedicated to exactly the kind of software I wanted to build: small, focused Mac apps that quietly make everyday life a little easier.

I built LibreBar because I wanted my glucose reading available without reaching for my phone or checking my watch. Knowing that more Mac users may now discover it through MacMenuBar.com makes me very happy.

LibreBar is free and requires macOS 14 or later, a FreeStyle Libre sensor, and a LibreLinkUp follower account.

You can find the new listing at MacMenuBar.com and download the app at librebar.app.

If you use LibreBar, I’d still love to hear what you think and what you’d like it to do next.

I Put My Blood Sugar in My Mac’s Menu Bar

I wear a FreeStyle Libre. It’s great. The annoying part is checking it. I’ll be writing or grading (or pretending to write while actually grading), and every twenty minutes I pick up my phone and open an app, or glance at my watch and hope it’s synced. Meanwhile I’m sitting in front of a 27-inch screen all day, and my glucose shows up everywhere except there.

The menu bar on that screen has been showing me the time, the Wi-Fi, and an emoji button I’ve never clicked. It had room for one more thing.

So I built LibreBar. It’s a small native macOS app that puts my current glucose in the menu bar: the number and a trend arrow, updated every minute. Click it, and you get a 12-hour chart with my target range shaded green and anything below it drawn in red. There are desktop widgets in three sizes. It handles mg/dL and mmol/L. It updates itself. That’s the whole app.

A few things that mattered to me while building it:

Privacy. Your LibreLinkUp login is stored in the macOS Keychain and only ever sent to Abbott’s servers, the same ones your phone already talks to. No analytics, no telemetry, no third parties. The app is sandboxed and notarized. The only counting I do is anonymous daily check-ins on my server so I know roughly how many copies are running. Nothing identifying is stored, and the website says so in plain English.

Honesty. Macs don’t have NFC, and Libre sensors won’t pair with them. So LibreBar gets your data through Abbott’s LibreLinkUp sharing service, the same one family members use to follow someone’s glucose. It’s an unofficial API. Abbott could change it someday, and if they do, the app will tell you rather than silently break. Also, this is not a medical device. It just shows you data you already have. Make treatment decisions with your real device, not my menu bar.

My wife found the first bug within a day. I tested everything before launch: signatures, notarization, all of it. Every check passed. Then my wife downloaded the app and macOS told her to move it to the trash. Turns out I had tested the way developers test, with command-line tools, and never once just double-clicked the zip like a normal person. One missing flag in my build script broke the app for everyone who extracted it in Finder, which is everyone, while it worked fine for me. Lesson learned: test like your users, not like yourself. And if you don’t build software: this is why we’re like this.

LibreBar is free and it’s at librebar.app. You need macOS 14 or later, a Libre sensor, and a LibreLinkUp follower account. The site walks you through the setup. It takes about two minutes of phone-app clicking.

I built this for myself and I use it all day. My phone stays in my pocket now, and my watch is back to telling me to stand up. If you use a Libre and a Mac, give it a try and tell me what you think. What should it do next? I’m leaning toward low-glucose notifications.

Pixel perfectionism doesn’t stay on the screen

The worst part of working in pixels all day isn’t the pixels. It’s that pixels taught me everything can be nudged one pixel to the left and undone. Then I go paint a wall, mow the lawn, or glue a fin on a model rocket, and my brain demands pixel precision from materials that have never heard of Control+Z/Command+Z.

Fellow pixel people: how do you turn it off?

LogRaker looks like the app I have always wanted

I’ve just come across a macOS app specifically designed for those of you who monitor application, system, and server log files. There’s a 14-day trial, and the app is priced at only $49.99.

I’ll be back with my review and thoughts.

Oh, and here’s where you can learn more about it https://lograker.app

A Decision That Shaped My Life

In 1994, I left Melville, Long Island, New York, and moved across the country to Camas, Washington, to help open Underwriters Laboratories’ new office near Lacamas Lake. The goal was to help build a more technology-focused operation and reduce our reliance on paper.

Moving across the country was a big decision, but it turned out to be one of the best I’ve ever made.

This week marks 32 years in Washington State. Along the way, I’ve had a rewarding career, built lasting friendships, and, most importantly, met Gayle. This July, we’ll celebrate 20 years of marriage.

Looking back, I’m grateful I took the chance. Washington has been home for more than half my life, and I wouldn’t have it any other way.

The Definition of “workslop”

Workslop (noun) – The flood of low-quality, AI-generated work that looks polished on the surface but is hollow underneath. It clogs inboxes, reports, and project folders with half-baked writing, shallow analysis, and factual slush that others have to fix, rewrite, or ignore.

In short, workslop is the illusion of productivity without the substance of real work. It wastes time, erodes trust, and turns collaboration into a cleanup duty.

College is the Real World

Every so often, I catch myself thinking about why I design my classes the way I do.

College is the real world. My students aren’t waiting for life to begin after graduation; they’re living it right now. Working jobs. Raising kids and balancing a million things.

So when I build assignments, I don’t pretend we’re in some academic bubble. I try to make my classes reflect what it’s actually like out there: teamwork, deadlines, problem-solving, communication, and showing up even when it’s hard.

It’s a reminder to myself: I’m not “preparing” students for the real world.

I’m teaching in it.