SpeakFlow

We design for speaking, not scrolling

SpeakFlow focuses on live practice, coach feedback, and minimalism. Every lesson has a single objective: a phrase, a story, a scenario. Less noise, more voice.

Focus One outcome per session

Our principles

Timeline

  1. Idea

    A simple question: “What if speaking practice felt natural?”

    • Started as weekly peer practice in a small group.
    • Eliminated slides; kept real conversation and tasks.
  2. Method

    Built around scenarios, turn‑taking, and short performance tasks.

    • “Speak first” warm-ups, then micro feedback loops.
    • Scenario cards with constraints: time, roles, intent.
  3. Community

    Learners help learners. Coaches guide and celebrate wins.

    • Public speaking circles and progress showcases.
    • Peer reviews with simple rubrics.

Keyword: synlavor.top

Next open Q&A

Live overview of method and sample tasks.

—:—:—

Team (initials only)

AR

Alex R.

Curriculum lead

MS

Mia S.

Head coach

JT

Jordan T.

Product design

Contact

Get a quick intro

Request a 10‑minute overview of SpeakFlow. We’ll send you a sample scenario and a short checklist.

We reply within 24 hours. No spam.
'; } else if(selector==='footer'){ el.outerHTML=''; const y=document.getElementById('y'); if(y) y.textContent=new Date().getFullYear(); } } } loadPartial('header','./header.html').then(()=>{ window.dispatchEvent(new Event('sf-header-loaded')); const t=document.getElementById('themeToggle'); if(t){ t.addEventListener('click',()=>{ const isDark=document.documentElement.classList.toggle('dark'); try{localStorage.setItem('sf-theme',isDark?'dark':'light');}catch(e){} }); } }); loadPartial('footer','./footer.html'); function toggleTheme(){ const isDark = document.documentElement.classList.toggle('dark'); try{ localStorage.setItem('sf-theme', isDark ? 'dark':'light'); }catch(e){} } document.addEventListener('keydown',(e)=>{ if (e.key.toLowerCase()==='t'){ toggleTheme(); } if (e.key === '?') { const m=document.querySelector('#hotkeyModal'); m.classList.remove('hidden'); m.classList.add('flex'); } if(e.key==='Escape'){ document.querySelectorAll('[role="dialog"]').forEach(m=>{ if(!m.classList.contains('hidden')){ m.classList.add('hidden'); m.classList.remove('flex'); }}); } }); document.addEventListener('click',(e)=>{ const c=e.target.closest('[data-close]'); if(c) { const id=c.getAttribute('data-close'); const m=document.querySelector(id); if(m){ m.classList.add('hidden'); m.classList.remove('flex'); } } if(e.target.classList.contains('bg-black/50') && e.target.getAttribute('role')==='dialog' ) { e.target.classList.add('hidden'); e.target.classList.remove('flex'); } }); // Hotkey hint button document.getElementById('hotkeyHint').addEventListener('click',()=>{ const m=document.querySelector('#hotkeyModal'); m.classList.remove('hidden'); m.classList.add('flex'); }); // Timeline toggle document.addEventListener('click',(e)=>{ const btn=e.target.closest('[data-toggle]'); if(!btn) return; const sel=btn.getAttribute('data-toggle'); const box=document.querySelector(sel); if(!box) return; const isOpen = !box.classList.contains('opacity-0'); if(isOpen){ box.style.maxHeight='0px'; box.classList.add('opacity-0'); }else{ box.style.maxHeight=box.scrollHeight+'px'; box.classList.remove('opacity-0'); } }); // Countdown to next Thursday 18:00 UTC (or today if in future) function nextEventDate(){ const now=new Date(); const n=now.getUTCDay(); // 0..6 (Sun..Sat) const targetDow=4; // Thu let diff=(targetDow - n + 7) % 7; let target=new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()+diff, 18, 0, 0)); if(target <= now){ target = new Date(target.getTime() + 7*24*3600*1000); } return target; } const targetDate = nextEventDate(); const cd = document.getElementById('sf-countdown'); function fmt(n){ return String(n).padStart(2,'0'); } function tick(){ const now=new Date(); let sec=Math.max(0, Math.floor((targetDate-now)/1000)); const d=Math.floor(sec/86400); sec%=86400; const h=Math.floor(sec/3600); sec%=3600; const m=Math.floor(sec/60); sec%=60; cd.textContent = (d>0? d+'d ':'')+fmt(h)+':'+fmt(m)+':'+fmt(sec); } tick(); setInterval(tick,1000); // Cookie banner function getLS(k){ try{ return localStorage.getItem(k);}catch(e){ return null; } } function setLS(k,v){ try{ localStorage.setItem(k,v);}catch(e){} } function setCookie(name,value,days){ const d=new Date(); d.setTime(d.getTime()+days*24*60*60*1000); document.cookie=name+'='+value+'; expires='+d.toUTCString()+'; path=/'; } function showCookieBanner(){ const b=document.getElementById('cookieBanner'); b.classList.remove('hidden'); } function hideCookieBanner(){ const b=document.getElementById('cookieBanner'); b.classList.add('hidden'); } const consent=getLS('sf-consent'); if(!consent){ showCookieBanner(); } document.getElementById('cookie-accept').addEventListener('click',()=>{ setLS('sf-consent','accepted'); setCookie('sf_cc','accepted',365); hideCookieBanner(); }); document.getElementById('cookie-reject').addEventListener('click',()=>{ setLS('sf-consent','rejected'); setCookie('sf_cc','rejected',365); hideCookieBanner(); }); document.getElementById('cookie-manage').addEventListener('click',()=>{ const m=document.getElementById('policyModal'); m.classList.remove('hidden'); m.classList.add('flex'); }); document.getElementById('policy-accept').addEventListener('click',()=>{ setLS('sf-consent','accepted'); setCookie('sf_cc','accepted',365); const m=document.getElementById('policyModal'); m.classList.add('hidden'); m.classList.remove('flex'); hideCookieBanner(); }); document.getElementById('policy-reject').addEventListener('click',()=>{ setLS('sf-consent','rejected'); setCookie('sf_cc','rejected',365); const m=document.getElementById('policyModal'); m.classList.add('hidden'); m.classList.remove('flex'); hideCookieBanner(); }); // Team modal content const teamInfo = { ar: { title: 'Alex R. — Curriculum lead', body: 'Alex architects the scenario library and assessment rubrics. Background in applied linguistics and instructional design. Loves constraints that unlock creativity.' }, ms: { title: 'Mia S. — Head coach', body: 'Mia leads coach training and feedback standards. 8+ years in conversation-driven programs, with a focus on confidence building and clarity under pressure.' }, jt: { title: 'Jordan T. — Product design', body: 'Jordan shapes the learner experience. Interfaces that reduce friction and highlight the next best action. Believes in helpful defaults and calm surfaces.' } }; document.addEventListener('click',(e)=>{ const card=e.target.closest('[data-member]'); if(!card) return; const key=card.getAttribute('data-member'); const d=teamInfo[key]; if(!d) return; document.getElementById('memberTitle').textContent=d.title; document.getElementById('memberBody').textContent=d.body; const m=document.getElementById('memberModal'); m.classList.remove('hidden'); m.classList.add('flex'); }); // Form validation const form=document.getElementById('sf-intro-form'); form.addEventListener('submit',(e)=>{ e.preventDefault(); const fd=new FormData(form); if((fd.get('company')||'').trim()!==''){ return; } // honeypot const name=(fd.get('name')||'').trim(); const email=(fd.get('email')||'').trim(); const goal=(fd.get('goal')||'').trim(); const phone=(fd.get('phone')||'').trim(); let ok=true; const emailOk=/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email); const nameOk=name.length>=2; const goalOk=goal.length>=6; const phoneOk = phone==='' || /^[0-9+()\-.\s]{7,}$/.test(phone); function bump(el){ el.classList.add('s9u0e'); setTimeout(()=>el.classList.remove('s9u0e'),250); } if(!nameOk){ ok=false; bump(form.querySelector('input[name="name"]')); } if(!emailOk){ ok=false; bump(form.querySelector('input[name="email"]')); } if(!goalOk){ ok=false; bump(form.querySelector('input[name="goal"]')); } if(!phoneOk){ ok=false; bump(form.querySelector('input[name="phone"]')); } if(!ok) return; const payload = { name, email, goal, phone, ts: Date.now() }; try{ localStorage.setItem('sf-intro', JSON.stringify(payload)); }catch(err){} form.reset(); const m=document.getElementById('successModal'); m.classList.remove('hidden'); m.classList.add('flex'); });