Three Weeks in China: What I Didn't Expect, What Broke, and What I Built
An indie dev's honest account of three weeks in China, the friction nobody warned me about, and the travel app we built before and during the trip.
The first thing that went wrong was the payment.
Noodle place in Chengdu, maybe four days in. Plastic stools, laminated menu, small order. Maybe 12 yuan. I held out my card. She shook her head. Tried a different card. Same result. The guy behind me in line stayed patient for about as long as you’d expect.
I’d done the research before I left. Knew WeChat Pay and Alipay ran basically everything. Had linked my international card to both apps weeks before I flew. The problem turned out to be that her QR code was a personal collection code, not a merchant terminal, and those process foreign cards differently. My card declined on the merchant side, not mine. Ended up paying with airport cash and spent the next hour in a tea shop reading about why this still happens in 2025.
That’s the whole trip in miniature, really. Not disasters. Just friction. The gap between “I did my research” and “I understand what’s actually happening.”
How I ended up there with a half-built app
Before I flew, I’d been doing serious pre-trip research for about two months. The kind where you end up in Reddit threads from 2019 trying to figure out which VPN actually works now, whether eSIMs are worth it, how foreigners can link to Alipay these days. Somewhere in that rabbit hole I started building a prep checklist in Notion, then decided it should probably be an app, then just started building one.
My co-builder is Chinese, has been through the “explain China to confused foreigners” experience more times than she’d like, and took on the parts of the project I genuinely couldn’t do. The dish database especially. Chinese menu names are often completely unrelated to what the dish actually contains, and she built the database from scratch, including the cultural context and the allergen mapping. That work is the reason the food features aren’t just another bad Google Translate wrapper. She also handled all the Chinese copy throughout the app and anything that required knowing the language from the inside rather than from a translation table.
That same work now lives in a public Chinese Dish Dictionary here on the site, so you can search dish names without opening the app first.
We had a working prototype before I left. The trip was the real-world test.
A lot was wrong, as it turned out.
Beijing was fine, until it wasn’t
The tourist infrastructure in Beijing is solid. Subway signage is bilingual, the major sites have enough English that you can navigate, every ticket counter worker has fielded confused foreigners before. For the first couple days I felt pretty competent.
Then I wandered off the tourist path into a side street in Dongcheng where a restaurant had its menu written in characters on a board. No photos, no English, nothing. I pulled out my phone to test the OCR we’d built. It handled the printed board okay. Struggled badly with the handwritten specials taped to the wall next to it.
That’s still a real limitation. Printed menus work reasonably well. Handwritten ones are genuinely hard, and a lot of the best local spots still write their specials by hand. The dish that came out wasn’t exactly what I’d expected. It wasn’t bad, just unexpected. There are worse outcomes from a translation miss.
What riding taxis is actually like
DiDi worked fine for most of the trip. But sometimes you need a regular taxi, especially at train station exits where DiDi pickups are chaotic and you just want to get in a car and go.
My Mandarin is essentially zero. What saved me multiple times was holding my phone up to show the driver my hotel’s address in large Chinese characters. At some point I noticed that tilting the phone to landscape made the text bigger, and drivers visibly relaxed when they could read it easily instead of squinting. That became a feature called Driver Mode, which sounds fancier than it is. It’s just landscape view with oversized characters. But the difference in driver reaction was real enough that it stayed.
One ride in Xi’an, my hotel was down a street blocked for construction and the driver needed to understand where to actually drop me off. That conversation, conducted through translated phrases on the screen and a lot of pointing, took about six minutes. We got there. After the trip I added more situation phrases.
Xi’an and the actual food problem
Xi’an is where menu translation really mattered. The Muslim Quarter is one of the best eating experiences I’ve had anywhere, and also navigable-by-pointing at most of the main stalls since everything’s visible and the vendors are used to tourists. Two streets over you’re in sit-down places with menus that are just columns of characters, no photos, no hint of what you’re ordering.
My co-builder’s dish database handles a lot of that. Not perfectly. Chinese food is enormous and deeply regional, and there are dishes specific to Shaanxi that don’t show up in a Beijing-focused database. There are 1,766 dishes in the full version right now, which sounds comprehensive until you’re at a small restaurant in Xi’an where half the items are regional things we haven’t added yet. Still expanding. Probably always will be.
The allergen flagging is the part I feel most confident about. Getting that wrong because of a translation gap is a genuinely bad outcome, and she took it seriously. If someone has a nut allergy or doesn’t eat pork, that information has to be right.
One dish I’d never encountered before came out at a place near the Bell Tower that I’d ordered by pointing. Turned out to be liangpi, cold skin noodles with chili oil and sharp vinegar. One of the better meals of the trip. The app translated it but also explained what it actually was, which is the part a literal character translation always misses.
Chengdu, week three
By Chengdu I’d relaxed. Not because I’d figured everything out, more because I’d made enough mistakes that I stopped expecting to. You stop holding your phone up anxiously at every sign and start just walking around.
The AQI widget got real use in Chengdu. I’d been checking it casually in Beijing, but a few days there the air quality was high enough that it actually changed what I wanted to do. Small thing, but having it on the same screen as the weather without switching apps was just convenient.
One evening I got turned around badly enough that I wasn’t sure which neighborhood I was in. Not dangerous, just disoriented. I’d been wandering through street food stalls and lost track of where I’d come from. Opened the app, found my hotel’s address card, tapped the navigation button. Done. When you’re tired and slightly lost in the dark, that kind of thing matters more than it would at 2pm.
The thing that almost went wrong
About two weeks in, I dropped my phone down the gap between a toilet and a wall in a train station restroom. The phone was fine. But for about three minutes I thought it was gone and ran through what I’d actually do: didn’t have my hotel address memorized. Emergency contacts were in the phone. My country’s embassy address was somewhere in my research notes, which were also in the phone.
Nothing happened. Found the phone, it was fine. But those three minutes reframed how I’d been thinking about the emergency section of the app. I’d built it as a kind of checkbox exercise, something to include because it seemed responsible. After that I took it more seriously.
The offline mode for emergency contacts, emergency numbers, and basic phrases isn’t a nice-to-have. If your phone works but there’s no signal, or if your phone is damaged and someone else needs to find your information, those things need to work without internet. That section got rebuilt after I got home.
So here’s what we built
At this point you’ve been through enough of the trip to understand why most of the features exist.
The Notion checklist I’d started became a 28-step checklist in the app. It adapts to your arrival date and trip type, sorts by urgency, and flags blocking dependencies. VPN shows up before payment apps because you can’t set up WeChat Pay from inside China if the App Store is blocked. A home screen widget shows checklist progress without opening the app, which is useful when you’re in pre-trip panic mode and just want to see the number go down.
Menu translation uses photo OCR against the dish database, with allergen flags. Free version covers 158 dishes, the pro unlock adds the full 1,766. The explanations are contextual, not literal. “Husband and wife beef slices” is a real dish, it’s good, it contains neither husband nor wife, and that context is what the difference between useful and useless looks like.
Show-cards cover standard situations: taxi directions, hotel check-in, restaurant requests, medical and emergency phrases. All work offline. Voice translation goes both directions with playback. Address cards have one-tap Apple Maps navigation.
The emergency hub has direct-dial buttons for 110, 120, 119, and 122, plus saved slots for embassy, hotel, and insurance contacts. The lost passport section is a step-by-step guide for what to actually do, because when you need that information you really don’t want to be Googling it.
No login, no account, no tracking. Free to download. The pro unlock is $5.99 one-time and covers the bigger dish dictionary, more address cards, expanded emergency phrases, lock screen reminders, and backup/export.
The app is published under my co-builder’s developer account. She built the parts that make the Chinese-facing features actually work. That seemed like the right call.
What it still doesn’t do well
Handwritten menus are hard. The failure rate on certain handwriting styles is still higher than I want. Trendy restaurants with intentionally weird display fonts are a problem too.
The dish database has real gaps for hyper-regional food. We know roughly where they are and we’re filling them, but Chinese cuisine is genuinely massive.
Offline mode occasionally has sync issues if the database updates while connectivity drops mid-sync. Haven’t fully solved that yet.
If you’re planning a trip
The app is called China Ready Travel and it’s on the App Store. Free to download, $5.99 to unlock everything. If you’re going in the next few months, the checklist alone is probably worth a look.
What I want to build next is better regional coverage, starting with Sichuan and Cantonese cuisine since those have the biggest gaps right now. There’s a version of this with restaurant saving and sharing that I’ve been thinking about since week three, when I had a running list of places I wanted to tell people about and no good way to do it. I’ll get to that eventually.
If you’ve been to China recently and hit something the app got wrong or missed entirely, I’d genuinely like to know. There’s a feedback button in the app, or you can email me directly. Building something useful means knowing where it fails, and travelers who’ve actually been there are more useful for that than any amount of desk research.
Related
- Visa or visa-free? Read both: Getting a China Tourist Visa and China’s 240-Hour Visa-Free Transit
- The payment mess in detail: How to Pay in China as a Foreigner
- What to do about food: Ordering Food in China Without Speaking the Language
- Look up dishes before you go: Chinese Dish Dictionary — 2,000+ Dishes Translated
- Getting from the airport to your hotel: The China Airport Arrival Checklist