It started with streaming fatigue. It became an education in building something people could actually use.
October 2026
THE STARTING POINT
A library we could keep.
I was tired of paying for multiple streaming services and having a show or movie disappear from a catalog. I wanted to collect and organize my own media for myself and my family, with one place to find it.
I hadn’t planned a large technology project. The goal was practical: make the experience useful at home and, eventually, when we were somewhere else.
MY ROLE
Builder, learner, family support.
I built and configured the earlier environment hands-on. AI helped with research and Bash or Python scripts, which I manually reviewed. Direct implementation by AI agents came recently; this portfolio is one example.
THE APPROACH
Start with what I have.
Repurposed equipment, open-source software, and a willingness to learn the next thing the project needed.
THE CONSTRAINTS
Ownership on a near-zero budget.
I wanted to use hardware already on hand, passed along from work, or given to me by friends. An older Mac mini became the starting point. Buying new server hardware wasn’t the default answer.
I also wanted control over the environment, favoring open-source options and avoiding cloud or third-party dependencies wherever practical. These were priorities to weigh against real needs, not a guarantee that every decision would satisfy every rule.
One interface, different ways to watch.
The ambition was movies, TV shows, anime, kids’ content, live TV, music, and more in the same interface. Jellyfin’s broad range of clients was part of its appeal: phones, TVs, desktops, and browsers gave family and friends options.
Ubuntu became my operating system of choice. I started with very little Linux experience; the project gave me a reason to learn, and I now work confidently in the command line, while using the desktop when it suits the task.
Much of the discussion I encountered focused on server hardware and transcoding. I approached it from the other end, mostly standardizing my family on Fire TV Sticks and the official Jellyfin for Android TV app.
A consistent client gave us a familiar app and a more predictable setup to support. It didn’t remove every compatibility issue: media formats, audio, subtitles, and device differences still mattered.
02
Get remote access working, then learn from the friction.
Discovering Tailscale was a major step. Its free offering and ability to share an individual machine helped make the first remote-access setup possible.
For my mom and in-laws, the experience included another app, an account or sign-in to arrange, and a connection that sometimes needed to be re-enabled. When that happened, it looked as though Jellyfin had stopped working. The fix might have been simple for me, but knowing which app to open wasn’t obvious to them.
03
Spend where simplicity mattered.
I eventually made an exception to the near-zero-cost rule and bought a public domain, seeking a simpler way for people to reach the service. At the time, I still had questions about security and what making my media reachable over the internet meant legally.
The purchase didn’t answer those questions. It opened another part of the learning process: understanding access, security, and the responsibilities of operating the service.
04
Learn the foundations as the system grows.
Docker was another major milestone. I learned to define services in Compose YAML files, inspect running containers, and bring services up in the background. I’m still learning; these are practical skills developed through using the tools.
Media naming, folder organization, and format compatibility also became part of the engineering. A tidy library and a playable file solve different problems, and both affect the experience.
WHAT THE WORK TAUGHT ME
Usability belongs in the architecture.
The app, account, connection, library, and playback device all contribute to whether someone can watch something. A running service is only one part of that experience.
This project grew my confidence with Linux, containers, networking, storage, and troubleshooting. Just as useful was learning to notice where a technically workable solution was asking too much of the person using it.
Make the lessons reusable.
DrakeLabs documents the decisions and learning so I have a useful record and can eventually give readers a straightforward path to build their own version.
The work behind the scenes comes together in a familiar browsing experience: live TV, recently added movies, and shows in one place, with library categories across the top.
A sample of the web experience available to family and friends. Content and layout vary by account and client. Select the image to view it full size in a new tab.
WHERE IT STANDS TODAY
Less setup. More independence.
Today, family and friends can reach Jellyfin remotely in the app or through the public web address, without an extra app or VPN. The additional connection step that caused so much friction in the early setup is no longer part of their viewing routine.
They can also use the requests page, built with Seerr and the Arr stack, to request movies and shows without texting or calling me. That gives them a way to ask for what they want without making every request a conversation I have to manage.
Music is available directly in Jellyfin, too. For listening on the go, I recommend Finamp as another way to use the music library.
THE PRACTICAL RESULT
A service people can use themselves.
The progress is more than adding features. Remote viewing, requests, and music give family and friends more ways to use the system independently.
STILL A WORK IN PROGRESS
One interface isn’t the whole answer yet.
The original ambition included live TV and sports. That remains an area where the experience falls short of what I want.
LIVE TV IN PRACTICE
A familiar channel guide.
The available live-TV sources come together in Jellyfin’s guide, with channels, program titles, and schedules in a familiar grid. This is part of what works today, even while the sports coverage I want remains incomplete.
The working TV guide in my setup, captured October 2026. Channels and schedules can change. Select the image to view it full size in a new tab.
THE UNRESOLVED GAP
Live sports is still the hard part.
Trying to move away from subscriptions runs into a particular challenge with the sports I follow. Many of the games I want are on paid cable channels or streaming services. An antenna can cover some games, but it doesn’t cover most of what I want to watch.
I’ve brought together IPTV sources using Threadfin and Cabernet, but I still haven’t found a way to bring most of the sports I care about into Jellyfin. The tools help organize the sources I have; they haven’t solved that coverage gap.
That’s where the story stands today: meaningful progress on access, requests, and music, with live sports still an open problem.