💡 Local Dashboards + The (new) Judoscale API

Jon Sully
@jon-sullyNote on AI use
Hey there 👋 Jon here. Just want you to know that I wrote every word of this article by hand, myself, pre-LLM-style.
I wouldn't ask someone to read something that I'm not willing to write.
That said, while I have creative illustration ideas, I'm not a designer! I do use ai-powered image generation in sketch-style to implement my ideas.
This all applies to my past articles as well, we only started adding this note in >=2026 given how pervasive AI slop articles have become.
I like dashboards
As long as I’ve been building software, I’ve enjoyed having data about that software on some sort of physical screen or device around me. On one hand, I’ve always felt it’s important to see your metrics with your own eyes — you might detect anomalies or patterns that don’t trigger your alerts outright, but which still may be important bugs. On the other, it feels cool to have charts on TVs 😎.
Just for a few quick examples, these are the sorts of datas I want to keep ahead of me on the day-to-day. Scout’s stack-aware, color-coded bar charts:
Betterstack’s system-level metrics (plus making any chart you want from logs data! ✨):
And Judoscale’s scale, queue time, and utilization data:
All of these datapoints can help you answer specific questions about your app’s current health in a glance. That’s useful!
That said, if you’ve ever tried to setup and run your own device-based dashboards, you’ve probably also experienced the pain it can be: setup a browser on some sort of device/TV, log in to your service(s), pull up the chart(s) you want, then configure a browser extension to automatically switch between tabs and refresh the pages on a given interval. Oh, and that system will break/die/crash once every month or two, so make sure you keep the remote / mouse / keyboard nearby!
Running a physical (TV/iPad/etc) metrics dashboard has always required a certain level of futzing.
Also, I’ve used plenty of service providers in the past that have great, beautiful dashboards and charts, but that weren’t made with long-running in mind! They were made to be pulled up when needed, looked over for a few minutes, then closed. Expecting them to stay alive (polling data, getting updates, refreshing their rendering, etc) over the span of weeks reveals even the smallest of Javascript memory leaks (as your Chrome instance balloons to tens of GB of memory…). The browser-extension style of “switch to the next tab and refresh it” works (I’ve used it for years) but I think it’s time for something entirely new.
The new way
There are so many factors and perspectives to talk about with today’s AI tooling for developers, but I’ve been mulling over a notion of ‘personal software’ — building the things you need from scratch, or forking existing projects, and building them deliberately around your own domain model. Example: need a CRM? Just make one — one that fully understands exactly how your pipeline and communication styles work — instead of grabbing Hubspot off-the-shelf (etc.) and trying to configure it to your workflow.
Eventually I got to wondering what the ‘personal software’ equivalent of dashboards and metrics charts would be. A DIY solution to rendering data… in a way that I prefer, a style that matches my app itself, and a system that I can control and change whenever, and however, I want to. 💡 Can I use AI to build my own chart dashboards?
The answer is yes. And because I didn’t want to spin up third party cloud hosting just for my dashboards, I realized a neat architecture for this: a simple, local HTML file that loads the data, paints it into a chart, and handles the data refreshes with simple, local Javascript. As long as my metric providers have open API’s that I can pull the data from, I can just render it myself!
So… a few prompts later, and pointing Safari at file:///Users/jsull/Developer/repos/local_web_dashboards/_example_dash.html yields this beautiful cross-service view (this one in particular is for larger physical screens, hence the small-appearing charts):
And here we can see system metrics, application metrics, and queue time metrics all rendering into the same page. No tab switches needed! 🎉
Alternatively, I have a four-panel set of screens for an iPad-size view, complete with auto ‘page’ rotation (every five minutes) through the four pages noted on the top right. Page 1 for high level system basics:
Another page for revealing response times, throughput, and queue time all in the same scope (monitoring capacity, essentially):
And a few other application-level metrics pages (think, “X forms submitted over time” or “X tasks outstanding”) after that.
✅ Tip
I’m not getting super specific or detailed about how these are built here because the beauty of the idea is that you can create your own extremely simply with today’s AI tooling; the ‘how it actually works’ doesn’t matter so much these days. The point is that we’re no longer beholden to web UI’s and dashboard frameworks from other providers. Just pull the data from them and build your own dashboard(s)! Exactly how you want.
The Judoscale API
Long-time Judoscale customers/readers might’ve started wondering as they read through to this point, “Wait, Judoscale has a data API I can just consume??” We do now! It was serendipitous timing that Carlos was finishing up the full new Judoscale API the same week I had this idea about local, data-driven, custom dashboards! Complete with a downloadable OpenAPI spec document you can feed into your preferred LLM/Agent, it’s easy to hop into the Judoscale web UI to generate a read-only API token.
Of course, local dashboards and data rendering are great for the read-only tokens, but the new API supports all readable and writeable actions available in the web UI. So feel free to build a neat integration into your own control-plane applications and leverage the power of Judoscale wherever, and however, you’d like!
We’re also excited to say that an official Judoscale CLI and MCP are both on their way, for those interested. 😎
❗ Important
One last note on local dashboards: building dashboards in this way requires your providers to support CORS preflight clearance requests (since you’re running Javascript on localhost or similar). To date, we’ve found that DigitalOcean, Scout, and Betterstack all support this style of fetching. Oh, and Judoscale, of course 😉.