Interactive tasting web app for premium chocolate workshops.
This version is built for a speaker-led workshop:
- The speaker opens one tasting.
- Participants see only that tasting on their phones.
- They send their live vote.
- The speaker dashboard updates the aggregate radar charts in real time through polling.
- The speaker locks responses and moves to the next tasting.
- At the end, the dashboard shows every tasting with:
- audience radar
- official configured radar
node server.jsOpen:
http://localhost:3000/http://localhost:3000/config.htmlhttp://localhost:3000/participant.htmlhttp://localhost:3000/dashboard.html
For the current architecture, use a host with persistent storage.
Important:
- this app writes workshop data to
data/store.json - if the host filesystem is ephemeral, votes can be lost on restart or redeploy
The server supports:
PORTDATA_DIRSTORE_PATH
Recommended production setup:
- mount a persistent volume at
/data - set
DATA_DIR=/data - run
npm start
The easiest way is now directly from the speaker dashboard.
From config.html you can:
- add or remove tastings
- choose tasting code and name
- set style / origin
- write official notes
- set both official radar profiles
- save named configurations for future reuse
- load a saved configuration later
Saving the configuration resets collected responses and puts the session back in setup.
Advanced fallback:
- edit data/store.json manually
From the speaker home index.html:
Open tastingLock responsesNext tastingFinal revealReset session
- The participant page uses polling to follow speaker changes automatically.
- Private personal aroma notes stay on the participant device only.
- Shared data is stored in
data/store.json.