Offline emergency phrasebook. 50 safety-critical phrases in 20 languages. Free, public domain, no internet required.
Speak exists for a specific moment: you are in a situation where speaking matters, and the person in front of you does not share your language. A disaster responder meeting a survivor. A nurse and a patient's family. A refugee arriving somewhere new. A stranger handing you a child and trying to tell you something important.
You open Speak. You pick your language. You pick theirs. You tap a phrase. The screen fills with huge, high-contrast type in their language. You flip the phone and show them.
That's the entire product.
- 50 curated phrases across 6 categories: emergency, medical, safety and shelter, family and people, basic communication, directions and movement
- 20 languages covering the native tongues of roughly 5 billion people: English, Spanish, Mandarin Chinese, Hindi, Arabic, French, Bengali, Portuguese, Russian, Urdu, Indonesian, Swahili, German, Japanese, Vietnamese, Turkish, Filipino, Persian, Haitian Creole, Ukrainian
- Phonetic romanization for non-Latin scripts (pinyin, Hepburn, ALA-LC Arabic, Devanagari transliteration, Cyrillic romanization, etc.) so you can attempt to pronounce the phrase yourself
- Right-to-left layout for Arabic, Urdu, and Persian
- YES / NO big display — tap a giant green YES or red NO to fill the screen and answer a question without words
- Text-to-speech — if your phone has a voice installed for the target language, the speaker button reads the phrase aloud (uses the OS-level voice, works offline)
- Search all phrases by your language
- Favorites to pin the phrases you use most
- Your info — store your name and where you're from once, and templates like "My name is ___" and "I am from ___" fill themselves in
- Language swap — one tap reverses who speaks first
- Installable as a home-screen app (PWA) on any phone
- Full offline support via service worker. After first load, Speak never needs the internet again
- Zero accounts, zero tracking, zero analytics, zero third-party code
- Public domain (CC0) — use it, fork it, translate it, rebrand it, hand it to anyone
- Open the URL in any modern browser
- Select your language from the grid (native scripts shown)
- Tap the "Their language" slot and pick the language of the person you're talking to
- Tap any phrase to show it huge. Tap the speaker icon to have the phone say it aloud
- Tap "Install" when your browser offers, or add to home screen manually — after that, it works offline forever
If you're helping someone who doesn't speak your language, hand them your phone after tapping the swap arrow (⇄) so their language is on top, and they can tap a phrase to respond.
Press Ctrl+P or Cmd+P to print the phrase list. Useful for first-responder kits, go-bags, disaster-relief clipboards.
Four files. No build step. No database. No configuration.
speak/
├── index.html
├── sw.js
├── manifest.webmanifest
├── icon.svg
├── LICENSE
└── README.md
cd speak
git init
git add .
git commit -m "initial"
gh repo create speak-phrasebook --public --source . --push
gh repo edit --enable-pages --pages-branch mainShare the Pages URL. Done.
Drag-and-drop the folder into their dashboard. Get a permanent URL in 30 seconds.
Any static HTTP server works (nginx, Caddy, python -m http.server). HTTPS is required for the service worker and PWA install to function.
- Single HTML file, ~80 KB, containing all CSS, all JavaScript, and all 1,000 translations (50 phrases × 20 languages)
- Vanilla JS. No React, no build tools, no npm, no transpilation. Open it in a text editor, read the whole thing top to bottom
- Service worker (
sw.js) does cache-first offline: first load fetches everything, after that the app works forever without network - Web Speech API for text-to-speech. The app never uploads anything; synthesis happens entirely on-device using the OS voice
- localStorage for your language settings, favorites, name, and "from" field. Nothing leaves your phone
- CSS Grid and flexbox. No frameworks. Tested in Safari, Chrome, Firefox
- Right-to-left support via
dirattribute on the large text element - System fonts only, with a fallback stack that includes Noto Sans variants for CJK, Arabic, Bengali, Devanagari, and Thai scripts
This is CC0. Fork it without asking. But here's where the leverage is:
The phrase data structure in index.html is explicit and easy to extend. Each phrase is:
{id: 'need_help', c: 'emergency', t: {
en: ['I need help.'],
es: ['Necesito ayuda.'],
zh: ['我需要帮助。', 'wǒ xūyào bāngzhù'],
// ...
}}Add your language code to LANGUAGES (with rtl and tts fields), then add a new entry to every phrase. The highest-value additions right now: Korean, Thai, Polish, Italian, Amharic, Hausa, Yoruba, Nepali, Punjabi, Somali, Pashto, Tigrinya — especially the ones spoken by refugee populations and in disaster-prone regions that don't get good multilingual preparedness content.
Translations are in formal / polite register (usted, vous, Sie, polite Japanese, MSA Arabic, etc.). They were produced by a competent multilingual model but not yet audited by native speakers. For non-critical daily use they are fine. For life-or-death communication, a native speaker should audit your target language and file corrections.
If you audit a language, you only need to check 50 phrases. An hour's work per language. That hour could save a life.
The current 50 are deliberately minimal. Reasonable additions: allergen specifics, pronouns (I/you), more numbers, more body parts, weather warnings. Keep the set small enough that someone can tap through it all in under a minute in a panic.
- Don't add a backend. The whole point is that there is no server to trust, subpoena, hack, or shut down.
- Don't add accounts or analytics. Both break the "hand this phone to a stranger" use case.
- Don't add ads or tracking. Ever.
- Don't monetize. If you want to sell a product, build a different product.
- Don't add audio file attachments for pronunciation. It inflates the download 100x and most devices already have OS-level TTS. If a device doesn't, the romanization covers it.
- Translations are not audited by native speakers. See above. Use romanization and speaker playback as a cross-check, and prefer a human interpreter for anything life-critical whenever one is available.
- Text-to-speech quality varies wildly by device. iOS has good voices for most of the 20 languages; Android depends on what's installed; older phones may have nothing. The romanization is always there as a fallback.
- Limited phrase set. 50 phrases cannot cover a medical history, a legal situation, or a detailed conversation. It covers the basics that matter in the first five minutes.
- Regional variants are glossed over. Spanish is neutral Latin American, not Castilian. Arabic is MSA, not dialectal. Mandarin is simplified, not traditional. Portuguese is Brazilian, not European. These were deliberate single-variant choices to keep the set tractable.
Because when the network goes down, when the phone is handed between strangers, when someone is scared, when the paperwork is missing, when the interpreter is hours away, a pre-written phrase in the other person's language is sometimes the difference between a bad situation and a catastrophe. Getting that phrase onto any phone on Earth, for free, forever, is a one-time piece of work. This is that piece of work.
CC0 1.0 Universal (Public Domain Dedication). See LICENSE.
There are no restrictions, no attribution required, no warranty, no liability. Do what you want with it. The only thing the authors ask (not require) is that you don't attach tracking or monetization to it when you redistribute.
Speak was built as a sibling to Ready, an offline-first disaster preparedness PWA. Ready tells you what to do when disaster strikes. Speak lets you say it to someone who doesn't share your language. Both are public domain. Both work offline forever. Install both.