J Scroller is the first non-Mac app we’ve built—a small but exciting shift. It started as an audio visualizer experiment (more on that soon!), playing around with sending messages to a web app via webhook. But then I started wondering: what real-time data should power the visualizer?
I wanted something tied to San Francisco, something dynamic and constantly changing. That’s when I landed on Muni. Not only is Muni real-time, but I also live right on the J line, and honestly—I love it. Watching the light rail pass with my daughter, seeing people on their way to work or heading home, it’s a small but meaningful part of our daily rhythm. Recently, Muni moved a stop closer to our house, right across the street. It’s been fascinating to see the morning queues form, even if the stop itself doesn’t have much signage yet.
One thing Muni does have, though, is its classic scrolling LED signs. The ones inside the trains announce the next stop, and some of the more built-out stations have LED signs displaying real-time arrival times. So I figured—why not build one of my own?
Behind the Scenes of J Scroller
Thanks to 511.org, I had easy access to real-time Muni data. Their API is well-documented, provides a generous access token, and outputs JSON. With that in hand, I used an AI-powered Next.js app generator to build a simple red LED-style scrolling display. It mostly worked right away (with some inevitable tweaking), and suddenly I had my own little Muni tracker.
This project also gave me a chance to explore two new areas:
AI-Generated Apps
I’ve used AI coding assistants like Claude, Copilot, and ChatGPT for my macOS apps, but this time, I went deeper into tools that generate and deploy full applications. I tested V0, Bolt, and Lovable—each did a solid job spinning up an app. While the AI-generated code wasn’t perfect, it got me 95% of the way there. The biggest limitation was debugging—real-time feedback was too slow, so I ended up pulling the code locally to fine-tune it. Long term, I’d likely rewrite parts for better structure and maintainability, but for quick prototyping, these tools are incredible.Adafruit & LED Hardware
I wanted J Scroller to exist as a real, physical display—something you could actually see outside. So I ordered an LED matrix and the corresponding electronics to take text input over WiFi and display text, all powered by Adafruit components. No soldering required! My goal is to mount it in my window, facing the street, so folks waiting for the J can see real-time train arrivals as they sip their coffee.
Future Ideas
Right now, J Scroller is a simple Muni arrival display. But there’s a lot of room to grow:
Interactive Messages – Display a phone number where people can text, then respond to the messages on the sign.
Emojis & Fun Content – Imagine little jokes, emoji games, or other little fun text tidbits.
This is our first real-world installation, and I’m excited to keep prototyping interactive public-facing projects like this. Stay tuned for updates on the physical build—and if you’re in SF, maybe you’ll spot J Scroller lighting up the neighborhood soon.
If you're interested in combining technology and play in new ways, we'd love to hear from you. seb@noefoundry.com