The reality of most side projects

You get the core features working, open the app on your machine, and… that’s where it dies. No installer. No reliable build on another OS. No versioned releases. Just a GitHub repo collecting dust.

I didn’t want SilkCast to be another abandoned side project.

SilkCast is a lightweight IPTV media player built with Tauri (Rust backend) and React/TypeScript. It supports live streams, series catalogs, embedded playback, and seamless fallback to external MPV. The tech wasn’t groundbreaking. The process was.

I decided to treat it like a real product from day one.

The shipping problem

Even though the app ran locally, releasing it meant solving a long list of production concerns:

  • Reliable cross-platform builds (Windows + Linux, macOS later)
  • Bundling the MPV runtime on Windows without forcing users to install it
  • Creating proper installers instead of raw zips
  • Handling Linux desktop fragmentation (X11 vs Wayland)
  • Automated testing and CI that actually caught issues
  • Versioning, artifacts, and release hygiene I could trust

Without these, I’d never confidently send the app to anyone who wasn’t a developer.

What I built

I invested early in a complete release pipeline:

  • GitHub Actions CI that builds and tests on every push across platforms
  • A dedicated release workflow that produces versioned artifacts:
    • Windows MSI installer with embedded icons and bundled MPV runtime
    • Linux AppImage with both X11 and Wayland support + fallback logic
  • A custom prepare-mpv-runtime.mjs script that downloads, validates, and stages the correct MPV binaries during the build
  • 80+ unit tests (Vitest + React Testing Library) plus Rust backend tests that run in CI
  • Consistent release tagging, changelog generation, and artifact naming

The result: every tagged release produces ready-to-distribute installers automatically.

Validation & proof it worked

The pipeline has successfully produced multiple public releases. Every release goes through:

  • Full CI matrix (test + build on Windows and Linux runners)
  • Clean MSI install/uninstall cycle on fresh Windows VMs
  • Manual smoke testing on multiple Linux desktop environments (GNOME, KDE, Hyprland)

The strongest signal? I can send normal users a download link and the app just works — no “install MPV first” instructions required on Windows.

Tradeoffs and lessons learned

Spending significant time on infrastructure instead of features was painful at moments, but it was the entire point of the exercise. I deliberately chose the harder path to build the muscle.

Key lessons:

  • Release automation compounds incredibly fast. Once the pipeline existed, shipping became almost frictionless.
  • You cannot fully automate desktop Linux testing. Real hardware/session validation is still required.
  • The “boring” work (installers, runtime bundling, consistent versioning) is what actually makes software feel professional.
  • Tauri’s small bundle size and security model were worth the Rust learning curve compared to Electron.

What’s next

Current priorities for SilkCast:

  • Tauri’s built-in auto-updater
  • Crash reporting and lightweight usage analytics
  • Expanded integration/E2E testing
  • Code signing for Windows to remove SmartScreen warnings
  • Proper documentation site

If you value engineers who ship polished, production-ready software — even on personal time — I’d love to talk.

View SilkCast on GitHub