Skip to content

Latest commit

 

History

187 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go gopher mascot

Gopher artwork by Renee French, CC BY 3.0, via golang-samples/gopher-vector

Intro Radio

CI License: AGPL-3.0

Intro Radio is GEWIS's live stream (Icecast/HLS audio and video) for the student association's introduction week, with a built-in chat between listeners and radio staff and an admin backoffice for staff to manage those conversations.

This repository is a monorepo combining what used to be two separate projects:

  • frontend/ -- the Vue app listeners and staff use to watch/listen and chat (formerly GEWIS/radioweb). See frontend/README.md.
  • backend/ -- the Go server behind the chat and the stream metadata API (formerly GEWIS/radiogaga). See backend/README.md.

Both READMEs cover their service in depth (environment variables, message formats, HTTP endpoints); this one focuses on running the whole thing together.

Repo layout

intro-radio/
|-- frontend/     Vue 3 + Vuetify SPA: player UI, listener chat, admin backoffice
|-- backend/      Go WebSocket chat server + JSON stream-metadata API
|-- scripts/      dev.sh (run both services) and dev-token.mjs (auth token helper)
|-- docs/         README assets
`-- .claude/      Claude Code launch config for browser-preview tooling

Local development

Prerequisites

  • Node.js 22.x with Corepack-enabled Yarn (see frontend/.yarnrc.yml)
  • Go 1.24+ (see backend/go.mod)

Run both services

./scripts/dev.sh

This starts the backend on http://localhost:8080 and the frontend on http://localhost:3000 (which proxies /api/v1 and /ws to the backend -- see frontend/vite.config.mts), running yarn install first if frontend/node_modules doesn't exist yet. Output from each service is prefixed with [backend] / [frontend]. Press Ctrl+C to stop both, and their child processes, cleanly.

To run a single service on its own instead, see frontend/README.md or backend/README.md. All backend environment variables have safe local defaults -- GEWIS_SECRET and RADIO_CHAT_KEY both default to ChangeMe.

Getting a chat auth token

The chat requires an HS512-signed JWT with lidnr / given_name / family_name claims, and there's no local login flow to produce one. scripts/dev-token.mjs signs one directly, using the backend's actual default secret (read from backend/chat.go, not guessed), and prints ready-to-use URLs:

node scripts/dev-token.mjs --lidnr 1337 --given-name Ada --family-name Lovelace
Listener chat:
  http://localhost:3000/?token=eyJhbGciOiJIUzUxMiIs...

Admin / backoffice chat:
  http://localhost:3000/backoffice?token=eyJhbGciOiJIUzUxMiIs...&key=ChangeMe

Open either URL once both services are running. --lidnr, --given-name, and --family-name are optional (they default to 1234, Test, and User); set GEWIS_SECRET / RADIO_CHAT_KEY in the environment to override the source-read defaults if you're running the backend with custom secrets.

Claude Code / agent preview

.claude/launch.json wires up scripts/dev.sh as a named preview target (intro-radio) for Claude Code's browser-preview tooling, so a single preview_start call brings up both services and opens a browser tab on the frontend.

Deployment

Both services build and publish as Docker images via the shared GEWIS/actions workflows (see frontend/Dockerfile and backend/Dockerfile), triggered on pushes and releases.

License

AGPL-3.0. See LICENSE.

About

Intro Radio GEWIS Monorepo

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages