PageSourceSearch

https://speakprac.com/about/

html speakprac.com collected 2026-10-02 00:55:54 UTC 60,238 bytes, 432 lines download raw bytes

1<!DOCTYPE html><html lang="en" dir="ltr" class="2xl:text-[20px]"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="sitemap" href="/sitemap-index.xml"><link rel="shortcut icon" href="/_astro/favicon.hYpDKHDT.ico"><link rel="icon" type="image/svg+xml" href="/_astro/favicon.BmM8shuK.svg"><link rel="mask-icon" href="/_astro/favicon.BmM8shuK.svg" color="#8D46E7"><link rel="apple-touch-icon" sizes="180x180" href="/_astro/apple-touch-icon.CLDMfpU_.png"><style>
2  :root {
3    --aw-font-sans: 'Inter Variable';
4    --aw-font-serif: 'Inter Variable';
5    --aw-font-heading: 'Inter Variable';
6
7    --aw-color-primary: rgb(251 153 12); /* SpeakPrac Orange/Amber */
8    --aw-color-secondary: rgb(245 158 11); /* SpeakPrac Orange/Amber */
9    --aw-color-accent: rgb(220 38 38); /* IELTS Red */
10
11    --aw-color-text-heading: rgb(0 0 0);
12    --aw-color-text-default: rgb(16 16 16);
13    --aw-color-text-muted: rgb(16 16 16 / 66%);
14    --aw-color-bg-page: rgb(255 255 255);
15
16    --aw-color-bg-page-dark: rgb(3 6 32);
17
18    ::selection {
19      background-color: lavender;
20    }
21  }
22
23  .dark {
24    --aw-font-sans: 'Inter Variable';
25    --aw-font-serif: 'Inter Variable';
26    --aw-font-heading: 'Inter Variable';
27
28    --aw-color-primary: rgb(251 153 12); /* SpeakPrac Orange/Amber */
29    --aw-color-secondary: rgb(245 158 11); /* SpeakPrac Orange/Amber */
30    --aw-color-accent: rgb(220 38 38); /* IELTS Red */
31
32    --aw-color-text-heading: rgb(247, 248, 248);
33    --aw-color-text-default: rgb(229 236 246);
34    --aw-color-text-muted: rgb(229 236 246 / 66%);
35    --aw-color-bg-page: rgb(3 6 32);
36
37    ::selection {
38      background-color: black;
39      color: snow;
40    }
41  }
42</style>
42<script>(function(){const defaultTheme = "light";
43
44  function applyTheme(theme) {
45    if (theme === 'dark') {
46      document.documentElement.classList.add('dark');
47    } else {
48      document.documentElement.classList.remove('dark');
49    }
50    const matches = document.querySelectorAll('[data-aw-toggle-color-scheme] > input');
51
52    if (matches && matches.length) {
53      matches.forEach((elem) => {
54        elem.checked = theme !== 'dark';
55      });
56    }
57  }
58
59  if ((defaultTheme && defaultTheme.endsWith(':only')) || (!localStorage.theme && defaultTheme !== 'system')) {
60    applyTheme(defaultTheme.replace(':only', ''));
61  } else if (
62    localStorage.theme === 'dark' ||
63    (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)
64  ) {
65    applyTheme('dark');
66  } else {
67    applyTheme('light');
68  }
69})();</script>
69<title>About SpeakPrac | Matthew Alberto &amp; Phuong Nguyen — SpeakPrac</title>
70<meta name="description" content="Meet Matthew Alberto (Band 9, Certified IELTS Teacher) and Phuong Nguyen, co-founders of SpeakPrac — the AI-powered IELTS Speaking practice app. Pride of Australia Medal winners.">
71<meta name="robots" content="index,follow">
72<link rel="canonical" href="https://speakprac.com/about">
73<meta property="og:title" content="About SpeakPrac | Matthew Alberto &amp; Phuong Nguyen">
74<meta property="og:description" content="Meet Matthew Alberto (Band 9, Certified IELTS Teacher) and Phuong Nguyen, co-founders of SpeakPrac — the AI-powered IELTS Speaking practice app. Pride of Australia Medal winners.">
75<meta property="og:url" content="https://speakprac.com/about">
76<meta property="og:type" content="website">
77<meta property="og:image" content="https://speakprac.com/_astro/og-default.DGHMYEc9_Z20v6RT.jpg">
78<meta property="og:image:width" content="1200">
79<meta property="og:image:height" content="630">
80
81<meta property="og:locale" content="en">
82<meta property="og:site_name" content="SpeakPrac">
83<meta name="twitter:card" content="summary_large_image">
84<meta name="twitter:site" content="@speakprac">
85<meta name="twitter:creator" content="@speakprac"><meta name="google-site-verification" content="orcPxI47GSa-cRvY11tUe6iGg2IO_RPvnA1q95iEM3M">
vendor: 63 bytes, line 85
85<script async src="https://www.googletagmanager.com/gtag/js?id=
85G-WLQGNWDBFE
vendor: 33 bytes, line 85
85" type="text/partytown"></script>
85<script type="text/partytown">(function(){const id = "G-WLQGNWDBFE";
86
87  window.dataLayer = window.dataLayer || [];
88  function gtag() {
89    window.dataLayer.push(arguments);
90  }
91  gtag("js", new Date());
92  gtag("config", id);
93})();</script>
93<!-- Comment the line below to disable View Transitions --><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="swap">
93<script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.CDGfc0hd.js"></script>
93<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"Person","name":"Matthew Alberto","jobTitle":"CEO, CTO & Co-founder","url":"https://speakprac.com","sameAs":["https://www.youtube.com/@MatthewAlberto","https://x.com/MatthewAlberto","https://www.linkedin.com/in/matthewalberto"],"worksFor":{"@type":"Organization","name":"SpeakPrac"},"alumniOf":[{"@type":"CollegeOrUniversity","name":"University of New South Wales (UNSW)"},{"@type":"CollegeOrUniversity","name":"University of Sydney (USYD)"},{"@type":"CollegeOrUniversity","name":"UCL"}]},{"@type":"Person","name":"Phuong Nguyen","jobTitle":"CMO, COO & Co-founder","worksFor":{"@type":"Organization","name":"SpeakPrac"},"alumniOf":[{"@type":"CollegeOrUniversity","name":"University of New South Wales (UNSW)"}]}]}</script>
93<link rel="stylesheet" href="/_astro/common-mistakes.DWcKtRcW.css">
93<script>!(function(w,p,f,c){if(!window.crossOriginIsolated && !navigator.serviceWorker) return;c=w[p]=Object.assign(w[p]||{},{"lib":"/~partytown/","debug":false});c[f]=(c[f]||[]).concat(["dataLayer.push"])})(window,'partytown','forward');/* Partytown 0.11.0 - MIT QwikDev */
94const t={preserveBehavior:!1},e=e=>{if("string"==typeof e)return[e,t];const[n,r=t]=e;return[n,{...t,...r}]},n=Object.freeze((t=>{const e=new Set;let n=[];do{Object.getOwnPropertyNames(n).forEach((t=>{"function"==typeof n[t]&&e.add(t)}))}while((n=Object.getPrototypeOf(n))!==Object.prototype);return Array.from(e)})());!function(t,r,o,i,a,s,c,l,d,p,u=t,f){function h(){f||(f=1,"/"==(c=(s.lib||"/~partytown/")+(s.debug?"debug/":""))[0]&&(d=r.querySelectorAll('script[type="text/partytown"]'),i!=t?i.dispatchEvent(new CustomEvent("pt1",{detail:t})):(l=setTimeout(v,(null==s?void 0:s.fallbackTimeout)||1e4),r.addEventListener("pt0",w),a?y(1):o.serviceWorker?o.serviceWorker.register(c+(s.swPath||"partytown-sw.js"),{scope:c}).then((function(t){t.active?y():t.installing&&t.installing.addEventListener("statechange",(function(t){"activated"==t.target.state&&y()}))}),console.error):v())))}function y(e){p=r.createElement(e?"script":"iframe"),t._pttab=Date.now(),e||(p.style.display="block",p.style.width="0",p.style.height="0",p.style.border="0",p.style.visibility="hidden",p.setAttribute("aria-hidden",!0)),p.src=c+"partytown-"+(e?"atomics.js?v=0.11.0":"sandbox-sw.html?"+t._pttab),r.querySelector(s.sandboxParent||"body").appendChild(p)}function v(n,o){for(w(),i==t&&(s.forward||[]).map((function(n){const[r]=e(n);delete t[r.split(".")[0]]})),n=0;n<d.length;n++)(o=r.createElement("script")).innerHTML=d[n].innerHTML,o.nonce=s.nonce,r.head.appendChild(o);p&&p.parentNode.removeChild(p)}function w(){clearTimeout(l)}s=t.partytown||{},i==t&&(s.forward||[]).map((function(r){const[o,{preserveBehavior:i}]=e(r);u=t,o.split(".").map((function(e,r,o){var a;u=u[o[r]]=r+1<o.length?u[o[r]]||(a=o[r+1],n.includes(a)?[]:{}):(()=>{let e=null;if(i){const{methodOrProperty:n,thisObject:r}=((t,e)=>{let n=t;for(let t=0;t<e.length-1;t+=1)n=n[e[t]];return{thisObject:n,methodOrProperty:e.length>0?n[e[e.length-1]]:void 0}})(t,o);"function"==typeof n&&(e=(...t)=>n.apply(r,...t))}return function(){let n;return e&&(n=e(arguments)),(t._ptf=t._ptf||[]).push(o,arguments),n}})()}))})),"complete"==r.readyState?h():(t.addEventListener("DOMContentLoaded",h),t.addEventListener("load",h))}(window,document,navigator,top,window.crossOriginIsolated);;(e=>{e.addEventListener("astro:before-swap",e=>{let r=document.body.querySelector("iframe[src*='/~partytown/']");if(r)e.newDocument.body.append(r)})})(document);</script>
94</head> <body class="antialiased text-default bg-page tracking-tight">      <header class="sticky bg-white dark:bg-slate-900 top-0 z-40 flex-none mx-auto w-full border-b border-gray-50/0 transition-[opacity] ease-in-out" data-aw-sticky-header="true" id="header"> <div class="absolute inset-0"></div> <div class="relative text-default py-1 px-3 md:px-6 mx-auto w-full md:flex md:items-center md:justify-between max-w-7xl"> <div class="flex justify-between md:min-w-[200px] lg:min-w-0 lg:flex-shrink-0"> <a class="flex items-center gap-2" href="/"> <img src="/_astro/speakprac-logo.FQuCDs0s_Z1DI9uN.webp" srcset="/_astro/speakprac-logo.FQuCDs0s_Z1DI9uN.webp 1x, /_astro/speakprac-logo.FQuCDs0s_Z1FEK2E.webp 2x" alt="SpeakPrac Logo" loading="eager" fetchpriority="high" decoding="async" width="31" height="40" class="h-auto"> <img src="/_astro/speakprac-text-logo.BQPCm0bx_17kdK8.webp" srcset="/_astro/speakprac-text-logo.BQPCm0bx_17kdK8.webp 1x, /_astro/speakprac-text-logo.BQPCm0bx_9kLxr.webp 2x" alt="SpeakPrac" loading="eager" fetchpriority="high" decoding="async" width="102" height="20" class="h-auto -mt-1.2"> </a> <div class="flex items-center md:hidden"> <button type="button" class="flex flex-col h-12 w-12 rounded justify-center items-center cursor-pointer group" aria-label="Toggle Menu" data-aw-toggle-menu> <span class="sr-only">Toggle Menu</span>  <span aria-hidden="true" class="h-0.5 w-6 my-1 rounded-full bg-black dark:bg-white transition ease transform duration-200 opacity-80 group-[.expanded]:rotate-45 group-[.expanded]:translate-y-2.5"></span> <span aria-hidden="true" class="h-0.5 w-6 my-1 rounded-full bg-black dark:bg-white transition ease transform duration-200 opacity-80 group-[.expanded]:opacity-0"></span> <span aria-hidden="true" class="h-0.5 w-6 my-1 rounded-full bg-black dark:bg-white transition ease transform duration-200 opacity-80 group-[.expanded]:-rotate-45 group-[.expanded]:-translate-y-2.5"></span>  </button> </div> </div> <nav class="items-center w-full lg:w-auto hidden lg:flex text-default overflow-y-auto lg:overflow-visible overflow-x-hidden lg:flex-1" aria-label="Main navigation"> <ul class="flex flex-col lg:flex-row lg:self-center w-full lg:w-auto text-xl lg:text-[0.9375rem] tracking-[0.01rem] font-medium lg:justify-center lg:space-x-6 xl:space-x-8 lg:mx-8"> <li class="relative group"> <a href="/ielts-speaking-course" class="hover:text-link dark:hover:text-white px-4 py-3 flex items-center whitespace-nowrap"> <span>IELTS Speaking Course</span> <span class="ml-2 text-white text-[10px] font-semibold leading-none px-1.5 py-0.5 rounded-sm bg-green-600"> FREE </span> </a> </li><li class="relative group"> <a href="/ielts-speaking-app" class="hover:text-link dark:hover:text-white px-4 py-3 flex items-center whitespace-nowrap"> <span>SpeakPrac App</span> <span class="ml-2 text-white text-[10px] font-semibold leading-none px-1.5 py-0.5 rounded-sm bg-blue-600"> AI </span> </a> </li><li class="js-dropdown relative group">  <div class="flex items-center"> <a href="/ielts-flashcards" class="hover:text-link dark:hover:text-white py-3 whitespace-nowrap pl-4 pr-1"> <span>IELTS Flashcards</span> </a> <button type="button" class="js-dropdown-toggle hover:text-link dark:hover:text-white pl-1 pr-4 py-3" aria-label="Toggle submenu"> <svg width="1em" height="1em" class="w-4 h-4 transition-transform duration-200 ease-in-out" data-icon="tabler:chevron-down">   <symbol id="ai:tabler:chevron-down" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9l6 6l6-6"/></symbol><use href="#ai:tabler:chevron-down"></use>  </svg> </button> </div> <ul class="sub-menu block mt-2 ml-4 lg:ml-0 pl-4 border-l-2 border-slate-200 dark:border-slate-700 lg:hidden lg:absolute lg:top-full lg:left-1/2 lg:-translate-x-1/2 lg:group-hover:block lg:mt-0 lg:pl-0 lg:border-l-0 lg:bg-white lg:dark:bg-slate-800 lg:shadow-lg lg:rounded-md lg:py-2 lg:z-50 lg:min-w-[240px] lg:border lg:border-gray-200 lg:dark:border-slate-700"> <li> <a href="/ielts-flashcards/bundle" class="w-full text-left px-4 py-2 flex items-center justify-between hover:bg-gray-100 dark:hover:bg-slate-700 whitespace-nowrap"> <span class="flex-1">
94⭐ Ultimate Bundle</span>  </a> </li><li> <a href="/ielts-flashcards/pronunciation" class="w-full text-left px-4 py-2 flex items-center justify-between hover:bg-gray-100 dark:hover:bg-slate-700 whitespace-nowrap"> <span class="flex-1">Pronunciation Flashcards</span>  </a> </li><li> <a href="/ielts-flashcards/vocabulary" class="w-full text-left px-4 py-2 flex items-center justify-between hover:bg-gray-100 dark:hover:bg-slate-700 whitespace-nowrap"> <span class="flex-1">Vocabulary Flashcards</span>  </a> </li><li> <a href="/ielts-flashcards/grammar" class="w-full text-left px-4 py-2 flex items-center justify-between hover:bg-gray-100 dark:hover:bg-slate-700 whitespace-nowrap"> <span class="flex-1">Grammar Flashcards</span>  </a> </li> </ul>  </li><li class="relative group"> <a href="/ielts-speaking-tips" class="hover:text-link dark:hover:text-white px-4 py-3 flex items-center whitespace-nowrap"> <span>Speaking Tips</span>  </a> </li><li class="relative group"> <a href="/ielts-speaking-app" class="hover:text-link dark:hover:text-white px-4 py-3 flex items-center whitespace-nowrap text-white bg-primary hover:bg-secondary font-bold rounded-full shadow-md py-2.5 px-6 ml-4 self-center flex items-center leading-tight transition-colors duration-200"> <span>Get the App</span>  </a> </li> </ul> </nav> <div class="hidden md:flex items-center justify-end lg:flex-shrink-0 md:p-0 md:min-w-[200px] lg:min-w-0"> <div class="hidden md:flex lg:hidden items-center"> <button type="button" class="flex flex-col h-12 w-12 rounded justify-center items-center cursor-pointer group" aria-label="Toggle Menu" data-aw-toggle-menu> <span class="sr-only">Toggle Menu</span>  <span aria-hidden="true" class="h-0.5 w-6 my-1 rounded-full bg-black dark:bg-white transition ease transform duration-200 opacity-80 group-[.expanded]:rotate-45 group-[.expanded]:translate-y-2.5"></span> <span aria-hidden="true" class="h-0.5 w-6 my-1 rounded-full bg-black dark:bg-white transition ease transform duration-200 opacity-80 group-[.expanded]:opacity-0"></span> <span aria-hidden="true" class="h-0.5 w-6 my-1 rounded-full bg-black dark:bg-white transition ease transform duration-200 opacity-80 group-[.expanded]:-rotate-45 group-[.expanded]:-translate-y-2.5"></span>  </button> </div> </div> </div> </header> 
94<script>
95  function setupDropdowns() {
96    const dropdowns = document.querySelectorAll('.js-dropdown');
97
98    document.addEventListener('click', (e) => {
99      if (window.innerWidth < 1024) return;
100      dropdowns.forEach((dropdown) => {
101        if (!dropdown.contains(e.target)) {
102          dropdown.classList.remove('is-open');
103          const icon = dropdown.querySelector('.js-dropdown-toggle svg');
104          icon?.classList.remove('rotate-180');
105        }
106      });
107    });
108
109    dropdowns.forEach((dropdown) => {
110      const toggle = dropdown.querySelector('.js-dropdown-toggle');
111      const submenu = dropdown.querySelector('.sub-menu');
112      const icon = toggle?.querySelector('svg');
113
114      if (!toggle || !submenu || !icon) return;
115
116      if (window.innerWidth < 1024) {
117        dropdown.classList.add('is-open');
118        icon.classList.add('rotate-180');
119      }
120
121      toggle.addEventListener('click', (e) => {
122        e.stopPropagation();
123
124        const isCurrentlyOpen = dropdown.classList.contains('is-open');
125
126        if (window.innerWidth >= 1024) {
127          document.querySelectorAll('.js-dropdown.is-open').forEach((d) => {
128            if (d !== dropdown) {
129              d.classList.remove('is-open');
130              const otherIcon = d.querySelector('.js-dropdown-toggle svg');
131              otherIcon?.classList.remove('rotate-180');
132            }
133          });
134        }
135
136        dropdown.classList.toggle('is-open', !isCurrentlyOpen);
137        icon.classList.toggle('rotate-180', !isCurrentlyOpen);
138
139        if (window.innerWidth < 1024) {
140          submenu.classList.toggle('hidden');
141        }
142      });
143    });
144  }
145
146  document.addEventListener('DOMContentLoaded', setupDropdowns);
147  document.addEventListener('astro:after-swap', setupDropdowns);
148</script>
148  <main>   <section class="relative md:-mt-[76px] not-prose"> <div class="absolute inset-0 pointer-events-none" aria-hidden="true"></div> <div class="relative max-w-7xl mx-auto px-4 sm:px-6"> <div class="pt-0 md:pt-[76px] pointer-events-none"></div> <div class="py-12 md:py-20 pb-8 md:pb-8"> <div class="text-center max-w-5xl mx-auto"> <p class="text-base text-secondary dark:text-blue-200 font-bold tracking-wide uppercase intersect-once intersect-quarter motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade"><span class='text-amber-500 font-semibold tracking-wider uppercase'>About The Founders</span></p> <h1 class="text-5xl md:text-6xl font-bold leading-tighter tracking-tighter mb-4 font-heading dark:text-gray-200 intersect-once intersect-quarter motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade">Hi, we're Matt & Phuong.</h1> <div class="max-w-3xl mx-auto"> <p class="text-xl text-muted mb-6 dark:text-slate-300 intersect-once intersect-quarter motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade">We built SpeakPrac because <strong>anyone can speak English with confidence</strong> — you just need the right system, the right tools, and the right practice.</p> <div class="max-w-xs sm:max-w-md m-auto flex flex-nowrap flex-col sm:flex-row sm:justify-center gap-4 intersect-once intersect-quarter motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade">   </div> </div>  </div> </div> </div> </section>  <section class="relative not-prose scroll-mt-[72px]"> <div class="absolute inset-0 pointer-events-none -z-[1]" aria-hidden="true">  <div class="absolute inset-0">  </div>  </div> <div class="relative px-4 md:px-6 py-12 md:py-16 lg:py-20 text-default intersect-once intersect-quarter intersect-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade max-w-7xl mx-auto">   <div class="mx-auto max-w-7xl p-4 md:px-8"> <div class="md:flex md:flex-row-reverse md:gap-16"> <div class="md:basis-1/2 self-center"> <div class="mb-12 text-lg dark:text-slate-400"> <h2 class="text-2xl md:text-3xl font-bold font-heading mb-4">
149My mission is to help you <br><span class="text-primary">achieve your target score.</span> </h2> <p class="text-muted text-lg mb-4">
150I wasn't born a confident public speaker — or even in a native English speaking country. I was born in the Philippines and moved to Australia as a kid, making me a first-generation migrant. My family spoke Tagalog at home, and I had to actively work on my English. As a natural introvert, my brain often moved faster than my mouth, leading to overthinking and hesitation.
151</p> <p class="text-muted text-lg mb-4">
152When I prepared for the IELTS speaking test, I realized that relying on "natural charm" wouldn't work for me. I needed <strong>systems</strong>. So, I developed frameworks like the Topic Diamond™ and the A.R.E. Framework™ to take the anxiety out of speaking.
153</p> <p class="text-muted text-lg">
154It worked. I scored a perfect Band 9. Because I wanted to help others achieve the same, I became a <strong>Certified IELTS Teacher</strong> through IDP IELTS. Now, through the <strong>SpeakPrac Method™</strong>, I share those exact frameworks and AI practice tools to help you stop overthinking and start communicating.
155</p> </div>   </div> <div aria-hidden="true" class="mt-10 md:mt-0 md:basis-1/2"> <div class="relative m-auto max-w-4xl"> <img src="/_astro/matt_sydney.C7na_4SA.webp" crossorigin="anonymous" referrerpolicy="no-referrer" width="500" height="500" srcset="/_astro/matt_sydney.C7na_4SA_Z27yC4J.webp 400w, /_astro/matt_sydney.C7na_4SA_Z1GMyeX.webp 768w" sizes="(max-width: 768px) 100vw, 432px" style="object-fit: cover; object-position: center; width: 100%; height: auto; aspect-ratio: 1;" *="true" CHANGED:="true" Removed="true" 'bg-gray-500'="true" from="true" class="mx-auto w-full rounded-lg shadow-lg" below="true" alt="Matthew Alberto in Sydney, Australia" loading="lazy" decoding="async"> </div> </div> </div> </div>  </div> </section>  <section class="relative not-prose scroll-mt-[72px]"> <div class="absolute inset-0 pointer-events-none -z-[1]" aria-hidden="true">  <div class="absolute inset-0">  </div>  </div> <div class="relative px-4 md:px-6 py-12 md:py-16 lg:py-20 text-default intersect-once intersect-quarter intersect-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade pt-0 md:pt-0 max-w-6xl mx-auto">   <div class="grid sm:gap-y-8 sm:grid-cols-2 gap-4 md:gap-6"><div class="relative flex flex-col intersect-once intersect-quarter intercept-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade rounded-lg shadow-[0_4px_30px_rgba(0,0,0,0.1)] dark:shadow-[0_4px_30px_rgba(0,0,0,0.1)] backdrop-blur border border-[#ffffff29] bg-white dark:bg-slate-900 p-6"><svg width="1em" height="1em" class="w-12 h-12 mb-6 text-primary" data-icon="tabler:certificate">   <symbol id="ai:tabler:certificate" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M12 15a3 3 0 1 0 6 0a3 3 0 1 0-6 0"/><path d="M13 17.5V22l2-1.5l2 1.5v-4.5"/><path d="M10 19H5a2 2 0 0 1-2-2V7c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-1 1.73M6 9h12M6 12h3m-3 3h2"/></g></symbol><use href="#ai:tabler:certificate"></use>  </svg><div class="text-xl font-bold">Verified Band 9 Speaker</div><p class="text-muted mt-2">I took the official IELTS test and achieved a perfect Band 9 in Speaking (including Band 9 in Fluency, Pronunciation, Vocabulary, and Grammar). I know exactly what examiners look for.</p></div><div class="relative flex flex-col intersect-once intersect-quarter intercept-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade rounded-lg shadow-[0_4px_30px_rgba(0,0,0,0.1)] dark:shadow-[0_4px_30px_rgba(0,0,0,0.1)] backdrop-blur border border-[#ffffff29] bg-white dark:bg-slate-900 p-6"><svg width="1em" height="1em" class="w-12 h-12 mb-6 text-primary" data-icon="tabler:school">   <symbol id="ai:tabler:school" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M22 9L12 5L2 9l10 4zv6"/>
155<path d="M6 10.6V16a6 3 0 0 0 12 0v-5.4"/></g></symbol><use href="#ai:tabler:school"></use>  </svg><div class="text-xl font-bold">Certified IELTS Teacher (IDP)</div><p class="text-muted mt-2">To ensure I provide the highest quality guidance, I completed the official <strong>IELTS Speaking - Teacher Training Program</strong> provided by <strong>IDP IELTS</strong> (Certificate Number: 68ae-6d3a-b8cc-b036). I combine proven teaching methodologies with my personal Band 9 experience.</p></div><div class="relative flex flex-col intersect-once intersect-quarter intercept-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade rounded-lg shadow-[0_4px_30px_rgba(0,0,0,0.1)] dark:shadow-[0_4px_30px_rgba(0,0,0,0.1)] backdrop-blur border border-[#ffffff29] bg-white dark:bg-slate-900 p-6"><svg width="1em" height="1em" class="w-12 h-12 mb-6 text-primary" data-icon="tabler:globe">   <symbol id="ai:tabler:globe" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M7 9a4 4 0 1 0 8 0a4 4 0 0 0-8 0"/><path d="M5.75 15A8.015 8.015 0 1 0 15 2m-4 15v4m-4 0h8"/></g></symbol><use href="#ai:tabler:globe"></use>  </svg><div class="text-xl font-bold">Global Educator</div><p class="text-muted mt-2">I studied at top universities in the UK and Australia (UCL, USYD, UNSW) and have taught English communication worldwide, including working alongside <a href="/documents/recommendation-letter-gabriel-wyner.pdf" target="_blank" rel="noopener noreferrer" class="text-amber-500 hover:text-amber-600 dark:text-amber-400 dark:hover:text-amber-300 underline font-medium transition-colors">Gabriel Wyner, bestselling author of Fluent Forever</a>.</p></div><div class="relative flex flex-col intersect-once intersect-quarter intercept-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade rounded-lg shadow-[0_4px_30px_rgba(0,0,0,0.1)] dark:shadow-[0_4px_30px_rgba(0,0,0,0.1)] backdrop-blur border border-[#ffffff29] bg-white dark:bg-slate-900 p-6"><svg width="1em" height="1em" class="w-12 h-12 mb-6 text-primary" data-icon="tabler:device-mobile-code">   <symbol id="ai:tabler:device-mobile-code" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11.5 21H8a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8m2 8l2-2l-2-2m-3 0l-2 2l2 2M11 4h2m-1 13v.01"/></symbol><use href="#ai:tabler:device-mobile-code"></use>  </svg><div class="text-xl font-bold">Founder of SpeakPrac</div><p class="text-muted mt-2">While preparing for my own IELTS exam, I built SpeakPrac as a personal AI speaking practice tool — because I couldn't find anything that gave me real, accurate feedback. After achieving Band 9, I wanted to help others do the same, so I decided to share it with the world.</p></div></div>  </div> </section>  <section class="relative not-prose scroll-mt-[72px]"> <div class="absolute inset-0 pointer-events-none -z-[1]" aria-hidden="true"> <div class="absolute inset-0 bg-white dark:bg-slate-900"></div> </div> <div class="relative mx-auto px-4 md:px-6 py-12 md:py-16 lg:py-20 text-default intersect-once intersect-quarter intersect-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade max-w-6xl">   <div class="grid md:grid-cols-2 gap-8 md:gap-12 items-center"> <!-- Left Column: Text Content --> <div class="text-center md:text-left"> <div class="mb-8 md:mx-auto md:mb-12 text-center md:text-left !mb-6"><p class="text-base text-secondary dark:text-blue-200 font-bold tracking-wide uppercase">A Creator & Teacher You Can Trust</p><h2 class="font-bold leading-tighter tracking-tighter font-heading text-heading text-3xl md:text-4xl">Built by a Verified Band 9 Speaker & Certified IELTS Teacher</h2></div> <p class="text-lg text-muted mb-4">
156SpeakPrac is built on the proven, real-world strategies that earned me a perfect <strong class="text-amber-600 dark:text-amber-400">Band 9 in IELTS Speaking, including a Band 9 in all four marking criteria</strong>.
157</p> <p class="text-lg text-muted mb-6">
158To ensure I provide the highest quality guidance, I am also a <strong>Certified IELTS Teacher</strong>, having completed the official IELTS Speaking - Teacher Training Program provided by <strong>IDP IELTS</strong> (Certificate Number: 68ae-6d3a-b8cc-b036).
159</p> <p class="text-muted">
160Unlike other resources that make vague promises, I believe in complete transparency. Here's my official, verifiable result (TRF: <strong>25TW500157ALBM051G</strong>) and teaching certification.
161</p> </div> <!-- Right Column: Visual Proof --> <div class="flex flex-col items-center gap-6"> <div class="w-full max-w-md group hidden md:block"> <div class="aspect-video overflow-hidden rounded-lg shadow-lg transform transition-transform duration-300 group-hover:scale-105"> <img src="/_astro/matt-ieltscert.C7j7Ynb5_YIfIE.webp" srcset="/_astro/matt-ieltscert.C7j7Ynb5_1vN6Ff.webp 400w, /_astro/matt-ieltscert.C7j7Ynb5_YIfIE.webp 800w" alt="Matt, creator of SpeakPrac, holding his official IELTS Band 9 Certificate" sizes="(max-width: 768px) 90vw, 38vw" loading="lazy" decoding="async" fetchpriority="auto" width="800" height="602" class="w-full h-full object-cover object-center"> </div> </div> <!-- START: TWO-COLUMN PROOF DASHBOARD --> <div class="text-center w-full">
161 <div class="bg-slate-100 dark:bg-slate-800 rounded-xl p-4 sm:p-5 shadow-lg w-full max-w-lg mx-auto border border-slate-200 dark:border-slate-700"> <div class="grid gap-1 items-center" style="grid-template-columns: 60% 40%;"> <!-- Dashboard Left: IELTS Scores --> <div class="flex flex-col items-center justify-center gap-3"> <img src="/_astro/matt_band9_speaking.DrzmZ3uk_Zx7Cpv.webp" alt="Official IELTS score showing Band 9 for Speaking" loading="lazy" decoding="async" fetchpriority="auto" width="180" height="84" class="h-10 sm:h-12 w-auto rounded-sm shadow-sm"> <img src="/_astro/matt_band9_ielts_breakdown.x-Y8fQrx_OLEon.webp" alt="IELTS Speaking score breakdown showing Band 9 in Fluency, Pronunciation, Vocabulary, and Grammar" loading="lazy" decoding="async" fetchpriority="auto" width="571" height="126" class="w-full max-w-[280px] h-auto rounded-sm shadow-sm"> <img src="/_astro/matt_trf_number.D_Ufd15A_Z1zaXlA.webp" alt="IELTS Test Report Form (TRF) number for verification" loading="lazy" decoding="async" fetchpriority="auto" width="465" height="70" class="h-8 sm:h-10 w-auto rounded-sm shadow-sm"> </div> <!-- Dashboard Right: Clickable IDP Certificate --> <div class="flex items-center justify-center h-full"> <a href="/_astro/Matthew's IELTS Speaking Teacher Training Program Certificate by IDP IELTS.CinZkFxK.webp" target="_blank" rel="noopener noreferrer" class="block group relative" title="Click to view full certificate"> <img src="/_astro/Matthew's%20IELTS%20Speaking%20Teacher%20Training%20Program%20Certificate%20by%20IDP%20IELTS.CinZkFxK_ZcbMUy.webp" alt="Matthew's IELTS Speaking Teacher Training Program Certificate by IDP IELTS" loading="lazy" decoding="async" fetchpriority="auto" width="1240" height="1754" class="w-full max-w-[160px] h-auto rounded-sm shadow-sm border border-slate-300 dark:border-slate-600 transition-opacity duration-200 group-hover:opacity-90"> <!-- Hover overlay hint icon --> <div class="absolute inset-0 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-200 bg-black/10 rounded-sm"> <div class="bg-black/60 text-white rounded-full p-2 backdrop-blur-sm shadow-lg"> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v3m0 0v3m0-3h3m-3 0H7"></path> </svg> </div> </div> </a> </div> </div> </div> <p class="text-xs sm:text-sm text-muted mt-3">
162My Official Band 9 Score, Breakdown & IDP IELTS Teaching Certification
163</p> </div> <!-- END: TWO-COLUMN PROOF DASHBOARD --> </div> </div>  </div> </section>  <section class="py-12 md:py-16"> <div class="max-w-6xl mx-auto px-4 sm:px-6"> <!-- Full-width award photo --> <div class="mb-8 rounded-xl overflow-hidden"> <img src="/_astro/matthew_phuong_pride_of_australia.LjqHADp7.webp" alt="Phuong Nguyen (left) and Matthew Alberto (centre) receiving the Pride of Australia Medal, presented by Australian news presenter Sandra Sully" width="650" height="366" class="w-full h-auto object-contain" loading="lazy" decoding="async"> <p class="text-sm text-muted text-center mt-2 italic">
164Phuong (left) and Matthew (center) accept the Pride of Australia Medal, presented by Sandra Sully — recognized nationally for building tech that helps real people.
165</p> </div> <!-- Text content below the photo --> <div class="max-w-3xl mx-auto"> <h2 class="text-2xl md:text-3xl font-bold font-heading mb-2">
166Meet my co-founder,<br><span class="text-primary">Phuong Nguyen.</span> </h2> <p class="text-sm text-amber-500 font-semibold tracking-wider uppercase mb-4">CMO &amp; COO · Co-founder</p> <p class="text-muted text-lg mb-4">
167Phuong is Vietnamese-Australian — born in Australia to parents who arrived as Vietnamese refugees. Growing up, her parents couldn't speak English well, so she attended ESL classes outside school hours just to keep up, with no one at home to help her practice. She had to figure it out herself. Her parents still struggle with English today. That experience never left her, and it's a big reason SpeakPrac exists.
168</p> <p class="text-muted text-lg mb-4">
169A <strong>UNSW Sydney graduate</strong>, Phuong leads operations and growth at SpeakPrac. Before this, she spent years as a facilitator with <strong><a href="https://franked.io" target="_blank" rel="noopener noreferrer" class="text-amber-500 hover:text-amber-600 dar
169k:text-amber-400 dark:hover:text-amber-300 underline font-medium transition-colors">FRANK Team</a></strong> — an Australian training organization that has equipped over 100,000 people with communication and leadership skills. Delivering workshops on public speaking, personal branding, and communication across high schools, universities, and corporations gave her a frontline understanding of what holds people back from speaking with confidence — and what actually helps them break through.
170</p> <p class="text-muted text-lg mb-4">
171Phuong and I have been building together for over a decade. Our first project, <strong>PeoplePledge</strong> — Australia's first medical crowdfunding platform — was named a <strong>Top 100 SMART Innovation in Australia</strong> and earned us the <strong>Pride of Australia Medal</strong>, presented by news presenter Sandra Sully.
172</p> <p class="text-muted text-lg">
173SpeakPrac is our next chapter, and we're building it with the same commitment.
174</p> </div> <!-- Phuong's credential cards --> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 mt-10 max-w-6xl mx-auto"> <div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-100 dark:border-slate-700"> <div class="text-amber-500 mb-3"> <svg xmlns="http://www.w3.org/2000/svg" class="h-7 w-7" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"> <path stroke-linecap="round" stroke-linejoin="round" d="M4.26 10.147a60.438 60.438 0 0 0-.491 6.347A48.62 48.62 0 0 1 12 20.904a48.62 48.62 0 0 1 8.232-4.41 60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.636 50.636 0 0 0-2.658-.813A59.906 59.906 0 0 1 12 3.493a59.903 59.903 0 0 1 10.399 5.84c-.896.248-1.783.52-2.658.814m-15.482 0A50.717 50.717 0 0 1 12 13.489a50.702 50.702 0 0 1 3.741-3.342M6.75 15a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"></path> </svg> </div> <h3 class="font-semibold text-lg mb-1">UNSW Graduate</h3> <p class="text-muted text-sm">University of New South Wales, Sydney — one of Australia's leading research universities.</p> </div> <div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-100 dark:border-slate-700"> <div class="text-amber-500 mb-3"> <svg xmlns="http://www.w3.org/2000/svg" class="h-7 w-7" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"> <path stroke-linecap="round" stroke-linejoin="round" d="M16.5 18.75h-9m9 0a3 3 0 0 1 3 3h-15a3 3 0 0 1 3-3m9 0v-3.375c0-.621-.503-1.125-1.125-1.125h-.871M7.5 18.75v-3.375c0-.621.504-1.125 1.125-1.125h.872m5.007 0H9.497m5.007 0a7.454 7.454 0 0 1-.982-3.172M9.497 14.25a7.454 7.454 0 0 0 .981-3.172M5.25 4.236c-.982.143-1.954.317-2.916.52A6.003 6.003 0 0 0 7.73 9.728M5.25 4.236V4.5c0 2.108.966 3.99 2.48 5.228M5.25 4.236V2.721C7.456 2.41 9.71 2.25 12 2.25c2.291 0 4.545.16 6.75.47v1.516M7.73 9.728a6.726 6.726 0 0 0 2.748 1.35m8.272-6.842V4.5c0 2.108-.966 3.99-2.48 5.228m2.48-5.492a46.32 46.32 0 0 1 2.916.52 6.003 6.003 0 0 1-5.395 4.972m0 0a6.726 6.726 0 0 1-2.749 1.35m0 0a6.772 6.772 0 0 1-3.044 0"></path> </svg> </div> <h3 class="font-semibold text-lg mb-1">Pride of Australia Medal</h3> <p class="text-muted text-sm">National recognition for community impact through technology — awarded alongside Matthew for PeoplePledge.</p> </div> <div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-100 dark:border-slate-700"> <div class="text-amber-500 mb-3"> <svg xmlns="http://www.w3.org/2000/svg" class="h-7 w-7" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"> <path stroke-linecap="round" stroke-linejoin="round" d="M3.75 3v11.25A2.25 2.25 0 0 0 6 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0 1 18 16.5h-2.25m-7.5 0h7.5m-7.5 0-1 3m8.5-3 1 3m0 0 .5 1.5m-.5-1.5h-9.5m0 0-.5 1.5m.75-9 3-3 2.148 2.148A12.061 12.061 0 0 1 16.5 7.605"></path> </svg> </div> <h3 class="font-semibold text-lg mb-1">10+ Years Building Together</h3> <p class="text-muted text-sm">Co-founded Australia's first medical crowdfunding platform, named a Top 100 SMART Innovation in Australia.</p> </div> <div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-100 dar
174k:border-slate-700"> <div class="text-amber-500 mb-3"> <svg xmlns="http://www.w3.org/2000/svg" class="h-7 w-7" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"> <path stroke-linecap="round" stroke-linejoin="round" d="M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z"></path> </svg> </div> <h3 class="font-semibold text-lg mb-1">Communication & Leadership Trainer</h3> <p class="text-muted text-sm">Facilitated workshops for 1000s of people across schools, universities, and corporations with FRANK Team — covering public speaking, communication skills, and personal branding.</p> </div> </div> </div> </section>  <section class="relative not-prose scroll-mt-[72px]"> <div class="absolute inset-0 pointer-events-none -z-[1]" aria-hidden="true">  <div class="absolute inset-0">  </div>  </div> <div class="relative px-4 md:px-6 py-12 md:py-16 lg:py-20 text-default intersect-once intersect-quarter intersect-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade max-w-7xl mx-auto">  <div class="mb-8 md:mx-auto md:mb-12 text-center max-w-3xl"><h2 class="font-bold leading-tighter tracking-tighter font-heading text-heading text-3xl md:text-4xl">How We Can Help You Reach Band 9</h2><p class="mt-4 text-muted text-xl">The SpeakPrac ecosystem gives you everything you need: Strategy, Input, and Output.</p></div> <div class="grid sm:gap-y-8 lg:grid-cols-3 sm:grid-cols-2 gap-4 md:gap-6"><div class="relative flex flex-col intersect-once intersect-quarter intercept-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade rounded-lg shadow-[0_4px_30px_rgba(0,0,0,0.1)] dark:shadow-[0_4px_30px_rgba(0,0,0,0.1)] backdrop-blur border border-[#ffffff29] bg-white dark:bg-slate-900 p-6"><svg width="1em" height="1em" class="w-12 h-12 mb-6 text-primary" data-icon="tabler:video">   <symbol id="ai:tabler:video" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m15 10l4.553-2.276A1 1 0 0 1 21 8.618v6.764a1 1 0 0 1-1.447.894L15 14zM3 8a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></symbol><use href="#ai:tabler:video"></use>  </svg><div class="text-xl font-bold">1. The Free Course (Strategy)</div><p class="text-muted mt-2">Master the test format and learn the exact frameworks (A.R.E, Topic Diamond, I.D.E.A) that examiners reward.</p><div class="mt-2"><a class="btn-primary" href="/ielts-speaking-course">Watch Course</a></div></div><div class="relative flex flex-col intersect-once intersect-quarter intercept-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade rounded-lg shadow-[0_4px_30px_rgba(0,0,0,0.1)] dark:shadow-[0_4px_30px_rgba(0,0,0,0.1)] backdrop-blur border border-[#ffffff29] bg-white dark:bg-slate-900 p-6"><svg width="1em" height="1em" class="w-12 h-12 mb-6 text-primary" data-icon="tabler:cards">   <symbol id="ai:tabler:cards" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m3.604 7.197l7.138-3.109a.96.96 0 0 1 1.27.527l4.924 11.902a1 1 0 0 1-.514 1.304L9.285 20.93a.96.96 0 0 1-1.271-.527L3.09 8.5a1 1 0 0 1 .514-1.304zM15 4h1a1 1 0 0 1 1 1v3.5M20 6q.396.168.768.315a1 1 0 0 1 .53 1.311L19 13"/></symbol><use href="#ai:tabler:cards"></use>  </svg><div class="text-xl font-bold">2. Anki Flashcards (Input)</div><p class="text-muted mt-2">Build muscle memory for clear pronunciation, advanced vocabulary, and complex grammar using spaced repetition.</p><div class="mt-2"><a class="btn-primary" href="/ielts-flashcards">Get Flashcards</a></div></div><div class="relative flex flex-col intersect-once intersect-quarter intercept-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade rounded-lg shadow-[0_4px_30px_rgba(0,0,0,0.1)] dark:shadow-[0_4px_30px_rgba(0,0,0,0.1)] backdrop-blur border border-[#ffffff29] bg-white dark:bg-slate-900 p-6"><svg width="1em" height="1em" class="w-12 h-12 mb-6 text-primary" data-icon="tabler:device-mobile">   <symbol id="ai:tabler:device-mobile" viewBox="0 0 24 24">
174<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2zm5-1h2m-1 13v.01"/></symbol><use href="#ai:tabler:device-mobile"></use>  </svg><div class="text-xl font-bold">3. SpeakPrac App (Output)</div><p class="text-muted mt-2">Practice your frameworks under exam pressure and get instant AI feedback on your fluency, grammar, and vocabulary.</p><div class="mt-2"><a class="btn-primary" href="/ielts-speaking-app">Try the App</a></div></div></div>  </div> </section> <section class="bg-orange-50 dark:bg-slate-800"> <div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-16 md:py-20"> <div class="grid md:grid-cols-2 gap-8 md:gap-12 items-center"> <!-- Content & Form Column --> <div class="text-center md:text-left order-last md:order-first"> <h2 class="text-3xl md:text-4xl font-bold font-heading mb-4 text-heading">
175Get Free IELTS Speaking Tips
176</h2> <p class="text-lg text-muted mb-8">
177Get <strong class="text-amber-600 dark:text-amber-400">proven strategies from a Band 9 Speaker</strong> to boost your IELTS Speaking score. Join my newsletter for free tips and resources. Unsubscribe anytime.
178</p> <!-- This div is the target for the Klaviyo script to inject the form into. --><div class="klaviyo-form-VL4Jnx"></div> </div> <!-- Image Column --> <div class="text-center md:text-left"> <img src="/_astro/matt_teaching.D_IaUFWs_Z2tHjyb.webp" srcset="/_astro/matt_teaching.D_IaUFWs_Z2o7myU.webp 200w, /_astro/matt_teaching.D_IaUFWs_ZxGIXc.webp 400w, /_astro/matt_teaching.D_IaUFWs_Z2tHjyb.webp 500w" UPDATED:="true" Changed="true" the="true" image="true" source="true" alt="true" text="true" for="true" accuracy="true" and="true" accessibility="true" sizes="(max-width: 768px) 100vw, 500px" loading="lazy" decoding="async" fetchpriority="auto" width="500" height="300" class="rounded-lg shadow-lg mx-auto"> </div> </div> </div> </section>  </main>  <footer class="relative border-t border-gray-200 dark:border-slate-800 not-prose"> <div class="dark:bg-dark absolute inset-0 pointer-events-none" aria-hidden="true"></div> <div class="relative max-w-7xl mx-auto px-4 sm:px-6 dark:text-slate-300 intersect-once intersect-quarter intercept-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade"> <div class="grid grid-cols-12 gap-4 gap-y-8 sm:gap-8 py-8 md:py-12"> <div class="col-span-12 lg:col-span-4"> <div class="mb-2"> <a class="inline-block font-bold text-xl" href="/">SpeakPrac</a> </div> <div class="text-sm text-muted flex gap-1"> <a class="text-muted hover:text-gray-700 dark:text-gray-400 hover:underline transition duration-150 ease-in-out" href="/terms">Terms</a>  · <a class="text-muted hover:text-gray-700 dark:text-gray-400 hover:underline transition duration-150 ease-in-out" href="/privacy">Privacy Policy</a>  · <a class="text-muted hover:text-gray-700 dark:text-gray-400 hover:underline transition duration-150 ease-in-out" href="/data-deletion">Data Deletion</a>  </div> </div> <div class="col-span-6 md:col-span-3 lg:col-span-2"> <div class="dark:text-gray-300 font-medium mb-2">SpeakPrac App</div> <ul class="text-sm"> <li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-speaking-app"> Get Android App </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ios-waitlist"> Join iOS Waitlist </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-speaking-app#features"> App Features </a> </li> </ul> </div><div class="col-span-6 md:col-span-3 lg:col-span-2"> <div class="dark:text-gray-300 font-medium mb-2">IELTS Flashcards</div> <ul class="text-sm"> <li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-flashcards"> All Flashcards </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-flashcards/bundle"> Ultimate Bundle </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-flashcards/pronunciation"> Pronunciation Flashcards </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-flashcards/vocabulary"> Vocabulary Flashcards </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-flashcards/grammar"> Grammar Flashcards </a> </li> </ul> </div><div class="col-span-6 md:col-span-3 lg:col-span-2"> <div class="dark:text-gray-300 font-medium mb-2">SpeakPrac Method™</div> <ul class="text-sm"> <li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-speaking-course"> Free Video Course </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-speaking-course/part-1"> Part 1: A.R.E. Framework™ </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-speaking-course/part-2"> Part 2: Topic Diamond™ </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-speaking-course/part-3"> Part 3: I.D.E.A. Framework™ </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-speaking-course/marking-criteria"> Marking Criteria Explained </a> </li> </ul> </div><div class="col-span-6 md:col-span-3 lg:col-span-2"> <div class="dark:text-gray-300 font-medium mb-2">Connect &amp; Learn</div> <ul class="text-sm"> <li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/about"> About Us </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="https://www.youtube.com/@MatthewAlberto"> YouTube Channel </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-speaking-tips"> IELTS Speaking Tips (Blog) </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/ielts-speaking-faqs"> IELTS Speaking FAQs </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/newsletter"> Join the Newsletter </a> </li><li class="mb-2"> <a class="text-muted hover:text-gray-700 hover:underline dark:text-gray-400 transition duration-150 ease-in-out" href="/contact"> Contact Support </a> </li> </ul> </div> </div> <div class="md:flex md:items-center md:justify-between py-6 md:py-8"> <ul class="flex mb-4 md:order-1 -ml-2 md:ml-4 md:mb-0 rtl:ml-0 rtl:-mr-2 rtl:md:ml-0 rtl:md:mr-4"> <li> <a class="text-muted dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5 inline-flex items-center" aria-label="YouTube" href="https://www.youtube.com/@MatthewAlberto"> <svg width="1em" height="1em" class="w-5 h-5" data-icon="tabler:brand-youtube">   <symbol id="ai:tabler:brand-youtube" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M2 8a4 4 0 0 1 4-4h12a4 4 0 0 1 4 4v8a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4z"/><path d="m10 9l5 3l-5 3z"/></g></symbol><use href="#ai:tabler:brand-youtube"></use>  </svg>  </a> </li><li> <a class="text-muted dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5 inline-flex items-center" aria-label="LinkedIn" href="https://www.linkedin.com/in/matthewalberto"> <svg width="1em" height="1em" class="w-5 h-5" data-icon="tabler:brand-linkedin">
178   <symbol id="ai:tabler:brand-linkedin" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M8 11v5m0-8v.01M12 16v-5m4 5v-3a2 2 0 1 0-4 0"/><path d="M3 7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4v10a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4z"/></g></symbol><use href="#ai:tabler:brand-linkedin"></use>  </svg>  </a> </li><li> <a class="text-muted dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5 inline-flex items-center" aria-label="Email" href="mailto:[email protected]"> <svg width="1em" height="1em" class="w-5 h-5" data-icon="tabler:mail">   <symbol id="ai:tabler:mail" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M3 7a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="m3 7l9 6l9-6"/></g></symbol><use href="#ai:tabler:mail"></use>  </svg>  </a> </li> </ul> <div class="text-sm mr-4 dark:text-muted"> 
179    <span class="w-full md:w-auto text-center md:text-left">
180      © 2026 SpeakPrac. All rights reserved.
181    </span>
182   </div> </div> </div> </footer>   
182<script>(function(){const defaultTheme = "light";
183
184  if (window.basic_script) {
185    return;
186  }
187
188  window.basic_script = true;
189
190  function applyTheme(theme) {
191    if (theme === 'dark') {
192      document.documentElement.classList.add('dark');
193    } else {
194      document.documentElement.classList.remove('dark');
195    }
196  }
197
198  const initTheme = function () {
199    if ((defaultTheme && defaultTheme.endsWith(':only')) || (!localStorage.theme && defaultTheme !== 'system')) {
200      applyTheme(defaultTheme.replace(':only', ''));
201    } else if (
202      localStorage.theme === 'dark' ||
203      (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)
204    ) {
205      applyTheme('dark');
206    } else {
207      applyTheme('light');
208    }
209  };
210  initTheme();
211
212  function attachEvent(selector, event, fn) {
213    const matches = typeof selector === 'string' ? document.querySelectorAll(selector) : selector;
214    if (matches && matches.length) {
215      matches.forEach((elem) => {
216        elem.addEventListener(event, (e) => fn(e, elem), false);
217      });
218    }
219  }
220
221  const onLoad = function () {
222    let lastKnownScrollPosition = window.scrollY;
223    let ticking = true;
224
225    attachEvent('#header nav', 'click', function () {
226      document.querySelector('[data-aw-toggle-menu]')?.classList.remove('expanded');
227      document.body.classList.remove('overflow-hidden');
228      document.getElementById('header')?.classList.remove('h-screen');
229      document.getElementById('header')?.classList.remove('expanded');
230      document.getElementById('header')?.classList.remove('bg-page');
231      document.querySelector('#header nav')?.classList.add('hidden');
232      document.querySelector('#header > div > div:last-child')?.classList.add('hidden');
233    });
234
235    attachEvent('[data-aw-toggle-menu]', 'click', function (_, elem) {
236      elem.classList.toggle('expanded');
237      document.body.classList.toggle('overflow-hidden');
238      document.getElementById('header')?.classList.toggle('h-screen');
239      document.getElementById('header')?.classList.toggle('expanded');
240      document.getElementById('header')?.classList.toggle('bg-page');
241      document.querySelector('#header nav')?.classList.toggle('hidden');
242      document.querySelector('#header > div > div:last-child')?.classList.toggle('hidden');
243    });
244
245    attachEvent('[data-aw-toggle-color-scheme]', 'click', function () {
246      if (defaultTheme.endsWith(':only')) {
247        return;
248      }
249      document.documentElement.classList.toggle('dark');
250      localStorage.theme = document.documentElement.classList.contains('dark') ? 'dark' : 'light';
251    });
252
253    attachEvent('[data-aw-social-share]', 'click', function (_, elem) {
254      const network = elem.getAttribute('data-aw-social-share');
255      const url = encodeURIComponent(elem.getAttribute('data-aw-url'));
256      const text = encodeURIComponent(elem.getAttribute('data-aw-text'));
257
258      let href;
259      switch (network) {
260        case 'facebook':
261          href = `https://www.facebook.com/sharer.php?u=${url}`;
262          break;
263        case 'twitter':
264          href = `https://twitter.com/intent/tweet?url=${url}&text=${text}`;
265          break;
266        case 'linkedin':
267          href = `https://www.linkedin.com/shareArticle?mini=true&url=${url}&title=${text}`;
268          break;
269        case 'whatsapp':
270          href = `https://wa.me/?text=${text}%20${url}`;
271          break;
272        case 'mail':
273          href = `mailto:?subject=%22${text}%22&body=${text}%20${url}`;
274          break;
275
276        default:
277          return;
278      }
279
280      const newlink = document.createElement('a');
281      newlink.target = '_blank';
282      newlink.href = href;
283      newlink.click();
284    });
285
286    const screenSize = window.matchMedia('(max-width: 767px)');
287    screenSize.addEventListener('change', function () {
288      document.querySelector('[data-aw-toggle-menu]')?.classList.remove('expanded');
289      document.body.classList.remove('overflow-hidden');
290      document.getElementById('header')?.classList.remove('h-screen');
291      document.getElementById('header')?.classList.remove('expanded');
292      document.getElementById('header')?.classList.remove('bg-page');
293      document.querySelector('#header nav')?.classList.add('hidden');
294      document.querySelector('#header > div > div:last-child')?.classList.add('hidden');
295    });
296
297    function applyHeaderStylesOnScroll() {
298      const header = document.querySelector('#header[data-aw-sticky-header]');
299      if (!header) return;
300      if (lastKnownScrollPosition > 60 && !header.classList.contains('scroll')) {
301        header.classList.add('scroll');
302      } else if (lastKnownScrollPosition <= 60 && header.classList.contains('scroll')) {
303        header.classList.remove('scroll');
304      }
305      ticking = false;
306    }
307    applyHeaderStylesOnScroll();
308
309    attachEvent([document], 'scroll', function () {
310      lastKnownScrollPosition = window.scrollY;
311
312      if (!ticking) {
313        window.requestAnimationFrame(() => {
314          applyHeaderStylesOnScroll();
315        });
316        ticking = true;
317      }
318    });
319  };
320  const onPageShow = function () {
321    document.documentElement.classList.add('motion-safe:scroll-smooth');
322    const elem = document.querySelector('[data-aw-toggle-menu]');
323    if (elem) {
324      elem.classList.remove('expanded');
325    }
326    document.body.classList.remove('overflow-hidden');
327    document.getElementById('header')?.classList.remove('h-screen');
328    document.getElementById('header')?.classList.remove('expanded');
329    document.querySelector('#header nav')?.classList.add('hidden');
330  };
331
332  window.onload = onLoad;
333  window.onpageshow = onPageShow;
334
335  document.addEventListener('astro:after-swap', () => {
336    initTheme();
337    onLoad();
338    onPageShow();
339  });
340})();</script>
340 
340<script>
341  /* Inspired by: https://github.com/heidkaemper/tailwindcss-intersect */
342  const Observer = {
343    observer: null,
344    delayBetweenAnimations: 100,
345    animationCounter: 0,
346
347    start() {
348      const selectors = [
349        '[class*=" intersect:"]',
350        '[class*=":intersect:"]',
351        '[class^="intersect:"]',
352        '[class="intersect"]',
353        '[class*=" intersect "]',
354        '[class^="intersect "]',
355        '[class$=" intersect"]',
356      ];
357
358      const elements = Array.from(document.querySelectorAll(selectors.join(',')));
359
360      const getThreshold = (element) => {
361        if (element.classList.contains('intersect-full')) return 0.99;
362        if (element.classList.contains('intersect-half')) return 0.5;
363        if (element.classList.contains('intersect-quarter')) return 0.25;
364        return 0;
365      };
366
367      elements.forEach((el) => {
368        el.setAttribute('no-intersect', '');
369        el._intersectionThreshold = getThreshold(el);
370      });
371
372      const callback = (entries) => {
373        entries.forEach((entry) => {
374          requestAnimationFrame(() => {
375            const target = entry.target;
376            const intersectionRatio = entry.intersectionRatio;
377            const threshold = target._intersectionThreshold;
378
379            if (target.classList.contains('intersect-no-queue')) {
380              if (entry.isIntersecting) {
381                target.removeAttribute('no-intersect');
382                if (target.classList.contains('intersect-once')) {
383                  this.observer.unobserve(target);
384                }
385              } else {
386                target.setAttribute('no-intersect', '');
387              }
388              return;
389            }
390
391            if (intersectionRatio >= threshold) {
392              if (!target.hasAttribute('data-animated')) {
393                target.removeAttribute('no-intersect');
394                target.setAttribute('data-animated', 'true');
395
396                const delay = this.animationCounter * this.delayBetweenAnimations;
397                this.animationCounter++;
398
399                target.style.transitionDelay = `${delay}ms`;
400                target.style.animationDelay = `${delay}ms`;
401
402                if (target.classList.contains('intersect-once')) {
403                  this.observer.unobserve(target);
404                }
405              }
406            } else {
407              target.setAttribute('no-intersect', '');
408              target.removeAttribute('data-animated');
409              target.style.transitionDelay = '';
410              target.style.animationDelay = '';
411
412              this.animationCounter = 0;
413            }
414          });
415        });
416      };
417
418      this.observer = new IntersectionObserver(callback.bind(this), { threshold: [0, 0.25, 0.5, 0.99] });
419
420      elements.forEach((el) => {
421        this.observer.observe(el);
422      });
423    },
424  };
425
426  Observer.start();
427
428  document.addEventListener('astro:after-swap', () => {
429    Observer.start();
430  });
431</script>
431 <!-- Klaviyo Onsite Tracking --> 
431<script async src="https://static.klaviyo.com/onsite/js/klaviyo.js?company_id=VNZFNF"></script>
431 
431<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"40757b50c9ab4cd2ad615698257f0c1b","r":1,"spa":2}' crossorigin="anonymous"></script>
431
432</body> </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.