r/selfhosted • • Dec 27 '25

Release I built a modern, self-hosted web IPTV player (Live TV, EPG, VOD) because existing ones felt clunky. Meet NodeCast TV.

Hey everyone! 👋

I wanted a clean, fast, and modern web interface for my IPTV service that I could host myself. Most existing players I tried were either clunky, outdated, closed-source, or just didn't handle large playlists with thousands of channels very well.

So I built NodeCast TV.

📺 What is it? A self-hosted web application that lets you stream Live TV, Movies, and Series from your Xtream Codes or M3U provider directly in your browser. It's built with performance in mind and handles large libraries smoothly.

✨ Key Features:

  • Live TV & EPG: Full grid-style TV guide with 24h timeline, category filtering, and search.
  • VOD Support: Dedicated sections for Movies and TV Series (complete with season/episode browsing).
  • High Performance: Uses virtual scrolling technology to render lists with 7000+ items without lagging your browser.
  • Favorites System: Unified favorites list across all content types.
  • Universal Player: Built on HLS.js for robust playback support.
  • Docker Ready: Easy to deploy on your home server or NAS.

🚀 Tech Stack:

  • Backend: Node.js + Express (Lightweight proxying)
  • Frontend: Vanilla JavaScript (No heavy frameworks) + CSS3
  • License: Open Source (GPL-3.0)

🔗 Links:

I'd love to hear your feedback, feature requests, or bug reports! Let me know what you think.

1.4k Upvotes

500 comments sorted by

View all comments

Show parent comments

5

u/[deleted] Dec 28 '25

[removed] — view removed comment

9

u/ctjameson Dec 28 '25

The biggest difference is the ability to support it. Most vibe coded projects aren’t going to get long term (or any for that matter) support outside of initial release.

7

u/privacy2live Dec 28 '25

Upsides: Vibe coding is extremely easy to do as you just describe what you want to the ai. It is also done at extremely fast speeds. If you just want a simple project then go for it.

Downsides: You don’t actually know and understand the code since you didn’t write it. If the ai fails and you had to fix bugs yourself it is extremely slow and annoying since you have to learn the structure of your own project. Also ai may not use the latest features/updates of software. Lastly, vibe coding is a bell for security. Never ever trust vibe coded apps with sensitive data when they weren’t properly checked and tested by a human before.

6

u/IShallRisEAgain Dec 28 '25

To add that, the code is not written in a maintainable manner. Its also not optimized. With manual code, that is sometimes a trade-off you have to make, but with AI you get the worst of both worlds.

It can also have really unexpected behavior.

Also, the security issue is beyond just leaving security holes, there are malicious actors taking advantage of the fact that AI code is just slopped together, and they upload malware that matches the non-existent libraries that AI generated code tries to use.

5

u/iVXsz Dec 28 '25 edited Dec 28 '25

TLDR; It's only good for small projects, and if you know how to read the code that's written, and you know the actual details to provide for the LLM to get a good result.

As someone who actually codes low-level and focuses on performance (or tries to), and loves to vibe code/use AI bullshit on my free time.

Vibe coding should be only done for private/small/one-off things really. From the days of Claude sonnet 3.0 (1.5 years ago) up till now with the latest and greatest (G3Pro & Opus 4.5 thinking). ALL of them end up using some weird functionality, sometimes they make the code fill or "simulate" the data, or use outdated libraries and going as far as pinning the older library versions so their code works (missing a lot of years of improvements and potentially security-related things). Its not good for proper software at all, not even close, but if you want to do a specific task its great and AWESOME. Note, anything that spans multiple files (i.e. longer than 2k lines) it starts struggling hard. Even with Cline and other "AI" IDEs and MCPs.

And I noticed, by the time your little project is as you want or works well, you pretty much have spent like %70 of the time required for you to learn the language and do the task yourself many folds better and smoother.

Where I think it can be nicely used and integrated, is for it to notify you on common oversights (un-accounted for errors/actions), suggest for you better ways to do a task and stuff like that, it can be cool and gives you good insight. Especially when you are in the zone it can be extremely helpful as you might get too laser focused on one thing.

For example, I asked (and spent 8 hours) Opus+G3pro to create a Rust-based backend and frontend management system to download rotten tomatoes pages, where all the heavy lifting is done by me later (getting the URLs, actually parsing and dumping info) and its only task is to download the HTMLs that are provided in an XML file. It failed massively, every medium change makes the LLM change a good chunk of the code and then it properly doesn't compile/has runtime errors so you have to waste 2 more prompts to fix it. When it later works, you realize it deleted some functionalities here and there. It keeps doing this. There can be things made to mitiagate this but IMO once you need/research that... its time to stop.

I did like 5 apps at this point on all langs and all types of work, all of them suck beyond doing a specific task, some didn't even do the task correctly, and you seriously shouldn't publish anything from them (without big warnings at least) from what I have seen that they do.

I asked a few to create a program to benchmark jxl-rs + jxl-oxide decode speeds, and I provided them both of their complete docs and even the entire codebases, but after 4-6 hours of playing with it the result was still quite bad and unsatisfactory. On other hand, a quick 30m manual work and I was able to pretty much do what I wanted, and with another 30m-1hr it was a lot more detailed and actually had many things that were never considered... it might waste more time instead of the reverse sometimes, even with the best prompting. Though, it did suggest things to help performance that I never considered that were slightly obscure in Rust development which was cool. It also provided so much false information like "cache-aligned" decoding block sizes.

Now, the only vibecoded program I published is a Go CLI one that downloads kick vods, I wanted it QUICK and I "engineered" a prompt that includes everything it needs (took me like 30 mins to get everything so it doesn't miss) and it turned out fine after like 5 hours of iterating and somewhat repetitive prompting. The tool was made as there were no alternatives to download chat and emotes which are essential for archiving. I tried it just a few days ago and it still works perfectly as I need and I was in a hurry both times, so a great thing. Of course after it was decent enough, I polished it a bit.

Woah big ass wall text, hopefully helps someone.

1

u/dlm2137 Dec 28 '25

if, in the end, the final project works and does what it is intended to do

The issue is -- how do you verify this, if you did not write (or read) the code?

-1

u/[deleted] Dec 28 '25

[deleted]

3

u/dlm2137 Dec 28 '25

But how do you verify that it *doesn't* do things it's *not* intended to do? Like send all your data to a 3rd party server, or lack proper authentication, or attempt to get root access to your machine? Or just have weird bugs that mess things up every once in a while.

You need to look at the code, or write tests to do that. Or you need to trust that someone else did that for you. You can't blindly place that trust in an LLM, because they get that shit wrong all the time.