Cozystream
When I started looking for a way to share my movie library with my partner and her parents, Plex was the obvious option. I tried it, and pretty quickly realized it wasn't what I wanted.
The home screen was full of things I didn't ask for: recommendations, free ad-supported movies mixed in with my own library, and a layout that felt more like a streaming service than a personal collection. Streaming remotely requires a paid subscription. And the whole thing runs through Plex's cloud, so your account, your metadata, your viewing activity, it's all going through their servers.
I just wanted something simple. A clean way to browse my movies, share them with a few people, and keep everything local. The idea was partially sparked by my time in the Peace Corps, when we'd share movie files on thumb drives and all end up watching the same movies. It was a really fun way to bond and build community. I wanted to recreate that feeling, so I started designing one.
Just my library. Nothing else.
I'm designing for three people, and they all use the app differently.
Me: I'm the admin. I add movies, organize collections, tweak the metadata, and adjust settings. I want that experience to be fast and not annoying.
My partner: She just wants to find something to watch. She should be able to open the app, scroll through, pick a movie, and play it. Resume where she left off. That's it.
Her parents: They're not technical. They'd use it on their LG TV with a remote. Big text, simple navigation, no error messages about file formats. If it doesn't just work, they'll call us.
- The library is the UI. Posters front and center, minimal chrome around them.
- Zero learning curve. If you've used Netflix, you already know how this works.
- Built for a TV remote. If it works with four arrow keys and an OK button, it works for everyone.
- Make it feel like yours. Themes, colors, fonts, spacing, the whole look is adjustable. A personal media server should feel personal.
This is something I care about a lot and plan to keep building on. A media server is something you look at regularly, so it should look the way you want it to.
Right now, Cozystream has six color themes (each with dark and light modes), eight accent colors plus a custom color picker, four independent font controls for different parts of the UI, and layout settings for card size, spacing, corner radius, and row density. Every change applies instantly.
The accent color picker has a built-in contrast checker. If your color doesn't read well against the background, it tells you and suggests alternatives.
Appearance settings: theme grid, accent picker, font options
Same view, different themes
DVD Case mode
I wanted the design to feel reminiscent of analog movie sharing. Browsing a shelf, picking up a case, reading the back. DVD Case mode leans into that. It swaps the flat poster grid for 3D cases with spines. Hovering lifts the poster to reveal a label underneath. It's not more functional than the default grid, but it gives the library a physical, tactile feel that I like.
The browse page is a poster grid organized into rows, some manually curated collections ("Studio Ghibli," "Watch with Mom"), some auto-generated by genre, director, or decade.
Collection rows with the full grid below
Three layout options: a full-bleed backdrop image, a contained poster header, or no image at all. All three keep the same information hierarchy: title, genres, metadata, description, play button, then credits below. Backdrop mode has blur and tint controls so you can tune readability depending on the image.
Backdrop layout
Header layout
When Cozystream pulls in metadata for a movie, it doesn't always grab the right one. Rather than making that a tedious fix, I built a quick-edit flow. Search for the correct movie, select it, and the metadata updates instantly.
Searching and swapping to the correct movie
The default poster isn't always the best one. Cozystream pulls a set of poster options from the web so you can pick the one you like best. No manual uploading or file hunting.
Choosing from available poster options
Controls auto-hide during playback and reappear on mouse movement. Progress bar is thin at rest, expands on hover. For files the browser can't play natively, the server transcodes to HLS on the fly with FFmpeg. The user just presses play.
Controls appear on hover, then fade out
The TV app is currently in progress. It's built for remote control navigation with spatial focus management that moves a visible focus ring between elements using arrow keys.
It runs as a web app inside LG's webOS and Samsung's Tizen browsers, which are constrained environments. Screenshots coming soon.
I designed Cozystream and I built it, with Claude Code handling a lot of the implementation speed. Having a tool that can work across the full stack (Angular components, Node.js routes, FFmpeg transcoding, SQLite queries) meant I could move from a design idea to a working feature in a single sitting.
The design decisions are mine: the layout system, the customization approach, the TV navigation patterns, the information hierarchy. Claude's role was letting me execute on them quickly. Instead of spending hours debugging a CSS 3D transform for DVD case mode or wiring up HLS transcoding, I could describe what I needed and stay focused on the design problem.
It's a workflow I'd use again. Design the experience, then build it fast enough that you can actually use it and refine it the same day.
- Getting it in front of my actual users (my partner and her parents) and redesigning based on their feedback
- A guided onboarding flow so first-time setup doesn't require technical knowledge
- A real responsive pass for phone and tablet
- More customization options
- An accessibility audit beyond the contrast checker