Individual Oral (IO) Assessment Creation Guide

Complete step-by-step guide to planning your Individual Oral. All fields auto-save to your browser. Download your work or restore previous versions.

✅ Auto-saved
Version history:
Step 1 Preparation Before Starting The IO ✅ Complete
▶

Copy your feedback from previous assessments to focus your improvement.

📚 Resources & Guides ▶
📂 Resources:
IO Guide
IO GuideIO TEEAL Structure
Paper 1 Guide
Paper 1 GuidePaper 1 TEEAL Structure
Paper 2 Guide
Paper 2 GuidePaper 2 TEEAL Structure
HL Essay Guide
HL Essay GuideHL Essay TEEAL Structure
AssessmentCriterion ACriterion BCriterion CCriterion D
Mock
1/2 IO
Paper 1
Paper 1
1/2 IO
Paper 1
Key takeaways from feedback:
Step 2 All Criterion: Choice of Texts ✅ Complete
▶

Select your Literary text and Non-Literary Body of Work.

Literary Text Possibilities:
Non-Literary Body of Work Possibilities:
Extract Possibilities
Literary Work Extract
Non-Literary Extract
Step 3 All Criterion: Finalise Choice of Texts and Extracts ✅ Complete
▶

Choose the best combination from your lists above.

Literary Text & Extract
Non-Literary Body of Work & Extract
Why this combination?
Step 4 All Criterion: Global Issue & Thesis ✅ Complete
▶

Refine your Global Issue and create your thesis statement.

📂 Resources:
Stages of IDEAs
Stages of IDEAsExpand a single IDEA into a full paragraph
IO Guide
IO GuideFull IO Resources
DDM Thesis Builder
▶
DDM Thesis Builder
Deconstruct, Dichotomise, Merge – build a strong thesis
Key IDEA(s) found in both sets of texts:
Possible Global Issues:
Thesis Statement:
Step 5 Criterion B: Evidence, Annotations & Analysis ✅ Complete
▶

Build your evidence and deconstructions.

📂 Resources:
3-Step Technique
3-Step TechniqueWhat, How, Why framework
Ways to Phrase
Ways to PhraseSentence frames for deconstruction
✈️ Plane Method Deep Dive →
Plane MethodFull guide with worked examples for every AC
Extract Analysis – 3-Step Deconstruction
Quote / Image
WHAT? (AC)
HOW? (Connotation)
WHY? (Link to GI)
Whole Text Analysis – Plane Method
Step 6 Full IO Plan ✅ Complete
▶

Structure your entire IO with timings.

Introduction: Global Issue (45 sec)
Conclusion: Global Issue (15 sec)
Literary Extract Analysis (2 min)
Non-Literary Extract Analysis (2 min)
Whole Text Analysis – Literary (2 min)
Whole Text Analysis – Non-Literary (2 min)
Step 7 10 Bullet Points ✅ Complete
▶

Your official 10 bullet points for the IO.

Global Issue:
Literary Work:
Literary Extract:
Non-Literary Work:
Non-Literary Extract:
Your 10 Bullet Points:
Step 8 Final IO Outline Form ✅ Complete
▶

The official form for your IO.

Global Issue:
Literary Work:
Literary Extract:
Non-Literary Text:
Non-Literary Extract:
Notes for the Oral (max 10 bullet points):
Step 9 Evidence Checklist ✅ Complete
▶

Make sure you have all your hard copies ready.

Literary Extract
Non-Literary Extract
Step 10 Practice & Self/Peer Evaluation ✅ Complete
▶

Track your improvement and get feedback.

IO Walkthrough
▶
Full IO Walkthrough
7-minute walkthrough
Areas to Improve:
Evidence of Improvement:

All your work is auto-saved in your browser (localStorage). Download to keep a permanent copy.

🧠 Deliberate Practice AI examiner-trained
Ask me about the IO, Global Issues, deconstruction, or any part of the IO Creator guide. I'll point you to the right stage and resources.
📤 Chat popped out. Use the pop‑out window.
'; var blob = new Blob([html], { type: 'text/html' }); var url = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = url; a.download = 'IO_Plan_' + new Date().toISOString().slice(0,10) + '.html'; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); } function downloadJSON() { var data = getCurrentData(); data['_exportedAt'] = new Date().toISOString(); var blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }); var url = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = url; a.download = 'IO_Plan_' + new Date().toISOString().slice(0,10) + '.json'; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); } function clearAll() { if (!confirm('Are you sure you want to clear ALL your work? This cannot be undone.')) return; localStorage.removeItem('io_creator_data'); var fields = document.querySelectorAll('[contenteditable="true"][data-field]'); fields.forEach(function(field) { field.innerHTML = ''; }); var status = document.getElementById('saveStatus'); status.textContent = '🗑️ Cleared'; status.className = 'save-status'; updateProgress(); setTimeout(function() { status.textContent = '✅ Auto-saved'; status.className = 'save-status saved'; }, 2000); } // ============================================================ // SCROLL SPY // ============================================================ function setupScrollSpy() { var links = document.querySelectorAll('.side-nav .step-link'); var sections = document.querySelectorAll('.step-accordion'); window.addEventListener('scroll', function() { var current = ''; sections.forEach(function(section) { var rect = section.getBoundingClientRect(); if (rect.top <= 150) current = section.id; }); links.forEach(function(link) { link.classList.toggle('active', link.getAttribute('href').substring(1) === current); }); }); } // ============================================================ // ACCORDION TOGGLES (FIXED) // ============================================================ function setupAccordions() { // Step accordions document.querySelectorAll('.step-accordion-header').forEach(function(header) { header.addEventListener('click', function() { var accordion = this.closest('.step-accordion'); if (accordion) accordion.classList.toggle('open'); }); }); // Resource accordions document.querySelectorAll('.resource-accordion-header').forEach(function(header) { header.addEventListener('click', function(e) { e.stopPropagation(); // prevent step accordion from toggling var accordion = this.closest('.resource-accordion'); if (accordion) accordion.classList.toggle('open'); }); }); // Mini accordions document.querySelectorAll('.mini-accordion-header').forEach(function(header) { header.addEventListener('click', function(e) { e.stopPropagation(); var accordion = this.closest('.mini-accordion'); if (accordion) accordion.classList.toggle('open'); }); }); } // ============================================================ // AI CHAT WIDGET – STAGE-AWARE, RESIZABLE, POPOUT (UPDATED) // ============================================================ (function() { var API_BASE = '/p1_api/api'; var messages = document.getElementById('aiChatMessages'); var input = document.getElementById('aiChatInput'); var sendBtn = document.getElementById('aiChatSend'); var toggleBtn = document.getElementById('aiChatToggleBtn'); var resetBtn = document.getElementById('aiChatReset'); var popoutBtn = document.getElementById('aiChatPopout'); var header = document.getElementById('aiChatToggle'); var widget = document.getElementById('aiChatWidget'); var resizeHandle = document.getElementById('aiChatResize'); var chatHistory = []; var popoutWindow = null; var popoutActive = false; // Shared history key var HISTORY_KEY = 'io_creator_chat_history'; // Load history from localStorage function loadHistory() { var saved = localStorage.getItem(HISTORY_KEY); if (saved) { try { chatHistory = JSON.parse(saved); } catch(e) {} } } function saveHistory() { localStorage.setItem(HISTORY_KEY, JSON.stringify(chatHistory)); } loadHistory(); // ============================================================ // RESOURCE IMAGE RENDERER (new) // ============================================================ function renderResourceImages(text) { const resourceMap = { 'Annotation Rubric': '/images/annotation-rubric.png', 'annotation rubric': '/images/annotation-rubric.png', 'the rubric': '/images/annotation-rubric.png', 'rubric': '/images/annotation-rubric.png', 'DICE/PACT': '/images/dice-pact.png', 'DICE': '/images/dice-pact.png', 'PACT': '/images/dice-pact.png', 'dice pact': '/images/dice-pact.png', '3-Step Technique': '/images/3step.png', '3-Step': '/images/3step.png', '3 step technique': '/images/3step.png', '3 step': '/images/3step.png', 'TEEAL': '/images/paper1teeal.png', 'TEEAL scaffold': '/images/paper1teeal.png', 'Paper 1 TEEAL': '/images/paper1teeal.png', 'Paper 1 TEEAL Structure': '/images/paper1teeal.png', 'teeal': '/images/paper1teeal.png', 'Paper 2 TEEAL': '/images/paper2teeal.png', 'Paper 2 TEEAL Structure': '/images/paper2teeal.png', 'paper 2 teeal': '/images/paper2teeal.png', 'HL Essay TEEAL': '/images/hlessayteeal.png', 'HL Essay TEEAL Structure': '/images/hlessayteeal.png', 'hl essay teeal': '/images/hlessayteeal.png', 'Stages of IDEAs': '/images/stages-elaborations.png', 'Stages of IDEAs for Elaborations': '/images/stages-elaborations.png', 'stages of ideas': '/images/stages-elaborations.png', 'Ways to Phrase': '/images/ways-to-phrase.png', 'Ways to Phrase Deconstructions': '/images/ways-to-phrase.png', 'ways to phrase': '/images/ways-to-phrase.png', 'DDM': '/images/ddm-stages.png', 'DDM and the Stages of IDEAs': '/images/ddm-stages.png', 'DDM stages': '/images/ddm-stages.png', 'DDM 2': '/images/ddm2.png', '5 Steps to Finding Comparisons': '/images/5steps.png', '5 Steps': '/images/5steps.png', '5 steps': '/images/5steps.png', '8 Gates of Curriculum Design': '/images/8-gates.png', '8 Gates': '/images/8-gates.png', '8 gates': '/images/8-gates.png', 'Analytical Continuum': '/images/analytical-continuum.png', 'analytical continuum': '/images/analytical-continuum.png', 'Comparative Plane Method': '/images/compplane.png', 'Plane Method': '/images/plane.png', 'plane method': '/images/plane.png', 'Double-Barreled GI': '/images/dbGI.png', 'double barreled gi': '/images/dbGI.png', 'Islands Method': '/images/islands.png', 'Islands Method for Whole Text Analysis': '/images/islands.png', 'islands method': '/images/islands.png', 'Ying Yang Comparative': '/images/yingyang.jpeg', 'Yin Yang Comparative': '/images/yingyang.jpeg', 'ying yang': '/images/yingyang.jpeg', 'IO TEEAL': '/images/IO.png', 'IO TEEAL Structure': '/images/IO.png', 'Paper 1 Model Essay': '/images/P1model.png', 'Model TEEAL Essay': '/images/P1model.png' }; let rendered = text; const sortedKeys = Object.keys(resourceMap).sort((a,b) => b.length - a.length); for (const name of sortedKeys) { const url = resourceMap[name]; const escapedName = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const regex = new RegExp(`\\b${escapedName}\\b`, 'gi'); if (regex.test(text)) { rendered = rendered.replace( regex, ` ${name} ` ); } } return rendered; } // ============================================================ // FORMAT TEACHER MESSAGE (new) // ============================================================ function formatTeacherMessage(text) { if (!text) return ''; var escaped = text; escaped = escaped.replace(/\n/g, '
'); escaped = escaped.replace(/\*\*(.*?)\*\*/g, '$1'); escaped = escaped.replace(/\*(.*?)\*/g, '$1'); escaped = escaped.replace(/^[•\-*]\s+(.*?)$/gm, '
  • $1
  • '); escaped = escaped.replace(/(
  • .*?<\/li>)/gs, function(match) { return ''; }); escaped = escaped.replace(/