A small web app for testing rssCloud publisher implementations. Subscribe to a feed's cloud endpoint, receive /feedupdated notifications, and watch them stream into a live dashboard over a WebSocket.
Built with Hono + @hono/node-server and Tailwind CSS.
Required environment variables (see .env.example):
PASSWORD— dashboard login password.PUBLIC_URL— the externally reachable URL of this app (used as the rssCloud callback). For multiple subscriber URLs (e.g. https + http), setPUBLIC_URL_1throughPUBLIC_URL_9instead.PORT— listen port (default3000).
Feeds are persisted to ./data/feeds.json.
cp .env.example .env # then edit PASSWORD and PUBLIC_URL
npm install
npm run dev # tsx watch + tailwind watchProduction-style run from the same checkout:
npm run build
npm start # reads .env, runs node dist/index.jsThe repo ships a multi-stage Dockerfile and npm scripts that publish a multi-arch image (linux/amd64 + linux/arm64) to ghcr.io/andrewshell/rsscloud-tester.
- A buildx builder:
docker buildx create --use
- Login to GHCR with a GitHub PAT that has
write:packages:echo "$GHCR_TOKEN" | docker login ghcr.io -u andrewshell --password-stdin
Both scripts tag the image :latest and :<version>, where <version> is read from package.json.
npm run docker:build # multi-arch build, no push (verification only)
npm run docker:push # multi-arch build + push to ghcr.ioTo cut a new release, bump version in package.json and run npm run docker:push.
Note: docker:build does not load the image into the local Docker engine — multi-arch manifests can't live there. For a local smoke test, do a single-arch --load build:
docker buildx build --load -t rsscloud-tester:test .Env vars are passed at runtime (the image does not bake in a .env). Mount a volume at /app/data if you want feeds to persist across restarts.
docker run --rm -p 3000:3000 \
-e PASSWORD=changeme \
-e PUBLIC_URL=https://tester.example.com \
-v $(pwd)/data:/app/data \
ghcr.io/andrewshell/rsscloud-tester:latestOr with an env file:
docker run --rm -p 3000:3000 \
--env-file .env \
-v $(pwd)/data:/app/data \
ghcr.io/andrewshell/rsscloud-tester:latestDrop this next to a .env file. Mount ./data if you want feeds to survive a recreate.
services:
web:
image: ghcr.io/andrewshell/rsscloud-tester:latest
restart: unless-stopped
ports:
- 3000:3000
env_file:
- .env
volumes:
- ./data:/app/data
networks: {}