1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/assets/index-Cg9F3pp0.css" data-precedence="default"/>
vendor: 72 bytes, line 1
1<script id="ga-loader" src="https://www.googletagmanager.com/gtag/js?id=
1G-HM4W99YV18
vendor: 20 bytes, line 1
1" async=""></script>
1<script id="plausible-loader" data-domain="tomolingo.org" src="https://stat.tomolingo.org/js/pa-8faiEwTnkh_LoatVJW7XW.js" defer="" async=""></script>
1<title>About TomoLingo â TomoLingo</title><meta property="og:type" content="website"/><meta property="og:site_name" content="TomoLingo"/><meta property="og:title" content="TomoLingo"/><meta property="og:description" content="Free Tomodachi Life lingo generator â instantly create greetings, catchphrases, and mood phrases for your Miis."/><meta property="og:url" content="https://tomolingo.org"/><meta property="og:image" content="https://tomolingo.org/imgs/og.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="TomoLingo"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="TomoLingo"/><meta name="twitter:description" content="Free Tomodachi Life lingo generator â instantly create greetings, catchphrases, and mood phrases for your Miis."/><meta name="twitter:image" content="https://tomolingo.org/imgs/og.png"/><meta name="description" content="Who makes TomoLingo, why it exists, and how the phrase library is built."/><link rel="modulepreload" href="/assets/index-DIoMQguZ.js"/><link rel="modulepreload" href="/assets/utils-CEi7x_tP.js"/><link rel="modulepreload" href="/assets/button-P0gs9PeW.js"/><link rel="modulepreload" href="/assets/detectBrowser-B05CIKXZ.js"/><link rel="modulepreload" href="/assets/createLucideIcon-DiGt6PTD.js"/><link rel="modulepreload" href="/assets/react-dom-DbhVU44O.js"/><link rel="modulepreload" href="/assets/route-DkQLcAfe.js"/><link rel="modulepreload" href="/assets/mdx-components-Bzf4hjr9.js"/><link rel="icon" href="/favicon.png" type="image/png"/><link rel="apple-touch-icon" href="/favicon.png"/><link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="/assets/baloo-2-latin-wght-normal-B_TVFhwJ.woff2"/><link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="/assets/nunito-latin-wght-normal-BzFMHfZw.woff2"/><link rel="canonical" href="https://tomolingo.org/about"/><link rel="alternate" hrefLang="en" href="https://tomolingo.org/about"/><link rel="alternate" hrefLang="zh" href="https://tomolingo.org/zh/about"/><link rel="alternate" hrefLang="x-default" href="https://tomolingo.org/about"/></head><body class="font-sans antialiased">
1<script>((e, i, s, u, m, a, l, h) => { 2 let d = document.documentElement, w = ["light", "dark"]; 3 function p(n) { 4 (Array.isArray(e) ? e : [e]).forEach((y) => { 5 let k = y === "class", S = k && a ? m.map((f) => a[f] || f) : m; 6 k ? (d.classList.remove(...S), d.classList.add(a && a[n] ? a[n] : n)) : d.setAttribute(y, n); 7 }), R(n); 8 } 9 function R(n) { 10 h && w.includes(n) && (d.style.colorScheme = n); 11 } 12 function c() { 13 return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; 14 } 15 if (u) p(u); 16 else try { 17 let n = localStorage.getItem(i) || s; 18 p(l && n === "system" ? c() : n); 19 } catch (n) {} 20})("class","theme","system",null,["light","dark"],null,true,true)</script>
20<!--$--><div class="bg-background min-h-screen"><div class="mx-auto max-w-3xl px-6 pt-8 md:px-8"><a href="/" class="text-muted-foreground hover:text-foreground inline-flex items-center gap-2 text-sm font-medium transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left size-4" aria-hidden="true"><path d="m12 19-7-7 7-7"></path><path d="M19 12H5"></path></svg>Back to home</a></div><div class="mx-auto max-w-3xl px-6 pt-6 pb-12 md:px-8 md:pt-8 md:pb-16"><article><header class="border-border mb-6 border-b pb-5"><h1 class="text-foreground text-3xl font-semibold tracking-tight md:text-4xl">About TomoLingo</h1><p class="text-muted-foreground mt-2 text-sm">Who makes TomoLingo, why it exists, and how the phrase library is built.</p><p class="text-muted-foreground mt-2 text-xs">Last updated<!-- -->: <!-- -->2026-07-06</p></header><div class="text-foreground/90 text-[15px] leading-7"><h2 class="text-foreground mt-6 mb-2 text-lg font-semibold tracking-tight md:text-xl">Why This Exists</h2> 21<p class="text-foreground/90 mt-2 leading-7">Anyone who has played Tomodachi Life knows the moment: a Mii walks up, asks for a new catchphrase or greeting, and your mind goes completely blank. You type "hi" for the fourth time and feel bad about it. TomoLingo exists so that moment never happens again â open the generator, roll a batch of ideas, retype the one that fits, get back to your island.</p> 22<h2 class="text-foreground mt-6 mb-2 text-lg font-semibold tracking-tight md:text-xl">Who Makes It</h2> 23<p class="text-foreground/90 mt-2 leading-7">TomoLingo is an independent fan project built and maintained by a solo developer who plays the games. It is not affiliated with, endorsed by, or sponsored by Nintendo â Tomodachi Life and Mii are trademarks of Nintendo. We just love the game.</p> 24<h2 class="text-foreground mt-6 mb-2 text-lg font-semibold tracking-tight md:text-xl">How the Phrase Library Is Built</h2> 25<p class="text-foreground/90 mt-2 leading-7">Every phrase in the library (~1,800 of them) is written for this site â short enough to retype on a 3DS or Switch, tagged by vibe (cute, chaotic, cozy, meme, and more), and sorted by the in-game prompt it fits: greetings, catchphrases, mood lines, level-up messages, and Island Lingo topics for Tomodachi Life: Living the Dream. Safe Mode, on by default, keeps everything family-friendly.</p> 26<h2 class="text-foreground mt-6 mb-2 text-lg font-semibold tracking-tight md:text-xl">Privacy by Design</h2> 27<p class="text-foreground/90 mt-2 leading-7">The generator runs entirely in your browser. No account, no upload, no tracking of what you generate. See the <a href="/privacy-policy">Privacy Policy</a> for the full picture.</p> 28<h2 class="text-foreground mt-6 mb-2 text-lg font-semibold tracking-tight md:text-xl">Get in Touch</h2> 29<p class="text-foreground/90 mt-2 leading-7">Found a bug, want a new vibe category, or have a phrase idea? Email <a href="mailto:[email protected]">[email protected]</a> â suggestions genuinely shape the library.</p></div></article></div></div>
29<script>(function(a,f){let l;try{l=JSON.parse(sessionStorage.getItem(a)||"{}")}catch{return}const n=l?.[f||history.state?.__TSR_key];let c=!1;for(const t in n){const e=n[t],o=e?.scrollX,s=e?.scrollY;if(Number.isFinite(o)&&Number.isFinite(s)){if(t==="window")scrollTo(o,s),c=!0;else if(t)try{const r=document.querySelector(t);r&&(r.scrollLeft=o,r.scrollTop=s)}catch{}}}if(c)return;const i=location.hash.slice(1);if(i){const t=history.state?.__hashScrollIntoViewOptions??!0;if(t){const e=document.getElementById(i);e&&e.scrollIntoView(t)}return}scrollTo(0,0)})("tsr-scroll-restoration-v1_3");document.currentScript.remove()</script>
29<!--/$--><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section>
29<script id="ga-init" async="">
vendor: 118 bytes, line 29
29window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','
29G-HM4W99YV18
vendor: 3 bytes, line 29
29');
29</script>
29<script id="plausible-init" async="">window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};plausible.init()</script>
29<script class="$tsr" id="$tsr-stream-barrier">(self.$R=self.$R||{})["tsr"]=[];self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){if(this.hydrated&&this.streamEnded){const e=()=>{self.$_TSR?.hydrated&&self.$_TSR?.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e,{once:!0}):e()}},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]};$_TSR.router=($R=>$R[0]={manifest:$R[1]={routes:$R[2]={__root__:$R[3]={preloads:$R[4]=["/assets/index-DIoMQguZ.js","/assets/utils-CEi7x_tP.js","/assets/button-P0gs9PeW.js","/assets/detectBrowser-B05CIKXZ.js","/assets/createLucideIcon-DiGt6PTD.js","/assets/react-dom-DbhVU44O.js"],scripts:$R[5]=[$R[6]={attrs:$R[7]={type:"module",async:!0,src:"/assets/index-DIoMQguZ.js"}}],css:$R[8]=["/assets/index-Cg9F3pp0.css"]},"/(pages)":$R[9]={preloads:$R[10]=["/assets/route-DkQLcAfe.js","/assets/mdx-components-Bzf4hjr9.js"]}}},matches:$R[11]=[$R[12]={i:"__root__�",u:1791417682907,s:"success",l:$R[13]={gaId:"G-HM4W99YV18",plausibleDomain:"tomolingo.org",plausibleSrc:"https://stat.tomolingo.org/js/pa-8faiEwTnkh_LoatVJW7XW.js",crispWebsiteId:"",tawkPropertyId:"",tawkWidgetId:""},ssr:!0},$R[14]={i:"�(pages)�",u:1791417682907,s:"success",ssr:!0},$R[15]={i:"�(pages)�about�about",u:1791417682907,s:"success",l:$R[16]={meta:$R[17]={title:"About TomoLingo",description:"Who makes TomoLingo, why it exists, and how the phrase library is built.",updated_at:"2026-07-06"},slug:"about",locale:"en"},ssr:!0}],lastMatchId:"�(pages)�about�about"})($R["tsr"]);$_TSR.e();document.currentScript.remove()</script>
29<script type="module" async="" src="/assets/index-DIoMQguZ.js"></script>
29<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"5c1df31b67fc42e8abf4ddbf1ec83757","r":1,"spa":2}' crossorigin="anonymous"></script>
29 30</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.