Inspiration

We want to travel abroad, but the language barrier scares us. If we go all that way, we want to speak to the people we meet in our own words, even just a little, instead of holding a translation app between us. But learning a language from scratch is something most of us never keep up.

What it does

TripReady is first aid for travel language, not fluency. It never promises you will "speak in a week"; it tells you honestly how far you will get before you leave.

  • Before the trip: Pick your language, your dates and the scenes you care about (stays, airport, transit, food, shopping, sights), then how many phrases a day you can keep up (3–30, about a minute each). TripReady builds a curriculum from the days you have left, ordered so your recall peaks on the day you actually need each phrase: airport phrases come the day before you fly. One day or thirty days, the plan fits you.
  • During the trip: On your departure date the app switches to on-the-trip mode. In on-the-trip mode, the home screen shows the phrases you are most likely to need, based on where you are. For example, near a café you see phrases for ordering food, and at the airport you see phrases for immigration. The scene is worked out on your phone, and your location never leaves the device.
  • Both sides of the conversation: Phrases you say are only half a conversation, so we also include what staff will ask you and how to answer. Numbers, times and prices are handled by a pointing chart.
  • Emergencies: A dedicated emergency section for things you cannot afford to be unable to say, such as asking where a hospital is or telling someone about an allergy.
  • Works with no signal: Audio is downloaded before you leave. After that, lessons, the phrasebook and scene detection all work offline, so there is no worry about roaming charges.
  • Three languages: Learn Japanese (703 phrases), English (573) or Korean (573), every phrase with native-speed and slow audio. The app itself can be used in English, Japanese or Korean.
  • Honest pricing: No subscription. Each language is a one-time purchase of $2.99, about the price of a cup of coffee. The first 18 phrases are free, and one purchase can be shared with up to 3 travel companions at no extra cost.

How we built it

  • Near-zero running cost: No AI and no metered APIs are called at runtime. Phrase selection is rule-based and all learning runs on the device. Our only backend services are RevenueCat and Cloudflare: RevenueCat manages purchases, and Cloudflare delivers map data, audio and content and keeps track of companion seats. This is what makes a $2.99 one-time price sustainable.
  • Lightweight location with no network: Instead of putting a full world map on the phone, we keep only a 100 m grid and the scene in each cell, at 4 bytes per cell, which puts the whole world under 100 MB. Airports and transport ship with the app; data for other scenes can be downloaded before the trip. Location uses OS geofences only, never continuous GPS, so battery use stays low.
  • A robust evaluator for content: Every phrase is reviewed by an LLM evaluator in three rounds. Gemini Pro and Gemini Flash each check all phrases from six angles (culture, category, grammar, reading, conversation, spelling), and Claude rules where they disagree. For Japanese, people also checked every evaluation result, and we used that to improve the evaluator. LLMs are used only when we build the content, never inside the app.
  • Stack: Expo / React Native (TypeScript), RevenueCat for purchases and entitlements, on-device SQLite, Google Cloud Text-to-Speech for phrase audio, Cloudflare R2 / Workers / D1, Sign in with Apple and Google Sign-In for sharing, and POI (point of interest) data for worldwide location.

Challenges we ran into

  • Offline use vs. data size: Removing the need for a connection made the map data balloon. Our own 100 m grid data structure solved it.
  • Judging cultural expressions: Phrases about things like shrines or anime cannot be judged properly by anyone but native speakers, so for this release we decided to leave cultural expressions out of the English and Korean courses.
  • App Review: Our first companion-sharing design used invite codes, and Apple rejected it twice under Guideline 3.1.1. We rebuilt it around sign-in and an invite link, with our server granting access as a RevenueCat entitlement only after a real In-App Purchase. Version 1.1 was then rejected once more because we had hidden the "Restore purchases" button; we put it back on the trip setup screen, and 1.1 went live on both stores.

Accomplishments that we're proud of

  • Location logic backed by field testing: To measure how well scene detection works, we built our own benchmark from user stories at 100 real places. For every user story a person wrote the correct answer, and we ran an evaluate-and-improve cycle to tune parameters such as the detection radius and display priority. The benchmark score rose from 55 to 71.
  • Feedback from a real classroom: Early in development we reached out to local governments in Japan and had the app tried in an actual Japanese class, which gave us a feedback cycle with real learners.
  • A design that spreads through real use: One paid account can share its paid features with up to 3 people, so the user base can grow without ad spend. When someone who was invited later travels to a place with a different language, they buy that language and invite others in turn, so the number of people using the app grows naturally.

What we learned

  • How to run team development with vibe coding: One person owns the main stream and builds the app, server and database end to end. The other members take tasks that are highly independent, and the main role rotates every 2–3 days. Sharing context through handoff documents let us work efficiently while avoiding duplicate work and merge conflicts, and rotating the role also kept us from running out of AI tokens.
  • Meeting beginners where they are: Testing with family showed us we need a beginner mode that starts from very simple basic phrases.
  • Speed matters: For people in a tight spot, quick access is essential, so we added favorites (starred phrases) and a ready-to-use emergency section.

What's next for TripReady

  • Toward a full edition: We want to bring back cultural expressions by working with companies that can invest or partner with us, and by setting up review by native speakers.
  • More languages: Every new language is a new market, and our content pipeline lets us add languages none of us speak.
  • Polishing features: A beginner mode and finer level settings so beginners don't give up.

Built With

Share this project:

Updates

posted an update —

v1.2.0: every phrase re-reviewed, with new audio

TripReady 1.2.0 has been submitted to the App Store and Google Play.

Learning content update (Japanese, English and Korean)

  • We rebuilt how phrases are evaluated. Fixed rules check each phrase first, then a dedicated judge model scores it on separate criteria: would a traveler actually say it, is it too specific, does it overlap with another phrase, is the translation ambiguous. There is no majority vote, so a single valid objection is never outvoted.
  • We tested it on 181 phrases our team had already fixed by hand. The new evaluator caught 69% of them; the old one caught almost none.
  • Flagged phrases were refined through an automatic loop of rewriting and re-judging. Only the decisions about what to teach were made by a person.
  • Every changed phrase has new audio. If a phrase was merged or removed, your stars and learning progress carry over to the phrase that replaced it.

News on the home screen

  • We added a bell that shows a red dot when there is something unread, and a list of announcements. We will let you know here whenever phrases change.

Submission history