Menu Rush personalization

Menu Rush uses real (or demo) food-truck menu labels so processing-speed scores reflect meaningful visual search — not generic placeholders.

Today (MVP)

  • User picks a demo truck (Taco Titan, BBQ Bus, Waffle Wheels) before playing.

  • Rounds use that truck’s item names + emoji fallback icons.

  • Session stores truckId locally with the gameplay score — never uploaded as a cognitive profile.

  • Code: lib/services/menu_rush_assets_service.dart, lib/screens/menu_rush_screen.dart.

Roadmap: owner’s menu → game assets

Step Detail

Menu source

Owner-submitted menus (Gemini parse on Convex), Square sync (menuItems), fan photo submissions

Extract

Structured { menuItemId, name, category } per foodTruckId

Cartoonify

AI generates simple sticker-style icon per item (generic cartoon food — no trademarked studio styles)

Store

Convex + R2: menuItemAssets { truckId, menuItemId, cartoonUrl, contentHash }

Cache

Device cache keyed by truckId/menuItemId; emoji if asset missing

Picker

Followed / nearby trucks instead of demo list only

Menu extraction (backend)

Owner/fan menu photos are parsed with Gemini in ftn-site (convex/lib/geminiMenuParse.ts). Requires GEMINI_API_KEY on the Convex deployment (not Vercel).

After unlock Bitwarden in the same terminal (desktop unlock is not enough for bw CLI):

pwsh -NoProfile -File "$env:USERPROFILE\unlock_bitwarden_gui.ps1" -PersistUserEnv
bw status
cd ftn-site/site-nextjs
./scripts/sync-google-cloud-env-from-bw.ps1 -PushConvex

-PushConvex targets production Convex (--prod, e.g. content-bird-939 from NEXT_PUBLIC_CONVEX_URL). No gcloud or Composio required — create the API key in AI Studio and store in Bitwarden (item name Gemini API key or custom field GEMINI_API_KEY / Gemini API key).

If the item is in the ryan@foodtrucknerdz.com org, run bw sync after unlock so the CLI sees workspace items.

Composio cannot unlock Bitwarden CLI or push Convex env vars.

API placeholder

Mobile will call GET /api/food-trucks/{truckId}/menu-rush-items when shipped (returns labels + optional cartoonUrl). Until then, demo trucks and generic fallback apply.

COPPA & guardrails

  • Game scores and truckId for the session stay on device (secure storage via calm-access profile).

  • Cartoon assets are public menu art, not user selfies.

  • No health or neurotype labels derived from Menu Rush performance.

  • See Ads & ad-freecognitive_guardrails.dart.