{"id":115,"date":"2026-03-18T19:45:26","date_gmt":"2026-03-18T19:45:26","guid":{"rendered":"https:\/\/medlearn.imperial.ac.uk\/innovation\/?page_id=115"},"modified":"2026-04-09T13:55:53","modified_gmt":"2026-04-09T13:55:53","slug":"canvas-embed-activity-builder","status":"publish","type":"page","link":"https:\/\/medlearn.imperial.ac.uk\/innovation\/projects\/canvas-embed-activity-builder\/","title":{"rendered":"Canvas Embed Activity Builder"},"content":{"rendered":"\n<!-- BANNER -->\n<div style=\"background:#0A1628;\">\n  <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1400 460\" style=\"width:100%;display:block;\">\n  <defs>\n    <linearGradient id=\"cvsBg\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n      <stop offset=\"0%\" stop-color=\"#0A1628\"\/>\n      <stop offset=\"100%\" stop-color=\"#003E74\"\/>\n    <\/linearGradient>\n    <linearGradient id=\"cvsCard\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n      <stop offset=\"0%\" stop-color=\"#ffffff\" stop-opacity=\"0.09\"\/>\n      <stop offset=\"100%\" stop-color=\"#ffffff\" stop-opacity=\"0.03\"\/>\n    <\/linearGradient>\n  <\/defs>\n  <rect width=\"1400\" height=\"460\" fill=\"url(#cvsBg)\"\/>\n  <!-- Subtle grid -->\n  <g stroke=\"#4A90D9\" stroke-width=\"0.4\" opacity=\"0.1\">\n    <line x1=\"0\" y1=\"115\" x2=\"1400\" y2=\"115\"\/><line x1=\"0\" y1=\"230\" x2=\"1400\" y2=\"230\"\/>\n    <line x1=\"0\" y1=\"345\" x2=\"1400\" y2=\"345\"\/>\n    <line x1=\"350\" y1=\"0\" x2=\"350\" y2=\"460\"\/><line x1=\"700\" y1=\"0\" x2=\"700\" y2=\"460\"\/>\n    <line x1=\"1050\" y1=\"0\" x2=\"1050\" y2=\"460\"\/>\n  <\/g>\n\n  <!-- Step 1: BUILD \u2014 Activity authoring panel -->\n  <rect x=\"100\" y=\"100\" width=\"280\" height=\"260\" rx=\"10\" fill=\"url(#cvsCard)\" stroke=\"#4A90D9\" stroke-width=\"1.5\" opacity=\"0.6\"\/>\n  <rect x=\"100\" y=\"100\" width=\"280\" height=\"36\" rx=\"10 10 0 0\" fill=\"#003E74\" opacity=\"0.5\"\/>\n  <circle cx=\"122\" cy=\"118\" r=\"5\" fill=\"#FF6B6B\" opacity=\"0.8\"\/>\n  <circle cx=\"138\" cy=\"118\" r=\"5\" fill=\"#FFB300\" opacity=\"0.8\"\/>\n  <circle cx=\"154\" cy=\"118\" r=\"5\" fill=\"#00CC88\" opacity=\"0.8\"\/>\n  <text x=\"240\" y=\"122\" font-family=\"Arial,sans-serif\" font-size=\"9\" fill=\"#7DC4FF\" text-anchor=\"middle\" opacity=\"0.7\">Activity Builder<\/text>\n  <!-- Quiz form inside -->\n  <text x=\"120\" y=\"156\" font-family=\"Arial,sans-serif\" font-size=\"8.5\" fill=\"#7DC4FF\" opacity=\"0.6\">Question type<\/text>\n  <rect x=\"120\" y=\"160\" width=\"140\" height=\"18\" rx=\"3\" fill=\"#0056a3\" opacity=\"0.4\"\/>\n  <text x=\"128\" y=\"172\" font-family=\"Arial,sans-serif\" font-size=\"8\" fill=\"#7DC4FF\">Adaptive Quiz<\/text>\n  <text x=\"120\" y=\"192\" font-family=\"Arial,sans-serif\" font-size=\"8.5\" fill=\"#7DC4FF\" opacity=\"0.6\">Difficulty mode<\/text>\n  <rect x=\"120\" y=\"196\" width=\"140\" height=\"18\" rx=\"3\" fill=\"#0056a3\" opacity=\"0.4\"\/>\n  <text x=\"128\" y=\"208\" font-family=\"Arial,sans-serif\" font-size=\"8\" fill=\"#7DC4FF\">easy_to_hard<\/text>\n  <!-- Question rows -->\n  <rect x=\"120\" y=\"224\" width=\"220\" height=\"8\" rx=\"2\" fill=\"#ffffff\" opacity=\"0.12\"\/>\n  <rect x=\"120\" y=\"238\" width=\"180\" height=\"8\" rx=\"2\" fill=\"#ffffff\" opacity=\"0.1\"\/>\n  <rect x=\"120\" y=\"252\" width=\"200\" height=\"8\" rx=\"2\" fill=\"#ffffff\" opacity=\"0.1\"\/>\n  <!-- Modules pills -->\n  <rect x=\"120\" y=\"272\" width=\"54\" height=\"16\" rx=\"3\" fill=\"#4A90D9\" opacity=\"0.6\"\/>\n  <text x=\"147\" y=\"283\" font-family=\"Arial,sans-serif\" font-size=\"7\" fill=\"#fff\" text-anchor=\"middle\">Quiz<\/text>\n  <rect x=\"180\" y=\"272\" width=\"54\" height=\"16\" rx=\"3\" fill=\"#9B59F5\" opacity=\"0.5\"\/>\n  <text x=\"207\" y=\"283\" font-family=\"Arial,sans-serif\" font-size=\"7\" fill=\"#fff\" text-anchor=\"middle\">SCORM<\/text>\n  <rect x=\"240\" y=\"272\" width=\"54\" height=\"16\" rx=\"3\" fill=\"#00CC88\" opacity=\"0.5\"\/>\n  <text x=\"267\" y=\"283\" font-family=\"Arial,sans-serif\" font-size=\"7\" fill=\"#fff\" text-anchor=\"middle\">Video<\/text>\n  <!-- Publish button -->\n  <rect x=\"120\" y=\"298\" width=\"100\" height=\"26\" rx=\"4\" fill=\"#003E74\" opacity=\"0.8\" stroke=\"#4A90D9\" stroke-width=\"0.8\"\/>\n  <text x=\"170\" y=\"314\" font-family=\"Arial,sans-serif\" font-size=\"9\" fill=\"#7DC4FF\" text-anchor=\"middle\" font-weight=\"bold\">Publish &rarr;<\/text>\n  <!-- Step label -->\n  <text x=\"240\" y=\"382\" font-family=\"Arial,sans-serif\" font-size=\"10\" fill=\"#7DC4FF\" text-anchor=\"middle\" opacity=\"0.55\" letter-spacing=\"1\">1. BUILD<\/text>\n\n  <!-- Arrow 1 -->\n  <line x1=\"398\" y1=\"230\" x2=\"448\" y2=\"230\" stroke=\"#4A90D9\" stroke-width=\"2\" stroke-dasharray=\"5,3\" opacity=\"0.5\"\/>\n  <polygon points=\"444,224 458,230 444,236\" fill=\"#4A90D9\" opacity=\"0.6\"\/>\n\n  <!-- Step 2: PUBLISH \u2014 URL\/embed panel -->\n  <rect x=\"462\" y=\"120\" width=\"260\" height=\"220\" rx=\"10\" fill=\"url(#cvsCard)\" stroke=\"#4A90D9\" stroke-width=\"1.5\" opacity=\"0.6\"\/>\n  <rect x=\"462\" y=\"120\" width=\"260\" height=\"32\" rx=\"10 10 0 0\" fill=\"#003E74\" opacity=\"0.5\"\/>\n  <text x=\"592\" y=\"140\" font-family=\"Arial,sans-serif\" font-size=\"9\" fill=\"#7DC4FF\" text-anchor=\"middle\" opacity=\"0.7\">Published Activity<\/text>\n  <text x=\"480\" y=\"172\" font-family=\"Arial,sans-serif\" font-size=\"8\" fill=\"#7DC4FF\" opacity=\"0.55\">Embed code<\/text>\n  <rect x=\"480\" y=\"178\" width=\"224\" height=\"28\" rx=\"3\" fill=\"#0A1628\" opacity=\"0.7\" stroke=\"#4A90D9\" stroke-width=\"0.6\"\/>\n  <text x=\"488\" y=\"192\" font-family=\"monospace,Arial\" font-size=\"7\" fill=\"#00CC88\" opacity=\"0.8\">&lt;iframe src=&#8221;https:\/\/\u2026&#8221; width=&#8221;100%&#8221;<\/text>\n  <text x=\"488\" y=\"202\" font-family=\"monospace,Arial\" font-size=\"7\" fill=\"#00CC88\" opacity=\"0.8\">  height=&#8221;600&#8243; allow=&#8221;fullscreen&#8221;&gt;<\/text>\n  <text x=\"480\" y=\"222\" font-family=\"Arial,sans-serif\" font-size=\"8\" fill=\"#7DC4FF\" opacity=\"0.55\">Launch URL<\/text>\n  <rect x=\"480\" y=\"228\" width=\"224\" height=\"18\" rx=\"3\" fill=\"#0A1628\" opacity=\"0.7\" stroke=\"#4A90D9\" stroke-width=\"0.6\"\/>\n  <text x=\"488\" y=\"240\" font-family=\"monospace,Arial\" font-size=\"7\" fill=\"#4A90D9\" opacity=\"0.8\">https:\/\/\u2026\/launch\/act_abc123<\/text>\n  <!-- Copy button -->\n  <rect x=\"480\" y=\"254\" width=\"60\" height=\"18\" rx=\"3\" fill=\"#4A90D9\" opacity=\"0.7\"\/>\n  <text x=\"510\" y=\"266\" font-family=\"Arial,sans-serif\" font-size=\"7.5\" fill=\"#fff\" text-anchor=\"middle\">Copy<\/text>\n  <!-- LTI optional pill -->\n  <rect x=\"554\" y=\"254\" width=\"100\" height=\"18\" rx=\"3\" fill=\"none\" stroke=\"#FFB300\" stroke-width=\"0.8\" opacity=\"0.6\"\/>\n  <text x=\"604\" y=\"266\" font-family=\"Arial,sans-serif\" font-size=\"7\" fill=\"#FFB300\" text-anchor=\"middle\" opacity=\"0.7\">LTI optional &rarr;<\/text>\n  <text x=\"592\" y=\"358\" font-family=\"Arial,sans-serif\" font-size=\"10\" fill=\"#7DC4FF\" text-anchor=\"middle\" opacity=\"0.55\" letter-spacing=\"1\">2. PUBLISH<\/text>\n\n  <!-- Arrow 2 -->\n  <line x1=\"740\" y1=\"230\" x2=\"790\" y2=\"230\" stroke=\"#4A90D9\" stroke-width=\"2\" stroke-dasharray=\"5,3\" opacity=\"0.5\"\/>\n  <polygon points=\"786,224 800,230 786,236\" fill=\"#4A90D9\" opacity=\"0.6\"\/>\n\n  <!-- Step 3: EMBED in Canvas -->\n  <rect x=\"808\" y=\"90\" width=\"380\" height=\"280\" rx=\"10\" fill=\"url(#cvsCard)\" stroke=\"#4A90D9\" stroke-width=\"1.5\" opacity=\"0.6\"\/>\n  <!-- Canvas-style top bar -->\n  <rect x=\"808\" y=\"90\" width=\"380\" height=\"38\" rx=\"10 10 0 0\" fill=\"#E66000\" opacity=\"0.85\"\/>\n  <text x=\"860\" y=\"113\" font-family=\"Arial,sans-serif\" font-size=\"10\" fill=\"#ffffff\" font-weight=\"bold\" opacity=\"0.9\">Canvas LMS<\/text>\n  <!-- Canvas nav items -->\n  <rect x=\"808\" y=\"128\" width=\"68\" height=\"28\" fill=\"#C55600\" opacity=\"0.5\"\/>\n  <text x=\"842\" y=\"146\" font-family=\"Arial,sans-serif\" font-size=\"8\" fill=\"#fff\" text-anchor=\"middle\">Modules<\/text>\n  <rect x=\"878\" y=\"128\" width=\"60\" height=\"28\" fill=\"#C55600\" opacity=\"0.3\"\/>\n  <text x=\"908\" y=\"146\" font-family=\"Arial,sans-serif\" font-size=\"8\" fill=\"#fff\" text-anchor=\"middle\">Pages<\/text>\n  <!-- Page content area -->\n  <rect x=\"824\" y=\"168\" width=\"344\" height=\"180\" rx=\"4\" fill=\"#ffffff\" opacity=\"0.05\"\/>\n  <text x=\"840\" y=\"186\" font-family=\"Arial,sans-serif\" font-size=\"9\" fill=\"#ffffff\" opacity=\"0.5\">Week 3: Adaptive Practice<\/text>\n  <!-- Embedded iframe block -->\n  <rect x=\"840\" y=\"192\" width=\"296\" height=\"120\" rx=\"4\" fill=\"#0056a3\" opacity=\"0.3\" stroke=\"#4A90D9\" stroke-width=\"1\" stroke-dasharray=\"4,3\"\/>\n  <text x=\"988\" y=\"244\" font-family=\"Arial,sans-serif\" font-size=\"9\" fill=\"#7DC4FF\" text-anchor=\"middle\" opacity=\"0.7\">&lt;iframe&gt;<\/text>\n  <text x=\"988\" y=\"258\" font-family=\"Arial,sans-serif\" font-size=\"8\" fill=\"#4A90D9\" text-anchor=\"middle\" opacity=\"0.6\">Adaptive Quiz<\/text>\n  <rect x=\"932\" y=\"268\" width=\"112\" height=\"18\" rx=\"3\" fill=\"#4A90D9\" opacity=\"0.6\"\/>\n  <text x=\"988\" y=\"280\" font-family=\"Arial,sans-serif\" font-size=\"8\" fill=\"#fff\" text-anchor=\"middle\">Start activity<\/text>\n  <text x=\"998\" y=\"388\" font-family=\"Arial,sans-serif\" font-size=\"10\" fill=\"#7DC4FF\" text-anchor=\"middle\" opacity=\"0.55\" letter-spacing=\"1\">3. EMBED IN CANVAS<\/text>\n\n  <!-- Title -->\n  <text x=\"700\" y=\"56\" font-family=\"Arial,sans-serif\" font-size=\"20\" font-weight=\"bold\" fill=\"#ffffff\" text-anchor=\"middle\" opacity=\"0.9\">Canvas Embed Activity Builder<\/text>\n  <text x=\"700\" y=\"80\" font-family=\"Arial,sans-serif\" font-size=\"11\" fill=\"#7DC4FF\" text-anchor=\"middle\" opacity=\"0.5\" letter-spacing=\"2\">LTI INTEGRATION &amp; EMBED-FIRST CANVAS TOOLING &mdash; IMPERIAL COLLEGE LONDON<\/text>\n  <!-- Bottom -->\n  <text x=\"700\" y=\"432\" font-family=\"Arial,sans-serif\" font-size=\"11\" fill=\"#7DC4FF\" text-anchor=\"middle\" opacity=\"0.35\" letter-spacing=\"2.5\">BUILD &mdash; PUBLISH &mdash; EMBED &mdash; GRADE<\/text>\n<\/svg>\n<\/div>\n\n<div style=\"max-width:960px;margin:0 auto;padding:40px 32px 64px 32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;\">\n\n  <!-- BACK + TAGS -->\n  <div style=\"display:flex;align-items:center;gap:12px;margin-bottom:24px;flex-wrap:wrap;\">\n    <a href=\"\/innovation\/projects\/\" style=\"font-size:12px;color:#003E74;text-decoration:none;opacity:0.7;\">&larr; All Projects<\/a>\n    <span style=\"font-size:11px;background:#e8f0fa;color:#003E74;padding:4px 10px;border-radius:12px;font-weight:600;\">EdTech<\/span>\n    <span style=\"font-size:11px;background:#e8f0fa;color:#003E74;padding:4px 10px;border-radius:12px;font-weight:600;\">Canvas LMS<\/span>\n    <span style=\"font-size:11px;background:#e8f0fa;color:#003E74;padding:4px 10px;border-radius:12px;font-weight:600;\">LTI<\/span>\n    <span style=\"font-size:11px;background:#f5f5f5;color:#666;padding:4px 10px;border-radius:12px;\">Proof of Concept<\/span>\n  <\/div>\n\n  <h1 style=\"font-size:34px;font-weight:800;color:#001E45;margin:0 0 8px 0;line-height:1.2;\">Canvas Embed Activity Builder<\/h1>\n  <p style=\"font-size:17px;color:#003E74;margin:0 0 36px 0;font-weight:400;\">An embed-first PoC for building and delivering interactive activities inside Canvas LMS &mdash; LTI integration available as an optional pathway.<\/p>\n\n  <!-- OVERVIEW -->\n  <p style=\"font-size:15px;color:#333;line-height:1.8;margin:0 0 18px 0;\">Deploying new tools inside institutionally managed Canvas environments typically requires a formal LTI integration approval process &mdash; a pathway that can be slow, uncertain, and dependent on central ICT decisions. This project explores an alternative: an embed-first authoring platform that allows learning technologists and academics to build interactive activities, publish them to a hosted URL, and embed them in Canvas pages or modules using a standard <code style=\"background:#f0f4f8;padding:1px 6px;border-radius:3px;font-size:13px;\">&lt;iframe&gt;<\/code> tag or external link &mdash; no LTI registration required.<\/p>\n  <p style=\"font-size:15px;color:#333;line-height:1.8;margin:0 0 18px 0;\">The platform supports four activity types: <strong>Adaptive Practice Quiz<\/strong>, <strong>SCORM Easy Wrapper<\/strong>, <strong>Interactive Video Checkpoints<\/strong>, and <strong>Branching Scenarios<\/strong>. Each is authored through a consistent build-and-publish flow, producing either an embeddable iframe snippet or a launch URL that can be placed anywhere Canvas accepts external content. Where LTI <em>is<\/em> institutionally enabled, the platform also exposes optional LTI 1.3 deep-link and Assignment and Grade Services (AGS) routes for grade passback and richer Canvas integration.<\/p>\n  <p style=\"font-size:15px;color:#333;line-height:1.8;margin:0 0 40px 0;\">The PoC sits within the broader context of Imperial&apos;s migration from Insendi to Canvas, where a number of interactive activity types have no direct equivalent in Canvas&apos;s native toolset and have historically been handled as placeholder pages. This tool offers a practical path to preserving and improving that interactivity within the existing Canvas environment.<\/p>\n\n  <!-- PROJECT AT A GLANCE -->\n  <h2 style=\"font-size:20px;font-weight:700;color:#001E45;margin:0 0 16px 0;padding-bottom:8px;border-bottom:2px solid #e8eef5;\">Project at a Glance<\/h2>\n  <table style=\"width:100%;border-collapse:collapse;margin-bottom:40px;font-size:14px;\">\n    <tr style=\"border-bottom:1px solid #e8eef5;\">\n      <td style=\"padding:12px 16px;font-weight:600;color:#003E74;width:180px;vertical-align:top;\">Status<\/td>\n      <td style=\"padding:12px 16px;color:#333;\">Proof of Concept &mdash; MVP built and piloted<\/td>\n    <\/tr>\n    <tr style=\"border-bottom:1px solid #e8eef5;background:#f9fbfd;\">\n      <td style=\"padding:12px 16px;font-weight:600;color:#003E74;vertical-align:top;\">Primary Approach<\/td>\n      <td style=\"padding:12px 16px;color:#333;\">Embed-first &mdash; activities delivered via <code style=\"background:#f0f4f8;padding:1px 5px;border-radius:3px;font-size:12px;\">&lt;iframe&gt;<\/code> embed or external URL in Canvas pages and modules<\/td>\n    <\/tr>\n    <tr style=\"border-bottom:1px solid #e8eef5;\">\n      <td style=\"padding:12px 16px;font-weight:600;color:#003E74;vertical-align:top;\">Activity Modules<\/td>\n      <td style=\"padding:12px 16px;color:#333;\">Adaptive Practice Quiz &middot; SCORM Easy Wrapper &middot; Interactive Video Checkpoints &middot; Branching Scenarios<\/td>\n    <\/tr>\n    <tr style=\"border-bottom:1px solid #e8eef5;background:#f9fbfd;\">\n      <td style=\"padding:12px 16px;font-weight:600;color:#003E74;vertical-align:top;\">LTI Support<\/td>\n      <td style=\"padding:12px 16px;color:#333;\">Optional &mdash; LTI 1.3 deep-link and AGS grade passback available where institutionally enabled; not required for core embed workflow<\/td>\n    <\/tr>\n    <tr style=\"border-bottom:1px solid #e8eef5;\">\n      <td style=\"padding:12px 16px;font-weight:600;color:#003E74;vertical-align:top;\">Technology<\/td>\n      <td style=\"padding:12px 16px;color:#333;\">Node.js &middot; Express &middot; Vercel (serverless deployment) &middot; Canvas API &middot; LTI 1.3<\/td>\n    <\/tr>\n    <tr style=\"border-bottom:1px solid #e8eef5;background:#f9fbfd;\">\n      <td style=\"padding:12px 16px;font-weight:600;color:#003E74;vertical-align:top;\">Scope Control<\/td>\n      <td style=\"padding:12px 16px;color:#333;\">Modules can be enabled or disabled per Canvas account and sub-account &mdash; supports graduated rollout across departments<\/td>\n    <\/tr>\n    <tr style=\"border-bottom:1px solid #e8eef5;\">\n      <td style=\"padding:12px 16px;font-weight:600;color:#003E74;vertical-align:top;\">Context<\/td>\n      <td style=\"padding:12px 16px;color:#333;\">Developed alongside Imperial&apos;s Insendi &rarr; Canvas migration; addresses activity types with no direct Canvas equivalent<\/td>\n    <\/tr>\n    <tr style=\"background:#f9fbfd;\">\n      <td style=\"padding:12px 16px;font-weight:600;color:#003E74;vertical-align:top;\">Intended Users<\/td>\n      <td style=\"padding:12px 16px;color:#333;\">Learning technologists and academics authoring course content in Canvas<\/td>\n    <\/tr>\n  <\/table>\n\n  <!-- THE WORKFLOW -->\n  <h2 style=\"font-size:20px;font-weight:700;color:#001E45;margin:0 0 16px 0;padding-bottom:8px;border-bottom:2px solid #e8eef5;\">The Build &rarr; Publish &rarr; Embed Workflow<\/h2>\n  <p style=\"font-size:15px;color:#333;line-height:1.8;margin:0 0 18px 0;\">The core authoring flow is deliberately simple and consistent across all four activity types. A learning technologist or academic logs in, selects an activity type, authors the content through a structured form interface, and publishes. Publishing produces two outputs: an <strong>iframe embed snippet<\/strong> ready to paste into a Canvas page&apos;s HTML editor, and a <strong>launch URL<\/strong> that can be added as an external link in a Canvas module. Either route places the live, interactive activity directly within the student&apos;s Canvas experience without leaving the course.<\/p>\n  <p style=\"font-size:15px;color:#333;line-height:1.8;margin:0 0 18px 0;\">The Adaptive Quiz module supports two difficulty modes: <code style=\"background:#f0f4f8;padding:1px 6px;border-radius:3px;font-size:13px;\">easy_to_hard<\/code> for progressive challenge sequencing, and <code style=\"background:#f0f4f8;padding:1px 6px;border-radius:3px;font-size:13px;\">missed_topic_retry<\/code> for targeted remediation of weaker areas. Attempt data &mdash; including responses, timestamps, and completion status &mdash; is captured and exportable as CSV for manual grade workflows, with LTI-based automatic grade passback available as an optional extension.<\/p>\n  <p style=\"font-size:15px;color:#333;line-height:1.8;margin:0 0 40px 0;\">For institutions or departments where Canvas LTI tool approval <em>is<\/em> available, the same platform exposes a full LTI 1.3 pathway: deep-link content selection, launch session management, and AGS score submission. This means the PoC can operate in both constrained and fully integrated Canvas environments using a single codebase and deployment.<\/p>\n\n  <!-- WHY EMBED-FIRST -->\n  <h2 style=\"font-size:20px;font-weight:700;color:#001E45;margin:0 0 16px 0;padding-bottom:8px;border-bottom:2px solid #e8eef5;\">Why Embed-First?<\/h2>\n  <p style=\"font-size:15px;color:#333;line-height:1.8;margin:0 0 18px 0;\">LTI integration with Canvas requires institutional approval, which at a large research university typically means navigation through ICT governance, security review, and procurement &mdash; a process that can take months and may not be guaranteed. The embed-first approach offers a practical starting point that works alongside existing institutional processes: Canvas has always permitted embedding external content via iframe, and any published URL can be linked from a module. There is nothing to approve and nothing to install.<\/p>\n  <p style=\"font-size:15px;color:#333;line-height:1.8;margin:0 0 40px 0;\">This matters particularly in the context of Imperial&apos;s Insendi to Canvas migration, where a number of activity types that were native to Insendi &mdash; interactive tables, branching scenarios, adaptive quizzes, SCORM content &mdash; have no built-in Canvas equivalent and are being migrated as static placeholder pages. The Canvas Embed Activity Builder offers a route to restoring that interactivity for programmes that need it, on a timeline that suits the course team.<\/p>\n\n  <!-- BLOCKQUOTE -->\n  <blockquote style=\"border-left:4px solid #003E74;background:#f5f8fb;border-radius:0 6px 6px 0;padding:20px 24px;margin:0 0 40px 0;\">\n    <p style=\"font-size:15px;color:#003E74;line-height:1.7;margin:0;font-style:italic;\">&#8220;Works even when additional Canvas tools are not approved &mdash; one deployment unit for ICT-controlled environments, one consistent authoring flow for learning technologists and academics.&#8221;<\/p>\n  <\/blockquote>\n\n  <!-- PILOT FINDINGS -->\n  <h2 style=\"font-size:20px;font-weight:700;color:#001E45;margin:0 0 16px 0;padding-bottom:8px;border-bottom:2px solid #e8eef5;\">Pilot Findings &amp; Next Iterations<\/h2>\n  <p style=\"font-size:15px;color:#333;line-height:1.8;margin:0 0 18px 0;\">An initial pilot with learning technologists and academics validated the core embed-first flow across quiz creation, publishing, and Canvas embedding. Attempt payload capture (responses, timestamps, completion) and CSV export for grade workflows were confirmed functional.<\/p>\n  <p style=\"font-size:15px;color:#333;line-height:1.8;margin:0 0 24px 0;\">Three priority improvements captured from pilot feedback:<\/p>\n  <div style=\"display:flex;flex-direction:column;gap:12px;margin-bottom:40px;\">\n    <div style=\"background:#f5f8fb;border-radius:6px;padding:14px 18px;display:flex;gap:14px;align-items:flex-start;\">\n      <span style=\"font-size:14px;font-weight:800;color:#003E74;min-width:24px;\">1<\/span>\n      <p style=\"font-size:14px;color:#444;line-height:1.6;margin:0;\">Replace raw JSON-only question authoring with a <strong>guided question form wizard<\/strong> &mdash; reducing friction for non-technical users.<\/p>\n    <\/div>\n    <div style=\"background:#f5f8fb;border-radius:6px;padding:14px 18px;display:flex;gap:14px;align-items:flex-start;\">\n      <span style=\"font-size:14px;font-weight:800;color:#003E74;min-width:24px;\">2<\/span>\n      <p style=\"font-size:14px;color:#444;line-height:1.6;margin:0;\">Add a visible <strong>&ldquo;Preview as student&rdquo;<\/strong> step before publish, so authors can confirm the activity experience before embedding.<\/p>\n    <\/div>\n    <div style=\"background:#f5f8fb;border-radius:6px;padding:14px 18px;display:flex;gap:14px;align-items:flex-start;\">\n      <span style=\"font-size:14px;font-weight:800;color:#003E74;min-width:24px;\">3<\/span>\n      <p style=\"font-size:14px;color:#444;line-height:1.6;margin:0;\">Add <strong>inline validation<\/strong> for question bank fields &mdash; clearer error messages for missing prompt, options, or correct answer selection.<\/p>\n    <\/div>\n  <\/div>\n\n  <!-- TRY THE APP -->\n  <div style=\"background:#F0F6FF;border-left:4px solid #003E74;border-radius:0 8px 8px 0;padding:28px 32px;margin:0 0 36px 0;\">\n    <h2 style=\"font-size:20px;font-weight:700;color:#001E45;margin:0 0 8px 0;\">Try the App<\/h2>\n    <p style=\"font-size:15px;color:#333;line-height:1.7;margin:0 0 20px 0;\">The pilot build is live and accessible below. It takes around two minutes to create an activity and generate an embed code ready to drop into a Canvas page or module.<\/p>\n    <a href=\"https:\/\/canvas-lti-builder.vercel.app\/\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-block;background:#003E74;color:#fff;font-size:14px;font-weight:700;padding:12px 28px;border-radius:5px;text-decoration:none;letter-spacing:0.3px;\">Open Canvas Embed Activity Builder &rarr;<\/a>\n  <\/div>\n\n  <!-- HOW TO USE -->\n  <h2 style=\"font-size:20px;font-weight:700;color:#001E45;margin:0 0 16px 0;padding-bottom:8px;border-bottom:2px solid #e8eef5;\">How to Use It<\/h2>\n  <p style=\"font-size:15px;color:#333;line-height:1.7;margin:0 0 20px 0;\">The interface follows the same three-step build &rarr; publish &rarr; embed flow described above:<\/p>\n\n  <div style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px;margin:0 0 36px 0;\">\n    <div style=\"background:#fff;border:1px solid #e0e8f0;border-radius:8px;padding:22px;\">\n      <div style=\"font-size:28px;font-weight:800;color:#003E74;opacity:0.2;margin-bottom:8px;\">01<\/div>\n      <h3 style=\"font-size:15px;font-weight:700;color:#003E74;margin:0 0 8px 0;\">Choose activity type<\/h3>\n      <p style=\"font-size:13px;color:#555;line-height:1.6;margin:0;\">Select from <strong>Interactive Video Checkpoints<\/strong>, <strong>Branching Scenarios<\/strong>, or <strong>SCORM Wrapper<\/strong>. Interactive video and branching are the recommended starting points.<\/p>\n    <\/div>\n    <div style=\"background:#fff;border:1px solid #e0e8f0;border-radius:8px;padding:22px;\">\n      <div style=\"font-size:28px;font-weight:800;color:#003E74;opacity:0.2;margin-bottom:8px;\">02<\/div>\n      <h3 style=\"font-size:15px;font-weight:700;color:#003E74;margin:0 0 8px 0;\">Create &amp; publish<\/h3>\n      <p style=\"font-size:13px;color:#555;line-height:1.6;margin:0;\">Give your activity a title and description, add any module JSON settings, then hit <strong>Create<\/strong> followed by <strong>Publish<\/strong>. The activity gets a permanent URL on the Vercel deployment.<\/p>\n    <\/div>\n    <div style=\"background:#fff;border:1px solid #e0e8f0;border-radius:8px;padding:22px;\">\n      <div style=\"font-size:28px;font-weight:800;color:#003E74;opacity:0.2;margin-bottom:8px;\">03<\/div>\n      <h3 style=\"font-size:15px;font-weight:700;color:#003E74;margin:0 0 8px 0;\">Copy into Canvas<\/h3>\n      <p style=\"font-size:13px;color:#555;line-height:1.6;margin:0;\">Copy the generated <strong>iframe embed code<\/strong> and paste it into a Canvas page in HTML view, or use the <strong>Launch URL<\/strong> as a module item link. No additional setup required.<\/p>\n    <\/div>\n  <\/div>\n\n  <div style=\"background:#FFFBEA;border:1px solid #F0D060;border-radius:6px;padding:16px 20px;margin:0 0 36px 0;font-size:13px;color:#555;line-height:1.6;\">\n    <strong style=\"color:#7A6000;\">Note:<\/strong> Grade passback to the Canvas gradebook is not active in iframe-only mode. For gradebook integration, the LTI pathway is available as an advanced option within the app.\n  <\/div>\n\n<!-- NEXT STEPS -->\n  <h2 style=\"font-size:20px;font-weight:700;color:#001E45;margin:0 0 16px 0;padding-bottom:8px;border-bottom:2px solid #e8eef5;\">Potential Next Steps<\/h2>\n  <p style=\"font-size:15px;color:#333;line-height:1.8;margin:0 0 18px 0;\">The most immediate development priorities are the three pilot improvements above. Beyond those, key directions include persistent data storage for production use (the current MVP uses ephemeral in-memory storage suitable for testing), a broader pilot with programme teams ahead of the Insendi migration deadline, and formal evaluation of the LTI grade passback pathway for departments where it can be enabled.<\/p>\n  <p style=\"font-size:15px;color:#333;line-height:1.8;margin:0 0 0 0;\">Longer-term, there is potential to evolve this into a shared institutional tool &mdash; a lightweight activity authoring layer that sits alongside Canvas rather than within it, accessible to any programme team that needs richer interactivity than Canvas natively provides without the overhead of a full LTI procurement process.<\/p>\n\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Activity Builder Question type Adaptive Quiz Difficulty mode easy_to_hard Quiz SCORM Video Publish &rarr; 1. BUILD Published Activity Embed code &lt;iframe src=&#8221;https:\/\/\u2026&#8221; width=&#8221;100%&#8221; height=&#8221;600&#8243; allow=&#8221;fullscreen&#8221;&gt; Launch URL https:\/\/\u2026\/launch\/act_abc123 Copy LTI [&hellip;]<\/p>\n","protected":false},"author":16,"featured_media":0,"parent":7,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-115","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/medlearn.imperial.ac.uk\/innovation\/wp-json\/wp\/v2\/pages\/115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/medlearn.imperial.ac.uk\/innovation\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/medlearn.imperial.ac.uk\/innovation\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/medlearn.imperial.ac.uk\/innovation\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/medlearn.imperial.ac.uk\/innovation\/wp-json\/wp\/v2\/comments?post=115"}],"version-history":[{"count":4,"href":"https:\/\/medlearn.imperial.ac.uk\/innovation\/wp-json\/wp\/v2\/pages\/115\/revisions"}],"predecessor-version":[{"id":257,"href":"https:\/\/medlearn.imperial.ac.uk\/innovation\/wp-json\/wp\/v2\/pages\/115\/revisions\/257"}],"up":[{"embeddable":true,"href":"https:\/\/medlearn.imperial.ac.uk\/innovation\/wp-json\/wp\/v2\/pages\/7"}],"wp:attachment":[{"href":"https:\/\/medlearn.imperial.ac.uk\/innovation\/wp-json\/wp\/v2\/media?parent=115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}