Case study
FreshToGo 鮮款款
Live on the App Store and Google Play
Helping people walk into the good shop they pass every day.
FreshToGo is an app for independent food shops in Taiwan. Shops put together a FreshToGo bag (鮮款包) of today’s bread, pastries, bento or deli dishes, with the contents kept a surprise and the price below what the items normally cost. People reserve a bag in the app, then pick it up and pay at the shop. We built the whole product in-house.
- We built
- iOS and Android app, backend, admin dashboard, marketing website
- In the app
- A shopper side and a shop side, 41 screens, one codebase
- Release
- Version 1.5, still shipping
- Launch area
- Around MRT Xinpu Station, New Taipei
How a FreshToGo bag works
Real FreshToGo app cards (Chinese UI) and website; the “who can buy” and pickup steps are illustrations using the app’s own wording. Shops and prices are sample data.
-
Discover a shop nearby
Browse the bakeries, restaurants and snack shops around you and see which ones have put out a bag today.
-
Hunt mode
Up to 10 bags a round, one card at a time. Swipe up to reserve, left to skip, right to keep it for later.
-
The shop decides who can buy
Each bag can be open to everyone, only for people who’ve never bought from the shop, one per person, or only for regulars. The form even previews how many people a bag can reach. New customers get a reason to walk in, and regulars never feel passed over.
-
Pick up and pay at the shop
Your reservation holds a QR pickup code. Show it during the pickup window, the shop scans it with the shop side of the app, and you pay in store. There’s no delivery: the point is walking in.
-
Knock for the shop you want
Name a shop you’d like to see on FreshToGo and knock (敲碗) for it. Friends can join in from a share link, and you can follow its progress from contacting to listed.
Real FreshToGo app cards (Chinese UI) and website; the “who can buy” and pickup steps are illustrations using the app’s own wording. Shops and prices are sample data.
One product, four surfaces, one team
We designed and engineered every part of FreshToGo, so it works as one system: one set of decisions, one owner, no seams between vendors.
Kotlin Multiplatform · Compose Multiplatform
Consumer and merchant app
One shared codebase ships to iOS and Android. Shoppers sign in with LINE, Google or Apple, then browse, hunt and reserve; shops list bags from templates, set who can buy and scan pickups. Push notifications keep both sides in step.
Real app card renders (Chinese UI), sample listings.
Ktor · Google Cloud Run · OpenAPI
Backend
The service behind everything: listings, reservations, eligibility rules and accounts, all described in one OpenAPI spec.
React · TypeScript · Vite
Admin dashboard
Where the platform is run day to day: shop applications and verification, users with repeated no-shows, feedback, knock requests, eligibility insights, and the minimum supported app version.
Real admin interface, shown with sample data.
React · TypeScript · Vite
Marketing website
Explains FreshToGo in Chinese and English, takes shop applications, and opens shared bag and knock links in the app.
Built to keep running
Shipping is the start. FreshToGo is engineered so it can keep changing safely, by us or by whoever comes next.
- 1,241 automated tests in the shared app code, plus contract tests that keep the app’s data models matched to the API spec
- 34 end-to-end flows that drive the real app on Android and iOS, for shoppers and shops
- 117 API paths in an OpenAPI spec: the website and admin generate their types from it, the app is checked against it by a contract test, and CI fails on drift
- 2 store pipelines: Google Play from CI, and iOS through fastlane to TestFlight
Counted in the FreshToGo repositories in October 2026.
Kotlin Multiplatform and Ktor were the right tools for FreshToGo. The next product gets its own answer.