About

I missed TV. So I built Airwave.

Not the cable bill, the commercials, or being stuck with whatever the networks decided to show. I missed the experience — turning it on, seeing what's already playing, dropping into a movie halfway through, finding an episode of something I hadn't watched in years. Something just being on, instead of staring at Plex for fifteen minutes trying to decide.

And now that I have a son, I wanted him to have that too — except with channels made from our own media. So that's what Airwave became.

Inspired by the ones who proved it works

Airwave owes a lot to NostalgeX and BunnyEars TV. They showed me that turning your own library back into live television is every bit as fun as it sounds. But both were built around Apple TV and did the work on the device itself — and I wanted this running on my LG webOS TV, with the brain living as a real service I self-host next to Plex.

The channels belong to your Airwave server — not to a device.

The server owns the lineup, the schedules, the packages, the users, the metadata, the playback state. The TV apps are just clients that tune in. Open Airwave on the LG, the Apple TV, an iPad, Fire TV, or a browser and you're looking at the same network — the same channels, the same guide, the same thing currently airing. It's much closer to running your own little TV provider than launching an app.

Live — but with a DVR

When you tune in, you don't start the file at the beginning. You join whatever's airing, at the point it would actually be. But it isn't rigid: there's a full DVR timeline behind LIVE. Scrub back through programs that already aired, restart what's on from the top, jump back to an earlier episode. The only thing you can't do is seek ahead of live.

I did exactly that on my son's Bluey channel the other day — went back a few episodes in the channel's history and started one that had aired earlier, so he could watch from there.

The discovery of live TV, without giving up the useful parts of a DVR.

It gets me watching my own library again

The other night, Avengers: Age of Ultron happened to be on one of my channels. I dropped in because it was on — and then just watched the rest of it. I never would have gone into Plex and deliberately picked that movie. But stumbling across it, the way you would have on TV years ago, pulled me right in. That's the whole point: it gets me watching things buried in my library that I'd forgotten about, instead of endlessly scrolling thumbnails.

I actually use this

This isn't a demo I threw on GitHub. I use Airwave basically every day on my Apple TV. My son has his own channels. On a recent road trip he watched a mixed channel of his shows on an iPad for a big chunk of the drive — streaming back from our Plex at home, tuning into the same channels we have in the living room, not some separate copy. Most of Airwave's testing happens simply because my family actually uses the thing.

About the AI part

I'll be upfront: Airwave is heavily AI-assisted. I've been a full-stack developer for 10+ years, and I designed the product — the architecture, data model, scheduling and playback behavior, the infrastructure and constraints, the UX. I review the work, debug it, test it on real hardware, and decide what ships. But Claude Code wrote most of the literal source. I'm less interested in who typed each function than in whether the result is understandable, maintainable, and actually works.

I made it because I wanted it

Not to launch a product. I wanted my channels back. I wanted my son to have channels. I wanted to turn on the TV without making a decision — and that old feeling of catching a movie you hadn't thought about in years and going “oh, this is on.”

Streaming solved access to content. But somewhere along the way everything became a catalog, and every time you sit down you're expected to choose exactly what you want. I kind of hate that. Airwave is my attempt to bring the other thing back.