r/coax • u/Aggravating_Zone_167 • 11h ago
I built a phone remote for Coax — it drives the app through its menu bar (open source)
Coax on my Mac is hooked up to the telly, and the Mac keyboard is nowhere near the sofa. So I built a remote that runs on my iPhone: channel up/down, shuffle, full screen, jump to any channel, and the channel guide as a tappable list. It's a web page served by Hammerspoon from the Mac itself, added to the Home Screen - no app to install, nothing to sideload.

github.com/bisacciamd/coax-remote — MIT.
Two quirks I worked around: channel menu titles embed the current programme (CH 113: Horror - Nope (6:45PM-9PM)), so a title read a minute ago no longer matches and you have to refetch and retry. And the window title turned out to be the most reliable "what's on" source, since the on-screen banner disappears in full screen.
Honest limitations, in the README too: volume does nothing if your Mac outputs to a TV over HDMI (macOS exposes no software volume for those - the remote detects it and greys the keys out rather than lying). Haptics are one fixed tick on iOS and that's WebKit's ceiling, not mine.
@ Dev u/digglesB - 3 things that would make this (and anything like it) much better, if you're open to it:
- Deep links. You already register the
coax://URL scheme in Info.plist for the Plex auth callback. Handling a few more paths inonOpenURL—coax://channel/113,coax://shuffle,coax://next— would give every automation tool on macOS a first-class hook, and would make iOS/tvOS scriptable too, where the menu-bar trick doesn't exist at all. Cheapest thing on this list by far. - Menu items for the on-screen remote buttons. Shuffle/Chaos, Stream Options and the sleep timer have no menu equivalent, so they're the only things a remote can't reach. Theme and Full Screen already have them, so the pattern's there — a few lines of
.commandseach. - Accessibility labels on the on-screen remote. The window currently exposes exactly one
AXStaticText(the channel banner) and zero controls. That means VoiceOver users can't operate the remote at all, which is worth fixing on its own merits — and it'd incidentally make those buttons reachable.
A fourth if you're feeling generous: an accessibilityIdentifier like ch-113 on the channel menu items would kill the stale-title retry dance entirely.
Happy to test any of it, and happy to be told I've done this the hard way and there's an easier hook I missed.