Check-In Fallback — Facilitator Runbook
Overview
The workshop has two attendance paths:
| Path | Purpose | Requires |
|---|---|---|
Live check-in (sign-in.html) |
Primary — records attendance in D1, links to roster | Cloudflare Pages, D1, trainee site login (token + email) |
| Fallback form (Google Form) | Backup — attendance only when live path is broken | Google Form you create; optional embed on sign-in-fallback.html |
Fallback does not replace site login
Trainees still need Workshop Access (workshop token + roster email) for
My Workshop, lab credentials, and Story/Modules. The Google Form is
attendance only.
When to use fallback
Switch to the Google Form if any of these block live check-in at the door:
- Check-in page errors after trainees are logged in (“Check-in failed”, network errors)
- Cloudflare / D1 APIs down (Attendance page in trainer tools also fails)
- Wrong site host (Vercel mirror — content preview only; trainees need Cloudflare for login, My Workshop, and check-in; if Cloudflare is unreachable, use form)
- Check-in window logic broken and you cannot fix it in time (still try Open check-in on Attendance first)
Do not use fallback if the only issue is a trainee who forgot to log in — have them complete Workshop Access first, then retry live check-in.
Quick decision
- Confirm trainee used Cloudflare URL (not Vercel mirror — Vercel is token-only preview).
- Confirm trainee completed Workshop Access (token + roster email).
- Open trainer Attendance — can you load the cohort?
- Try live check-in yourself on
sign-in.html?cohort=…. - If still broken → announce fallback form (section below).
One-time setup (before training day)
Complete once per workshop series; store links in this guide and your morning-of checklist.
1. Create the Google Form
- Title: e.g.
MHP DE Workshop — Attendance Check-In - Required fields: Full name, Email (workshop roster email)
- Optional: Department / company, Cohort (dropdown with your
YYYYMMDD-slugids) - Turn off “Limit to 1 response” if trainees may retry; collect email for deduplication in Sheets
2. Note your form URLs
From Google Form → Send → link icon:
- Responder URL (share at door): paste your forms.gle or docs.google.com/forms/…/viewform link
- Responses spreadsheet: Form → Responses → link to Sheets
3. Embed on the workshop site (optional but recommended)
- In Google Form → Send → <> embed → copy iframe
srcURL - In the repo, edit
sign-in-fallback.qmd— replaceYOUR_FORM_EMBED_URLin the iframe - Deploy to Cloudflare Pages
- Google Form created and tested (submit one test row)
- Responder URL saved below and in facilitator channel
sign-in-fallback.qmdembed updated and deployed- QR code for form URL or fallback page ready for projector
- Co-trainer knows to export Sheets if live check-in stays down
Trainees can then use sign-in-fallback.html on the main site even if the embed fails (share direct form URL as backup).
Pre-class checklist
Training day — switch to fallback (~5 minutes)
- Announce clearly: “Integrated check-in is temporarily down — use the backup form for attendance only. You still need your normal site login for My Workshop.”
-
Share the fallback (pick one or more):
- Projector: QR to
sign-in-fallback.htmlor direct Google Form - Chat / email: same link + cohort id
- Read URL aloud for anyone without phone camera
- Projector: QR to
- Keep live paths open for labs: Workshop Access, My Workshop, and content gates are separate — only attendance moves to Google Form.
- Monitor the room: Co-trainer watches Form responses or asks names orally for anyone who cannot submit.
- Do not delete partial D1 check-ins from earlier — merge with Form export later.
What to tell trainees
Short script
“Please submit the backup attendance form with your registered email. Then open
My Workshop the usual way — workshop token and your roster email on the Cloudflare site —
to copy your ATTENDEE_ID before Module 1.”
| Task | Tool |
|---|---|
| Record attendance (fallback day) | Google Form |
| Site login | Workshop Access on any page |
| Copy ATTENDEE_ID & secrets | My Workshop |
| Check-in when live system works | Workshop Check-In page |
URLs to share
Replace YYYYMMDD-slug with your cohort id from Trainer & Trainee management.
Cloudflare site (required for live APIs): https://mhp-data-engineer-2026.pages.dev/ Live check-in (primary): https://mhp-data-engineer-2026.pages.dev/sign-in.html?cohort=YYYYMMDD-slug Fallback page on site (Google Form embed): https://mhp-data-engineer-2026.pages.dev/sign-in-fallback.html Direct Google Form (if iframe blank): your form viewform URL Trainer attendance (verify / export D1): https://mhp-data-engineer-2026.pages.dev/trainer/attendance.html
After class — reconcile attendance
- Export Google Form responses to Sheets (Form → Responses → Download CSV or open linked Sheet).
- Export D1 attendance from trainer Attendance → Export CSV (includes anyone who checked in live before the outage).
- Merge by email (and name as secondary check). Deduplicate same-day duplicates.
- Store final attendance list per your client / MHP process (HR, learning portal, etc.).
- Note in facilitator debrief: fallback used, time window, approximate count from Form vs roster size.
No automatic sync
Fallback responses do not write to D1. Reconciliation is manual unless you build a separate import process.
Troubleshooting
| Symptom | Likely cause | Action |
|---|---|---|
| “Sign in first” on check-in | No Workshop Access session | Trainee completes site login; retry live check-in |
| “Check-in is not open” | Window closed in Attendance | Trainer → Attendance → Open check-in |
| API errors on Cloudflare only | D1 / env misconfiguration | Use fallback; fix env after class |
| Works on facilitator laptop, not room Wi‑Fi | Corporate firewall / DNS | Fallback form + mobile hotspot test |
| Blank iframe on fallback page | Embed URL not configured | Share direct Google Form link |
| My Workshop empty / errors | Separate from attendance | Verify roster email on login; trainer checks roster in D1 |
Return to live check-in
When APIs work again:
- Test yourself: login →
sign-in.html?cohort=…→ success screen. - Announce: new arrivals use live check-in; Form submissions already counted.
- Trainer Attendance page should show new check-ins in real time.