# VODPlace: the place for VODs Available at [vod.place](https://vod.place/)! This is a viewer for Streamplace videos, in particular the VODs from AtmosphereConf 2026. It piggybacks off of [ionosphere.tv](https://ionosphere.tv)'s metadata for the moment. Backfills via lightrail and sync.getRepo because eli's PDS is slightly weird. Uses slingshot's experimental hydration for some stuff. Reasonably claude-coded, lots of stuff is rough and experimental. Some videos (notably @knotbin.com's talk, a few others) seem to have encoding issues, which I need to add transmuxing to `wasp-hls` to fix, but haven't gotten round to yet. ## Getting started ### Prerequisites If you have Nix, the flake dev shell is by far the easiest path. It gives you everything: Rust nightly, dioxus-cli, wasm-bindgen-cli (version-matched), Playwright browsers, ffmpeg, LLVM/clang for WASM compilation, and sqlite. ```bash nix develop # or use direnv ``` Without Nix, you'll need at minimum: - Rust nightly with the `wasm32-unknown-unknown` target - `dioxus-cli` (`dx`) - A C compiler and LLVM/clang-18 for WASM C compilation - ffmpeg (for server-side thumbnail extraction) - sqlite3 ### Building the player worker The player runs HLS in a Web Worker compiled to WASM. This needs to be built before anything else: ```bash ./build-workers.sh ``` This compiles `vodplace-player-worker` to `wasm32-unknown-unknown`, runs `wasm-bindgen --target web`, and drops the output into `public/player_worker.js` + `public/player_worker_bg.wasm`. Dioxus does NOT build this automatically for reasons that should be obvious. If you see a blank player, you probably forgot this step. ### Running ```bash dx serve ``` Dev server at `http://localhost:8080`. Browse page at `/`, watch page at `/watch?uri=`. There's a sqlite database in `./data/` that acts as a durable cache for chat messages and the video catalog. First load will take a bit while it discovers and enriches all the videos from the network. ## Architecture This is a Dioxus fullstack app. ### Player The player uses a main-thread/worker split. The Dioxus component on the main thread owns the `