1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <meta charset="UTF-8" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7
7<script> 8 (function() { 9 try { 10 let savedMode = localStorage.getItem('themeMode') || 'dark'; 11 // Enterprise portal: the admin's org theme wins over the personal one. 12 // EnterpriseThemeScope caches the last-known org mode here as JSON 13 // { email, mode }; honor it so a light org doesn't flash dark on reload. 14 // Exact-path test on purpose: /enterprise-onboarding etc. are public dark pages. 15 if (location.pathname === '/enterprise' || location.pathname.indexOf('/enterprise/') === 0 || location.pathname === '/mcp') { 16 try { 17 const cached = JSON.parse(localStorage.getItem('examai_enterprise_theme_mode') || 'null'); 18 if (cached && (cached.mode === 'light' || cached.mode === 'dark')) { 19 savedMode = cached.mode; 20 } 21 } catch (e) { /* malformed cache â fall back to the personal mode */ } 22 } 23 // The homepage (/, src/pages/landing3, pinned light in App.tsx) is a light-only marketing page, 24 // /landing3 is its old test URL (now a redirect to /), and /institutions and 25 // /enterprise-pricing-calculator were rebuilt in the same landing3 light system 26 // (.claude/plans/landing3-subpages.md): paint them all light before React mounts so no visitor 27 // ever sees a dark first frame. 28 if ( 29 location.pathname === '/' || 30 location.pathname === '/landing3' || location.pathname === '/landing3/' || 31 location.pathname === '/institutions' || location.pathname === '/institutions/' || 32 location.pathname === '/enterprise-pricing-calculator' || location.pathname === '/enterprise-pricing-calculator/' 33 ) { 34 savedMode = 'light'; 35 } 36 if (savedMode === 'dark') { 37 document.documentElement.classList.add('dark'); 38 document.documentElement.classList.add('dark-theme'); 39 } else { 40 document.documentElement.classList.remove('dark'); 41 document.documentElement.classList.add('light-theme'); 42 } 43 const savedTheme = localStorage.getItem('appTheme') || 'purple'; 44 document.documentElement.setAttribute('data-theme', savedTheme); 45 } catch (e) { 46 document.documentElement.classList.add('dark'); 47 document.documentElement.classList.add('dark-theme'); 48 } 49 })(); 50 </script>
50 51
51<script> 52 // Country market (.claude/plans/country-markets-localization.md §3.1): start the same-origin Cloudflare 53 // IP-country lookup now, so it has usually finished by the time the bundle asks. The promise is consumed 54 // (and deleted) by fetchTrace in src/services/marketService.ts; the rules live in src/config/marketResolve.ts. 55 // Skipped when the answer is already known: local/preview hosts, an explicit or ?market= choice, or a 56 // detection cached less than 24 h ago. 57 (function () { 58 try { 59 if (/localhost|127\.0\.0\.1|\[::1\]|lovable(project)?\.(app|com)/.test(location.hostname)) return; 60 if (localStorage.getItem('examai_market') || sessionStorage.getItem('examai_market_session')) return; 61 if (/[?&](market|country)=/i.test(location.search)) return; 62 try { 63 var cached = JSON.parse(localStorage.getItem('examai_market_detected') || 'null'); 64 var age = cached && typeof cached === 'object' && typeof cached.at === 'number' ? Date.now() - cached.at : -1; 65 if (age >= 0 && age < 86400000) return; 66 } catch (e) { /* malformed cache: the resolver removes it; look up again */ } 67 window.__EXAMAI_TRACE__ = fetch('/cdn-cgi/trace', { cache: 'no-store', credentials: 'omit' }) 68 .then(function (r) { return r.ok ? r.text() : ''; }) 69 .catch(function () { return ''; }); 70 } catch (e) { /* storage or fetch unavailable: the resolver falls back on its own */ } 71 })(); 72 </script>
72 73 74 <!-- Clickjacking protection: break out of any iframe on a different origin --> 75 <style id="anti-clickjack">body { display: none !important; }</style> 76
76<script> 77 (function () { 78 function reveal() { 79 var el = document.getElementById('anti-clickjack'); 80 if (el && el.parentNode) el.parentNode.removeChild(el); 81 } 82 83 // Allow embedding in Lovable's preview/editor and known dev hosts 84 var ALLOWED_PARENT_HOSTS = [ 85 'lovable.dev', 86 'lovableproject.com', 87 'lovable.app', 88 'localhost', 89 '127.0.0.1' 90 ]; 91 92 function parentIsAllowed() { 93 try { 94 var ref = document.referrer ? new URL(document.referrer).hostname : ''; 95 if (!ref) return false; 96 return ALLOWED_PARENT_HOSTS.some(function (h) { 97 return ref === h || ref.endsWith('.' + h); 98 }); 99 } catch (e) { 100 return false; 101 } 102 } 103 104 if (window.self === window.top) { 105 reveal(); 106 return; 107 } 108 109 if (parentIsAllowed()) { 110 // Trusted embedder (Lovable preview/editor) â show the page 111 reveal(); 112 return; 113 } 114 115 // Untrusted embedder â try to break out, but never leave the page hidden 116 try { 117 window.top.location = window.self.location; 118 } catch (e) { 119 reveal(); 120 } 121 })(); 122 </script>
122 123 <!-- Market-neutral on purpose (.claude/plans/country-markets-localization.md §3.7, OPEN-5): link-preview 124 bots and non-JS crawlers in every country read this static head; the per-market title, description 125 and keywords are set at runtime by SEOHead (src/pages/landing3/Landing3.tsx). --> 126 <title>ExamAI - The LMS with AI marking for universities and schools</title> 127 <meta name="description" 128 content="One LMS for your whole institution: courses, lessons, online exams, results and diplomas, with AI that marks every script, handwritten or online. Free pilots, sponsored by Google Cloud."> 129 <meta name="keywords" 130 content="LMS for universities and schools, LMS for institutions, AI grading software, grade handwritten exams with AI, online exam software, AI exam generator from lecture notes, rubric grading software, Gradescope alternative, Canvas alternative, CBT software Nigeria, NUC CCMAS course guides, on-screen evaluation system, LMS for colleges in India, corrección automática de exámenes con IA, campus virtual para universidades, plataforma para calificar exámenes con IA, correção de provas com IA, correction automatique des copies, AI marking software Australia, online exam software South Africa, LMS for universities in Ghana, OBE LMS Philippines, OBE LMS Malaysia, diploma verification" /> 131 <meta name="author" content="ExamAI" /> 132 <meta name="robots" content="index, follow" /> 133 134 <!-- Material Symbols Rounded for icons --> 135 <link rel="stylesheet" 136 href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,[email protected],100..700,0..1,-50..200&display=block" /> 137 <!-- Nunito font for the logo text --> 138 <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@700&display=swap" rel="stylesheet"> 139 <style> 140 .material-symbols-rounded { 141 font-variation-settings: 142 'FILL' 1, 143 'wght' 400, 144 'GRAD' 0, 145 'opsz' 48 146 } 147 148 /* Add Nunito font for the logo text */ 149 .font-nunito { 150 font-family: 'Nunito', sans-serif; 151 } 152 </style> 153 154 <!-- MediaPipe libraries for webcam face tracking (loaded from CDN to avoid bundler issues) --> 155
155<script src="https://cdn.jsdelivr.net/npm/@mediapipe/camera_utils/camera_utils.js" crossorigin="anonymous"></script>
155 156
156<script src="https://cdn.jsdelivr.net/npm/@mediapipe/drawing_utils/drawing_utils.js" crossorigin="anonymous"></script>
156 157
157<script src="https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh/face_mesh.js" crossorigin="anonymous"></script>
157 158 159 <!-- Canonical URL: managed dynamically by SEOHead component per page --> 160 <!-- Open Graph / Facebook --> 161 <meta property="og:type" content="website" /> 162 <!-- Absolute URL: link-preview bots (WhatsApp, LinkedIn, Slack, Googlebot's non-JS pass) read the 163 static HTML and never resolve a relative image URL against the page origin themselves. --> 164 <meta property="og:url" content="https://www.examai.ai/"> 165 <meta property="og:image" content="https://www.examai.ai/landing3-assets/og-examai-neutral.png"> 166 <meta property="og:site_name" content="ExamAI" /> 167 168 <!-- Twitter --> 169 <meta name="twitter:card" content="summary_large_image" /> 170 171 172 <meta name="twitter:image" content="https://www.examai.ai/landing3-assets/og-examai-neutral.png"> 173 <meta name="twitter:site" content="@examai" /> 174 175 <link rel="icon" type="image/png" href="/lovable-uploads/6010b777-e74f-4d1f-8cb5-931cc92bfd7a.png"> 176 177 <!-- Allow autoplay for embedded media --> 178 <meta http-equiv="Feature-Policy" content="autoplay 'self' https://www.youtube.com"> 179 180 <!-- Structured Data - Organization --> 181
181<script type="application/ld+json"> 182 { 183 "@context": "https://schema.org", 184 "@type": "Organization", 185 "name": "ExamAI", 186 "legalName": "ExamAI, Inc.", 187 "url": "https://www.examai.ai", 188 "logo": "https://www.examai.ai/lovable-uploads/6010b777-e74f-4d1f-8cb5-931cc92bfd7a.png", 189 "description": "One LMS for institutions: courses, lessons, online exams, results and diplomas, with AI that marks every script. Built in Silicon Valley (a UC Berkeley SkyDeck company). Institutions pay per student; the LMS comes included.", 190 "areaServed": ["United States", "Nigeria", "Spain", "Equatorial Guinea", "India", "Ghana", "South Africa", "Egypt", "Morocco", "United Arab Emirates", "Mexico", "Brazil", "Philippines", "Malaysia", "Australia"], 191 "sameAs": [ 192 "https://twitter.com/examai", 193 "https://www.linkedin.com/company/examai" 194 ] 195 } 196 </script>
196 197 198 <!-- Structured Data - WebSite --> 199
199<script type="application/ld+json"> 200 { 201 "@context": "https://schema.org", 202 "@type": "WebSite", 203 "name": "ExamAI", 204 "url": "https://www.examai.ai", 205 "potentialAction": { 206 "@type": "SearchAction", 207 "target": { 208 "@type": "EntryPoint", 209 "urlTemplate": "https://www.examai.ai/blogs?search={search_term_string}" 210 }, 211 "query-input": "required name=search_term_string" 212 } 213 } 214 </script>
214 215 216 <!-- Structured Data - SoftwareApplication --> 217
217<script type="application/ld+json"> 218 { 219 "@context": "https://schema.org", 220 "@type": "SoftwareApplication", 221 "name": "ExamAI", 222 "applicationCategory": "EducationalApplication", 223 "operatingSystem": "Web, iOS, Android", 224 "description": "One LMS for your whole institution: courses, lessons, online exams, results and diplomas, with AI that marks every script, handwritten or online." 225 } 226 </script>
226 227 228 <!-- Structured Data - SiteNavigationElement (helps Google generate sitelinks) --> 229 <!-- B2B pivot 2026-08: JSON can't hold comments, so noting the change here. 230 "Features" entry url changed from https://www.examai.ai/features to https://www.examai.ai/features/enterprise. 231 "Pricing" entry url changed from https://www.examai.ai/pricing to https://www.examai.ai/enterprise-pricing-calculator. 232 Restore by reverting these two url values. --> 233
233<script type="application/ld+json"> 234 { 235 "@context": "https://schema.org", 236 "@type": "ItemList", 237 "itemListElement": [ 238 { 239 "@type": "SiteNavigationElement", 240 "position": 1, 241 "name": "Features", 242 "description": "AI-powered exam creation, grading, and analytics features", 243 "url": "https://www.examai.ai/features/enterprise" 244 }, 245 { 246 "@type": "SiteNavigationElement", 247 "position": 2, 248 "name": "Pricing", 249 "description": "Flexible pricing plans for educators and institutions", 250 "url": "https://www.examai.ai/enterprise-pricing-calculator" 251 }, 252 { 253 "@type": "SiteNavigationElement", 254 "position": 3, 255 "name": "How It Works", 256 "description": "Step-by-step guide to creating and grading exams with AI", 257 "url": "https://www.examai.ai/how-it-works" 258 }, 259 { 260 "@type": "SiteNavigationElement", 261 "position": 4, 262 "name": "Help Center", 263 "description": "FAQs and support for ExamAI users", 264 "url": "https://www.examai.ai/help" 265 }, 266 { 267 "@type": "SiteNavigationElement", 268 "position": 5, 269 "name": "Blog", 270 "description": "Education technology insights, tips, and updates", 271 "url": "https://www.examai.ai/blogs" 272 }, 273 { 274 "@type": "SiteNavigationElement", 275 "position": 6, 276 "name": "About", 277 "description": "Learn about ExamAI's mission to transform education", 278 "url": "https://www.examai.ai/about" 279 }, 280 { 281 "@type": "SiteNavigationElement", 282 "position": 7, 283 "name": "Contact", 284 "description": "Get in touch with the ExamAI team", 285 "url": "https://www.examai.ai/contact" 286 }, 287 { 288 "@type": "SiteNavigationElement", 289 "position": 8, 290 "name": "For Institutions", 291 "description": "Bring ExamAI to your university, school, or educational organization", 292 "url": "https://www.examai.ai/institutions" 293 }, 294 { 295 "@type": "SiteNavigationElement", 296 "position": 9, 297 "name": "Login", 298 "description": "Access your ExamAI account", 299 "url": "https://www.examai.ai/login" 300 } 301 ] 302 } 303 </script>
303 304 305 <!-- Microsoft Clarity Analytics --> 306
306<script type="text/javascript"> 307 (function (c, l, a, r, i, t, y) { 308 c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments) }; 309 t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i; 310 y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y); 311 })(window, document, "clarity", "script", "pqfa88igg8"); 312 </script>
312 313 314 <!-- Apollo.io Website Tracker (production only) --> 315
315<script>if (window.location.hostname !== 'localhost') { 316 function initApollo() { 317 var n = Math.random().toString(36).substring(7), o = document.createElement("script"); 318 o.src = "https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache=" + n, o.async = !0, o.defer = !0, 319 o.onload = function () { window.trackingFunctions.onLoad({ appId: "67acfa208329d80019d3c940" }) }, 320 document.head.appendChild(o) 321 } initApollo(); 322 }</script>
322 323 <meta property="og:title" content="ExamAI - The LMS with AI marking for universities and schools"> 324 <meta name="twitter:title" content="ExamAI - The LMS with AI marking for universities and schools"> 325 <meta property="og:description" 326 content="One LMS for your whole institution: courses, lessons, online exams, results and diplomas, with AI that marks every script, handwritten or online. Free pilots, sponsored by Google Cloud."> 327 <meta name="twitter:description" 328 content="One LMS for your whole institution: courses, lessons, online exams, results and diplomas, with AI that marks every script, handwritten or online. Free pilots, sponsored by Google Cloud."> 329 330 <!-- NOTE: hreflang tags were removed. Spanish blog posts are standalone content, 331 not translations of English pages. Having static hreflang in index.html caused 332 Google to flag them as "Duplicate without user-selected canonical" because 333 every page incorrectly claimed them as alternates. Language is now set 334 per-post via BlogSEO structured data inLanguage field. --> 335
335<script type="module" crossorigin src="/assets/index-gqjR-I5d.js"></script>
335 336 <link rel="stylesheet" crossorigin href="/assets/index-BCkOngyS.css">
337<script defer src="/~flock.js" data-proxy-url="/~api/analytics"></script>
337</head> 338 339<body> 340 <div id="root"></div> 341 <noscript> 342 <div style="padding: 40px; font-family: sans-serif; background: #0f1118; color: white; min-height: 100vh;"> 343 <h1>ExamAI - The LMS that marks every script</h1> 344 <p>Courses, lessons, online exams, results and diplomas for your whole institution, with AI that marks every 345 script, handwritten or online, and writes tests from your notes.</p> 346 <nav> 347 <h2>Main Pages</h2> 348 <ul> 349 <!-- B2B pivot 2026-08 â restore by removing this comment wrapper: 350 <li><a href="https://www.examai.ai/features">Features</a></li> 351 <li><a href="https://www.examai.ai/features/professors">For Professors</a></li> 352 <li><a href="https://www.examai.ai/features/students">For Students</a></li> 353 --> 354 <li><a href="https://www.examai.ai/features/enterprise">For Enterprise</a></li> 355 <!-- B2B pivot 2026-08 â restore by removing this comment wrapper: 356 <li><a href="https://www.examai.ai/pricing">Pricing</a></li> 357 --> 358 <li><a href="https://www.examai.ai/enterprise-pricing-calculator">Enterprise Pricing Calculator</a></li> 359 <li><a href="https://www.examai.ai/institutions">For Institutions</a></li> 360 <li><a href="https://www.examai.ai/how-it-works">How It Works</a></li> 361 <li><a href="https://www.examai.ai/about">About</a></li> 362 <li><a href="https://www.examai.ai/contact">Contact</a></li> 363 <li><a href="https://www.examai.ai/help">Help Center</a></li> 364 <li><a href="https://www.examai.ai/hiring">Careers</a></li> 365 <!-- B2B pivot 2026-08 â /signup now redirects to /institutions. Restore by uncommenting: 366 <li><a href="https://www.examai.ai/signup">Sign Up</a></li> 367 --> 368 <li><a href="https://www.examai.ai/institutions">For Institutions</a></li> 369 <li><a href="https://www.examai.ai/login">Login</a></li> 370 </ul> 371 <h2>Blog</h2> 372 <ul> 373 <li><a href="https://www.examai.ai/blogs">All Articles</a></li> 374 <li><a href="https://www.examai.ai/blogs/can-chatgpt-grade-exams-what-happens">Can ChatGPT Grade Exams?</a> 375 </li> 376 <li><a href="https://www.examai.ai/blogs/best-ai-grading-tools-teachers-2026">Best AI Grading Tools 2026</a> 377 </li> 378 <li><a href="https://www.examai.ai/blogs/grade-200-exams-under-2-hours">Grade 200 Exams in Under 2 Hours</a> 379 </li> 380 <li><a href="https://www.examai.ai/blogs/chatgpt-vs-ai-grading-tools-comparison">ChatGPT vs AI Grading 381 Tools</a></li> 382 <li><a href="https://www.examai.ai/blogs/create-ai-generated-exam-5-minutes-tutorial">Create AI Exam in 5 383 Minutes</a></li> 384 </ul> 385 <h2>Comparisons</h2> 386 <ul> 387 <li><a href="https://www.examai.ai/compare">Compare AI Grading Tools</a></li> 388 <li><a href="https://www.examai.ai/compare/examai-vs-chatgpt">ExamAI vs ChatGPT</a></li> 389 <li><a href="https://www.examai.ai/compare/examai-vs-gradescope">ExamAI vs Gradescope</a></li> 390 <li><a href="https://www.examai.ai/compare/examai-vs-gemini">ExamAI vs Gemini</a></li> 391 <li><a href="https://www.examai.ai/compare/best-ai-grading-tools">Best AI Grading Tools</a></li> 392 </ul> 393 <h2>Use Cases</h2> 394 <ul> 395 <li><a href="https://www.examai.ai/use-cases">All Use Cases</a></li> 396 <li><a href="https://www.examai.ai/use-cases/ai-grading-for-essays">AI Grading for Essays</a></li> 397 <li><a href="https://www.examai.ai/use-cases/ai-grading-for-math">AI Grading for Math</a></li> 398 <li><a href="https://www.examai.ai/use-cases/ai-grading-handwritten-exams">AI Grading Handwritten Exams</a> 399 </li> 400 <li><a href="https://www.examai.ai/use-cases/ai-exam-generator">AI Exam Generator</a></li> 401 <li><a href="https://www.examai.ai/use-cases/ai-grading-for-universities">AI Grading for Universities</a></li> 402 </ul> 403 </nav> 404 </div> 405 </noscript>
406 <!-- IMPORTANT: DO NOT REMOVE THIS SCRIPT TAG OR THIS VERY COMMENT! 407
407<script src="https://cdn.gpteng.co/gptengineer.js" type="module"></script>
407 --> 408</body> 409 410</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.