A small Wizard-of-Oz study web app built with Node.js, Express, and Socket.IO. It uses a simple shared permission switch between a researcher and any number of participants.
/— links to both interfaces/participant— participant interface/wizard— researcher interface/health— returns{ "status": "ok" }
The server is authoritative and keeps two Boolean values in memory:
{
"permissionRequested": false,
"permissionGranted": false
}
- The researcher clicks Ring for permission to set
permissionRequestedtotrue. - Any participant can click Allow agent to talk to set
permissionGrantedtotrue. - One grant is sufficient; other participants are not required.
- The researcher clicks Reset to set both values back to
false.
- Install dependencies:
npm install
- Start the server:
npm start
- Open the interfaces:
- To test multiple participants, open several browser tabs pointed at http://localhost:3000/participant. The researcher page shows the live participant count.
- Push this repository to GitHub.
- In Railway, create a new project and deploy from the GitHub repository.
- Railway runs the app with
npm start(defined inpackage.json). - In the service settings, generate a public domain.
- Open these routes on the generated domain:
/participant/wizard
- No database, authentication, or session IDs are used.
- All state is stored in server memory and will reset whenever the Railway service restarts (redeploys, crashes, or sleeps).