PageSourceSearch

https://mandarinmonkey.com/

html mandarinmonkey.com collected 2026-10-08 03:26:05 UTC 15,974 bytes, 325 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3 <head>
4  <meta charset="utf-8"/>
5  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
6  <!-- GA4 owns page views: one initial config hit plus Enhanced Measurement
7         history events for React Router navigation (push/replace/back/forward).
8         Keep "Page changes based on browser history events" enabled for this
9         stream. Do not add a second manual React page_view tracker. -->
10  
10<script>
11   (function () {
12        // Keep editor/preview visits out of the production stream.
13        if (!['mandarinmonkey.com', 'www.mandarinmonkey.com'].includes(window.location.hostname)) return;
14        if (window.__mandarinMonkeyGa4Loaded) return;
15        window.__mandarinMonkeyGa4Loaded = true;
16        window.dataLayer = window.dataLayer || [];
17        window.gtag = window.gtag || function () { window.dataLayer.push(arguments); };
18        window.gtag('js', new Date());
19        window.gtag('config', 'G-NL6S63BGZ2');
20        var tag = document.createElement('script');
21        tag.async = true;
22        tag.src = 'https://www.googletagmanager.com/gtag/js?id=G-NL6S63BGZ2';
23        document.head.appendChild(tag);
24      })();
25  </script>
25
26  <title>
27   Mandarin Monkey
28  </title>
29  <meta content="Your premier online academy for mastering Mandarin. Connect with expert native teachers for personalized 1-on-1 lessons, from casual conversation to business fluency. Enjoy flexible scheduling, a free trial lesson, and convenient online booking." name="description"/>
30  <meta content="index,follow,max-image-preview:large,max-snippet:-1,max-video-preview:-1" name="robots"/>
31  <meta content="index,follow,max-image-preview:large,max-snippet:-1,max-video-preview:-1" name="googlebot"/>
32  <link href="https://qtrypzzcjebvfcihiynt.supabase.co/storage/v1/object/public/base44-prod/public/2ced6e720_Artboard2.png" rel="icon" type="image/png"/>
33  <link href="/manifest.json" rel="manifest"/>
34  <meta content="Mandarin Monkey" property="og:site_name"/>
35  <meta content="website" property="og:type"/>
36  <meta content="Mandarin Monkey" property="og:title"/>
37  <meta content="Your premier online academy for mastering Mandarin. Connect with expert native teachers for personalized 1-on-1 lessons, from casual conversation to business fluency. Enjoy flexible scheduling, a free trial lesson, and convenient online booking." property="og:description"/>
38  <meta content="https://mandarinmonkey.com" property="og:url"/>
39  <meta content="https://media.base44.com/images/public/68aee747b9a60c284c81b286/ff1fdf7f1_MandarinMonkeyLogo.png/v1/fill/w_1200,h_630/ff1fdf7f1_MandarinMonkeyLogo.png" property="og:image"/>
40  <meta content="summary_large_image" name="twitter:card"/>
41  <meta content="Mandarin Monkey" name="twitter:title"/>
42  <meta content="Your premier online academy for mastering Mandarin. Connect with expert native teachers for personalized 1-on-1 lessons, from casual conversation to business fluency. Enjoy flexible scheduling, a free trial lesson, and convenient online booking." name="twitter:description"/>
43  <meta content="https://media.base44.com/images/public/68aee747b9a60c284c81b286/ff1fdf7f1_MandarinMonkeyLogo.png/v1/fill/w_1200,h_630/ff1fdf7f1_MandarinMonkeyLogo.png" name="twitter:image"/>
44  
44<script type="application/ld+json">
45   {
46        "@context": "https://schema.org",
47        "@graph": [
48          {
49            "@type": "Organization",
50            "@id": "https://www.mandarinmonkey.com/#organization",
51            "name": "Mandarin Monkey",
52            "url": "https://www.mandarinmonkey.com/",
53            "email": "[email protected]",
54            "description": "Online Mandarin language academy focused on practical conversation and real-life Mandarin."
55          },
56          {
57            "@type": "WebSite",
58            "@id": "https://www.mandarinmonkey.com/#website",
59            "url": "https://www.mandarinmonkey.com/",
60            "name": "Mandarin Monkey",
61            "publisher": { "@id": "https://www.mandarinmonkey.com/#organization" },
62            "inLanguage": "en"
63          }
64        ]
65      }
66  </script>
66
67  
67<script crossorigin="" src="/assets/index-CrpPsQa6.js" type="module">
68  </script>
68
69  <link crossorigin="" href="/assets/index-YuEQZCvM.css" rel="stylesheet"/>
70  
70<script type="module">
71   if (window.self === window.top) {
72  let lastPath = "";
73  function getPageNameFromPath(path) {
74    const segments = path.split("/").filter(Boolean);
75    return segments[0] || null;
76  }
77  function trackPageView() {
78    const path = window.location.pathname;
79    if (path === lastPath) return;
80    lastPath = path;
81    const pageName = getPageNameFromPath(path) || "home";
82    const appId = "68aee747b9a60c284c81b286";
83    if (!appId) return;
84    fetch(`/api/app-logs/${appId}/log-user-in-app/${pageName}`, {
85      method: "POST",
86    }).catch(() => {});
87  }
88  const originalPushState = history.pushState.bind(history);
89  history.pushState = function (...args) {
90    originalPushState(...args);
91    trackPageView();
92  };
93  const originalReplaceState = history.replaceState.bind(history);
94  history.replaceState = function (...args) {
95    originalReplaceState(...args);
96    trackPageView();
97  };
98  window.addEventListener("popstate", trackPageView);
99  trackPageView();
100}
101  </script>
101
102  <meta content="https://mandarinmonkey.com" name="twitter:url"/>
103  
103<script>
104   (function () {
105  var titles = {"/": "Mandarin Monkey", "/teachers": "Teachers | Mandarin Monkey", "/hangouts": "Hangouts | Mandarin Monkey", "/group-lessons": "Group Lessons | Mandarin Monkey", "/grouplessons": "Group Lessons | Mandarin Monkey", "/podcast": "Podcast | Mandarin Monkey", "/find-my-path": "Find My Path | Mandarin Monkey", "/update-name": "Update Name | Mandarin Monkey", "/learn": "Learn | Mandarin Monkey", "/referral": "Referral Claim | Mandarin Monkey", "/contact": "Contact | Mandarin Monkey", "/pricing": "Pricing | Mandarin Monkey", "/privacy-policy": "Privacy Policy | Mandarin Monkey", "/terms-of-service": "Terms Of Service | Mandarin Monkey", "/email-preferences": "Email Preferences | Mandarin Monkey", "/lessons": "Pricing | Mandarin Monkey", "/memberships": "Pricing | Mandarin Monkey", "/intensive-course": "Pricing | Mandarin Monkey", "/yt": "Yt | Mandarin Monkey", "/ig": "Ig | Mandarin Monkey", "/tt": "Tt | Mandarin Monkey", "/reddit": "Reddit | Mandarin Monkey", "/fb": "Fb | Mandarin Monkey", "/dashboard": "Role Redirect | Mandarin Monkey", "/admin-dashboard": "Admin Dashboard | Mandarin Monkey", "/admindashboard": "Admin Dashboard | Mandarin Monkey", "/teacher-dashboard": "Teacher Dashboard | Mandarin Monkey", "/teacherdashboard": "Teacher Dashboard | Mandarin Monkey", "/student-dashboard": "Student Dashboard | Mandarin Monkey", "/studentdashboard": "Student Dashboard | Mandarin Monkey", "/progresstracker": "Progress Tracker | Mandarin Monkey", "/progress-tracker": "Progress Tracker | Mandarin Monkey", "/booklesson": "Book Lesson | Mandarin Monkey", "/book-lesson": "Book Lesson | Mandarin Monkey", "/challengewall": "Challenge Wall | Mandarin Monkey", "/challenge-wall": "Challenge Wall | Mandarin Monkey", "/oauth/google-calendar-complete": "O Auth Google Calendar Complete | Mandarin Monkey", "/home": "Mandarin Monkey"};
106  // PascalCase boundaries -> "-", mirroring _PASCAL_BOUNDARY_RE without lookbehind
107  // (old Safari fails to PARSE a lookbehind, taking the whole script down).
108  var dashed = function (s) {
109    return s.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2");
110  };
111  var decode = function (s) {
112    // A %2F inside ONE segment must not become a structural separator: /blog/foo%2Fbar is a
113    // dynamic slug, and letting it split would match a static /blog/foo/bar and write ITS title.
114    try { var d = decodeURIComponent(s); return d.indexOf("/") < 0 ? d : s; } catch (e) { return s; }
115  };
116  var segments = function (path) { return path.split("/").filter(Boolean).map(decode); };
117  var norm = function (path) {
118    var parts = segments(path).map(function (s) { return dashed(s).toLowerCase(); });
119    return parts.length ? "/" + parts.join("/") : "/";
120  };
121  var lastPath = location.pathname, written = document.title, on = true;
122  var sync = function () {
123    // Path only: a hash/query change is the same page, and the SDK strips its own auth
124    // params with replaceState -- neither must clobber a server-rendered title in place.
125    if (!on || location.pathname === lastPath) return;
126    lastPath = location.pathname;
127    if (document.title !== written) { on = false; return; }
128    // Write ONLY a title the map proves. An unmapped path is a dynamic route (/blog/:slug) the
129    // map cannot carry, and writing a placeholder there is destructive, not merely vague: the
130    // prerender worker runs no setUserAgent, so its capture browser reads as human and executes
131    // this script, and coordinator.js's settle wait explicitly tolerates a full navigation --
132    // a redirect landing on an unmapped path would bake the placeholder into the stored
133    // snapshot. Leaving the title alone degrades to today's behavior instead.
134    // Exact lookup only. A dash-stripped retry here would let a genuinely different /set-up
135    // claim /setup: the map carries a dash-free key only where a PascalCase boundary put the
136    // dashes there, and the client cannot tell the two apart. The map emits every reachable
137    // shape per segment instead (_client_url_variants).
138    var title = titles[norm(location.pathname)];
139    if (title === undefined) return;
140    document.title = title;
141    // Re-read: the setter stores verbatim but the getter strips and collapses whitespace, so
142    // keeping the assigned string would make the next sync() read our own write as the app's.
143    written = document.title;
144  };
145  var wrap = function (fn) {
146    // The history entry is already pushed by the time sync() runs, so a throw here would
147    // surface inside the host app's router and break navigation. This is injected into apps
148    // we cannot test, so it swallows rather than trusting the trace.
149    return function () {
150      var r = fn.apply(this, arguments);
151      try { sync(); } catch (e) {}
152      return r;
153    };
154  };
155  history.pushState = wrap(history.pushState);
156  history.replaceState = wrap(history.replaceState);
157  window.addEventListener("popstate", sync);
158})();
159  </script>
159
160  <meta content="yes" name="mobile-web-app-capable"/>
161  <meta content="black" name="apple-mobile-web-app-status-bar-style"/>
162  <meta content="Mandarin Monkey" name="apple-mobile-web-app-title"/>
163  <link href="https://mandarinmonkey.com" rel="canonical"/>
164  
164<script data-seo-source="builder" type="application/ld+json">
165   {"name": "Mandarin Monkey", "@context": "https://schema.org", "@type": "WebSite", "url": "https://mandarinmonkey.com"}
166  </script>
166
167  
167<script data-seo-source="builder" type="application/ld+json">
168   {"name": "Mandarin Monkey", "logo": "https://qtrypzzcjebvfcihiynt.supabase.co/storage/v1/object/public/base44-prod/public/b1aff9ed1_logo.png", "@context": "https://schema.org", "@type": "Organization", "url": "https://mandarinmonkey.com"}
169  </script>
169
170 </head>
171 <body>
172  <div id="root">
173   <div data-seo-source="builder" id="seo-snapshot" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;">
174    <main>
175     <header>
176      <h1>
177       Mandarin Monkey
178      </h1>
179      <p>
180       Your premier online academy for mastering Mandarin. Connect with expert native teachers for personalized 1-on-1 lessons, from casual conversation to business fluency. Enjoy flexible scheduling, a free trial lesson, and convenient online booking.
181      </p>
182     </header>
183     <nav aria-label="Pages">
184      <h2>
185       Pages
186      </h2>
187      <ul>
188       <li>
189        <a href="/Teachers">
190         Teachers
191        </a>
192        — Teachers on Mandarin Monkey. Your premier online academy for mastering Mandarin.
193       </li>
194       <li>
195        <a href="/Hangouts">
196         Hangouts
197        </a>
198        — Hangouts on Mandarin Monkey. Your premier online academy for mastering Mandarin.
199       </li>
200       <li>
201        <a href="/GroupLessons">
202         Group Lessons
203        </a>
204        — Group Lessons on Mandarin Monkey. Your premier online academy for mastering Mandarin.
205       </li>
206       <li>
207        <a href="/podcast">
208         Podcast
209        </a>
210        — Podcast on Mandarin Monkey. Your premier online academy for mastering Mandarin.
211       </li>
212       <li>
213        <a href="/find-my-path">
214         Find My Path
215        </a>
216        — Find My Path on Mandarin Monkey. Your premier online academy for mastering Mandarin.
217       </li>
218       <li>
219        <a href="/update-name">
220         Update Name
221        </a>
222        — Update Name on Mandarin Monkey. Your premier online academy for mastering Mandarin.
223       </li>
224       <li>
225        <a href="/learn">
226         Learn
227        </a>
228        — Learn on Mandarin Monkey. Your premier online academy for mastering Mandarin.
229       </li>
230       <li>
231        <a href="/referral">
232         Referral Claim
233        </a>
234        — Referral Claim on Mandarin Monkey. Your premier online academy for mastering Mandarin.
235       </li>
236       <li>
237        <a href="/Contact">
238         Contact
239        </a>
240        — Contact on Mandarin Monkey. Your premier online academy for mastering Mandarin.
241       </li>
242       <li>
243        <a href="/Pricing">
244         Pricing
245        </a>
246        — Pricing on Mandarin Monkey. Your premier online academy for mastering Mandarin.
247       </li>
248       <li>
249        <a href="/privacy-policy">
250         Privacy Policy
251        </a>
252        — Privacy Policy on Mandarin Monkey. Your premier online academy for mastering Mandarin.
253       </li>
254       <li>
255        <a href="/terms-of-service">
256         Terms Of Service
257        </a>
258        — Terms Of Service on Mandarin Monkey. Your premier online academy for mastering Mandarin.
259       </li>
260       <li>
261        <a href="/email-preferences">
262         Email Preferences
263        </a>
264        — Email Preferences on Mandarin Monkey. Your premier online academy for mastering Mandarin.
265       </li>
266       <li>
267        <a href="/yt">
268         Vanity Free Lesson Redirect
269        </a>
270       </li>
271       <li>
272        <a href="/dashboard">
273         Role Redirect
274        </a>
275        — Role Redirect on Mandarin Monkey. Your premier online academy for mastering Mandarin.
276       </li>
277       <li>
278        <a href="/AdminDashboard">
279         Admin Dashboard
280        </a>
281        — Admin Dashboard on Mandarin Monkey. Your premier online academy for mastering Mandarin.
282       </li>
283       <li>
284        <a href="/TeacherDashboard">
285         Teacher Dashboard
286        </a>
287        — Teacher Dashboard on Mandarin Monkey. Your premier online academy for mastering Mandarin.
288       </li>
289       <li>
290        <a href="/StudentDashboard">
291         Student Dashboard
292        </a>
293        — Student Dashboard on Mandarin Monkey. Your premier online academy for mastering Mandarin.
294       </li>
295       <li>
296        <a href="/ProgressTracker">
297         Progress Tracker
298        </a>
299        — Progress Tracker on Mandarin Monkey. Your premier online academy for mastering Mandarin.
300       </li>
301       <li>
302        <a href="/BookLesson">
303         Book Lesson
304        </a>
305        — Book Lesson on Mandarin Monkey. Your premier online academy for mastering Mandarin.
306       </li>
307       <li>
308        <a href="/ChallengeWall">
309         Challenge Wall
310        </a>
311        — Challenge Wall on Mandarin Monkey. Your premier online academy for mastering Mandarin.
312       </li>
313       <li>
314        <a href="/oauth/google-calendar-complete">
315         O Auth Google Calendar Complete
316        </a>
317        — O Auth Google Calendar Complete on Mandarin Monkey. Your premier online academy for mastering Mandarin.
318       </li>
319      </ul>
320     </nav>
321    </main>
322   </div>
323  </div>
324 </body>
325</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.