VirtualTakeout 你又饿了
Make room for another choice.
A familiar takeout ritual, with a different ending. Browse a meal, make your choices, and pause before a real order.
Simulated meals. No food purchase or delivery.
Chinese simulator build captured on September 4, 2026. Monetary figures shown are simulated estimates.
01 / A personal starting point
She was browsing.
She wasn’t ordering.
I remember seeing a Korean news item about simulated takeout. What I saw looked like an early Figma concept, rather than a usable product. Around the same time, I noticed my girlfriend browsing takeout apps while dieting, often without placing an order. That everyday observation made the idea feel worth building.
I was not the first to explore this concept. My opportunity was to make the experience feel complete: continuous choices, a clear ending, and a consistent visual world. This began as a personal observation, not a formal research study.
I independently took the product from 0 to 1: product definition, interaction and visual design, AI-assisted development, QA, and App Store release.
02 / The experience between the screens
Finished means
the details connect.
A simulation still needs to respect the person’s choices. I focused on the small transitions that make browsing feel coherent, rather than treating a working screen as a finished experience.
INTERACTION 1 / 3
Choose a dish without losing the restaurant.
Portion selection is a small decision inside a larger browse. Making it feel like a new destination would break that continuity.
I used a sheet above the menu, with the dish, portion choices, estimate, and basket action in one place. The restaurant stays visible behind it.
Open a dish → choose a portion → add to the simulated basket. Dismiss the sheet to return to the same menu.
The portion choice and basket action share one surface.
Real Chinese UI · the detail is a crop of the same screenshot. Select any image to view the original.
03 / Designing a content production system
One dish.
An entire workflow.
A believable browse needs more than a handful of attractive dishes. I built a repeatable content workflow from recordings, rather than directly scraping a delivery app: extract, clean, generate, then review the result in context.
牛肉拼炒蛋胡椒饭(标准)
- Category
- 热销
- Visible price
- ¥38.9起
Retained extraction fields from 00:08. Platform and location fields omitted.
牛肉拼炒蛋胡椒饭
- Food group
- 招牌胡椒饭
- Estimate
- ¥39.8
item_beef_egg_pepper↳ Image identitymenu_beef_egg_pepper_riceMerge repeated listings. Turn add-ons into options. Keep one image identity per dish.
The actual generated asset. The dish name defines the food; the style brief defines the photograph.
The same dish in the captured UI. Select to inspect the full screen.
Sizzling black pepper beef and scrambled eggs on a bed of rice in a cast iron pan, steam rising.
Separate source from simulation.
To turn recordings into a usable menu, I sampled video frames with FFmpeg and used vision extraction for dish names, categories, descriptions, prices, and visible options. Frame references kept uncertain entries traceable to their source.
I separated source transcription from the simulated catalog. For this restaurant, promotional categories were removed, repeated listings were merged into five food-based groups, and add-ons became option groups. Stable dish and image identifiers kept the cleaned menu connected to its generated asset.
Give AI a clear job—and a review standard.
OpenRouter connected the workflow to Gemini image generation. I ran batches from structured dish briefs, then used later generation rounds to fill missing assets. The menu record, generation brief, and output filename shared an identity, so each image had a defined destination.
My review criteria separated food identity from visual style. The dish name and verified ingredients came first; style references guided framing, light, and background. I also checked whether the complete serving remained readable at thumbnail size. Early batches used exception review; later batches added explicit visual checks.
Retained final restaurant-cover asset · original generated imagery
A concrete AI correction
Directing the image, not just accepting it.
“This should be a merchant hero banner, not a menu dish photo.”Retained generation review note
For the restaurant cover, I redirected the brief toward a wide teppan-counter scene: atmosphere, warm lighting, and steam, with the dish playing a supporting role. The resulting asset gives the restaurant its setting, while the square dish image helps someone choose a meal.
A later image review caught a more fundamental mismatch: “丝瓜” (luffa) looked like cucumber. The second attempt was still withheld. A third version with visible longitudinal ridges passed review. A plausible food photo was not enough; it had to represent the intended ingredient.
04 / A second way to pause
If simulation is the whole product, why come back?
That question led me to App Guard. A simulated browse gives someone an alternative activity; an intentional pause gives them a way to act on the decision. I added a tool for voluntarily pausing selected takeout apps, with control remaining with the person using it.
- 01
Allow, then select
Explicit authorization. Apple’s system app picker.
- 02
Choose a pause
Pause now, or set a recurring schedule.
- 03
Choose the boundary
Gentle mode offers a temporary opening. Firm mode keeps the pause.
- 04
Stay in control
End the pause in VirtualTakeout or revoke system permission.
Requires a physical iPhone.
A visible recheck action.
Implementation flow, not a device recording. The available screenshot shows Simulator unavailability; it does not demonstrate successful blocking on a physical iPhone.
I kept App Guard separate from the simulated basket. Someone can finish a browsing session without enabling app pausing. Selection and authorization live in their own Guard area, making the additional commitment an explicit choice.
Design the way back, too.
The return path matters as much as the pause. In gentle mode, a Shield action cannot guarantee direct navigation back into this app. The interface therefore explains that the selected app closes and the person must open VirtualTakeout to complete a temporary unlock. Restoring membership does not silently restore device permissions.
05 / Delivery & the next question
Designed. Built.
Shipped independently.
Chinese edition releasedI shipped the Chinese edition on the App Store as 你又饿了-先缓一口. The work connected product design with a native SwiftUI app, content preparation, subscription states, permission explanations, QA, and review materials. The screens in this case come from a development build; they do not establish the exact feature set of a particular store version.
My next question is whether the browsing ritual helps people pause, and how the voluntary pause tool fits into repeat use. I do not yet claim a measured behavioral or health effect. English and Korean localization is in progress, as a next step beyond the Chinese product.
Back to all work