A repo for setting up and running the watch-party demo.
Watch The Video:

- docker
- docker compose
- KinD
- helm
- go
This repo depends on the aggregator service as a Git submodule (branch stream-support). Clone with --recursive to fetch it automatically:
git clone --recursive https://github.com/SolidLabResearch/watch-party-demo.git
cd watch-party-demoInitiate the kubernettes cluster for the aggregator
cd aggregator/ && make kubernettes-initStart the servers
npm run startDemo should be available at http://localhost:8080/
This repo composes and sets up 3 different repositories to build the demo.
- https://github.com/SolidLabResearch/solid-watch-party
- https://github.com/SolidLabResearch/aggregator
- https://github.com/SolidLabResearch/user-managed-access
The generator builds a complete Solid watch‑party dataset under an output folder (default: ./data). It creates:
- User profiles (
…/profile/card$.ttl) - Rooms per host (
…/watchparties/myRooms/<room-id>/room$.ttlandregister$.ttl) - Per‑user message outboxes with synthetic messages (
…/watchparties/myMessages/MSG…$.ttl) - Optional room thumbnails if you provide an images folder
- A random YouTube trailer per room wired as a
schema:VideoObjectfeatured by an event, plus a pausedschema:SuspendActionat location"0" servers.jsonwith ports/URLs to help wire Docker Compose
Run it like this:
npm run generate -- --users 15 --partiesPerUser 1 --usersPerParty 15 --messagesPerUser 20Flags (all optional unless noted):
--users <n>- Total number of users to create (default: 5)
--partiesPerUser <n>- How many parties each user hosts (default: 2)
--usersPerParty <n>- Total users per party including the host; participants are selected round‑robin (default: 3)
--messagesPerUser <n>- Messages each participating user posts per party into their outbox (default: 5)
--out <dir>- Output directory for generated data (default:
./data)
- Output directory for generated data (default:
--messagesFile <path>- Optional path to a text file for message content; accepts either a JSON array of strings or newline‑separated text. A convenient default lives at
generator/assets/messages.txt.
- Optional path to a text file for message content; accepts either a JSON array of strings or newline‑separated text. A convenient default lives at
--thumbnailsDir <path>- Optional path to a folder with images (png/jpg/jpeg/gif/webp). One image may be copied as the room thumbnail; its base filename is also used as the room’s semantic name.
--help- Prints the generator help and exits.
We keep trailer links in generator/assets/videos.txt. You can validate and refresh this file with the trailer validator, which checks titles via YouTube oEmbed:
npm run -s trailersWhat it does:
- Fetches each URL’s title via oEmbed and verifies expected keywords.
- Writes valid URLs (one per line) to
generator/assets/videos.txt. - Prints any invalid URLs to stdout so you can review/replace them.
After running the data generator, you can update compose.yaml based on data/servers.json so all CSS/UMA instances are wired correctly and can talk via localhost. It also forwards localhost:5000 inside each container to the aggregator on your host.
node --loader ts-node/esm scripts/update-compose.ts compose.yaml dataIf you already cloned without --recursive, initialize submodules now:
git submodule update --init --recursive