This platform is in alpha. It runs real workshops and the reference deployment is live, but it is actively developed, and things change. Concretely, if you are considering adopting it:
- Interfaces are not stable. The session/content model is still moving — the scenario format was recently replaced by independently-picked sections, and authored-content shapes may change again without a migration path.
- Expect defects in newer surfaces. The facilitator authoring tool and the section model are the least settled parts. Recent fixes addressed authored content being silently replaced by built-in defaults — a failure mode that produces no error, so verify a scenario end to end before teaching with it.
- You are the data controller. If you run your own deployment for real participants, the privacy notice, consent flow, retention jobs and ethics approval are yours to review and operate — see
docs/Third_session/PBL_platform/legal/and the retention workflows in.github/workflows/. Some operational items (App Check enforcement, API-key restrictions) are console settings this repo cannot carry for you.- No stability or support guarantee beyond the MIT licence. Pin a commit rather than tracking
mainif you need reproducibility for a cohort.Issues and PRs are welcome — alpha is exactly when feedback is worth most.
Open-source single-page web platform for running cross-cultural, problem-based-learning (PBL) workshops in clinical communication. Pairs students from two (or more) medical schools into shared online rooms, walks them through a clinical case + a roleplay + structured team decisions, and records anonymisable contributions for downstream education-research analysis.
Originally built for the Franco-Japanese CaNaMED project (Université de Caen Normandie × Nagoya University); released as a standalone platform so any medical-school partnership can adopt or fork it.
Reference live deployment: https://canamed-69785.web.app
The engine (script.js, lib.js) is partnership- and case-agnostic;
the content (case-content.js, scenario JSON), branding, and language
packs are the parts you swap.
To adapt the platform for a different partnership:
- Fork the repo on GitHub.
- Edit
docs/Third_session/PBL_platform/platform-config.js— partnership name, university list, default language, branding colours. - Add your scenario(s) via the in-app scenario author tool
(
docs/Third_session/PBL_platform/scenario-author.html) or by editingcase-content.js/CANAMED_SCENARIOSdirectly. See CONTRIBUTING.md for the full path. - Add language packs if your students don't share English — edit
docs/Third_session/PBL_platform/i18n.js(instructions in CONTRIBUTING). - Configure your own Firebase project (free Spark plan is enough
for single sessions) — drop your credentials into a local
firebase-config.jsand deploy. Hosting + database rules are in the repo; the GitHub Actions deploy workflow needs your project's service-account secret. Step-by-step: RUNBOOK §1 — including the one-time Hosting site creation that projects created from 15 October 2026 on need before their first CI deploy. - Review the ethics + privacy posture in
SECURITY.mdand indocs/Third_session/PBL_platform/ARCHITECTURE/OPERATOR_POLICY.md— both will need to be adapted to your institutions' data protection regimes (GDPR, APPI, HIPAA, your local IRB).
Contributions welcome — bug fixes, new scenarios, new language packs, accessibility improvements. See CONTRIBUTING.md for the development workflow and CODE_OF_CONDUCT.md for community norms. Security issues: see SECURITY.md.
| Path | What it is |
|---|---|
docs/Third_session/PBL_platform/ |
The single-page web platform. Vanilla HTML/CSS/JS, Firebase Realtime Database, no build step. Live at the URL above. See its own README for setup. |
tests/ |
Node-based unit + Firebase-rules tests (run with npm test). |
tests-e2e/ |
Playwright end-to-end suite — splash, lobby, mobile, a11y, perf, i18n, cross-tab coordination. |
scripts/ |
Operational helpers: local dev server, synthetic-uptime probe, cost monitor, daily backup, stale-session cleanup, pseudonymisation export. |
.github/workflows/ |
CI/CD — test, e2e matrix, firebase-deploy, synthetic-uptime, cost-monitor, backup, cleanup. |
Note on the path
docs/Third_session/— this is a historical artefact from the original CaNaMED research repo where the platform was built during the project's third workshop cycle. The structure is preserved so all internal references keep working; a future PR may flatten it.
The original research data, R analysis pipeline, and curriculum materials live in a separate private repository held by the CaNaMED research team; only the platform code is open-sourced here.
Open the operator's URL (the reference deployment is https://canamed-69785.web.app), type the session code your facilitator gave you, fill in your name + university + year + English level. That's it. Everything runs in the browser.
Same URL. Click "I'm a facilitator — create a session →", set a session password, pick the scenario (or paste your own), and you get a code to hand out. The admin dashboard tracks every room live; when you're done, "End session & download archive" exports the whole session as JSON.
Detailed walkthrough:
docs/Third_session/PBL_platform/OPERATOR_QUICK_START.md.
The whole app is in docs/Third_session/PBL_platform/ — index.html,
script.js, style.css, case-content.js, platform-config.js,
firebase-config.js, database.rules.json. No npm install for the
app itself, no build step. Run the tests with:
npm ci # exact locked tree, same as CI
npm test # unit tests only (node --test tests/*.test.js)
npm run test:e2e # Playwright (set up browsers first: npx playwright install)
npm run test:e2e:rules # database.rules.json against the emulator (needs Java)
Local dev server: node scripts/serve-platform.js then open
http://localhost:8080.
Push to main and the firebase-deploy GitHub Action ships hosting +
best-effort database rules (requires FIREBASE_SERVICE_ACCOUNT_CANAMED_69785
secret configured for your fork; the rules step warns and continues if
that account lacks Realtime Database Admin, so hosting still ships). It
deploys once the E2E tests workflow concludes green on that commit —
roughly 15 minutes after the merge — and refuses to ship if any required
check failed.
This platform is designed for live use with student participants who will provide identifying data (name, university, year of study, self-reported English level) and free-text answers. Every operator deploying this platform is responsible for:
- Notice + consent — the in-app lobby shows a "How your data is used" panel before any join; align it with what students are told verbally and with your institution's IRB-approved consent text.
- Privacy policy — the bundled
privacy.html/privacy-fr.html/privacy-ja.htmlare templates with placeholders for operator-specific values (postal addresses, DPO email, retention period, complaint authority). Fill these BEFORE first live use. - Storage — Firebase Realtime Database (Google Cloud) + per-device
localStorage. Pick a region appropriate to your jurisdiction. - Retention — there is no automatic deletion. Purge each session
after the workshop (super-admin "Purge this session's data" button in
the dashboard, or delete
sessions/{code}from the Firebase console). - Pseudonymisation — when exporting group answers, the admin can tick "Anonymise names in export" to pseudonymise students per room (Student A, Student B, …).
- Right to be forgotten — students who sign in with Google can delete their account from the "My account" panel.
See docs/Third_session/PBL_platform/ARCHITECTURE/OPERATOR_POLICY.md
for the full operator obligations.
MIT — see LICENSE.