Real-time workshop checkpoint tool inspired by MMORPG raid mechanics.
A facilitator creates a session, shares a QR code or link, and participants join with a nickname. The facilitator issues ready checks at any time — participants respond Ready or Need Help. Results stream in real-time on the facilitator's dashboard.
In hands-on workshops, people progress at different speeds. Asking "any questions?" to a silent room doesn't work — especially in remote sessions where cameras are off. ready-check gives you a non-intrusive signal without putting anyone on the spot, and the "Need Help" button lets participants ask for help without raising their hand in front of everyone.
git clone https://github.com/sidgod/ready-check.git
cd ready-check
cp .env.example .env
npm install
npm startOpen http://localhost:3000, register with your email, create a session, and share the QR code.
Note: In development mode, PIN codes are logged to the console if SMTP is not configured.
- Real-time ready checks — facilitator issues a check, participants respond instantly via WebSocket
- QR code sharing — project the QR code on screen; participants scan and join
- Two response types — Ready or Need Help (need help is visible only to the facilitator)
- Configurable timeout — 2 minutes to 30 minutes per ready check, set by the facilitator
- Auto-complete — check ends automatically when everyone is ready
- Live roster — see who's connected, who's offline, who responded
- Response changes — participants can change their answer while a check is active (stuck → ready after getting help)
- Background tab notifications — browser tab title flashes when a check is issued, so participants in other tabs notice
- Session controls — facilitator can end a session; participants can leave and rejoin
- Auto-reconnect — handles WiFi blips and phone screen locks gracefully
- Responsive design — laptop-first for participants, projector-optimized for facilitators, works on mobile
- Facilitator auth — one-time PIN-via-email setup prevents abuse
- Per-facilitator limits — max 5 concurrent sessions to prevent abuse
- Zero database — all state in memory, ephemeral by design, no GDPR headaches
- One-click AWS deploy — CloudFormation template provisions everything including TLS certificate
The CloudFormation template provisions:
- Lightsail Container Service (nano, ~$7/mo)
- Lightsail TLS certificate with automated DNS validation via Lambda
- IAM role with OIDC federation for GitHub Actions (no stored AWS keys)
- SES domain identity with DKIM records for facilitator PIN emails
- Route 53 DNS record for your subdomain
- Secrets Manager secret for JWT signing
After stack creation, follow the post-deploy steps in the stack outputs to request SES production access, set GitHub secrets, and trigger your first deployment. Until production access is approved, the SES sandbox only delivers PIN emails to verified addresses.
cp .env.example .env
# Edit .env with your SMTP credentials and AUTH_SECRET
docker-compose up -dnpm install
npm start# Install Caddy: https://caddyserver.com/docs/install
# Edit Caddyfile with your domain
caddy startAll configuration is via environment variables (see .env.example):
| Variable | Description | Default |
|---|---|---|
PORT |
Server port | 3000 |
BASE_URL |
Public URL of the app | http://localhost:3000 |
AUTH_SECRET |
JWT signing secret | change-me-to-a-random-string |
SESSION_TTL_HOURS |
Session expiry (hours of inactivity) | 4 |
MAX_SESSIONS |
Maximum concurrent sessions | 100 |
SMTP_HOST |
SMTP server hostname | — |
SMTP_PORT |
SMTP server port | 587 |
SMTP_USER |
SMTP username | — |
SMTP_PASS |
SMTP password | — |
SMTP_FROM |
Sender email address | noreply@example.com |
Browser (Facilitator) Browser (Participants)
| |
| Socket.IO (WebSocket) |
v v
┌──────────────────────────────────────┐
│ Node.js + Express │
│ Socket.IO + QR Code │
│ In-Memory Session Store │
└──────────────────────────────────────┘
No database, no Redis, no external dependencies beyond SMTP for email. See DESIGN.md for the full system design document.
Push to main triggers the GitHub Actions pipeline:
- Run tests
- Build Docker image
- Push to GitHub Container Registry
- Deploy to AWS Lightsail via OIDC (no stored AWS credentials)
git clone https://github.com/sidgod/ready-check.git
cd ready-check
npm install
npm run dev # starts with --watch for auto-reloadNo build step. No webpack. Fork, edit, run.
MIT
