US-01Login
As a returning customer, I want to log in with my email and password, so that I see my saved addresses and past orders.
Acceptance criteria
- AC1The email is not case-sensitive and spaces before or after it are ignored:
Mia@fooddash.test logs in like mia@fooddash.test. - AC2A wrong email or a wrong password shows the same generic message, e.g. "Email or password is incorrect". The message never reveals whether an account exists.
- AC3After a successful login, the Home screen opens.
US-02Search and filters
As a hungry customer, I want to search and filter restaurants, so that I quickly find something I like that delivers to me.
Acceptance criteria
- AC1Search matches restaurant and dish names and ignores capitalization and accents: "cevapi" finds "Ćevapi", "creme" finds "Crème brûlée".
- AC2The "N restaurants" label always equals the number of restaurant cards shown, for every combination of search and filters.
- AC3Long restaurant names are truncated or wrap. They never cover the rating or other card content, on any supported screen size.
US-03Restaurant menu
As a customer, I want to add dishes from a restaurant menu to my cart, so that I can order a meal for myself or a group.
Acceptance criteria
- AC1A customer can order up to 10 of each dish. At 10, the + button is disabled and a short message explains the limit (the kitchen can't prepare more per order).
- AC2Every Add, + and − button has an accessible name with the dish and its price, e.g. "Add Margherita, €9.50".
US-04Cart and coupon
As a customer, I want to apply a coupon code in my cart, so that I get the discount I was promised.
Acceptance criteria
- AC1The code
WELCOME10 gives 10% off the items in the cart. - AC2Only one coupon per order. Applying the same code again shows a message such as "This code is already applied" and does not change the total.
- AC3An unknown or misspelled code shows an error and does not change the total.
- AC4Every amount shows exactly two decimals: €23.90, never €23.9 or €23.900000001.
US-05Delivery fee
As a customer, I want free delivery on bigger orders, so that ordering for the family feels worth it.
Acceptance criteria
- AC1Delivery costs €2.99.
- AC2Delivery is free when the cart total after discounts is at least €20.00.
- AC3Example: €21.00 of food with WELCOME10 is €18.90 after the discount, so the €2.99 delivery fee still applies.
US-06Checkout: delivery time
As a customer, I want to pick when my food arrives, so that it is hot when I get home.
Acceptance criteria
- AC1Delivery times are offered as 30-minute slots.
- AC2Only slots that are still in the future can be chosen. Slots that have already started or passed are not offered.
US-07Checkout: address
As a customer, I want address suggestions while I type, so that the courier finds me on the first try.
Acceptance criteria
- AC1As the customer types, matching address suggestions appear.
- AC2An order can only be placed with an address picked from the suggestions. Otherwise a clear error appears next to the address field.
- AC3Everything typed in checkout is kept when the phone is rotated.
US-08Checkout: place order
As a customer, I want to place my order with one tap, so that checkout is fast and I am charged exactly once.
Acceptance criteria
- AC1Tapping Place order disables the button and shows progress until the order is confirmed.
- AC2Exactly one order and one payment are created per checkout, even after a double tap or on a slow network.
- AC3When the order is confirmed, order tracking starts.
US-09Tracking and notifications
As a customer waiting for food, I want to see where my order is, so that I know when to go to the door.
Acceptance criteria
- AC1Each progress step (e.g. Confirmed, Preparing, On the way, Delivered) has a text label. The current step is not shown by color alone and is announced by screen readers.
- AC2The status updates automatically, including when the customer returns to the app from the background.
- AC3Tapping an order-status push notification opens that order's tracking screen, even when the app was closed.
US-10Profile, settings and logout
As a customer, I want to control notifications and log out safely, so that the app respects my choices and my privacy.
Acceptance criteria
- AC1Notification settings have separate switches for order updates and promotions. With promotions off, no promo notifications arrive; order updates still do.
- AC2Log out ends the session. After logging out, going Back (button or gesture) shows the Login screen, and no personal data (name, address, phone) is visible.
US-11Localization
As a customer in Germany or Serbia, I want to use FoodDash in my language, so that I understand every step and every price.
Acceptance criteria
- AC1The app is available in English, Deutsch, Srpski. Changing the language updates all text right away.
- AC2Buttons and labels fit or wrap in every language; text is never cut off.
- AC3English and Deutsch show prices in EUR. Srpski shows prices in RSD with Serbian number formatting, e.g. 1.299,00 RSD.