[
  {
    "id": "remote:lksmaker:P1_to_P3_Addition_and_Subtraction",
    "title": "P1 to P3 Math- Addition and Subtraction",
    "folder": "P1_to_P3_Addition_and_Subtraction",
    "folderPath": "P1_to_P3_Addition_and_Subtraction/",
    "indexPath": "https://limkimsze-maker.github.io/P1_to_P3_Addition_and_Subtraction/",
    "hasPrompt": true,
    "promptText": "Addition and Subtraction using base ten blocks and place value discs for teaching and learning.\nTeaching Resources & Productivity\nP1 to P4\nSLS-ready\nCompare using base ten blocks, place value discs and place value cards for teaching and learning.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P1_to_P3_Comparing_and_Ordering_Number_Using_a_Number_Line",
    "title": "P1 to P3 Math- Comparing and Ordering Using a Number Line",
    "folder": "P1_to_P3_Comparing_and_Ordering_Number_Using_a_Number_Line",
    "folderPath": "P1_to_P3_Comparing_and_Ordering_Number_Using_a_Number_Line/",
    "indexPath": "https://limkimsze-maker.github.io/P1_to_P3_Comparing_and_Ordering_Number_Using_a_Number_Line/",
    "hasPrompt": true,
    "promptText": "Comparing and Ordering using a Number Line for teaching and learning.\nTeaching Resources & Productivity\nP1 to P4\nSLS-ready\nCompare and Order using number line for teaching and learning.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:forming_even_or_odd_greatest_or_smallest_digit-",
    "title": "P1 to P3 Math- Forming Greatest or Smallest, Odd or Even number",
    "folder": "forming_even_or_odd_greatest_or_smallest_digit-",
    "folderPath": "forming_even_or_odd_greatest_or_smallest_digit-/",
    "indexPath": "https://limkimsze-maker.github.io/forming_even_or_odd_greatest_or_smallest_digit-/",
    "hasPrompt": true,
    "promptText": "P1 to P3 Math- Forming Greatest or Smallest, Odd or Even number\nTeaching Resources & Productivity\nP1 to P3\nSLS-ready\nCompare and Order using number line for teaching and learning.\nDesigned by Lim Kim Sze © 2025 • CC BY-NC-ND 4.0 • Gallery is SLS-embed friendly.\n// Matrix-style code rain with ON/OFF terminal toggle (default ON, remembers choice)\r\n    (function(){\r\n      const c = document.getElementById('rain');\r\n      const btn = document.getElementById('rainToggle');\r\n      if (!c || !btn) return;\r\n\r\n      const labelEl = btn.querySelector('.label');\r\n      const ctx = c.getContext('2d', { alpha:true });\r\n\r\n      const glyphs = (\r\n        \"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン\" +\r\n        \"0123456789\" +\r\n        \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" +\r\n        \"abcdefghijklmnopqrstuvwxyz\"\r\n      ).split(\"\");\r\n\r\n      let w=0, h=0, cols=0, drops=[];\r\n      let rafId = 0;\r\n      let running = false;\r\n\r\n      function resize(){\r\n        const dpr = Math.max(1, Math.min(2, window.devicePixelRatio || 1));\r\n        w = Math.floor(window.innerWidth);\r\n        h = Math.floor(window.innerHeight);\r\n        c.width = Math.floor(w * dpr);\r\n        c.height = Math.floor(h * dpr);\r\n        c.style.width = w + \"px\";\r\n        c.style.height = h + \"px\";\r\n        ctx.setTransform(dpr,0,0,dpr,0,0);\r\n\r\n        const fontSize = 16;\r\n        cols = Math.max(1, Math.floor(w / fontSize));\r\n        drops = Array.from({length: cols}, () => Math.random() * h / fontSize);\r\n\r\n        ctx.font = \"700 16px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace\";\r\n        ctx.textBaseline = \"top\";\r\n      }\r\n\r\n      function clearCanvas(){ ctx.clearRect(0,0,w,h); }\r\n\r\n      let last=0;\r\n      function frame(t){\r\n        if (!running) return;\r\n\r\n        // cap to ~40fps for battery friendliness\r\n        if (t - last < 25) { rafId = requestAnimationFrame(frame); return; }\r\n        last = t;\r\n\r\n        // fade\r\n        ctx.fillStyle = \"rgba(2, 6, 10, 0.12)\";\r\n        ctx.fillRect(0,0,w,h);\r\n\r\n        const fontSize = 16;\r\n        for (let i=0; i<cols; i++){\r\n          const x = i * fontSize;\r\n          const y = drops[i] * fontSize;\r\n\r\n          const ch = glyphs[(Math.random()*glyphs.length)|0];\r\n\r\n          // green with occasional blue highlight\r\n          ctx.fillStyle = (Math.random() < 0.03)\r\n            ? \"rgba(0, 229, 255, .55)\"\r\n            : \"rgba(34, 255, 143, .75)\";\r\n\r\n          ctx.fillText(ch, x, y);\r\n\r\n          if (y > h && Math.random() > 0.975) drops[i] = 0;\r\n          drops[i] += 0.85 + Math.random()*0.75;\r\n        }\r\n\r\n        rafId = requestAnimationFrame(frame);\r\n      }\r\n\r\n      function setButtonState(on){\r\n        btn.classList.toggle('off', !on);\r\n        btn.setAttribute('aria-pressed', String(on));\r\n        if (labelEl) labelEl.textContent = on ? 'RAIN::TRUE' : 'RAIN::FALSE';\r\n      }\r\n\r\n      function start(){\r\n        if (running) return;\r\n        c.style.display = \"block\";\r\n        resize();\r\n        running = true;\r\n        rafId = requestAnimationFrame(frame);\r\n      }\r\n\r\n      function stop(){\r\n        running = false;\r\n        if (rafId) cancelAnimationFrame(rafId);\r\n        rafId = 0;\r\n        c.style.display = \"none\";\r\n        clearCanvas();\r\n      }\r\n\r\n      function setEnabled(on){\r\n        localStorage.setItem('matrixRainEnabled', on ? '1' : '0');\r\n        if (on) start(); else stop();\r\n        setButtonState(on);\r\n      }\r\n\r\n      // Default ON unless user previously turned it OFF\r\n      const saved = localStorage.getItem('matrixRainEnabled');\r\n      const enabled = (saved === null) ? true : (saved === '1');\r\n\r\n      btn.addEventListener('click', () => setEnabled(!running));\r\n      window.addEventListener('resize', () => { if (running) resize(); }, {passive:true});\r\n\r\n      setButtonState(enabled);\r\n      if (enabled) start(); else stop();\r\n    })();",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P1-to-P4-Comparing-and-Ordering-Numbers",
    "title": "P1 to P4 Math - Comparing and Ordering Numbers",
    "folder": "P1-to-P4-Comparing-and-Ordering-Numbers",
    "folderPath": "P1-to-P4-Comparing-and-Ordering-Numbers/",
    "indexPath": "https://limkimsze-maker.github.io/P1-to-P4-Comparing-and-Ordering-Numbers/",
    "hasPrompt": true,
    "promptText": "Compare using base ten blocks, place value discs and place value cards for teaching and learning.\nTeaching Resources & Productivity\nP1 to P4\nSLS-ready\nCompare using base ten blocks, place value discs and place value cards for teaching and learning.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P2_Adding_Like_Fractions",
    "title": "P2 Adding Like Fractions",
    "folder": "P2_Adding_Like_Fractions",
    "folderPath": "P2_Adding_Like_Fractions/",
    "indexPath": "https://limkimsze-maker.github.io/P2_Adding_Like_Fractions/",
    "hasPrompt": true,
    "promptText": "P2 adding like fractions.\nP2 Math\nPrimary\nSLS-ready\nGood for teaching purposes. No score recorded in SLS. Pupils can retry as many times as they like.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P2_Comparing_Like_Fractions_Randomised",
    "title": "P2 Comparing and Ordering Like Fractions",
    "folder": "P2_Comparing_Like_Fractions_Randomised",
    "folderPath": "P2_Comparing_Like_Fractions_Randomised/",
    "indexPath": "https://limkimsze-maker.github.io/P2_Comparing_Like_Fractions_Randomised/",
    "hasPrompt": true,
    "promptText": "Compare and order like fractions (randomised).\nP2 Math\nPrimary\nSLS-ready\nGood for teaching purposes. No score recorded in SLS. Pupils can retry freely.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P2_Comparing_Unit_Fractions_Randomised",
    "title": "P2 Comparing and Ordering Unit Fractions",
    "folder": "P2_Comparing_Unit_Fractions_Randomised",
    "folderPath": "P2_Comparing_Unit_Fractions_Randomised/",
    "indexPath": "https://limkimsze-maker.github.io/P2_Comparing_Unit_Fractions_Randomised/",
    "hasPrompt": true,
    "promptText": "Compare and order unit fractions (randomised).\nP2 Math\nPrimary\nSLS-ready\nGood for teaching purposes. No score recorded in SLS. Pupils can retry freely.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P2_Subtracting_Like_Fractions",
    "title": "P2 Subtracting Like Fractions",
    "folder": "P2_Subtracting_Like_Fractions",
    "folderPath": "P2_Subtracting_Like_Fractions/",
    "indexPath": "https://limkimsze-maker.github.io/P2_Subtracting_Like_Fractions/",
    "hasPrompt": true,
    "promptText": "P2 subtracting like fractions.\nP2 Math\nPrimary\nSLS-ready\nGood for teaching purposes. No score recorded in SLS. Pupils can retry as many times as they like.\nPrimary 3 • Mathematics\nGeometry, time, volume, and fraction reasoning.\nSorted: Level → Subject",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P2_Write_the_fractions_on_phone",
    "title": "P2 Write the Fractions",
    "folder": "P2_Write_the_fractions_on_phone",
    "folderPath": "P2_Write_the_fractions_on_phone/",
    "indexPath": "https://limkimsze-maker.github.io/P2_Write_the_fractions_on_phone/",
    "hasPrompt": true,
    "promptText": "Writing fractions with instant feedback.\nP2 Math\nPrimary\nSLS-ready\nThis link is ready to embed in SLS.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:Addition-and-Subtraction-Puzzles",
    "title": "P3 Addition and Subtraction Puzzles",
    "folder": "Addition-and-Subtraction-Puzzles",
    "folderPath": "Addition-and-Subtraction-Puzzles/",
    "indexPath": "https://limkimsze-maker.github.io/Addition-and-Subtraction-Puzzles/",
    "hasPrompt": true,
    "promptText": "P3 addition and subtraction puzzles. Teacher's Guide password is\n0000\n.\nP3 Math\nPrimary\nSLS-ready\nPassword to unlock Guide for Teachers is “0000”.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P3_Comparing_Unlike_Fraction",
    "title": "P3 Comparing and Ordering Unlike Fractions",
    "folder": "P3_Comparing_Unlike_Fraction",
    "folderPath": "P3_Comparing_Unlike_Fraction/",
    "indexPath": "https://limkimsze-maker.github.io/P3_Comparing_Unlike_Fraction/",
    "hasPrompt": true,
    "promptText": "P3 comparing and ordering unlike fractions.\nP3 Math\nPrimary\nSLS-ready\nPupils can only move on to Test after getting 12/12 for their Practice.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P3_Parallel_Perpendicular_lines",
    "title": "P3 Math Parallel & Perpendicular — Draw-Through-C",
    "folder": "P3_Parallel_Perpendicular_lines",
    "folderPath": "P3_Parallel_Perpendicular_lines/",
    "indexPath": "https://limkimsze-maker.github.io/P3_Parallel_Perpendicular_lines/",
    "hasPrompt": true,
    "promptText": "Identify/draw lines through a point with instant feedback.\nP3 Math\nPrimary\nSLS-ready\nThis link is ready to embed in SLS.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P3_Time_Duration",
    "title": "P3 Math Time Duration",
    "folder": "P3_Time_Duration",
    "folderPath": "P3_Time_Duration/",
    "indexPath": "https://limkimsze-maker.github.io/P3_Time_Duration/",
    "hasPrompt": true,
    "promptText": "Finding out duration using a timeline with instant feedback.\nP3 Math\nPrimary\nSLS-ready\nThis link is ready to embed in SLS.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P3_Measuring_Volume_In_ml",
    "title": "P3 Measuring Volumes in Milliliters",
    "folder": "P3_Measuring_Volume_In_ml",
    "folderPath": "P3_Measuring_Volume_In_ml/",
    "indexPath": "https://limkimsze-maker.github.io/P3_Measuring_Volume_In_ml/",
    "hasPrompt": true,
    "promptText": "P3 measuring volumes in milliliters.\nP3 Math\nPrimary\nSLS-ready\nGood for teaching purposes. No score recorded in SLS. Pupils can retry as many times as they like.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P3_number_pattern",
    "title": "P3 Number Pattern",
    "folder": "P3_number_pattern",
    "folderPath": "P3_number_pattern/",
    "indexPath": "https://limkimsze-maker.github.io/P3_number_pattern/",
    "hasPrompt": true,
    "promptText": "P3 More/Less Adventure & Train Sequence\nP3 Math\nPrimary\nSLS-ready\nPending SLS Submission\nGood for teaching purposes. No score recorded in SLS. Pupils can retry as many times as they like.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:Sum_Difference_FillBlank",
    "title": "P3 Sum and Difference",
    "folder": "Sum_Difference_FillBlank",
    "folderPath": "Sum_Difference_FillBlank/",
    "indexPath": "https://limkimsze-maker.github.io/Sum_Difference_FillBlank/",
    "hasPrompt": true,
    "promptText": "P3 Sum and Difference\nP3 Math\nPrimary\nSLS-ready\nPending SLS Submission\nGood for speed dash. Pupils can retry as many times as they like.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P3_Sum_and_Difference_Model",
    "title": "P3 Sum and Difference Modelling",
    "folder": "P3_Sum_and_Difference_Model",
    "folderPath": "P3_Sum_and_Difference_Model/",
    "indexPath": "https://limkimsze-maker.github.io/P3_Sum_and_Difference_Model/",
    "hasPrompt": true,
    "promptText": "P3 Sum and Difference Modelling\nP3 Math\nPrimary\nSLS-ready\nGood for teaching models. Pupils can retry as many times as they like. Website is embeddable in SLS.\nSDR • English (Phonics)\nDifferentiated phonics tools for on-the-go practice.\nSorted: Level → Subject",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:Place-Value-Chart-for-Counting",
    "title": "Place Value Chart for Counting — Good for all levels!",
    "folder": "Place-Value-Chart-for-Counting",
    "folderPath": "Place-Value-Chart-for-Counting/",
    "indexPath": "https://limkimsze-maker.github.io/Place-Value-Chart-for-Counting/",
    "hasPrompt": true,
    "promptText": "Use base ten blocks, place value discs and place value cards to show a number, up to 10 million.\nTeaching Resources & Productivity\nP1 to P6\nSLS-ready\nTeachers can use base ten blocks, place value discs and place value cards to show a number, up to 10 million.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:Compiler",
    "title": "Scorable HTML with Feedback Compiler",
    "folder": "Compiler",
    "folderPath": "Compiler/",
    "indexPath": "https://limkimsze-maker.github.io/Compiler/",
    "hasPrompt": true,
    "promptText": "Scorable HTML with feedback compiler (Practice+Test or Test-only). Easy ZIP by pasting HTML and pressing a button.\nTeaching Resources & Productivity\nGeneral\nSLS-ready\nTeachers can create HTML5 with Practice + Test structure or Test Only structure.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:Sound_Grid_Landing_Page",
    "title": "SDR Interactive Grid Chart",
    "folder": "Sound_Grid_Landing_Page",
    "folderPath": "Sound_Grid_Landing_Page/",
    "indexPath": "https://limkimsze-maker.github.io/Sound_Grid_Landing_Page/",
    "hasPrompt": true,
    "promptText": "SDR Interactive Grid Chart for students to learn phonics on the go. Good for differentiated instruction.\nSDR\nPrimary\nSLS-ready\nThis link is ready to embed in SLS.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:Sound_Garden_Landing_Page",
    "title": "SDR Sound Garden",
    "folder": "Sound_Garden_Landing_Page",
    "folderPath": "Sound_Garden_Landing_Page/",
    "indexPath": "https://limkimsze-maker.github.io/Sound_Garden_Landing_Page/",
    "hasPrompt": true,
    "promptText": "SDR Sound Garden for differentiated instruction.\nSDR\nPrimary\nSLS-ready\nThis link is ready to embed in SLS.\nGeneral Tools • Teaching & Productivity\nUtilities that support SLS packaging, lesson prep, and classroom demos.\nSorted: Level → Subject",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  },
  {
    "id": "remote:lksmaker:P3_SDR_Spelling",
    "title": "Teaching of Spelling for SDR 2.0, M-G-I, or Customise Your Own!",
    "folder": "P3_SDR_Spelling",
    "folderPath": "P3_SDR_Spelling/",
    "indexPath": "https://limkimsze-maker.github.io/P3_SDR_Spelling/",
    "hasPrompt": true,
    "promptText": "Teach SDR spelling using pre-programmed words or customise your own spelling word lists.\nTeaching Resources & Productivity\nGeneral\nSLS-ready\nTeachers can teach SDR spelling by loading the pre-programmed words or customise their own spelling word lists.",
    "hasZip": false,
    "zipPath": null,
    "hasPromptImage": false,
    "promptImagePath": null,
    "promptImageExt": null,
    "hasKnowledgeBase": false,
    "knowledgeBasePath": null,
    "knowledgeBaseExt": null
  }
]