Unlock the Path to Your Future withThe Web of Ed

Helping students explore fields of study and careers, for students of all ages.

Start with a quiz that customizes a web for you!

What is the Web of Ed?

The Web of Ed helps students navigate the limitless possibilities within education. Our goal is to provide an easily accessible way for students to learn about the dozens of fields of study they may pursue in school, while also providing tools to help them develop skills and habits to thrive as individuals. Whether you're a graduate student or just starting high school, The Web of Ed can help you explore your interests and develop a plan to achieve your goals.

The interactive explorer

Welcome to The Web of Ed

The Web of Ed is an innovative resource for students who want to explore the many different fields of education, whether you're preparing for college or just exploring your interests. The bigger circles provide summaries of each subject — click one and its story appears below, along with real careers, typical pay, and what the work is actually like. The smaller circles bring you deeper, opening a whole new web. Click any circle to begin your journey!

Big circles = read about it · small circles = open a new web
Interactive web of academic subjects A diagram of connected circles. Everything shown here is also available as text buttons in the panel below, which can be used with a keyboard or screen reader.
I'm so happy you're here!

Exploring

Academia

Five minutes

Not sure where to start?

Answer twelve quick questions about how you like to work, think, and spend your time. You'll get a personalized web of fields worth exploring — plus real careers that fit — and you can jump straight into any of them.

No wrong answers — just be honest!

Our Mission

Our mission at The Web of Ed is to help teenagers navigate the educational landscape with confidence and ease. Through a personalized approach, we aim to empower each student to set meaningful goals, work through academic challenges, and develop lifelong skills and habits for success. We believe that every student has the potential to thrive in their academic pursuits, and we are committed to helping them reach their full potential.

Contact

Let's find your path

Questions about the Web, our services, or where to start? Send a note and we'll get back to you within a day or two.

Can't wait to meet you!

'; let frame = document.getElementById('printFrame'); if(frame) frame.remove(); frame = document.createElement('iframe'); frame.id = 'printFrame'; frame.setAttribute('aria-hidden', 'true'); frame.style.cssText = 'position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden'; document.body.appendChild(frame); const fd = frame.contentWindow.document; fd.open(); fd.write(doc); fd.close(); const go = () => { try{ frame.contentWindow.focus(); frame.contentWindow.print(); }catch(e){ // last resort: open the sheet in a new tab so it can be printed manually const win = window.open('', '_blank'); if(win){ win.document.write(doc); win.document.close(); } } }; if(fd.readyState === 'complete') setTimeout(go, 60); else frame.onload = () => setTimeout(go, 60); } function renderResults(){ resultEl.innerHTML = ''; const score = tally(); const nrm = DIMS.map(d => ({...d, v: (score[d.k]||0) / MAXPTS[d.k]})) .sort((a,b) => b.v - a.v); const top3 = nrm.slice(0, 3); const matches = topMatches(8); const idbar = document.createElement('div'); idbar.className = 'result-id'; idbar.innerHTML = '' + 'Date: ' + '' + '

Your name is required so your printout can be turned in.

'; resultEl.appendChild(idbar); lastResults = {profile: nrm, top3: top3, matches: matches}; const head = document.createElement('div'); head.className = 'center-text'; head.innerHTML = '

Your results

'; const h2 = document.createElement('h2'); h2.textContent = 'You look like a ' + top3.map(d => d.name).join(' · '); head.appendChild(h2); const sub = document.createElement('p'); sub.style.cssText = 'color:var(--ink-soft);max-width:44rem;margin:14px auto 0'; sub.textContent = top3[0].blurb + ' ' + top3[1].blurb; head.appendChild(sub); resultEl.appendChild(head); // interest bars const bars = document.createElement('div'); bars.className = 'r-bars'; nrm.forEach(d => { const row = document.createElement('div'); row.className = 'r-row'; const lab = document.createElement('span'); lab.className = 'r-lab'; lab.textContent = d.name; const track = document.createElement('span'); track.className = 'r-track'; const fill = document.createElement('span'); fill.style.width = Math.round(d.v * 100) + '%'; track.appendChild(fill); row.appendChild(lab); row.appendChild(track); bars.appendChild(row); }); resultEl.appendChild(bars); // personal web const webHead = document.createElement('h3'); webHead.className = 'r-head'; webHead.textContent = 'Your web — click any circle to explore that field'; resultEl.appendChild(webHead); const wrap = document.createElement('div'); wrap.className = 'r-web'; const NS = 'http://www.w3.org/2000/svg'; const svg = document.createElementNS(NS, 'svg'); svg.setAttribute('viewBox', '0 0 760 600'); svg.setAttribute('role', 'group'); svg.setAttribute('aria-label', 'Your matched fields of study'); const CXX = 380, CYY = 300, RING = 218; const six = matches.slice(0, 8); const grad = document.createElementNS(NS, 'defs'); grad.innerHTML = ''; svg.appendChild(grad); six.forEach((m, i) => { const ang = (-90 + i * (360 / six.length)) * Math.PI / 180; const x = CXX + RING * Math.cos(ang), y = CYY + RING * Math.sin(ang); const ln = document.createElementNS(NS, 'line'); ln.setAttribute('x1', CXX); ln.setAttribute('y1', CYY); ln.setAttribute('x2', x); ln.setAttribute('y2', y); ln.setAttribute('class', 'r-link'); svg.appendChild(ln); }); six.forEach((m, i) => { const ang = (-90 + i * (360 / six.length)) * Math.PI / 180; const x = CXX + RING * Math.cos(ang), y = CYY + RING * Math.sin(ang); const g = document.createElementNS(NS, 'g'); g.setAttribute('class', 'r-node'); g.setAttribute('transform', 'translate(' + x + ',' + y + ')'); g.setAttribute('tabindex', '0'); g.setAttribute('role', 'button'); g.setAttribute('aria-label', 'Explore ' + m.name); const c = document.createElementNS(NS, 'circle'); c.setAttribute('r', 64); g.appendChild(c); const t = document.createElementNS(NS, 'text'); t.setAttribute('text-anchor', 'middle'); t.setAttribute('font-size', '13'); const words = m.name.split(' '); const lines = []; let cur = ''; words.forEach(w => { if((cur + ' ' + w).trim().length > 12 && cur){ lines.push(cur); cur = w; } else cur = (cur ? cur + ' ' : '') + w; }); if(cur) lines.push(cur); const y0 = -((lines.length - 1) * 16) / 2 + 4; lines.forEach((L, li) => { const ts = document.createElementNS(NS, 'tspan'); ts.setAttribute('x', 0); ts.setAttribute('y', y0 + li * 16); ts.textContent = L; t.appendChild(ts); }); g.appendChild(t); const go = () => { if(window.WOE && window.WOE.open) window.WOE.open(m.name, true); }; g.addEventListener('click', go); g.addEventListener('keydown', e => { if(e.key === 'Enter' || e.key === ' '){ e.preventDefault(); go(); }}); svg.appendChild(g); }); const cc = document.createElementNS(NS, 'circle'); cc.setAttribute('cx', CXX); cc.setAttribute('cy', CYY); cc.setAttribute('r', 76); cc.setAttribute('class', 'r-center'); svg.appendChild(cc); const ct = document.createElementNS(NS, 'text'); ct.setAttribute('x', CXX); ct.setAttribute('y', CYY + 7); ct.setAttribute('text-anchor', 'middle'); ct.setAttribute('class', 'r-centertext'); ct.textContent = 'You'; svg.appendChild(ct); wrap.appendChild(svg); resultEl.appendChild(wrap); // careers const cHead = document.createElement('h3'); cHead.className = 'r-head'; cHead.textContent = 'Careers worth a look'; resultEl.appendChild(cHead); const grid = document.createElement('div'); grid.className = 'job-grid'; const picked = [], seenTitle = new Set(); matches.forEach(m => { const jobs = (typeof CAREERS !== 'undefined' && CAREERS[m.name]) || []; jobs.slice(0, 2).forEach(j => { const title = j.split('|')[0]; if(!seenTitle.has(title)){ seenTitle.add(title); picked.push({j, from: m.name}); } }); }); picked.slice(0, 12).forEach(({j, from}) => { const [title, pay, day] = j.split('|'); const card = document.createElement('div'); card.className = 'job'; card.tabIndex = 0; card.setAttribute('role', 'button'); const b = document.createElement('b'); b.textContent = title; const s = document.createElement('span'); s.className = 'sal'; s.textContent = pay; const p = document.createElement('p'); p.textContent = day; const f = document.createElement('em'); f.className = 'job-from'; f.textContent = 'via ' + from; card.appendChild(b); card.appendChild(s); card.appendChild(p); card.appendChild(f); grid.appendChild(card); }); resultEl.appendChild(grid); const note = document.createElement('p'); note.className = 'jobs-note center-text'; note.textContent = 'This is a starting point, not a verdict — the best way to know is to explore the webs and see what pulls you in.'; resultEl.appendChild(note); const worksheetCta = document.createElement('div'); worksheetCta.className = 'worksheet-cta center-text'; worksheetCta.innerHTML = '

Found something worth telling people about?

' + 'Download a script to help you present it'; resultEl.appendChild(worksheetCta); const again = document.createElement('div'); again.className = 'center-text'; again.style.marginTop = '22px'; const rb = document.createElement('button'); rb.className = 'btn btn-ghost'; rb.type = 'button'; rb.textContent = 'Retake the quiz'; rb.addEventListener('click', () => { idx = 0; picks = []; renderQuestion(); show(introEl); startBtn.click(); }); again.appendChild(rb); resultEl.appendChild(again); const dEl = document.getElementById('resDate'); if(dEl) dEl.textContent = new Date().toLocaleDateString(undefined, {year:'numeric', month:'long', day:'numeric'}); const pBtn = document.getElementById('resPrint'); const nameEl = document.getElementById('resName'); const hint = document.getElementById('resNameHint'); function nameOk(){ const v = (nameEl.value || '').trim(); if(v.length < 2){ nameEl.classList.add('invalid'); nameEl.setAttribute('aria-invalid', 'true'); hint.textContent = 'Please enter your name before printing.'; hint.classList.add('error'); nameEl.focus(); return false; } nameEl.classList.remove('invalid'); nameEl.removeAttribute('aria-invalid'); hint.textContent = 'Your name is required so your printout can be turned in.'; hint.classList.remove('error'); return true; } nameEl.addEventListener('input', () => { if(nameEl.classList.contains('invalid') && nameEl.value.trim().length >= 2) nameOk(); }); if(pBtn) pBtn.addEventListener('click', () => { if(!nameOk()) return; printResults(nameEl.value.trim()); }); show(resultEl); } window.WOEquiz = { hasResults: () => !!lastResults, showResults: () => { if(lastResults){ show(resultEl); return true; } return false; } }; startBtn.addEventListener('click', () => { idx = 0; picks = []; renderQuestion(); }); })();