In-app ads and ad-free support
Fan support (first launch)
Scrollable chooser before sign-in:
-
Free with ads — Google AdMob banners (
nonPersonalizedAdswhere supported) -
Ad-free · fixed price — $15/year via Adapty / store IAP
-
Pay what you want — user enters amount; $15+ unlocks ad-free for a year after checkout (same Adapty flow today; true variable IAP later)
Owner support (after sign-in)
Owners choose Business billing:
-
Ads on my account — same banners as fans (staff on shift exempt via work mode)
-
Per-truck subscription — $25/truck/year (Starter tier) for each active truck; archived trucks are not billed
Full competitive mixed stack (GMV graduation + FTN-attributed order fees): Owner monetization strategy.
Trucks can be archived and re-enabled from the app (ownerAccountStatus on Convex foodTrucks). Archiving pauses per-truck billing without deleting the listing.
Who sees ads
| Audience | Ads? |
|---|---|
Fans / personal use |
Yes, unless ad-free or qualifying donation |
Truck owners (ads model) |
Yes, unless personal ad-free or all active trucks subscribed |
Staff work mode |
No |
Staff fan mode |
Yes (unless personally ad-free) |
Backend
-
Convex:
ownerBillingPreferences,foodTrucks.ownerAccountStatus,truckSubscriptionPaidUntil -
API:
GET/PATCH /api/owner/billing,PATCH /api/owner/trucks/[truckId]
Code map
-
lib/services/ad_policy.dart— rules -
lib/screens/support_model_screen.dart— fan chooser + donation dialog -
lib/screens/owner_billing_screen.dart— owner model + archive trucks -
lib/screens/settings_screen.dart— calm access toggles -
lib/screens/calm_games_hub_screen.dart— calm games catalog + local stats -
lib/screens/focus_quest_screen.dart— Focus Quest mini-game (Focus Champion badge) -
lib/screens/truck_jam_screen.dart— Truck Jam sliding-block puzzle (Truck Jam Master badge) -
lib/screens/spatial_skills_screen.dart— mental rotation mini-game -
lib/screens/menu_rush_screen.dart— rapid menu matching (processing speed) -
lib/screens/order_memory_screen.dart— order recall (working memory) -
lib/models/cognitive_game_profile.dart— local gameplay scores (device-only) -
lib/services/cognitive_guardrails.dart— storage/analytics guardrails (no diagnosis) -
lib/state/work_mode_controller.dart— staff on-shift toggle -
lib/state/calm_access_controller.dart— calm access prefs + badge persistence
Calm access (sensitive ads mode)
Optional, dignity-first settings when ads are still on (paid ad-free and work mode still win).
-
Basic sensitive mode — always available in Settings. Muted theme, reduced motion (also respects platform reduce-motion), banner-only ads with compact sizing.
-
Enhanced sensitivity — locked until the user earns any focus badge via a calm mini-game, meets a silent asymmetric gameplay profile, or tries every game once. When enabled, banner ads are hidden entirely while other ad-free rules still apply.
Copy uses self-ID language (“Ads are hard for me to focus with”) — not medical diagnosis labels. No sensor profiling in this release.
Calm games catalog
All calm games are optional, food-truck themed where natural, and use calm UI (no flashing, simple motion).
| Game | Skill domain (gameplay metric) |
|---|---|
Focus Quest |
Focus / sustained attention (grid chase) |
Truck Jam |
Spatial (sliding-block puzzle) |
Spatial Skills |
Spatial (mental rotation) |
Menu Rush |
Processing speed (rapid symbol matching; truck menu picker) |
Order Memory |
Working memory (sequence recall) |
Badges: Focus Champion, Truck Jam Master, Pattern Spotter (varied gameplay profile), Calm Explorer (every game attempted once).
Local-first cognitive scores
-
Scores (
spatialScore,processingSpeedScore,memoryScore,focusScore) are stored only on device via secure storage — never uploaded as a cognitive profile. -
Used only to unlock in-app calm-access features (enhanced sensitivity). Not diagnosis, not analytics dashboards, not health labels.
-
Asymmetric gameplay patterns (e.g. strong spatial + lower processing speed on mini-games) may silently qualify for Pattern Spotter — same enhanced toggle as badge games, different stated intention. This is not clinical validation; it is a dignity-first unlock path for users who prefer gameplay over badges.
-
Persistence path: complete all five games at least once with minimum effort to qualify without asymmetric scores.
-
Guardrails:
lib/services/cognitive_guardrails.dart— whitelisted storage keys, forbidden diagnostic vocabulary, boolean-only export to ad policy.
Roadmap (calm access)
-
Bug hunt easter egg — subtle UI flaw + in-app report unlocks badge (Sharp Eyes); same enhanced toggle, no medical framing.
-
Menu Rush truck menus — real truck menus + Gemini extraction; demo trucks shipped.
-
Art quest (13+) — optional creative unlock path; avoid trademarked “style” names in UI.
-
AdMob limits — calm mode controls app chrome and banner policy; third-party ad creative may still animate; enhanced mode hides banners where policy allows.