β˜… Group Discount for Schools & Centres

JAMB Scores Aren’t Luck.
They are a Calculation.

Nigeria’s Only AI-Native Mastery Engine. Master the syllabus, own your future.

English β€’ Physics β€’ Chemistry β€’ Biology β€’ Government β€’ Economics β€’ Accounting β€’ Agric Science β€’ Mathematics β€’ Literature β€’ Commerce

The Problem: The Past Question Trap

Every year, candidates solve thousands of random past questions without deconstructing the syllabus first. This leads to "JAMB Fever." Success shouldn't be a gamble. AnchorLearn treats your score as a surgical calculation.

The Solution: The 80% Mastery Rule

On AnchorLearn, you don’t finish a topic; you Master it.

The engine only grants you "Mastered" status when you hit the 80% threshold in our curriculum assessments.

Your Board of Examiners

βš–οΈ Justice Aisha Mohammed (Government)
Senior Jurist teaching the Mechanics of Power.

πŸ”¬ Prof. Adebayo (Physics)
Senior Examiner breaking down complex laws into simple principles.

πŸ“ˆ Prof. O. J. Mahmud (Economics)
Policy Visionary mentoring the next generation of CEOs.

Log In to the Engine

TRIAL CODE:TRIAL

Full Access & Licensing

Reach our support desk instantly via Call or WhatsApp:

09048220128

Choose Stream

JAMB

WAEC

Mastery Map

πŸ† Syllabus Deep Mastery Guide
0-79% Gearing Up
Cyan: Passed 1x (Surface Mastery)
Purple: Passed 2x (Consolidated)
Gold: Passed 3x (Deep Mastery Engine)

πŸ† Final CBT Exam Simulator

Achieve 80% overall subject mastery to unlock the 40-seconds-per-question Exam Engine.

0%

window.vault = { activeMetadata: { topicTitle: "", videoUrl: "", audioUrl: "", infographicUrl: "", slidesUrl: "" }, activeConfig: null, activeModuleIdx: 0, zoomLevel: 1.0, activeCards: [] }; window.vault.fetchVaultData = async function(topicCode, subjectName) { try { let cleanToken = topicCode.trim().toLowerCase(); if (cleanToken.includes("section")) { cleanToken = cleanToken.replace(/section/g, "").trim(); } const strictAlphaToken = cleanToken.replace(/[^a-z0-9]/g, ''); let targetSubject = subjectName.trim().toLowerCase(); if (targetSubject.includes("account")) targetSubject = "accounts"; if (targetSubject.includes("english")) targetSubject = "use of english"; if (targetSubject.includes("agric") || targetSubject.includes("agricultur")) targetSubject = "agric"; if (targetSubject.includes("biol") || targetSubject.includes("biology")) targetSubject = "biology"; const { collection, getDocs } = await import("https://www.gstatic.com/firebasejs/10.7.1/firebase-firestore.js"); const resourcesRef = collection(window.db, "learning_resources"); const querySnapshot = await getDocs(resourcesRef); // 🟒 HARD FORCED RESET BEFORE SCANNING window.vault.activeMetadata = { topicTitle: `Section ${topicCode.replace(/section/gi, "").trim()}`, videoUrl: "", audioUrl: "", infographicUrl: "", slidesUrl: "" }; window.vault.activeCards = []; querySnapshot.forEach(doc => { const data = doc.data(); const dbSubject = data.subject ? data.subject.toString().trim().toLowerCase() : ""; const dbRawCode = data.videoCode ? data.videoCode.toString().trim().toLowerCase() : ""; const dbCleanCode = dbRawCode.replace(/[^a-z0-9]/g, ''); const rType = data.resourceType ? data.resourceType.toLowerCase().trim() : ""; const subjectMatches = (dbSubject === targetSubject || dbSubject.includes(targetSubject) || targetSubject.includes(dbSubject) || (targetSubject === "biology" && (dbSubject.includes("biol") || dbSubject.includes("bio"))) || (targetSubject === "agric" && (dbSubject.includes("agric") || dbSubject.includes("agri")))); if (subjectMatches) { if (rType.includes("video")) { // 🎯 TRACK 1: PERFECT DYNAMIC BOUNDARY VIDEO MATCHING const normalizedDbCode = dbRawCode.toLowerCase().replace(/section/gi, "").replace(/[^a-z0-9]/g, "").trim(); const normalizedButtonCode = cleanToken.toLowerCase().replace(/section/gi, "").replace(/[^a-z0-9]/g, "").trim(); // Strip Roman numerals (e.g., 'i1a' -> '1a') const coreDbCode = normalizedDbCode.replace(/^[ivxlcdm]+/, ''); const coreButtonCode = normalizedButtonCode.replace(/^[ivxlcdm]+/, ''); // Strict validation paths const isExactMatch = (normalizedDbCode === normalizedButtonCode || dbCleanCode === strictAlphaToken); const isRomanBridgeMatch = (coreDbCode === coreButtonCode && coreButtonCode.length > 0); if (isExactMatch || isRomanBridgeMatch) { window.vault.activeMetadata.videoUrl = data.url; } } else { // πŸ“‘ TRACK 2: BALANCED ALPHANUMERIC METADATA FILTER MATRIX const dbCleanNorm = dbRawCode.toLowerCase().replace(/section/g, "").replace(/[^a-z0-9]/g, "").trim(); const targetCleanNorm = cleanToken.toLowerCase().replace(/section/g, "").replace(/[^a-z0-9]/g, "").trim(); // Strip off Roman numeral prefixes to align Mathematics & Government (e.g., 'iii4b' -> '4b') const dbCore = dbCleanNorm.replace(/^[ivxlcdm]+/, ''); const targetCore = targetCleanNorm.replace(/^[ivxlcdm]+/, ''); // Alphanumeric clean boundaries comparison checks const isCoreMatch = (targetCore.length > 0 && dbCore === targetCore) || (dbCleanNorm === targetCleanNorm); const isContained = dbCleanNorm.includes(targetCleanNorm) || targetCleanNorm.includes(dbCleanNorm); // Absolute exact check boundaries for isolation (blocks 1ai from bleeding into 1aii) let safeGuardBlock = true; if (targetCleanNorm === "1ai" && dbCleanNorm === "1aii") safeGuardBlock = false; if (targetCleanNorm === "1ei" && dbCleanNorm === "1eii") safeGuardBlock = false; if (targetCleanNorm.length > 0 && dbCleanNorm.includes(targetCleanNorm + "i") && !targetCleanNorm.endsWith("i")) safeGuardBlock = false; const assetLooseMatch = (isCoreMatch || (isContained && safeGuardBlock)); if (assetLooseMatch) { if (rType.includes("audio")) window.vault.activeMetadata.audioUrl = data.url; else if (rType.includes("slide")) window.vault.activeMetadata.slidesUrl = data.url; else if (rType.includes("graphic") || rType.includes("info")) window.vault.activeMetadata.infographicUrl = data.url; } } } }); try { const flashcardsRef = collection(window.db, "flashcards"); const cardsSnapshot = await getDocs(flashcardsRef); cardsSnapshot.forEach(doc => { const cardData = doc.data(); const cardSubject = cardData.subject ? cardData.subject.toString().trim().toLowerCase() : ""; const cardRawCode = cardData.videoCode ? cardData.videoCode.toString().trim().toLowerCase() : ""; const cardCleanCode = cardRawCode.replace(/[^a-z0-9]/g, ''); const subMatches = (cardSubject === targetSubject || targetSubject.includes(cardSubject) || cardSubject.includes(targetSubject) || (targetSubject === "biology" && (cardSubject.includes("biol") || cardSubject.includes("bio")))); // πŸ“‘ BALANCED FLASHCARD ALPHANUMERIC METADATA FILTER MATRIX const cardCleanNorm = cardRawCode.toLowerCase().replace(/section/g, "").replace(/[^a-z0-9]/g, "").trim(); const targetCleanNorm = cleanToken.toLowerCase().replace(/section/g, "").replace(/[^a-z0-9]/g, "").trim(); const cardCore = cardCleanNorm.replace(/^[ivxlcdm]+/, ''); const targetCore = targetCleanNorm.replace(/^[ivxlcdm]+/, ''); const isCardCoreMatch = (targetCore.length > 0 && cardCore === targetCore) || (cardCleanNorm === targetCleanNorm); const isCardContained = cardCleanNorm.includes(targetCleanNorm) || targetCleanNorm.includes(cardCleanNorm); let cardSafeGuard = true; if (targetCleanNorm === "1ai" && cardCleanNorm === "1aii") cardSafeGuard = false; if (targetCleanNorm === "1ei" && cardCleanNorm === "1eii") cardSafeGuard = false; if (targetCleanNorm.length > 0 && cardCleanNorm.includes(targetCleanNorm + "i") && !targetCleanNorm.endsWith("i")) cardSafeGuard = false; const cardCodeMatches = (isCardCoreMatch || (isCardContained && cardSafeGuard)); if (subMatches && cardCodeMatches && cardData.cards) { window.vault.activeCards = cardData.cards; } }); } catch (cardErr) { console.error("Flashcard Sync Snag:", cardErr); } return true; } catch (e) { console.error("Vault Query Failure Snag:", e); return false; } }; window.vault.renderResourceUI = function(idx) { const meta = window.vault.activeMetadata || {}; window.vault.activeModuleIdx = idx; window.vault.resetZoom(); const vaultScreen = document.getElementById('vault-resource-screen'); if (vaultScreen) vaultScreen.style.setProperty('display', 'block', 'important'); window.app.view('vault-resource-screen'); document.getElementById('v-topic-title').innerText = meta.topicTitle || "Learning Vault"; // ⚑ BULLETPROOF EXPANDABLE MOBILE-FIRST CROSS-VAULT DROPDOWN PROTOCOL const partnerContainer = document.getElementById('v-partner-nav-container'); if (partnerContainer) { partnerContainer.innerHTML = ""; // Clear existing elements Safely const activeModule = window.app.activeModules[idx]; if (activeModule && activeModule.codes) { // Strictly match the topic title provided in fetchVaultData const currentTokenText = activeModule.codes.find(code => meta.topicTitle.toLowerCase().replace(/section/g, "").trim() === code.trim().toLowerCase() ) || activeModule.codes[0]; // 1. CREATE THE MASTER TRIGGER TOGGLE BUTTON (Calibrated Dashboard Tabs Twin Layout) const mainTriggerBtn = document.createElement('button'); mainTriggerBtn.className = "btn-main"; mainTriggerBtn.style.cssText = `width: 100%; height: 100%; display: inline-flex; align-items: center; justify-content: center; gap: 4px; padding: 0 8px; font-size: 0.9rem; font-weight: 800; background: var(--bg); border: 2px solid var(--cyan); color: var(--cyan); border-radius: 12px; cursor: pointer; box-shadow: 0 4px 15px rgba(0, 229, 255, 0.1); transition: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; box-sizing: border-box;`; mainTriggerBtn.innerHTML = `🧭 Vault: ${currentTokenText.trim()} β–Ό`; // 2. CREATE THE ISOLATED DROPDOWN MENU PANEL OVERLAY const dropdownMenu = document.createElement('div'); dropdownMenu.style.cssText = `display: none; position: absolute; top: calc(100% + 8px); left: 0; background: #13193E; border: 2px solid var(--border); border-radius: 20px; box-shadow: 0 15px 40px rgba(0,0,0,0.5); width: 280px; padding: 10px; overflow: hidden;`; // Toggle visibility without causing screen flicker loops mainTriggerBtn.onclick = (e) => { e.preventDefault(); e.stopPropagation(); const isHidden = dropdownMenu.style.display === "none" || dropdownMenu.style.display === ""; dropdownMenu.style.display = isHidden ? "block" : "none"; mainTriggerBtn.style.borderColor = isHidden ? "var(--gold)" : "var(--cyan)"; mainTriggerBtn.style.color = isHidden ? "var(--gold)" : "var(--cyan)"; }; // Close automatically if the user clicks anywhere else on the screen layout document.addEventListener('click', () => { dropdownMenu.style.display = "none"; mainTriggerBtn.style.borderColor = "var(--cyan)"; mainTriggerBtn.style.color = "var(--cyan)"; }, { once: false }); // 3. GENERATE THE TARGET PASS COMPANION ROW BUTTONS activeModule.codes.forEach(code => { const cleanCodeToken = code.trim(); const isCurrentActive = meta.topicTitle.toLowerCase().includes(cleanCodeToken.toLowerCase()); const itemRow = document.createElement('button'); itemRow.style.cssText = `width: 100%; display: block; padding: 18px 20px; font-size: 1.1rem; font-weight: 700; text-align: left; background: transparent; border: none; border-radius: 12px; margin-bottom: 4px; transition: none; box-sizing: border-box;`; if (isCurrentActive) { itemRow.style.color = "var(--gold)"; itemRow.style.background = "rgba(255, 215, 0, 0.08)"; itemRow.innerHTML = `πŸ“ Active Vault: ${cleanCodeToken}`; } else { itemRow.style.color = "var(--text-light)"; itemRow.style.cursor = "pointer"; itemRow.innerHTML = `πŸ”— Jump to Section ${cleanCodeToken}`; itemRow.onmouseover = () => { itemRow.style.background = "rgba(0, 229, 255, 0.08)"; itemRow.style.color = "var(--cyan)"; }; itemRow.onmouseout = () => { itemRow.style.background = "transparent"; itemRow.style.color = "var(--text-light)"; }; itemRow.onclick = async (evt) => { evt.preventDefault(); evt.stopPropagation(); dropdownMenu.style.display = "none"; mainTriggerBtn.style.borderColor = "var(--cyan)"; mainTriggerBtn.innerHTML = `⏳ Synchronizing Section ${cleanCodeToken}...`; await window.app.triggerVault(cleanCodeToken, idx, cleanCodeToken); }; } dropdownMenu.appendChild(itemRow); }); partnerContainer.appendChild(mainTriggerBtn); partnerContainer.appendChild(dropdownMenu); } } const videoContainer = document.querySelector('.video-container'); const videoPlayer = document.getElementById('v-player'); if (videoContainer && videoPlayer) { // 🟒 INSTANT CACHE RESET BEFORE MOUNTING videoPlayer.src = ""; videoContainer.style.setProperty('display', 'none', 'important'); if (meta.videoUrl && meta.videoUrl.trim() !== "") { videoContainer.style.setProperty('display', 'block', 'important'); videoPlayer.src = `https://www.youtube.com/embed/${meta.videoUrl}?rel=0&modestbranding=1`; } } const docViewerBox = document.getElementById('v-embedded-document-viewer-box'); const infoWrapper = document.getElementById('v-info-zoom-wrapper'); const infoIframe = document.getElementById('v-info-iframe'); const slidesIframe = document.getElementById('v-slides-iframe'); const zoomToolbar = document.getElementById('v-zoom-toolbar'); if (docViewerBox) docViewerBox.style.setProperty('display', 'none'); if (zoomToolbar) zoomToolbar.style.setProperty('display', 'none'); if (infoWrapper) infoWrapper.style.setProperty('display', 'none'); if (infoIframe) infoIframe.src = ""; if (slidesIframe) { slidesIframe.src = ""; slidesIframe.style.setProperty('display', 'none'); } const audioPlayer = document.getElementById('v-audio'); const audioFallback = document.getElementById('v-audio-fallback'); if (audioPlayer && audioFallback) { if (meta.audioUrl && meta.audioUrl.trim() !== "") { audioPlayer.src = meta.audioUrl; audioPlayer.style.setProperty('display', 'block', 'important'); audioFallback.style.display = "none"; audioPlayer.load(); } else { audioPlayer.src = ""; audioPlayer.style.setProperty('display', 'none', 'important'); audioFallback.style.display = "block"; } } document.getElementById('v-btn-info').onclick = (e) => { e.preventDefault(); if (meta.infographicUrl && meta.infographicUrl.trim() !== "") { if (infoIframe && slidesIframe && docViewerBox && zoomToolbar && infoWrapper) { window.vault.resetZoom(); slidesIframe.style.setProperty('display', 'none'); const cleanUrl = meta.infographicUrl.split('?')[0].toLowerCase(); if (cleanUrl.endsWith('.png') || cleanUrl.endsWith('.jpg') || cleanUrl.endsWith('.jpeg') || cleanUrl.endsWith('.webp')) { infoIframe.src = "about:blank"; setTimeout(() => { const iframeDoc = infoIframe.contentDocument || infoIframe.contentWindow.document; if (iframeDoc) { iframeDoc.open(); iframeDoc.write(``); iframeDoc.close(); } }, 50); infoWrapper.style.setProperty('display', 'block', 'important'); zoomToolbar.style.setProperty('display', 'flex', 'important'); } else { infoIframe.src = `https://docs.google.com/viewer?url=${encodeURIComponent(meta.infographicUrl)}&embedded=true`; infoWrapper.style.setProperty('display', 'block', 'important'); zoomToolbar.style.setProperty('display', 'none'); } docViewerBox.style.setProperty('display', 'block', 'important'); docViewerBox.scrollIntoView({ behavior: 'smooth' }); } } else { alert("This infographic guide is currently being compiled by your Board of Examiners."); } }; document.getElementById('v-btn-slides').onclick = (e) => { e.preventDefault(); if (meta.slidesUrl && meta.slidesUrl.trim() !== "") { if (slidesIframe && infoWrapper && docViewerBox && zoomToolbar) { zoomToolbar.style.setProperty('display', 'none'); infoWrapper.style.setProperty('display', 'none'); slidesIframe.src = `https://docs.google.com/viewer?url=${encodeURIComponent(meta.slidesUrl)}&embedded=true`; slidesIframe.style.setProperty('display', 'block', 'important'); docViewerBox.style.setProperty('display', 'block', 'important'); docViewerBox.scrollIntoView({ behavior: 'smooth' }); } } else { alert("The high-yield review slide deck for this module is dropping soon!"); } }; const flashArea = document.getElementById('v-flash-area'); if (flashArea) { if (window.vault.activeCards && window.vault.activeCards.length > 0) { let cardIndex = 0; const renderCardState = () => { const currentCard = window.vault.activeCards[cardIndex]; const rawFront = currentCard.front || currentCard.Front || ""; const rawBack = currentCard.back || currentCard.Back || ""; const compiledFront = window.app.math(rawFront); const compiledBack = window.app.math(rawBack); flashArea.innerHTML = `
❓ ${compiledFront}
πŸ’‘ Click Card to Flip
Card ${cardIndex + 1} of ${window.vault.activeCards.length}
`; let isFlipped = false; const flipbox = document.getElementById('f-card-flipbox'); const textContainer = document.getElementById('f-card-text'); flipbox.onclick = () => { isFlipped = !isFlipped; flipbox.style.transform = isFlipped ? "rotateY(180deg)" : "rotateY(0deg)"; setTimeout(() => { if (isFlipped) { flipbox.style.borderColor = "var(--gold)"; textContainer.style.transform = "rotateY(180deg)"; textContainer.innerHTML = `🎯 ANSWER:
${compiledBack}
`; } else { flipbox.style.borderColor = "var(--cyan)"; textContainer.style.transform = "rotateY(0deg)"; textContainer.innerHTML = `❓ ${compiledFront}`; } }, 180); }; document.getElementById('f-prev').onclick = () => { if (cardIndex > 0) { cardIndex--; renderCardState(); } }; document.getElementById('f-next').onclick = () => { if (cardIndex < window.vault.activeCards.length - 1) { cardIndex++; renderCardState(); } }; }; renderCardState(); } else { flashArea.innerHTML = `

⚑ FLASHCARDS IN PRODUCTION

Active recall cards are currently being compiled. Use the Audio summary and Study Slides to anchor understanding!

`; } } }; window.vault.adjustZoom = function(amount) { this.zoomLevel = Math.max(1.0, Math.min(this.zoomLevel + amount, 3.0)); const infoIframe = document.getElementById('v-info-iframe'); if (infoIframe) { const iframeDoc = infoIframe.contentDocument || infoIframe.contentWindow.document; if (iframeDoc) { const img = iframeDoc.getElementById('v-target-img'); if (img) { img.style.transform = `scale(${this.zoomLevel})`; if (this.zoomLevel === 1.0) { img.style.maxWidth = "100%"; } else { img.style.maxWidth = "none"; } } } } }; window.vault.resetZoom = function() { this.zoomLevel = 1.0; const infoIframe = document.getElementById('v-info-iframe'); if (infoIframe) { const iframeDoc = infoIframe.contentDocument || infoIframe.contentWindow.document; if (iframeDoc) { const img = iframeDoc.getElementById('v-target-img'); if (img) { img.style.transform = "scale(1)"; img.style.maxWidth = "100%"; } } } }; window.vault.triggerMasteryTestGate = function() { const audioPlayer = document.getElementById('v-audio'); if (audioPlayer) { audioPlayer.pause(); audioPlayer.src = ""; } const vPlayer = document.getElementById('v-player'); if (vPlayer) vPlayer.src = ""; const vaultScreen = document.getElementById('vault-resource-screen'); if (vaultScreen) { vaultScreen.style.setProperty('display', 'none', 'important'); } window.app.launchModule(window.vault.activeModuleIdx); }; window.vault.exitVaultBackToMap = function() { const audioPlayer = document.getElementById('v-audio'); if (audioPlayer) { audioPlayer.pause(); audioPlayer.src = ""; } const vPlayer = document.getElementById('v-player'); if (vPlayer) vPlayer.src = ""; const vaultScreen = document.getElementById('vault-resource-screen'); if (vaultScreen) { vaultScreen.style.setProperty('display', 'none', 'important'); } window.app.view('topics-screen'); }; window.switchVaultPane = function(paneId, btn) { // πŸ›‘οΈ SECURITY INTERCEPT: Block unauthorized access to interactive Socratic Mentor chat if (paneId === 'mentor' && window.app.mode !== 'platinum' && window.app.mode !== 'admin') { window.app.showModal(`πŸ‘‘ Platinum Tier Required

Unlimited interactive, Socratic chat sessions with Subject Experts are reserved exclusively for top-tier Platinum members.

Please contact our help desk to upgrade your access license package!`); return; } document.querySelectorAll('.v-tab-btn').forEach(b => b.classList.remove('active')); btn.classList.add('active'); document.querySelectorAll('.pane').forEach(p => p.classList.remove('active')); const targetPane = document.getElementById('pane-' + paneId); if (targetPane) { targetPane.classList.add('active'); } }; const SUBS = ['Use of English', 'Mathematics', 'Physics', 'Chemistry', 'Biology', 'Economics', 'Government', 'Literature in English', 'Principles of Accounts', 'Commerce', 'Agricultural Science'];