GoKC
Kansas City for visitors and locals. 750+ places, 8 languages, native iOS + Android.
A tourism app for the city of Kansas City. 750+ curated places, 8 languages, native iOS and Android, free. Built in 30 days ahead of the 2026 World Cup and featured by KCTV5 and Fox4 KC. The live demo of NativeBridge — the cross-platform conversion tool I built to make this kind of solo cross-platform shipping possible.
Origin
Most cities don't have a single great tourism app — they have ten mediocre ones. KC needed one before the 2026 World Cup brought visitors from every continent. Building it natively on two platforms would normally take a 3-engineer team a quarter. With NativeBridge, one engineer shipped it in 30 days — and the local news noticed.
What it does
750+ curated places
Restaurants, museums, parks, breweries, sports venues, hidden gems. Curated, not scraped. Authored once, emitted to both platforms via the build pipeline.
8 languages, all native
English, Japanese, Brazilian Portuguese, French, Spanish, German, Korean, Arabic. Chosen for actual KC visitor traffic, not as a checkbox.
Today
What's happening in KC today. Live event awareness.
Map + Plan
Browse places by neighborhood. Build a custom day or itinerary.
Transit
Get there — public transit, walking, rideshare guidance.
GameDay mode
Special-purpose mode for KC sporting events (Chiefs, Royals, Sporting KC) — game-day routing, parking, food spots near stadiums.
Native on both platforms
iOS in SwiftUI. Android in Jetpack Compose. Not React Native, not Flutter — fully native UI on each platform, with feature parity maintained by codegen.
Localized seed content, not just UI strings
The 750+ KC places aren't just translated UI labels — the place data itself (names, descriptions, neighborhood blurbs) is localized. SeedLocalization.kt on Android and the matching Swift Services pipeline emit place content per language at build time, so a Japanese visitor reads the same content quality a local would.
Engineering
The cross-platform leverage move
GoKC iOS and GoKC Android live in the same parent folder as NativeBridge. The 5 JavaScript files at that root (convert-gokc.js, postprocess-gokc.js, convert-seed-content.js, convert-xcstrings.js, sync-strings.js) are the GoKC-specific conversion driver. When a string changes in one platform, sync-strings.js propagates it to the other. The codegen and localization pipeline is automated, not manually duplicated.
Build-pipeline localization
Apple's modern .xcstrings format on iOS converts to Android-compatible strings.xml automatically. No duplicate localization spreadsheets. Strings are authored once, translated once, emitted to both platforms via the build pipeline.
Generic engine + project-specific overlay
Generic NativeBridge handles 'any Swift file → any Kotlin file.' Project-specific decisions (which iOS framework maps to which Android library, asset re-naming for Compose, file boundary merges) live in postprocess-gokc.js. Clean separation between generic tool and project overlay — the same pattern any seasoned platform engineer recognizes.
Validated by local press
KCTV5 and Fox4 KC both ran segments on GoKC ahead of the 2026 World Cup — independent confirmation that a free, no-account, no-ads, no-data-collection app, shipped natively on both platforms by one engineer in 30 days, was newsworthy. The hard part of solo shipping isn't the code; it's whether anyone notices. The local news did.
Stack
- Swift / SwiftUI
- Kotlin / Jetpack Compose
- NativeBridge (custom)
- JavaScript (build pipeline)
- Vercel (marketing site)