Two Apps, Not For You
Home Movies and Music Box both went live this week, and both are, by any measure I’d apply to a “real” app, done: search, streaming, a proper player, none of the corners cut. Neither one has a public URL, and neither one ever will.
That’s not a placeholder state. It’s the design.
Music Box is a full-text search index (SQLite FTS5) over a personal FLAC library, streaming originals byte-range direct with no transcoding, no quality lost anywhere in the path. Home Movies walks a drive full of old family video, groups files into something that looks like a real series/episode structure, and remuxes anything a browser can’t play natively to HLS on demand, one job at a time, because the box only has one hardware encoder. Both are reachable from any device on the house LAN, and both are reachable from anywhere else too, over Tailscale. Both stop exactly there.
The line isn’t “finished.” It’s “who’s it for.”
Every other app on this site that’s marked live (NewsAgg, Pong) has a public URL because the thing only works if strangers can hit it. A news aggregator only I can read isn’t really aggregating anything for anyone. A peer-to-peer game with no second peer is just a demo.
Home Movies and Music Box fail that test in the other direction: they only work because strangers can’t hit them. The music library includes commercially released tracks: searchable and streamable at home is exactly the personal use those files are licensed for, and broadcasting that same audio publicly is a different act entirely, one I don’t have a license for. The video library is home movies. Actual family. There’s no version of “and now the public internet can watch it” that isn’t a mistake.
So the deployment target was never “the internet, eventually.” It was “the house, indefinitely, plus wherever I am, over a network only my own devices can join.” Tailscale gets me the “plus wherever I am” part without moving the boundary at all: it’s still just my devices, on what’s functionally still my network, extended over the internet instead of a router. That’s the whole trick. Nothing about the app changes; only how far the private network reaches does.
Fully featured was never in tension with private
The instinct might be that “internal tool” gives you permission to cut corners: skip the nice player, skip the search index, ship the minimum. I don’t think that follows, and these two are the test case. Nobody but me and my household will ever load either app, and both still got the full build: real search, real streaming, real transcoding, a UI that doesn’t feel like an admin panel. The audience being small doesn’t make the thing worth building badly. If anything it’s the opposite: I’m the one who has to actually use this, every day, so it has to be good on its own terms, not on the internet’s terms.
The interesting decision was never “should I finish it.” It was “does this get a public URL,” and that answer was clear before I wrote a line of code for either one: a question about the content, not about the code.
Most projects on this site are the exception, not the rule
It’s worth saying plainly, since this site’s whole premise is “build in public”: most of what I actually build isn’t public, and doesn’t try to be. The public ones are the ones that need an audience to function: an aggregator, a game that needs a second player, a set of tools worth writing up. The rest are just software for one household, and the fact that two more of them are done and running is worth noting here even though you, reading this, will never get to open either one.