Vyndexver Journalism Academy logo Vyndexver Journalism Academy

Log in

Sign up

Choose theme

Quick search

Type a section name and press Enter.

Our Mission

We help emerging and mid-career journalists master reporting, accountability, and storytelling for Canada. Ethics-first, evidence-based, audience-aware.

  • Fact-checking and standards aligned with Canadian associations
  • Hands-on projects with real editors and mentors
  • Career services: portfolio, mock interviews, internships

Keywords: journalism courses Canada, newsroom skills, vyndexver.top

Next

Admissions close in

Questions? Call +1 587-382-4416
AI-generated campus and newsroom lab with collaborative editing desks and camera rigs

Leadership & Faculty

AI-generated portrait, Editor-in-Chief with newsroom background

Editor-in-Chief

Investigations, FOI, ethics

AI-generated portrait, Data Desk Lead with charts in the background

Data Desk Lead

Data, visualization, reproducibility

AI-generated portrait, Broadcast Lead in studio

Broadcast Lead

Video, audio, on-air standards

AI-generated portrait, Photo Editor with field gear

Photo Editor

Field safety, ethics, captions

Canada Map — Interactive Milestones

Hover or tap the pins to learn more
AI-generated map of Canada with provinces highlighted for journalism initiatives

Timeline & Map

Milestones across Canada’s provinces.

  • 2018 — Academy founded in Toronto (ON)
  • 2020 — Online programs launch nationwide
  • 2022 — Data desk expansion in Vancouver (BC)
  • 2024 — Bilingual initiatives with Montreal (QC)
AI-generated map of Canada

Choose Theme

Contact Admissions

We usually respond within one business day. Call +1 587-382-4416 or send us a message below.

'; document.getElementById('site-footer').innerHTML = ' '; } finally { attachHeaderFooterInteractions(); } } function attachHeaderFooterInteractions(){ const qs = s => document.querySelector(s); const qsa = s => Array.from(document.querySelectorAll(s)); function openModal(id){ const el = qs(id); if(el && el.showModal) el.showModal(); } function closeModal(id){ const el = qs(id); if(el && el.close) el.close(); } document.addEventListener('click', (e)=>{ const t = e.target; if(t.matches('[data-open]')){ e.preventDefault(); openModal(t.getAttribute('data-open')); } if(t.matches('[data-close]')){ e.preventDefault(); const sel=t.getAttribute('data-close'); if(sel==='#cookie-banner'){ qs('#cookie-banner')?.classList.add('hidden'); } else { closeModal(sel); } } if(t.matches('#theme-choose [data-theme]')){ const choice = t.getAttribute('data-theme'); localStorage.setItem(LS_KEYS.theme, choice); applyThemeFromStorage(); closeModal('#modal-theme'); } if(t.matches('#cookie-accept')){ localStorage.setItem(LS_KEYS.cookies, 'accepted'); qs('#cookie-banner')?.classList.add('hidden'); } }); qsa('dialog').forEach(d=>{ d.addEventListener('click', (ev)=>{ const r = d.getBoundingClientRect(); if(ev.clientXr.right || ev.clientYr.bottom){ d.close(); } }); }); if(localStorage.getItem(LS_KEYS.cookies) !== 'accepted'){ qs('#cookie-banner')?.classList.remove('hidden'); } document.addEventListener('keydown',(e)=>{ if((e.ctrlKey||e.metaKey) && e.key.toLowerCase()==='k'){ e.preventDefault(); qs('#modal-theme')?.showModal(); } if(e.key==='Escape'){ // no-op, native dialog handles } }); } function initTimelineModalButton(){ const btn = document.getElementById('open-timeline'); if(btn){ btn.addEventListener('click', ()=>{ const dlg = document.getElementById('modal-timeline'); if(dlg && dlg.showModal) dlg.showModal(); }); } } function initMapTooltips(){ const container = document.querySelector('.w5z7c'); const tooltip = document.getElementById('map-tooltip'); if(!container || !tooltip) return; function showTooltip(btn){ const data = JSON.parse(btn.getAttribute('data-pin')||'{}'); tooltip.innerHTML = '

'+data.year+' — '+data.city+'

'+data.text+'

'; const rect = container.getBoundingClientRect(); const brect = btn.getBoundingClientRect(); const top = brect.top - rect.top + container.scrollTop + 14; const left = brect.left - rect.left + container.scrollLeft + 14; tooltip.style.top = Math.min(container.clientHeight-10, Math.max(10, top)) + 'px'; tooltip.style.left = Math.min(container.clientWidth-10, Math.max(10, left)) + 'px'; tooltip.classList.remove('hidden'); } function hideTooltip(){ tooltip.classList.add('hidden'); } container.addEventListener('click', (e)=>{ const t = e.target; if(t.matches('[data-pin]')){ e.preventDefault(); showTooltip(t); } else if(!tooltip.contains(t)){ hideTooltip(); } }); container.addEventListener('mouseleave', hideTooltip); } function initCountdown(){ const el = document.getElementById('countdown'); if(!el) return; function nextDeadline(){ const now = new Date(); const month = now.getMonth()+1; let target; if(month<=3){ target = new Date(now.getFullYear(), 2, 31, 23, 59, 59); } else if(month<=6){ target = new Date(now.getFullYear(), 5, 30, 23, 59, 59); } else if(month<=9){ target = new Date(now.getFullYear(), 8, 30, 23, 59, 59); } else { target = new Date(now.getFullYear(), 11, 31, 23, 59, 59); } return target; } function format(ms){ const s = Math.max(0, Math.floor(ms/1000)); const d = Math.floor(s/86400); const h = Math.floor((s%86400)/3600); const m = Math.floor((s%3600)/60); const sec = s%60; return d+'d '+String(h).padStart(2,'0')+'h '+String(m).padStart(2,'0')+'m '+String(sec).padStart(2,'0')+'s'; } let target = nextDeadline(); function tick(){ const now = new Date(); if(now >= target){ target = nextDeadline(); } el.textContent = format(target - now); } tick(); setInterval(tick, 1000); } function initContactForm(){ const form = document.getElementById('contact-form'); if(!form) return; const success = document.getElementById('contact-success'); function showErr(name, show){ const p = form.querySelector('[data-err="'+name+'"]'); if(p){ p.classList.toggle('hidden', !show); } } form.addEventListener('submit', (e)=>{ e.preventDefault(); const fd = new FormData(form); const name = (fd.get('name')||'').toString().trim(); const email = (fd.get('email')||'').toString().trim(); const message = (fd.get('message')||'').toString().trim(); let valid = true; if(name.length<2){ showErr('name', true); valid=false; } else { showErr('name', false); } const emailOk = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email); if(!emailOk){ showErr('email', true); valid=false; } else { showErr('email', false); } if(message.length<10){ showErr('message', true); valid=false; } else { showErr('message', false); } if(!valid) return; setTimeout(()=>{ success.classList.remove('hidden'); form.querySelector('button[type="submit"]').disabled = true; setTimeout(()=>{ success.classList.add('hidden'); form.reset(); form.querySelector('button[type="submit"]').disabled = false; document.getElementById('modal-contact')?.close(); }, 1200); }, 300); }); } applyThemeFromStorage(); bindSystemThemeListener(); loadPartials(); initTimelineModalButton(); initMapTooltips(); initCountdown(); initContactForm();