Document Version: 1.0 Date: January 22, 2026 Author: Product Management Team Status: Approved for Development
TacoTracker 3000 is a mobile-first application that transforms how Globex Corporation's 2,500 employees discover, order from, and interact with food trucks across three campus buildings. By providing real-time GPS tracking, mobile pre-ordering, and intelligent queue management, TacoTracker 3000 eliminates the chaos of the current "wander and hope" approach to food truck dining.
"Every Globex employee should be able to enjoy their favorite food truck meal without wasted time, missed opportunities, or disappointed taste buds."
| Value Proposition | User Benefit | Business Metric |
|---|---|---|
| Real-Time Visibility | Never miss your favorite truck | 98% visit success rate |
| Time Savings | More time for actual work | 15 min saved per visit |
| Pre-Order Convenience | Skip the line, grab and go | 65% reduction in wait time |
| Dietary Confidence | Know exactly what you can eat | Zero allergy-related incidents |
| Vendor Insights | Better demand forecasting | 25% increase in vendor revenue |
| Metric | Target | Timeline |
|---|---|---|
| App Adoption | 70% of employees | 60 days post-launch |
| Daily Active Users | 500+ | Lunch hours (11 AM - 2 PM) |
| Slack Message Reduction | 50% decrease | 90 days post-launch |
| Visit Success Rate | 98% | Ongoing |
| User Satisfaction | 4.2+ stars | Quarterly survey |
TacoTracker 3000 will become the indispensable lunch companion for every Globex employee, fundamentally changing the relationship between our workforce and the food truck ecosystem. Within two years, we envision expanding this platform to partner companies and becoming the de facto standard for corporate food truck management.
Deliver a seamless, delightful mobile experience that connects hungry Globex employees with food trucks through real-time tracking, effortless ordering, and intelligent recommendations—saving time, reducing frustration, and maximizing taco satisfaction.
| Strategic Initiative | TacoTracker Contribution |
|---|---|
| Employee Experience Excellence | Measurable improvement in lunch satisfaction scores |
| Digital Transformation | Showcase of innovative technology adoption |
| Operational Efficiency | Quantifiable productivity recovery |
| Sustainability Goals | Reduced unnecessary campus walking |
| Talent Retention | Unique perk that differentiates Globex as employer |
TacoTracker 3000 operates in an underserved niche: enterprise food truck management. While consumer apps like StreetFoodFinder exist, none offer:
- Corporate SSO integration
- Pre-ordering with queue management
- Real-time GPS tracking for private campuses
- Integration with corporate payment systems
- Analytics for facilities management
Every design decision prioritizes getting users to their tacos as quickly as possible. Maximum 3 taps to complete a repeat order.
Users always know exactly what they're ordering, what it costs, and when it will be ready. No hidden fees, no surprise wait times.
The app works well for everyone regardless of dietary restrictions, technical proficiency, or physical ability.
Food truck operators are partners, not just suppliers. Their success is our success.
We track what matters for improvement, but we don't surveil our users.
| Competitor/Alternative | Their Approach | TacoTracker Advantage |
|---|---|---|
| Slack Channel | Crowdsourced sightings | Real-time GPS accuracy |
| StreetFoodFinder | General food truck discovery | Enterprise-specific features |
| Walking Around | Physical search | Digital convenience |
| DoorDash/UberEats | Delivery model | Direct vendor relationship, no fees |
| Corporate Cafeteria | Fixed location | Variety, excitement, culture |
2026 Q2: MVP Launch
└── Core tracking, menus, notifications, pre-ordering
2026 Q3: Enhancement Release
└── Group ordering, ratings, loyalty program foundation
2026 Q4: Analytics Expansion
└── Vendor analytics dashboard, demand forecasting
2027 Q1: Social Features
└── Reviews, recommendations, "taco buddies"
2027 Q2+: Platform Expansion
└── Partner company rollout, white-label considerations
┌────────────────────────────────────────────────────────────────┐
│ TACO TITAN TERRENCE │
│ Software Engineer, Building A │
├────────────────────────────────────────────────────────────────┤
│ │
│ Demographics: │
│ • Age: 28 │
│ • Tenure: 3 years at Globex │
│ • Tech Savviness: Expert │
│ • Lunch Behavior: Food truck 4x/week │
│ │
│ Goals: │
│ • Never miss Taco Tornado Tuesday │
│ • Minimize time away from coding │
│ • Discover new food trucks and menu items │
│ • Be the "food truck guy" who knows everything │
│ │
│ Frustrations: │
│ • Walking to lot only to find no truck │
│ • Long lines during peak hours (12:00-12:30) │
│ • Not knowing the menu before arriving │
│ • Missing limited specials because they sell out │
│ │
│ Behaviors: │
│ • Checks Slack constantly for truck sightings │
│ • Has created personal spreadsheet of truck patterns │
│ • Will try any new food truck at least once │
│ • Influences colleagues' food choices │
│ │
│ Quote: "If I could pre-order and skip the line, I'd │
│ literally be 20% more productive." │
│ │
│ App Usage: Daily, power user │
│ Primary Features: Notifications, pre-ordering, favorites │
└────────────────────────────────────────────────────────────────┘
Jobs-to-be-Done (Terrence):
- Functional: Get lunch from food truck in under 10 minutes
- Emotional: Feel like a "food truck insider"
- Social: Be the person colleagues ask about food trucks
┌────────────────────────────────────────────────────────────────┐
│ CAUTIOUS CAROL │
│ Finance Manager, Building C │
├────────────────────────────────────────────────────────────────┤
│ │
│ Demographics: │
│ • Age: 45 │
│ • Tenure: 12 years at Globex │
│ • Tech Savviness: Moderate │
│ • Lunch Behavior: Food truck 1x/week │
│ │
│ Goals: │
│ • Safely identify allergen-free options │
│ • Not waste precious lunch break on fruitless searches │
│ • Simple, straightforward experience │
│ • Know wait time before committing │
│ │
│ Frustrations: │
│ • Severe nut allergy creates constant anxiety │
│ • Building C is far from main lot—often misses trucks │
│ • "Another app to learn" │
│ • Unclear ingredient information at trucks │
│ │
│ Behaviors: │
│ • Always brings backup lunch "just in case" │
│ • Asks detailed questions about food preparation │
│ • Prefers to go at off-peak times (1:30 PM) │
│ • Will become loyal once she trusts a vendor │
│ │
│ Quote: "I just need to know if it's safe for me to eat │
│ there. That's it." │
│ │
│ App Usage: 1-2x per week │
│ Primary Features: Dietary filtering, allergen info, menus │
└────────────────────────────────────────────────────────────────┘
Jobs-to-be-Done (Carol):
- Functional: Find food truck options that are safe for her allergies
- Emotional: Feel confident and relaxed about food choices
- Social: Participate in office food truck culture without fear
┌────────────────────────────────────────────────────────────────┐
│ NEW KID NANCY │
│ Marketing Associate, Building B │
├────────────────────────────────────────────────────────────────┤
│ │
│ Demographics: │
│ • Age: 24 │
│ • Tenure: 2 months at Globex │
│ • Tech Savviness: High │
│ • Lunch Behavior: Curious but uninformed │
│ │
│ Goals: │
│ • Learn about food truck culture at Globex │
│ • Meet colleagues and build relationships │
│ • Find vegetarian options │
│ • Discover "the good stuff" │
│ │
│ Frustrations: │
│ • Doesn't know which trucks visit or when │
│ • Feels out of the loop on Slack channel │
│ • Hasn't found her "go-to" truck yet │
│ • Intimidated by the "regulars" who seem to know everything │
│ │
│ Behaviors: │
│ • Asks colleagues for recommendations │
│ • Takes photos of food for social media │
│ • Willing to try new things │
│ • Looks for social eating opportunities │
│ │
│ Quote: "Everyone talks about Taco Tuesday but I've never │
│ actually found the truck." │
│ │
│ App Usage: Growing, exploratory │
│ Primary Features: Discovery, schedule view, recommendations │
└────────────────────────────────────────────────────────────────┘
Jobs-to-be-Done (Nancy):
- Functional: Discover and navigate the food truck ecosystem
- Emotional: Feel like part of the Globex culture
- Social: Use food trucks as opportunity to connect with colleagues
┌────────────────────────────────────────────────────────────────┐
│ VENDOR VICTOR │
│ Owner, "Taco Tornado" Food Truck │
├────────────────────────────────────────────────────────────────┤
│ │
│ Demographics: │
│ • Age: 52 │
│ • Business: 8 years operating │
│ • Tech Savviness: Low-Moderate │
│ • Globex Visits: Tuesdays & Thursdays │
│ │
│ Goals: │
│ • Increase revenue per Globex stop │
│ • Reduce food waste from over-preparation │
│ • Minimize time spent on admin work │
│ • Build loyal customer base │
│ │
│ Frustrations: │
│ • Unpredictable demand leads to waste ($200/week) │
│ • Long lines frustrate customers and slow service │
│ • Hard to communicate specials or sold-out items │
│ • Managing orders during rush is chaotic │
│ │
│ Behaviors: │
│ • Arrives 30 min early to prep based on gut feeling │
│ • Has "regulars" who he knows by name │
│ • Willing to try technology if it's easy │
│ • Values customer relationships over efficiency │
│ │
│ Quote: "If I knew how many people were coming, I could prep │
│ the right amount and serve everyone faster." │
│ │
│ Portal Usage: Before and during service │
│ Primary Features: Pre-order queue, demand visibility, menu │
└────────────────────────────────────────────────────────────────┘
| Anti-Persona | Description | Why Not Designing For |
|---|---|---|
| Remote Worker Rachel | Works from home 100% | No campus presence |
| Cafeteria Carl | Uses cafeteria exclusively | Different dining preference |
| External Visitor | Non-employee visitors | Security/SSO constraints |
| Meal Prepper Mike | Brings lunch every day | No food truck interest |
Key findings from user research (Q4 2025):
- Discovery Problem is Primary: 72% of respondents said "knowing where trucks are" is their #1 need
- Time Sensitivity: Average acceptable time away from desk for lunch is 22 minutes
- Pre-Order Demand: 81% would use pre-ordering if available
- Dietary Concerns: 34% have dietary restrictions that affect food choices
- Payment Friction: 23% have avoided trucks due to cash-only policies
- Building Inequality: Building C employees are 40% less likely to visit trucks
| Segment | Size | Frequency | Primary Need | Priority |
|---|---|---|---|---|
| Power Users | 15% (375) | 3+ times/week | Speed & convenience | High |
| Regular Users | 45% (1,125) | 1-2 times/week | Reliability & variety | High |
| Occasional Users | 30% (750) | 1-3 times/month | Discovery & simplicity | Medium |
| Non-Users | 10% (250) | Never | N/A | Low |
┌─────────────────────────────────────────────────────────────────────────────────┐
│ TERRENCE'S PERFECT TACO TUESDAY │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ STAGE │ TRIGGER │ DISCOVER │ ORDER │ PICKUP │ POST │
│ ────────────│──────────────│─────────────│─────────────│───────────│──────────│
│ │ │ │ │ │ │
│ ACTIONS │ Receives │ Opens app, │ Browses │ Walks to │ Returns │
│ │ push notif │ sees map │ menu, adds │ Lot B, │ to desk, │
│ │ at 11:45 │ with truck │ items to │ shows QR │ enjoys │
│ │ │ en route │ cart, pays │ code │ tacos │
│ │ │ │ │ │ │
│ THOUGHTS │ "Taco │ "Perfect, │ "Ooh, the │ "No line │ "That │
│ │ Tornado is │ heading to │ carnitas │ for pre- │ was so │
│ │ coming!" │ Lot B" │ special!" │ orders!" │ easy" │
│ │ │ │ │ │ │
│ EMOTIONS │ 😊 Excited │ 😌 Informed │ 😋 Hungry │ 😎 Smug │ 🌮 Happy │
│ │ │ │ │ │ │
│ TOUCHPOINT │ Push notif │ Map screen │ Menu, cart, │ QR code, │ Rating │
│ │ │ │ payment │ pickup │ prompt │
│ │ │ │ │ │ │
│ PAIN POINTS │ None │ None │ "Is the │ None │ None │
│ │ │ │ special │ │ │
│ │ │ │ still │ │ │
│ │ │ │ available?" │ │ │
│ │ │ │ │ │ │
│ OPPORTUNITY │ Personalized │ Show ETA & │ Real-time │ Clear │ Easy │
│ │ notif timing │ wait time │ availability│ signage │ reorder │
│ │ │ │ │ │ │
└─────────────────────────────────────────────────────────────────────────────────┘
Total Time: 8 minutes (vs. 23 minutes current state)
┌─────────────────────────────────────────────────────────────────────────────────┐
│ CAROL'S SAFE LUNCH SEARCH │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ STAGE │ CONSIDER │ RESEARCH │ VALIDATE │ DECIDE │ ORDER │
│ ────────────│──────────────│─────────────│─────────────│───────────│──────────│
│ │ │ │ │ │ │
│ ACTIONS │ Thinks about │ Opens app, │ Checks │ Confirms │ Places │
│ │ trying food │ applies nut │ ingredient │ "safe for │ order │
│ │ truck │ free filter │ list │ me" badge │ with │
│ │ │ │ │ │ notes │
│ │ │ │ │ │ │
│ THOUGHTS │ "Is it worth │ "Good, they │ "Let me │ "Okay, │ "Adding │
│ │ the risk │ have │ verify no │ this │ allergy │
│ │ today?" │ options" │ cross- │ looks │ note" │
│ │ │ │ contact" │ safe" │ │
│ │ │ │ │ │ │
│ EMOTIONS │ 😰 Anxious │ 😐 Cautious │ 🧐 Scrutiny │ 😊 Relief │ 😌 Conf. │
│ │ │ │ │ │ │
│ PAIN POINTS │ "Will I find │ "How do I │ "Is this │ "Can I │ "Will │
│ │ safe food?" │ know it's │ info │ trust │ they │
│ │ │ accurate?" │ current?" │ this?" │ see my │
│ │ │ │ │ │ note?" │
│ │ │ │ │ │ │
│ OPPORTUNITY │ Proactive │ Clear │ Vendor │ Trust │ Allergy │
│ │ "safe for │ filter with │ verified │ signals │ alert │
│ │ you" notif │ explanation │ badges │ │ on order │
│ │ │ │ │ │ │
└─────────────────────────────────────────────────────────────────────────────────┘
Actors: Employee Precondition: User has app installed and is authenticated Trigger: User opens app or receives notification Main Flow:
- App shows map centered on user's current building
- Map displays pins for all active trucks with cuisine type icons
- User can tap pin to see truck card (name, wait time, distance)
- User can tap card to see full truck details and menu
- User can switch between Map View and List View
Alternate Flows:
- A1: No trucks active → Show "No trucks right now" with schedule
- A2: User location unknown → Show all three lots with option to select
Actors: Employee, Vendor Precondition: User viewing truck with active menu Trigger: User taps "Order Now" Main Flow:
- App displays full menu with prices and dietary tags
- User selects items and customizations
- User reviews cart with total and estimated pickup time
- User confirms order (Apple Pay/Google Pay/saved card)
- App confirms order with order number and ETA
- Vendor receives order on tablet with prep countdown
- Vendor marks order complete
- User receives push notification "Order Ready!"
- User shows QR code at pickup window
- Vendor scans QR, releases order
Alternate Flows:
- A1: Item unavailable → Show warning, suggest alternatives
- A2: Payment fails → Show error, offer retry
- A3: User cancels → Refund within 24 hours
- A4: Vendor too busy → Pre-orders temporarily closed
Actors: Employee Precondition: User is authenticated Trigger: User accesses Profile settings Main Flow:
- User navigates to Profile → Dietary Preferences
- User selects from predefined options (vegetarian, vegan, gluten-free, nut-free, dairy-free, halal, kosher)
- User can add custom restrictions in free text
- App saves preferences and applies to all menu views
- Items matching preferences show "Safe for you" badge
- Items conflicting show warning badge
Post-condition: All menu views filter/flag based on preferences
| Scenario | System Behavior | User Message |
|---|---|---|
| GPS signal lost (truck) | Show "Location Unknown" status | "Taco Tornado's location is temporarily unavailable. Last seen: Lot B, 5 min ago" |
| Payment processor down | Disable pre-ordering, allow cash | "Mobile payment temporarily unavailable. Walk-up orders still accepted!" |
| Truck leaves early | Send notification, auto-cancel orders | "Taco Tornado has left early. Your order has been canceled and refunded." |
| Order not picked up (30 min) | Notify user, alert vendor | "Your order is waiting! Pick up soon or it may be given away." |
| Menu not updated | Show "Menu may be outdated" warning | "This menu was last updated 3 days ago. Contact truck to verify." |
| Offline mode | Show cached data with timestamp | "You're offline. Showing last known information from 10:30 AM." |
| Server error | Graceful degradation | "Something went wrong. Please try again in a moment." |
| Sold out item in cart | Notify before checkout | "The Carnitas Taco just sold out. Would you like to substitute?" |
CURRENT STATE FUTURE STATE
───────────── ────────────
Awareness │ Check Slack channel │ Push notification 15 min
│ (unreliable) │ before arrival
│ │
Discovery │ Walk to all 3 parking │ Open app, see real-time
│ lots (15+ minutes) │ map (5 seconds)
│ │
Menu Info │ Ask at truck window │ Browse full menu with
│ (no dietary info) │ allergen filtering
│ │
Wait Time │ Unknown until arrival │ Real-time estimate
│ (often 15-25 min) │ before committing
│ │
Ordering │ Verbal, in-person │ Pre-order from desk,
│ (wait in line) │ skip line at pickup
│ │
Payment │ Cash or card at truck │ Apple Pay, Google Pay,
│ (some cash-only) │ saved payment methods
│ │
Total Time │ 23+ minutes │ 8 minutes
| Feature ID | Feature Name | Priority | Release | Complexity |
|---|---|---|---|---|
| F-001 | Real-Time Truck Tracking | Must Have | MVP | Medium |
| F-002 | Push Notifications | Must Have | MVP | Medium |
| F-003 | Digital Menu Display | Must Have | MVP | Low |
| F-004 | Wait Time Estimation | Must Have | MVP | High |
| F-005 | Employee Authentication (SSO) | Must Have | MVP | Low |
| F-006 | Mobile Pre-Ordering | Should Have | v1.0 | High |
| F-007 | In-App Payment | Should Have | v1.0 | High |
| F-008 | Dietary Filtering | Should Have | v1.0 | Low |
| F-009 | Favorite Trucks | Should Have | v1.0 | Low |
| F-010 | Order History | Should Have | v1.0 | Low |
| F-011 | Group Ordering | Could Have | v1.1 | High |
| F-012 | Ratings and Reviews | Could Have | v1.1 | Medium |
| F-013 | Schedule View | Could Have | v1.1 | Low |
| F-014 | Crowd Density | Could Have | v2.0 | High |
| F-015 | Loyalty Program | Won't Have | Future | High |
Feature ID: F-001 Feature Name: Real-Time Truck Tracking Priority: Must Have (P1) Release: MVP Owner: Product Team
Description: Display current location of all active food trucks on an interactive campus map, updated every 30 seconds.
User Problem: Employees waste 15+ minutes walking to parking lots searching for trucks that may or may not be present.
Acceptance Criteria:
Feature: Real-Time Truck Tracking
Scenario: View active trucks on map
Given I am an authenticated user
When I open the app
Then I see a map centered on my building
And I see pins for all active trucks within campus
And each pin shows the truck's cuisine type icon
Scenario: View truck details from map
Given I am viewing the map with active trucks
When I tap on a truck pin
Then I see a bottom sheet with:
| Field | Value |
| Truck name | Text |
| Cuisine type | Text + icon |
| Distance from me | "X min walk" |
| Current wait time | "~X min" |
| Operating hours | "Until X:XX PM" |
And I see a "View Menu" button
And I see a "Get Directions" button
Scenario: Real-time location updates
Given I am viewing a truck on the map
When the truck's GPS position changes
Then the pin location updates within 30 seconds
And no manual refresh is required
Scenario: Truck arrives on campus
Given a truck was off-campus
When the truck GPS enters campus boundary
Then a new pin appears on the map within 60 seconds
Scenario: Truck departs campus
Given a truck is shown on the map
When the truck GPS exits campus boundary
Then the pin is removed from the map within 60 seconds
And users with active orders are notified
Scenario: Location unknown
Given a truck's GPS has not updated for 10+ minutes
When I view that truck
Then I see a "Location Unknown" status
And I see "Last seen: [Location], [X] min ago"UI/UX Requirements:
- Map uses standard pinch-zoom and pan gestures
- Pins cluster when zoomed out, expand when zoomed in
- User's current building is highlighted
- Active truck pins pulse subtly to indicate real-time data
- Different pin colors for different cuisine types
Technical Requirements:
- GPS polling every 30 seconds from vendor devices
- WebSocket connection for real-time map updates
- Fallback to 60-second polling if WebSocket fails
- Location accuracy within 10 meters
Analytics Events:
| Event | Trigger | Properties |
|---|---|---|
map_viewed |
User opens map | building, trucks_visible |
truck_pin_tapped |
User taps pin | truck_id, distance |
directions_requested |
User taps "Get Directions" | truck_id, from_building |
Accessibility:
- Truck pins have accessible labels with truck name and status
- Map supports VoiceOver/TalkBack with landmark descriptions
- List View alternative for non-visual navigation
Edge Cases:
- No active trucks: Show message with next scheduled truck
- Multiple trucks same location: Stack pins with count badge
- User location unavailable: Default to Building A, allow manual selection
Out of Scope:
- Indoor mapping within buildings
- Walking route visualization (use native maps for directions)
- Historical location data
Feature ID: F-002 Feature Name: Push Notifications Priority: Must Have (P1) Release: MVP Owner: Product Team
Description: Proactively notify users about food truck arrivals, order status changes, and time-sensitive updates.
User Problem: Users miss favorite trucks because they don't know when trucks arrive.
Acceptance Criteria:
Feature: Push Notifications
Scenario: Arrival notification for favorited truck
Given I have favorited "Taco Tornado"
And my notification preferences allow arrival alerts
When Taco Tornado's GPS enters the 5-mile campus approach radius
Then I receive a push notification within 60 seconds
And the notification says "Taco Tornado arriving at Lot B in ~15 min!"
And the notification includes current pre-order count and estimated wait
Scenario: On-campus arrival notification
Given I have favorited "Taco Tornado"
When Taco Tornado arrives at their parking lot
Then I receive a push notification
And the notification says "Taco Tornado is here! Now serving at Lot B"
Scenario: Order ready notification
Given I have placed a pre-order
When the vendor marks my order as ready
Then I receive a push notification within 10 seconds
And the notification says "Your order from Taco Tornado is ready!"
And tapping the notification opens the order with QR code
Scenario: Configure notification preferences
Given I am in Settings > Notifications
Then I can toggle:
| Setting | Default |
| Arrival alerts for favorites | On |
| Order status updates | On |
| Daily schedule digest | Off |
| Promotional messages | Off |
And I can set "Do Not Disturb" hours
Scenario: Respect system notification settings
Given I have disabled notifications for TacoTracker in device settings
When a notification trigger occurs
Then no notification is sent
And the in-app notification center shows the alertNotification Types:
| Type | Trigger | Title | Body | Deep Link |
|---|---|---|---|---|
| Truck Approaching | GPS within 5 miles | "[Truck] arriving soon!" | "~15 min to [Lot]. Pre-order now!" | Truck detail |
| Truck Arrived | GPS at lot | "[Truck] is here!" | "Now serving at [Lot]" | Truck detail |
| Order Confirmed | Order placed | "Order confirmed" | "Ready at ~[time] from [Truck]" | Order detail |
| Order Ready | Vendor marks ready | "Your order is ready!" | "Pick up at [Truck] - [Lot]" | Order QR code |
| Order Reminder | 15 min after ready | "Don't forget your order!" | "Your [Truck] order is waiting" | Order detail |
| Truck Departing | GPS leaving + open orders | "[Truck] is leaving!" | "Pick up your order now" | Order detail |
Technical Requirements:
- Firebase Cloud Messaging (FCM) for cross-platform delivery
- Notification delivery latency < 60 seconds from trigger
- Support for notification grouping/stacking
- Background location access NOT required (server-side triggers)
Analytics Events:
| Event | Trigger | Properties |
|---|---|---|
notification_sent |
Server sends notification | type, truck_id, user_segment |
notification_received |
Device receives | type, latency_ms |
notification_opened |
User taps notification | type, time_to_open |
notification_dismissed |
User dismisses | type |
Feature ID: F-006 Feature Name: Mobile Pre-Ordering Priority: Should Have (P2) Release: v1.0 Owner: Product Team
Description: Allow users to place orders in advance for pickup, skipping the walk-up line.
User Problem: Wait times of 15-25 minutes discourage food truck visits and waste productive time.
Acceptance Criteria:
Feature: Mobile Pre-Ordering
Scenario: Place a new pre-order
Given I am viewing "Taco Tornado" menu
And the truck is accepting pre-orders
When I tap "Add to Cart" on "Carnitas Taco"
Then the item is added to my cart
And the cart icon shows item count
And I can add customizations (extra salsa, no onions)
Scenario: View and modify cart
Given I have items in my cart
When I tap the cart icon
Then I see all items with:
| Field | Display |
| Item name | Text |
| Customizations | Text |
| Quantity | Stepper |
| Item price | Currency |
| Subtotal | Currency |
| Tax | Currency |
| Total | Currency |
And I can remove items
And I can modify quantities
Scenario: Complete checkout
Given I have items in my cart
And I tap "Checkout"
When I review the order summary
Then I see estimated pickup time
And I see my saved payment method
And I can tap "Place Order" to confirm
Scenario: Order time restrictions
Given a truck is 30+ minutes from arrival
When I try to place an order
Then I see "Pre-orders open when truck is within 30 minutes"
And the "Order" button is disabled
Scenario: Queue capacity reached
Given a truck has 10+ orders in queue
When I try to place an order
Then I see "Pre-order queue is full. Walk-up orders available."
And I can tap "Notify me when queue opens"
Scenario: Cancel an order
Given I have an active order
And the order has not been started by vendor
When I tap "Cancel Order"
Then I see confirmation dialog
And upon confirming, order is canceled
And I receive refund within 24 hours
And vendor is notified of cancellation
Scenario: Modify an order (within window)
Given I have an active order
And less than 2 minutes have passed since order
When I tap "Modify Order"
Then I can add/remove items
And I see updated total
And I confirm modificationOrder States:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ PLACED │─────▶│ RECEIVED │─────▶│ PREPARING │
│ │ │ by vendor │ │ │
└──────────────┘ └──────────────┘ └──────────────┘
│
▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ COMPLETED │◀─────│ PICKED UP │◀─────│ READY │
│ │ │ │ │ for pickup │
└──────────────┘ └──────────────┘ └──────────────┘
Alternative flows:
PLACED ──▶ CANCELED (by user, within window)
PLACED ──▶ CANCELED (by vendor, truck departing)
READY ──▶ ABANDONED (not picked up in 30 min)
UI/UX Requirements:
Cart Screen Wireframe (ASCII):
┌─────────────────────────────────────┐
│ ← Cart Clear All │
├─────────────────────────────────────┤
│ │
│ Taco Tornado │
│ Est. pickup: 12:15 PM │
│ │
│ ┌─────────────────────────────────┐│
│ │ Carnitas Taco $4.50 ││
│ │ + Extra salsa (+$0.50) ││
│ │ - No onions ││
│ │ [−] 2 [+] $10.00 ││
│ └─────────────────────────────────┘│
│ │
│ ┌─────────────────────────────────┐│
│ │ Horchata $3.00 ││
│ │ [−] 1 [+] $3.00 ││
│ └─────────────────────────────────┘│
│ │
│ ──────────────────────────────────│
│ Subtotal $13.00 │
│ Tax (8.25%) $1.07 │
│ ──────────────────────────────────│
│ Total $14.07 │
│ │
│ ┌─────────────────────────────────┐│
│ │ Checkout - $14.07 ││
│ └─────────────────────────────────┘│
│ │
└─────────────────────────────────────┘
Technical Requirements:
- Orders stored with idempotency key to prevent duplicates
- Real-time sync between user app and vendor portal
- Order timeout: 30 minutes after ready status
- Maximum items per order: 10 (configurable)
Business Rules:
| Rule | Description |
|---|---|
| BR-ORDER-001 | Orders cannot be placed more than 60 min before truck arrival |
| BR-ORDER-002 | Orders cannot be modified after vendor receipt (2 min) |
| BR-ORDER-003 | Users limited to one active order per truck |
| BR-ORDER-004 | Pre-orders close when queue reaches 10 orders |
| BR-ORDER-005 | Canceled orders refunded within 24 hours |
Analytics Events:
| Event | Trigger | Properties |
|---|---|---|
cart_item_added |
Add to cart | item_id, truck_id, price |
cart_viewed |
Open cart | item_count, total |
checkout_started |
Tap checkout | item_count, total |
order_placed |
Complete order | order_id, total, item_count |
order_canceled |
Cancel order | order_id, reason, time_since_order |
Feature ID: F-007 Feature Name: In-App Payment Priority: Should Have (P2) Release: v1.0 Owner: Product Team
Description: Securely process payments within the app using saved payment methods.
User Problem: Cash-only trucks create friction; finding ATM wastes time.
Acceptance Criteria:
Feature: In-App Payment
Scenario: Add payment method
Given I am in Settings > Payment Methods
When I tap "Add Payment Method"
Then I can add:
| Method | Flow |
| Credit/Debit Card | Stripe card entry |
| Apple Pay | System sheet |
| Google Pay | System sheet |
And the method is tokenized (card numbers not stored)
Scenario: Pay with saved card
Given I have a saved payment method
And I am at checkout
When I tap "Pay $14.07"
Then I see payment confirmation screen
And I can authenticate with Face ID/Touch ID
And upon success, I see order confirmation
Scenario: Pay with Apple Pay
Given Apple Pay is available on my device
And I am at checkout
When I tap the Apple Pay button
Then the Apple Pay sheet appears
And upon authentication, payment processes
And I see order confirmation
Scenario: Payment fails
Given I am at checkout
When my payment is declined
Then I see "Payment failed. Please try another method."
And my order is NOT placed
And I can select a different payment method
Scenario: Refund processing
Given I have a completed order
And a refund is issued
Then I receive push notification about refund
And the refund appears in order history
And the refund posts to original method within 5-7 daysTechnical Requirements:
- PCI-DSS compliant (Level 4)
- Stripe for payment processing
- Card tokenization (no raw card numbers stored)
- 3D Secure support for high-risk transactions
- Retry logic for transient failures
Security Requirements:
- Biometric authentication for payments > $25
- Session timeout requires re-authentication for payment
- Fraud detection via Stripe Radar
Feature ID: F-008 Feature Name: Dietary Filtering Priority: Should Have (P2) Release: v1.0 Owner: Product Team
Description: Filter menus and receive alerts based on dietary restrictions and allergens.
User Problem: Users with allergies waste time checking each item, feel unsafe.
Acceptance Criteria:
Feature: Dietary Filtering
Scenario: Set dietary preferences
Given I am in Profile > Dietary Preferences
When I select my restrictions
Then I can choose from:
| Option | Type |
| Vegetarian | Diet |
| Vegan | Diet |
| Gluten-Free | Allergen |
| Nut-Free | Allergen |
| Dairy-Free | Allergen |
| Halal | Diet |
| Kosher | Diet |
| Shellfish-Free | Allergen |
And I can add custom restrictions via text field
Scenario: View filtered menu
Given I have set "Nut-Free" preference
When I view a truck's menu
Then items containing nuts show ⚠️ warning badge
And items safe for me show ✓ "Safe for you" badge
And I can toggle "Show only safe items" filter
Scenario: Allergen warning at checkout
Given I have set "Nut-Free" preference
And I have a nut-containing item in cart
When I proceed to checkout
Then I see warning: "Your cart contains items with nuts"
And I must acknowledge before completing order
Scenario: View ingredient details
Given I am viewing a menu item
When I tap "View Ingredients"
Then I see full ingredient list
And allergens are highlighted in bold
And I see "May contain" cross-contamination warningsDietary Badges:
┌─────────────────────────────────────────────┐
│ Menu Item Card with Dietary Info │
├─────────────────────────────────────────────┤
│ │
│ Carnitas Street Taco $4.50 │
│ Slow-roasted pork with cilantro... │
│ │
│ 🌿 Dairy-Free ⚠️ Contains Gluten │
│ │
│ ✓ Safe for you (based on your preferences) │
│ │
└─────────────────────────────────────────────┘
┌──────────────────┐
│ F-005: SSO Auth │
│ (Required) │
└────────┬─────────┘
│
┌─────────────────┼─────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ F-001: GPS │ │ F-003: Menus │ │ F-009: Favs │
│ Tracking │ │ │ │ │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
│ ┌──────────┴──────────┐ │
│ │ │ │
▼ ▼ ▼ │
┌──────────────┐ ┌──────────────┐
│ F-004: Wait │ │ F-008: Diet │
│ Times │ │ Filter │
└──────────────┘ └──────────────┘
│
│ ┌───────────────────────┐
│ │ │
▼ ▼ │
┌──────────────┐ ┌───────┴──────┐
│ F-002: Push │◀─────────────│ F-006: Pre- │
│ Notifications│ │ Ordering │
└──────────────┘ └───────┬──────┘
│
▼
┌──────────────┐
│ F-007: Pay │
│ │
└──────────────┘
| Feature | User Value | Business Value | Effort | Risk | Priority Score |
|---|---|---|---|---|---|
| F-001 GPS Tracking | 10 | 9 | 5 | 3 | 9.0 Must Have |
| F-002 Notifications | 9 | 8 | 4 | 2 | 8.5 Must Have |
| F-003 Menus | 8 | 7 | 2 | 1 | 8.5 Must Have |
| F-004 Wait Times | 8 | 7 | 6 | 4 | 7.0 Must Have |
| F-005 SSO | 7 | 10 | 2 | 1 | 8.5 Must Have |
| F-006 Pre-Ordering | 10 | 10 | 8 | 5 | 8.0 Should Have |
| F-007 Payment | 9 | 10 | 7 | 6 | 7.5 Should Have |
| F-008 Diet Filter | 8 | 6 | 3 | 2 | 7.5 Should Have |
| F-009 Favorites | 7 | 5 | 2 | 1 | 6.5 Should Have |
| F-010 Order History | 6 | 5 | 2 | 1 | 6.0 Should Have |
| F-011 Group Orders | 6 | 6 | 8 | 5 | 5.0 Could Have |
| F-012 Reviews | 5 | 6 | 5 | 3 | 5.0 Could Have |
| F-013 Schedule | 6 | 4 | 3 | 1 | 5.5 Could Have |
| F-014 Crowd Density | 5 | 5 | 9 | 6 | 4.0 Could Have |
Priority Score = (User Value + Business Value) / 2 - (Effort + Risk) / 10
| Epic ID | Epic Name | Description | Stories |
|---|---|---|---|
| E-001 | Truck Discovery | Find and learn about food trucks | 8 |
| E-002 | Menu Browsing | View menus with filtering | 6 |
| E-003 | Pre-Ordering | Place and manage orders | 10 |
| E-004 | Payment | Pay for orders securely | 5 |
| E-005 | Notifications | Receive timely alerts | 6 |
| E-006 | User Profile | Manage preferences | 5 |
| E-007 | Vendor Portal | Truck operator features | 8 |
US-001: View Map of Active Trucks
As a hungry employee,
I want to see all active food trucks on a map,
So that I can quickly find where to eat.
Acceptance Criteria:
- Map loads within 2 seconds
- Shows all trucks currently on campus
- Each truck has identifiable pin
- My current building is highlighted
Story Points: 5
Sprint: 1
US-002: View Truck Details
As an employee considering a food truck,
I want to see details about a truck before walking there,
So that I can make an informed decision.
Acceptance Criteria:
- Shows truck name, cuisine type, distance
- Shows current wait time
- Shows operating hours for today
- Shows "View Menu" and "Get Directions" actions
Story Points: 3
Sprint: 1
US-003: Switch Between Map and List View
As a user who prefers lists,
I want to see trucks in a list format,
So that I can easily compare options.
Acceptance Criteria:
- Toggle between Map and List views
- List shows same info as map pins
- List sortable by distance, wait time, name
- Selection preserved when switching views
Story Points: 3
Sprint: 1
US-004: Search for Specific Truck
As a user looking for a specific truck,
I want to search by name or cuisine type,
So that I can find it quickly.
Acceptance Criteria:
- Search bar at top of discovery screen
- Search by truck name (partial match)
- Search by cuisine type
- Results highlight matching text
Story Points: 3
Sprint: 2
US-005: Filter Trucks by Cuisine
As a user with a craving,
I want to filter trucks by cuisine type,
So that I only see relevant options.
Acceptance Criteria:
- Filter chips: All, Mexican, Asian, American, etc.
- Multiple filters can be selected
- Filter state persists within session
- Shows count of results per filter
Story Points: 2
Sprint: 2
US-020: Add Item to Cart
As a user who wants to pre-order,
I want to add menu items to a cart,
So that I can build my order.
Acceptance Criteria:
- Tap "Add" button on menu item
- Item added to cart with animation
- Cart icon updates with count
- Can add same item multiple times
Story Points: 3
Sprint: 3
US-021: Customize Order Item
As a user with specific preferences,
I want to customize my order items,
So that I get my food exactly how I want it.
Acceptance Criteria:
- Shows available customizations per item
- Can add extras (priced)
- Can remove ingredients (free)
- Can add special instructions text
Story Points: 5
Sprint: 3
US-022: Review and Edit Cart
As a user ready to order,
I want to review my cart before checkout,
So that I can verify my order is correct.
Acceptance Criteria:
- Shows all items with customizations
- Shows individual and total prices
- Can adjust quantities
- Can remove items
- Can clear entire cart
Story Points: 5
Sprint: 3
US-023: Complete Checkout
As a user confirming my order,
I want to complete checkout smoothly,
So that my order is placed without friction.
Acceptance Criteria:
- Shows order summary
- Shows estimated pickup time
- Shows selected payment method
- Single tap to confirm (with biometrics)
- Shows confirmation with order number
Story Points: 5
Sprint: 4
US-024: View Order Status
As a user who placed an order,
I want to track my order status,
So that I know when to pick it up.
Acceptance Criteria:
- Shows current status (Placed → Received → Preparing → Ready)
- Shows estimated time remaining
- Updates in real-time
- Shows QR code when ready
Story Points: 3
Sprint: 4
US-025: Cancel Order
As a user who changed my mind,
I want to cancel my order,
So that I'm not charged for food I won't eat.
Acceptance Criteria:
- Cancel button visible before vendor confirms
- Shows confirmation dialog
- Explains refund timing
- Vendor notified of cancellation
Story Points: 3
Sprint: 4
┌────────────────────────────────────────────────────────────────────┐
│ USER JOURNEY │
│ Discover │ Explore │ Order │ Pickup │ Return │
└────────────────────────────────────────────────────────────────────┘
│ │ │ │ │
MVP ─┼──────────────┼──────────────┼─────────────┼─────────────┼─
│ │ │ │ │
[US-001] [US-010] │ [US-024] [US-030]
View Map View Menu │ Track Order View History
│ │ │ │ │
[US-002] [US-011] │ [US-031] │
Truck Details Filter Menu │ Show QR Code │
│ │ │ │ │
v1.0 ────┼──────────────┼──────────────┼─────────────┼─────────────┼─
│ │ │ │ │
[US-003] [US-012] [US-020] [US-032] [US-035]
List View Diet Prefs Add to Cart Pickup Conf Reorder
│ │ │ │ │
[US-004] │ [US-021] │ [US-036]
Search │ Customize │ Favorites
│ │ │ │ │
[US-005] │ [US-022] │ │
Filter │ Edit Cart │ │
│ │ │ │ │
v1.1 ────┼──────────────┼──────────────┼─────────────┼─────────────┼─
│ │ │ │ │
[US-006] [US-013] [US-026] [US-033] [US-037]
Schedule Reviews Group Order Rate Order Share
│ │ │ │ │
A user story is complete when:
- Code complete and peer reviewed
- Unit tests written (80%+ coverage)
- Integration tests passing
- UI matches design specifications
- Accessibility requirements met (WCAG 2.1 AA)
- Analytics events implemented
- Error states handled gracefully
- Performance benchmarks met
- Documentation updated
- Product Owner acceptance
TacoTracker 3000
│
├── 🏠 Home (Map/List)
│ ├── Map View
│ │ └── Truck Pin → Truck Card → Truck Detail
│ ├── List View
│ │ └── Truck Row → Truck Detail
│ └── Search/Filter
│
├── 🌮 Truck Detail
│ ├── Overview Tab
│ │ ├── Location & Distance
│ │ ├── Wait Time
│ │ └── Operating Hours
│ ├── Menu Tab
│ │ ├── Categories
│ │ ├── Items with Dietary Tags
│ │ └── Item Detail Sheet
│ └── Info Tab
│ ├── About
│ ├── Schedule
│ └── Contact
│
├── 🛒 Cart
│ ├── Items List
│ ├── Order Summary
│ └── Checkout
│ ├── Payment Method
│ └── Confirmation
│
├── 📋 Orders
│ ├── Active Orders
│ │ └── Order Detail with QR
│ └── Order History
│ └── Past Order Detail
│
└── 👤 Profile
├── Account Info
├── Payment Methods
├── Dietary Preferences
├── Notification Settings
├── Favorite Trucks
└── Help & Support
┌─────────────────────────────────────────────────────────────────┐
│ │
│ [Status Bar] │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ │
│ │
│ [Content Area] │
│ │
│ │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 🏠 🛒 📋 👤 │
│ Home Cart Orders Profile │
│ │
└─────────────────────────────────────────────────────────────────┘
Bottom Tab Navigation (Primary)
Navigation Patterns:
- Tab Bar: Primary navigation between main sections
- Push Navigation: Drill into details (Truck → Menu → Item)
- Modal Sheets: Quick actions (Cart preview, filters)
- Bottom Sheets: Contextual info (Truck card from map pin)
| Priority | Content | Location |
|---|---|---|
| P1 (Always Visible) | Active truck map | Home tab |
| P1 (Always Visible) | Cart badge count | Tab bar |
| P2 (One Tap) | Truck menu | Truck detail |
| P2 (One Tap) | Active order status | Orders tab |
| P3 (Two Taps) | Payment methods | Profile → Payments |
| P3 (Two Taps) | Order history | Orders → History |
┌─────────────────────────────────────────┐
│ 🔍 Search trucks... 🔔 │
├─────────────────────────────────────────┤
│ [All] [Mexican] [Asian] [American] → │
├─────────────────────────────────────────┤
│ │
│ ┌───────────────────┐ │
│ │ │ │
│ │ Building A │ │
│ │ ┌───┐ │ │
│ │ │ 🌮│ Lot A │ │
│ │ └───┘ │ │
│ │ │ │
│ │ Building B │ │
│ │ ┌───┐ │ │
│ │ │ 🍜│ Lot B │ │
│ │ └───┘ │ │
│ │ Building C │
│ │ │ │
│ └───────────────────┘ │
│ │
│ [📍 My Location] │
│ │
├─────────────────────────────────────────┤
│ ┌─────────────────────────────────────┐ │
│ │ 🌮 Taco Tornado │ │
│ │ Lot A • 3 min walk • ~8 min wait │ │
│ │ [View Menu] │ │
│ └─────────────────────────────────────┘ │
├─────────────────────────────────────────┤
│ 🏠 🛒 📋 👤 │
│ Home Cart(2) Orders Profile │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ ← ♡ ⋮ │
├─────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────┐ │
│ │ │ │
│ │ [Truck Hero Image] │ │
│ │ │ │
│ └───────────────────────────────┘ │
│ │
│ 🌮 Taco Tornado │
│ Mexican • $$ • ⭐ 4.8 (234) │
│ │
│ 📍 Lot A • 3 min walk │
│ ⏱️ ~8 min wait • 12 in queue │
│ 🕐 Open until 2:00 PM │
│ │
│ [Overview] [Menu] [Info] │
├─────────────────────────────────────────┤
│ TODAY'S SPECIALS │
│ ┌─────────────────────────────────┐ │
│ │ 🌮 Carnitas Tuesday $4.50 │ │
│ │ Slow-roasted pork... │ │
│ │ 🌿 DF ⚠️ G [Add] │ │
│ └─────────────────────────────────┘ │
│ │
│ TACOS │
│ ┌─────────────────────────────────┐ │
│ │ 🌮 Carne Asada $4.50 │ │
│ │ Grilled steak... │ │
│ │ 🌿 GF 🌿 DF [Add] │ │
│ └─────────────────────────────────┘ │
│ │
├─────────────────────────────────────────┤
│ 🏠 🛒 📋 👤 │
│ Home Cart(2) Orders Profile │
└─────────────────────────────────────────┘
Legend:
🌿 = Safe for dietary preference
⚠️ = Contains allergen
GF = Gluten Free
DF = Dairy Free
G = Contains Gluten
┌─────────────────────────────────────────┐
│ ← Cart Clear All │
├─────────────────────────────────────────┤
│ │
│ TACO TORNADO │
│ Est. pickup: 12:15 PM (~8 min) │
│ │
│ ┌─────────────────────────────────────┐│
│ │ Carnitas Taco $4.50 ││
│ │ + Extra salsa (+$0.50) ││
│ │ - No onions ││
│ │ [−] 2 [+] $10.00 ││
│ └─────────────────────────────────────┘│
│ │
│ ┌─────────────────────────────────────┐│
│ │ Horchata $3.00 ││
│ │ [−] 1 [+] $3.00 ││
│ └─────────────────────────────────────┘│
│ │
│ + Add more items │
│ │
├─────────────────────────────────────────┤
│ Special Instructions │
│ ┌─────────────────────────────────────┐│
│ │ e.g., "Extra napkins please" ││
│ └─────────────────────────────────────┘│
│ │
├─────────────────────────────────────────┤
│ Subtotal $13.00 │
│ Tax (8.25%) $1.07 │
│ ──────────────────────────────────── │
│ Total $14.07 │
│ │
│ 💳 •••• 4242 Change > │
│ │
│ ┌─────────────────────────────────────┐│
│ │ Checkout - $14.07 ││
│ │ 🔒 Secure ││
│ └─────────────────────────────────────┘│
│ │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ │
│ ✓ │
│ Order Placed! │
│ │
│ Order #TT-2026-0422 │
│ │
├─────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────┐ │
│ │ │ │
│ │ [QR Code for Pickup] │ │
│ │ │ │
│ └───────────────────────────────┘ │
│ │
│ Show this code at pickup │
│ │
├─────────────────────────────────────────┤
│ │
│ PICKUP FROM │
│ 🌮 Taco Tornado │
│ 📍 Lot A │
│ │
│ ESTIMATED READY │
│ 🕐 12:15 PM (in ~8 minutes) │
│ │
│ ORDER SUMMARY │
│ 2x Carnitas Taco $10.00 │
│ 1x Horchata $3.00 │
│ Tax $1.07 │
│ ──────────────────────────────── │
│ Total $14.07 │
│ │
├─────────────────────────────────────────┤
│ │
│ [Track Order Status] │
│ │
│ [Back to Home] │
│ │
└─────────────────────────────────────────┘
| Pattern | Gesture | Feedback | Use Case |
|---|---|---|---|
| Tap Pin | Single tap | Bottom sheet slides up | View truck summary |
| Add to Cart | Tap button | Button animates, cart badge increments | Add menu item |
| Pull to Refresh | Pull down | Spinner, data refresh | Update truck locations |
| Swipe to Delete | Swipe left | Red delete button revealed | Remove cart item |
| Long Press | Press and hold | Haptic feedback, context menu | Quick actions on item |
| Pinch Zoom | Two-finger pinch | Map zoom in/out | Navigate map |
┌─────────────┐
│ EMPTY │
└──────┬──────┘
│ Add item
▼
┌─────────────┐
┌────▶│ HAS_ITEMS │◀────┐
│ └──────┬──────┘ │
│ │ │
Add item Remove last Add item
│ │ │
│ ▼ │
│ ┌─────────────┐ │
└─────│ EMPTY │─────┘
└─────────────┘
│
│ (Cannot checkout)
▼
┌─────────────┐
│ CHECKOUT │
└──────┬──────┘
│
┌────────────┼────────────┐
│ │ │
Cancel Payment Payment
│ Success Fail
▼ ▼ │
┌─────────────┐ ┌─────────────┐ │
│ HAS_ITEMS │ │ CONFIRMED │ │
└─────────────┘ └─────────────┘ │
│
┌──────────────────┘
▼
┌─────────────┐
│ CHECKOUT │ (retry)
└─────────────┘
| Interaction | Animation | Duration | Easing |
|---|---|---|---|
| Add to cart | Button scales down then up, badge bounces | 300ms | ease-out |
| Order placed | Checkmark draws in, confetti particles | 600ms | spring |
| Pull to refresh | Taco icon spins | Loop while loading | linear |
| Notification received | Slide in from top, subtle bounce | 400ms | spring |
| Error state | Shake horizontally | 300ms | ease-in-out |
| Success state | Green flash overlay | 200ms | ease-out |
| ID | Requirement | Priority | Validation |
|---|---|---|---|
| FR-001 | System shall display all active food trucks on an interactive map | P1 | Map loads with all trucks in < 2s |
| FR-002 | System shall update truck locations every 30 seconds | P1 | Location timestamp within 30s |
| FR-003 | System shall calculate and display estimated wait times | P1 | Estimate within 3 min of actual 80% of time |
| FR-004 | System shall send push notifications for truck arrivals | P1 | Notification within 60s of trigger |
| FR-005 | System shall authenticate users via Okta SSO | P1 | SSO flow completes in < 5s |
| FR-006 | System shall display menu items with prices and dietary info | P1 | Menu loads in < 2s |
| FR-007 | System shall allow users to place pre-orders | P2 | Order confirmed in < 10s |
| FR-008 | System shall process payments via Stripe | P2 | Payment completes in < 5s |
| FR-009 | System shall filter menu items by dietary preferences | P2 | Filter applies in < 500ms |
| FR-010 | System shall display order status in real-time | P2 | Status updates within 10s |
| Rule ID | Rule | Enforcement |
|---|---|---|
| BR-001 | Pre-orders limited to 60 min before truck arrival | System blocks early orders |
| BR-002 | Orders cannot be modified after vendor receipt (2 min) | UI disables edit after timeout |
| BR-003 | Maximum 10 items per order | System prevents adding beyond limit |
| BR-004 | Pre-orders close at 10 orders in queue | System switches to walk-up only |
| BR-005 | Refunds processed within 24 hours | Automated refund workflow |
| BR-006 | Wait time recalculates every 60 seconds | Background job |
| BR-007 | GPS staleness threshold is 10 minutes | Auto-mark as "Location Unknown" |
| BR-008 | Users limited to one active order per truck | System prevents duplicate orders |
| BR-009 | Vendors must update menu by 9 AM | Portal reminder, stale warning |
| BR-010 | Order pickup timeout is 30 minutes | Notification, then abandon |
| Entity | Key Fields | Source | Sensitivity |
|---|---|---|---|
| User | ID, name, email, building | Okta SSO | PII |
| User Preferences | Dietary restrictions, favorites | User input | Personal |
| Order | Items, total, status, timestamp | App transactions | Financial |
| Payment | Token, last 4 digits, method | Stripe | PCI-DSS |
| Truck Location | Lat/long, timestamp | GPS device | Business |
| Menu Item | Name, price, allergens, availability | Vendor portal | Public |
| Trigger | Channel | Content | Timing |
|---|---|---|---|
| Favorite truck approaching | Push | "[Truck] arriving in ~15 min!" | When within 5 miles |
| Truck arrived | Push | "[Truck] is here at [Lot]!" | On GPS arrival |
| Order confirmed | Push + In-app | "Order #[X] confirmed" | Immediate |
| Order ready | Push + In-app | "Your order is ready!" | On vendor mark |
| Order reminder | Push | "Don't forget your order!" | 15 min after ready |
| Truck departing | Push | "[Truck] is leaving!" | On GPS departure with open orders |
| Metric | Requirement | Measurement |
|---|---|---|
| App launch to interactive | < 3 seconds | 95th percentile |
| Map load with all trucks | < 2 seconds | 95th percentile |
| Menu load | < 2 seconds | 95th percentile |
| Order submission | < 5 seconds | 99th percentile |
| Push notification delivery | < 60 seconds | 95th percentile |
| GPS update processing | < 5 seconds | 99th percentile |
| Search results | < 500 ms | 95th percentile |
| Dimension | Current | Target | Growth Timeline |
|---|---|---|---|
| Concurrent users | N/A | 800 | Launch |
| Daily orders | N/A | 500 | 90 days |
| GPS updates/sec | N/A | 50 | Launch |
| Peak load multiplier | N/A | 5x average | Lunch rush |
| Metric | Requirement |
|---|---|
| Uptime (business hours) | 99.5% |
| Planned maintenance | Outside 8 AM - 6 PM |
| Recovery Time Objective | < 1 hour |
| Recovery Point Objective | < 5 minutes |
| Backup frequency | Every 6 hours |
| Requirement | Implementation |
|---|---|
| Authentication | Okta SSO (SAML 2.0 / OIDC) |
| Authorization | Role-based (user, vendor, admin) |
| Data encryption in transit | TLS 1.3 |
| Data encryption at rest | AES-256 |
| Payment security | PCI-DSS Level 4, Stripe tokenization |
| API security | Rate limiting (100 req/min/user) |
| Session management | 24-hour tokens, refresh on activity |
| Requirement | Standard |
|---|---|
| Compliance level | WCAG 2.1 AA |
| Screen reader support | VoiceOver (iOS), TalkBack (Android) |
| Color contrast | 4.5:1 minimum |
| Touch targets | 44x44 pt minimum |
| Font scaling | Support up to 200% |
| Motion sensitivity | Respect reduced motion settings |
| Platform | Minimum Version |
|---|---|
| iOS | 14.0+ |
| Android | 10.0+ (API 29) |
| Screen sizes | 4.7" to 12.9" |
| Orientation | Portrait primary, landscape supported |
| Network | 3G minimum, offline caching |
| KPI | Definition | Target | Baseline |
|---|---|---|---|
| Adoption Rate | % of employees with app installed | 70% | 0% |
| DAU | Daily Active Users (lunch hours) | 500+ | 0 |
| Visit Success Rate | % of app-assisted visits resulting in food | 98% | 66% |
| Pre-Order Rate | % of orders placed via app vs walk-up | 40% | 0% |
| Time Savings | Avg minutes saved per visit | 15 min | 0 |
| NPS | Net Promoter Score | 50+ | N/A |
Successful Taco Acquisitions per Week
Definition: Count of orders completed (picked up) through the app per week.
Rationale: This metric captures adoption, engagement, and value delivery in a single number. If users are successfully getting their food through the app, we're achieving our core mission.
Target: 1,500 successful acquisitions/week by week 12 post-launch.
| Category | Event Name | Trigger | Properties |
|---|---|---|---|
| Discovery | app_opened |
App launch | source, building |
| Discovery | map_viewed |
Map tab visible | trucks_visible, zoom_level |
| Discovery | truck_selected |
Tap truck pin/card | truck_id, distance, wait_time |
| Discovery | search_performed |
Submit search | query, results_count |
| Menu | menu_viewed |
Open truck menu | truck_id, items_count |
| Menu | item_viewed |
Open item detail | item_id, price |
| Menu | filter_applied |
Apply dietary filter | filter_type |
| Cart | item_added |
Add to cart | item_id, price, truck_id |
| Cart | item_removed |
Remove from cart | item_id |
| Cart | cart_viewed |
Open cart | items_count, total |
| Order | checkout_started |
Begin checkout | items_count, total |
| Order | order_placed |
Complete order | order_id, total, items_count |
| Order | order_canceled |
Cancel order | order_id, reason |
| Order | order_completed |
Pickup confirmed | order_id, wait_time_actual |
| Notification | notification_received |
Push delivered | type, truck_id |
| Notification | notification_opened |
Push tapped | type, time_to_open |
| Property | Description | Collection |
|---|---|---|
user_id |
Anonymized user identifier | On auth |
building |
User's primary building | From Okta |
tenure_days |
Days since first use | Calculated |
order_count |
Lifetime orders | Calculated |
favorite_trucks |
Count of favorited trucks | On change |
dietary_prefs |
Set dietary preferences | On change |
- Total users (cumulative)
- DAU / WAU / MAU
- Orders per day (with trend)
- Revenue facilitated
- Top trucks by order volume
- Feature adoption rates
- Funnel: Map → Truck → Menu → Cart → Order
- Pre-order vs walk-up ratio
- Average order value
- Wait time accuracy
- Orders today
- Revenue today
- Popular items
- Pre-order queue depth
- Customer ratings
| Test ID | Hypothesis | Variant A | Variant B | Success Metric |
|---|---|---|---|---|
| AB-001 | Default view affects discovery | Map view default | List view default | Truck selections/session |
| AB-002 | Notification timing affects orders | 15 min arrival notice | 10 min arrival notice | Pre-order conversion |
| AB-003 | Upsell affects order value | No upsell | "Add a drink?" prompt | Avg order value |
| AB-004 | Wait time display affects conversion | Minutes only | Minutes + queue count | Order completion |
| Review | Frequency | Participants | Focus |
|---|---|---|---|
| Daily Standup | Daily | Product, Eng | Blockers, bugs |
| Weekly Metrics | Weekly | Product, PM | KPI tracking |
| Sprint Review | Bi-weekly | Team + Stakeholders | Feature completion |
| Monthly Business Review | Monthly | Exec team | Business impact |
| Quarterly OKR Review | Quarterly | All | Strategy alignment |
┌─────────────────────────────────────────────────────────────────────────────┐
│ RELEASE ROADMAP │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ALPHA BETA MVP v1.0 v1.1 v2.0 │
│ (Internal) (50 users) (All) (Enhanced) (Social) (AI) │
│ │ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ ▼ ▼ │
│ ──────────────────────────────────────────────────────────────────────────│
│ Mar 15 Apr 1 May 1 Jun 1 Aug 1 Nov 1 │
│ 2026 2026 2026 2026 2026 2026 │
│ │
│ Features: │
│ ───────── │
│ Alpha: Core tracking, basic map, SSO │
│ Beta: + Menus, notifications, wait times │
│ MVP: + Pre-ordering, payments (limited) │
│ v1.0: + Full payments, dietary filters, favorites, order history │
│ v1.1: + Group orders, ratings, schedule view │
│ v2.0: + Crowd density, AI recommendations, loyalty program │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
MVP Scope (May 1, 2026)
| Included | Excluded |
|---|---|
| Real-time truck tracking (map) | Group ordering |
| List view of trucks | Ratings and reviews |
| Digital menus | Schedule view |
| Wait time estimates | Crowd density |
| Push notifications (arrivals) | Loyalty program |
| Pre-ordering (basic) | AI recommendations |
| In-app payment (single method) | Social features |
| SSO authentication | |
| Vendor portal (basic) |
MVP Success Criteria:
- 500+ downloads in first week
- 100+ DAU by week 2
- < 5% crash rate
- 4.0+ app store rating
- Zero security incidents
- F-001: Real-time truck tracking
- F-002: Push notifications
- F-003: Digital menu display
- F-004: Wait time estimation
- F-005: SSO authentication
- F-006: Mobile pre-ordering
- F-007: In-app payment
- F-008: Dietary filtering
- F-009: Favorite trucks
- F-010: Order history
- F-011: Group ordering
- F-012: Ratings and reviews
- F-013: Schedule view
- F-014: Crowd density
- F-015: Loyalty program
- F-016: AI recommendations
- Drone delivery
| Milestone | Date | Criteria |
|---|---|---|
| Architecture Approved | Feb 15, 2026 | Sign-off from IT Security |
| Alpha Release | Mar 15, 2026 | Internal testing with 10 users |
| Beta Release | Apr 1, 2026 | 50-user pilot group |
| MVP Launch | May 1, 2026 | All employees, 5+ vendors |
| v1.0 Launch | Jun 1, 2026 | Full feature set before Summer Festival |
| v1.1 Launch | Aug 1, 2026 | Social features |
| v2.0 Launch | Nov 1, 2026 | AI and advanced features |
| Flag | Purpose | Default | Rollout Plan |
|---|---|---|---|
enable_preordering |
Toggle pre-order feature | OFF | 10% → 50% → 100% |
enable_payments |
Toggle in-app payments | OFF | Beta only → 100% |
new_map_ui |
Test new map design | OFF | A/B test 50% |
show_crowd_density |
Crowd heat map | OFF | After v2.0 validation |
Rollback Triggers:
- Crash rate > 5%
- Payment failure rate > 2%
- Critical security vulnerability
- Data integrity issue
Rollback Procedure:
- PM/Eng lead makes go/no-go decision
- Notify stakeholders via Slack #tacotracker-incidents
- Disable feature flag for affected feature
- If app-wide issue, force update to previous version
- Post-incident review within 24 hours
Beta User Selection (50 users):
- 15 power users (frequent food truck visitors)
- 15 regular users (1-2x per week)
- 10 users with dietary restrictions
- 5 new employees
- 5 Building C employees (distance test)
Beta Success Criteria:
- 80% of beta users active daily
- < 3 critical bugs reported
- 4.0+ satisfaction score
- Pre-order flow completion > 80%
- Vendor feedback positive
| Dependency | Type | Owner | Status | Risk Level |
|---|---|---|---|---|
| Okta SSO | Authentication | IT | Available | Low |
| Stripe | Payment processing | Finance | Contract in progress | Medium |
| Firebase | Push notifications | Engineering | Available | Low |
| AWS | Cloud infrastructure | IT | Available | Low |
| Google Maps SDK | Map display | Engineering | License acquired | Low |
| GPS Tracking Devices | Vendor hardware | Facilities | Procurement needed | Medium |
| Team | Dependency | Timeline |
|---|---|---|
| IT Security | Security review and approval | Before Alpha |
| Legal | Terms of Service, Privacy Policy | Before Beta |
| Finance | Stripe contract and integration | Before MVP |
| Facilities | Vendor onboarding, GPS devices | Before MVP |
| HR | Employee communication plan | Before Launch |
| Help Desk | Support training and documentation | Before Launch |
| Vendor/Partner | Dependency | Risk | Mitigation |
|---|---|---|---|
| Food truck operators | Willingness to participate | Medium | Early engagement, revenue sharing |
| Stripe | Payment processing | Low | Established platform |
| Apple/Google | App store approval | Low | Standard compliance |
| Constraint | Impact | Mitigation |
|---|---|---|
| Summer Festival (Jun 1) | Hard deadline for v1.0 | Aggressive MVP scope |
| Okta maintenance (Apr 15-16) | SSO testing blocked | Schedule around it |
| Stripe integration timeline | Payment feature delayed | Early start, fallback to MVP without |
| Resource | Constraint | Impact |
|---|---|---|
| Budget | $150,000 cap | Limits scope and timeline |
| IT Support | 0.5 FTE for maintenance | Simple architecture, good docs |
| Design | Shared resource | Early design lock |
| ID | Assumption | Risk if Wrong |
|---|---|---|
| A-001 | Vendors will adopt GPS tracking | Core feature unusable |
| A-002 | Employees have smartphones | Reduced adoption |
| A-003 | WiFi coverage sufficient in lots | GPS/app issues |
| A-004 | Vendors can provide digital menus | Manual entry required |
| A-005 | Stripe integration straightforward | Timeline slip |
| Risk | Likelihood | Impact | Score | Mitigation |
|---|---|---|---|---|
| Low user adoption | Medium | High | High | Incentives, gamification, executive support |
| Vendors decline participation | Medium | High | High | Revenue sharing, minimal burden, early engagement |
| Poor GPS accuracy | Low | High | Medium | Manual check-in fallback, WiFi positioning |
| Payment friction | Medium | Medium | Medium | Multiple payment options, cash fallback |
| App store rejection | Low | Medium | Low | Standard compliance review |
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| Privacy concerns ("tracking me") | Medium | Medium | Clear privacy policy, no individual tracking |
| Allergy misinfo leads to reaction | Low | Critical | Vendor verification, disclaimers, user responsibility |
| Frustration from tech issues | Medium | Medium | Thorough testing, responsive support |
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| Performance at peak load | Medium | High | Load testing, auto-scaling |
| Third-party API changes | Low | Medium | Version pinning, abstraction layer |
| Security vulnerability | Low | Critical | Security review, pen testing |
IMPACT
Low Medium High
┌───────┬─────────┬─────────┐
High │ │ │ Vendor │
│ │ │ Adoption│
LIKELIHOOD ├───────┼─────────┼─────────┤
Med │ │ Payment │ User │
│ │ Privacy │ Adoption│
├───────┼─────────┼─────────┤
Low │ App │ API │ GPS │
│ Store │ Changes │ Security│
└───────┴─────────┴─────────┘
| Scenario | Contingency |
|---|---|
| < 30% adoption at 60 days | Extend incentive program, mandatory demo, ambassador program |
| Taco Tornado declines | Negotiate exclusivity, escalate to sponsor |
| Launch deadline at risk | MVP-only scope, add contractors |
| Payment integration delayed | Launch without payments, cash/card at truck |
Phase 1: Teaser (T-4 weeks)
- "Something delicious is coming" campaign
- Countdown in weekly newsletter
- Mysterious taco emoji posts in Slack
Phase 2: Reveal (T-2 weeks)
- Executive sponsor video announcement
- Feature preview in all-hands meeting
- Beta user testimonials
Phase 3: Launch (T-0)
- "Download Day" with on-site support tables
- First 500 users get free taco coupon
- Vendor promotions: "10% off for app orders"
Phase 4: Momentum (T+1 to T+4 weeks)
- Weekly feature highlights
- User success stories
- "Taco Champion" leaderboard
Tagline: "Never miss a taco again."
Key Messages:
- For Power Users: "Pre-order and skip the line"
- For Cautious Users: "Know exactly what's safe for you"
- For New Employees: "Discover the food truck culture"
- For Everyone: "Real-time tracking, real-time tacos"
| Audience | Training | Format | Duration |
|---|---|---|---|
| Employees | In-app onboarding | Interactive tutorial | < 60 seconds |
| Vendors | Portal training | Virtual session + guide | 30 minutes |
| Help Desk | Support training | In-person + runbook | 1 hour |
| Champions | Power user training | Virtual session | 30 minutes |
| Channel | Availability | Response Time |
|---|---|---|
| In-app FAQ | 24/7 | Immediate |
| Help Desk | Business hours | < 4 hours |
| Slack #tacotracker-help | Business hours | < 2 hours |
| 24/7 | < 24 hours |
| Criteria | Target | Measurement |
|---|---|---|
| Downloads in week 1 | 500+ | App store analytics |
| DAU in week 2 | 100+ | Product analytics |
| Pre-orders in week 1 | 50+ | Order database |
| App store rating | 4.0+ | App store |
| Critical bugs | < 5 | Bug tracker |
| Help desk tickets | < 50 | Zendesk |
| Term | Definition |
|---|---|
| DAU | Daily Active Users |
| GPS | Global Positioning System |
| MVP | Minimum Viable Product |
| Pre-order | Order placed via app before arriving at truck |
| Walk-up | Traditional in-person ordering at truck |
| Queue depth | Number of orders awaiting fulfillment |
| SSO | Single Sign-On |
| WCAG | Web Content Accessibility Guidelines |
| Feature | TacoTracker | StreetFoodFinder | Slack Channel |
|---|---|---|---|
| Real-time GPS | ✓ | ✓ | ✗ |
| Corporate SSO | ✓ | ✗ | ✓ |
| Pre-ordering | ✓ | ✗ | ✗ |
| In-app payment | ✓ | ✗ | ✗ |
| Wait time estimates | ✓ | ✗ | ✗ |
| Dietary filtering | ✓ | Partial | ✗ |
| Push notifications | ✓ | ✓ | ✓ |
| Vendor portal | ✓ | ✗ | ✗ |
Survey Results (n=487):
- 72%: "Knowing where trucks are" is #1 need
- 81%: Would use pre-ordering if available
- 34%: Have dietary restrictions
- 23%: Have avoided trucks due to cash-only
- 89%: Own smartphone (iOS: 61%, Android: 28%)
Interview Themes (n=15):
- Time is the primary constraint
- Uncertainty is the primary frustration
- Community is an unexpected benefit
- Variety is valued over consistency
- Trust is essential for dietary concerns
- BRD:
/docs/TacoTracker-BRD-v1.0.md - Architecture:
/docs/TacoTracker-ARCH-v1.0.md - UI/UX Guide:
/docs/TacoTracker-UI-UX-v1.0.md - API Specification:
/docs/TacoTracker-API-v1.0.yaml
| Version | Date | Author | Changes |
|---|---|---|---|
| 1.0 | Jan 22, 2026 | Product Team | Initial release |
| 0.9 | Jan 15, 2026 | Product Team | Stakeholder review feedback |
| 0.5 | Jan 8, 2026 | Product Team | First draft |
| Role | Name | Signature | Date |
|---|---|---|---|
| Executive Sponsor | Patricia Vaughn | _________________ | ________ |
| Product Owner | Marcus Chen | _________________ | ________ |
| Engineering Lead | [TBD] | _________________ | ________ |
| Design Lead | [TBD] | _________________ | ________ |
| QA Lead | [TBD] | _________________ | ________ |
Document Control:
- Location: SharePoint > Projects > TacoTracker 3000 > Documentation
- Review Cycle: Bi-weekly during development
- Distribution: Product team, Engineering, Design, QA, Stakeholders
"Because no one should have to wonder where the tacos are." — TacoTracker 3000 Product Team