Download as pdf or txt
Download as pdf or txt
You are on page 1of 18

Food Frenzy

29.02.2024

Ogbuji Chibueze
ICPT Web Cafe
53, Labinjo Kalejaiye Street, Oshodi,
Lagos, Nigeria

Overview

Food Frenzy is a multifaceted restaurant management system developed utilizing the


MedusaJs ecommerce platform. The system aims to provide a centralized and efficient
method to manage all aspects of the restaurant business, encompassing inventory,
reservations, ordering, sales, and customer relationships.
Goals

1. Centralized administration of all restaurant operations


2. Enhanced efficiency and productivity
3. Augmented sales and profitability
4. Improved customer service.

Specifications

● Ecommerce - MedusaJs
We will adopt features from the following technologies:
● POS - Odoo Restaurant POS
● Inventory - Odoo MRP
● Table management - Odoo Restaurant POS, Ury POS
● Table reservation - Odoo Appointments
● Kitchen Display System - Ury Mosaic, Odoo Restaurant POS
● Reporting and Analytics - Ury Pulse

Ecommerce
MedusaJs is an open-source, headless ecommerce platform that offers a wide range
of features out-of the-box, including:
● Product management
● Order management
● Inventory management
● Customer management
● Payment processing
● Shipping management
● Tax calculation
● Analytics and reporting
MedusaJs is designed to be flexible and scalable, so it can be used to build a wide variety of
ecommerce stores, from small businesses to large enterprises. It is also well-suited for
headless ecommerce, which allows businesses to create custom storefronts that are
separate from their back-end ecommerce platform.

POS
Odoo Restaurant POS is a comprehensive point-of-sale (POS) system specifically
designed for the restaurant industry. It offers a wide range of features to help you manage
your restaurant efficiently, including:
● Menu management: Create and manage your menus easily, with support for
multiple languages and currencies.
● Payment processing: Accept cash, credit card, and gift card payments and from
customers' mobile devices using NFC or QR codes.
● Order management: Manage orders efficiently, with support for dine-in and
takeaway.
Odoo Restaurant POS is a powerful and easy-to-use POS system that can help you
streamline your restaurant operations and improve customer service.

Menu Management
Odoo Restaurant POS makes menu creation and management easy. You can add items,
categories, and modifiers, and set prices and availability. You can also create multiple
menus for different times of day or different locations.

Payment Processing
Odoo Restaurant POS supports a variety of payment methods, including cash, credit cards,
gift cards; It allows you to sell and manage gift cards, you can create gift cards of any value,
and customers can redeem them in-store or online, mobile payments; it also allows you to
accept payments from customers' mobile devices using NFC or QR codes. This makes it
easy for customers to pay for their meals without having to carry cash or cards. It also has a
feature for split bill payment.

Order Management
Odoo Restaurant POS allows you to manage orders efficiently. You can take orders for
dine-in, takeaway, modify orders, apply discounts and track the status of each order. You
can also print receipts and invoices.

Inventory
Odoo MRP (Manufacturing Resource Planning) can be leveraged as an inventory
specification for ingredients in the Food Frenzy restaurant management system. Here's
how Odoo MRP aligns with the requirements:

1. Centralized Inventory Management:


Odoo MRP provides a centralized platform to manage all inventory-related operations,
including ingredients for food preparation.

2. Real-Time Tracking:
Odoo MRP offers real-time inventory tracking, ensuring accurate visibility of ingredient
levels.

3. Low Stock Alerts:


The system can be configured to generate low stock alerts, prompting timely
replenishment of ingredients.
4. Bill of Materials (BOM) Management:
Odoo MRP enables the creation and management of BOMs, which define the ingredients
required for each menu item.

5. Recipe Management:
Recipes can be easily created and associated with BOMs, facilitating accurate ingredient
allocation.

6. Purchase Order Management:


Odoo MRP seamlessly integrates with the purchase module, allowing for efficient
procurement of ingredients from suppliers.

7. Quality Control:
The system supports quality control processes, ensuring ingredients meet desired
standards.

8. FIFO (First-In, First-Out) Inventory Valuation:


Odoo MRP follows the FIFO inventory valuation method, ensuring accurate costing and
preventing ingredient wastage.

9. Multi-Location Inventory Management:


If Food Frenzy has multiple locations, Odoo MRP can manage inventory levels across
different branches.
By utilizing Odoo MRP as the inventory specification for ingredients, Food Frenzy can
achieve efficient inventory management, optimize ingredient usage, and maintain
consistent food quality.

Table Management
The table management system is a key component of the Food Frenzy restaurant
management system. It allows restaurants to manage their tables efficiently and provide a
seamless dining experience for their customers. The URY POS table management system
includes the following features:
● Support for multiple restaurants and locations
● Ability to create and manage table layouts
● Real-time table availability
● Table status updates (e.g., occupied, available, dirty)
● Integration with POS and kitchen display systems

Table Reservation
Odoo Appointments will be integrated into the Food Frenzy restaurant management
system to provide a seamless table reservation experience for customers.
Goals:
● Enable customers to easily reserve tables online or through the mobile app
● Provide real-time availability of tables
● Allow restaurants to manage reservations efficiently

Features:
● Online and mobile reservation booking
● Real-time table availability
● Reservation management
● Waitlist management
● Email and SMS notifications
● Integration with the Food Frenzy POS system

Implementation:
Odoo Appointments will be ported into the Food Frenzy POS system.
The Food Frenzy website and mobile app will be updated to include a reservation booking
widget.

Kitchen Display System


Ury Mosaic is a kitchen display system (KDS) that can be used with the Food Frenzy
restaurant management system.

Features of Ury Mosaic


● Real-time order display
● Order tracking
● Bump and fire functionality
● Kitchen timers
● Recipe management
● Integration with the Food Frenzy POS system

Benefits of Using Ury Mosaic


● Improved kitchen efficiency
● Reduced food waste
● Improved order accuracy
● Increased customer satisfaction

Reporting and Analytics


URY Pulse is a powerful reporting and analytics tool that can be used to track and
analyze data from the Food Frenzy restaurant management system. This data can be used
to identify trends, measure performance, and make informed decisions about the
business.
Key Features of URY Pulse
● Real-time reporting: URY Pulse provides real-time reporting on sales, orders,
customers, and inventory. This information can be used to identify problems and
opportunities in real time.
● Customizable dashboards: URY Pulse allows users to create custom dashboards that
display the most important data for their business. This makes it easy to track key
performance indicators (KPIs) and identify trends.
● Drill-down reporting: URY Pulse allows users to drill down into the data to get more
detailed information. This can be used to identify the root cause of problems or
better understand customer behavior.
● Exporting data: URY Pulse allows users to export data to Excel or CSV format. This
data can be used for further analysis or to create reports.

Benefits of Using URY Pulse


There are many benefits to using URY Pulse as a reporting and analytics tool for Food
Frenzy, including:
● Improved decision-making: URY Pulse can help businesses make better decisions by
providing them with accurate and timely data.
● Increased profitability: URY Pulse can help businesses increase profitability by
identifying areas where they can improve efficiency and reduce costs.
● Improved customer service: URY Pulse can help businesses improve customer
service by giving them insights into customer behavior.
● Compliance with regulations: URY Pulse can help businesses follow regulations by
providing them with the data they need to track and report on their activities.

Conclusion
URY Pulse is a powerful reporting and analytics tool that can help Food Frenzy improve its
operations and profitability. Using URY Pulse, Food Frenzy can better understand its
business and make informed decisions that will lead to success.

Milestones

I. Phase 1:
Inventory Management: Simplified inventory management with real-time tracking
and alert for low stock levels.
Ordering System: A seamless ordering process, reducing errors and expediting
order fulfillment from online and POS sales channels.
Sales Tracking: Robust sales tracking capabilities, providing insights into sales trends
and performance.
Customer Relationship Management: Effective customer relationship management
tools to build lasting relationships with customers.

II. Phase 2:
Table Management: Efficient table management to optimize seating arrangements
and reduce wait times for customers.
Reservation System: User-friendly reservation system for easy table booking and
management.
Online Ordering: Convenient online ordering facility for customers to place orders
from the comfort of their homes.
Mobile Application: A mobile application to keep customers connected and engaged
with your restaurant.

III. Phase 3:
Loyalty Program: A loyalty program designed to reward repeat customers and foster
brand loyalty.
Gift Card System: A versatile gift card system suitable for various occasions.
Marketing Automation: Automated marketing tools to reach a wider audience and
drive business growth.
Business Intelligence: Comprehensive business intelligence reports to provide
data-driven insights for informed decision-making.

Journey Map/User Stories

Entities
● Owner
● Manager
● Chef
● Waiter
● Cashier
● Carrier
● Customer
● Location
● Table
● Reservation
● Order
Customer

Picking a table
When a customer picks a table and scans the QR code, if the table is not reserved, it
shows him a screen where he can choose between signaling a waiter for an order or
self-order.
Note: A waiter is subscribed to signal events.
We run a job (starting from open hour) every minute that runs a script to check the current
time, query the database for reservations happening in 1 hour, filter to find any with a start
time equal to the current time, if any is found, publish a reservation event. In our
reservation event handler, we set the table status to reserved, then set a timer for 15
minutes after which we cancel the reservation if it is not checked-in and set table status to
available. When the customer checks-in for the reservation, we publish a check-in event
that cancels the timer and sets the table status to occupied.
Note: A table can be occupied and reserved at the same time. A check-in is done when a
customer puts in the correct reservation code.
Else, if the table is reserved, we display a list of reservations for check-in or a button to
signal the waiter to ask for an available table. In case of a reservation conflict i.e a table
being reserved after order and there being no available seats, the waiter can move a
pending order to a new table.

Making a reservation

A table can have seats both occupied and reserved i.e. reservation events can occur while a
table is occupied, a code is asked for the reserved seats
A table can also have unoccupied and reserved seats, the customer can signal the waiter or
self-order for the remaining seats
A table can have all seats reserved and then it is locked i.e. reservations are displayed after
the table barcode scan

Simultaneous reservations
If a party of two makes a reservation on a table of four. It is stored in the database
with the table id for the time specified. If another reservation is made for the table for that
same time, it is stored also. When the reservation events are published, they are both
stored on the table reservation list and the table is locked i.e. reservations are displayed
awaiting codes which when input removes the reservation from the table and sets the
reservation to checked-in

A table has a list of reservations for particular times, we show a list of reservations specific
to the customer so he can select and put in his code and allows him to order i.e. becomes
occupied but the table still remains locked as there is still a reservation i.e. occupied and
reserved

First Case - Table is not reserved, scan a barcode, signal waiter or self-order
Second Case - Table is reserved, scan a barcode, display reservations, enter code. Seats are
remaining, self-order or signal waiter for order
Third Case - Table is reserved, scan a barcode, no seats remaining, signal waiter

Reservation takes up seats


Self-order, waiter order takes up seats

If seats are available -> Self-order or signal waiter for order


If no seats are available -> Signal waiter for table, Display reservations -> enter reservation
code

Example:
A reservation event occurs

Table.reservations.add (Reservation)

If table of 4
3 seats are reserved, 2 are occupied:

· Lock table for code


· Signal Waiter for table
· Self-order or signal waiter for order – if seats are remaining

If occupied chairs
(get reserved seats – we get the number of seats by looping/mapping
through the reservations and adding up the seats)
If reserved seats > (table.seats - occupied seats)
Lock table i.e. show reservations
Signal waiter for table
If table.seats - reserved seats > 0 (if seats are remaining)
Render self-order and signal waiter for order button
Else if reserved seats
Show reservations
Remaining seats = total seats – reserved seats
(check for occupied) remaining seats = remaining seats -
occupied seat
If (remaining seats <= 0)
Don’t render self-order button (as there are no remaining
seats)
Self-order

As a customer, when I scan a barcode, it opens a page where I have options to see
the menu or signal a Waiter. If the menu icon is clicked, the customer navigates to the
menu page, makes an order and sets how many seats he is ordering for. After the order is
made, he navigates to a page where he can see the order status (processing, done,
delivered) (Note: if all orders are delivered, which is achieved by the waiter clicking
delivered on all orders, we render the “see orders” button) or add another order or see
orders. The see orders button navigates to the order summary page where he can see the
total orders. Clicking on an order shows a drop-down of all menu items belonging to the
order(s) and a check-out button is shown which goes to a payment process page which has
three options:
1. Split bill
2. Card payment
3. Cash

Split bill navigates to a page where we list all orders for the table and the items with
checkmarks next to them so the user can decide which to pay for

Card uses a credit/debit card for payment

Cash signals the waiter for bill payment

Note: At POS checkout, there’s an option to split bills

Order Processing
There are only three sales channels: Online, POS and via mobile app

Orders are made in 3 ways:


● Online
● Take out at the counter via POS
● Dine in via POS
○ Waiter
○ Self-order

Waiter

As a Waiter, I want to take orders and send them to the kitchen. Two tabs are shown – table
layout and takeaway.
POS
On the admin dashboard sidebar navigation menu, we implement a POS menu item.
For the Manager, an “add new” POS session button is rendered which creates a session for
a particular location. Available sessions are shown for the cashier and waiter. A button
which implements a barcode scanner is used to scan the barcode on a table in the
restaurant which allows him to open the table view directly and a table layout button which
displays all the tables. Each table entity is associated with a barcode which encodes the
table id, when the id is resolved, it stores it on the request object and navigates to the main
POS screen where we take an order or from the table layout to the main POS screen. The
waiter sets how many seats are taken and places the order.

Chef
As a chef, I want to mark orders as done on the Kitchen Display Mosaic. (Done
orders are deleted from KDM and shown on the Orders to go page). On the Orders to go
page, the order slip is shown with the order id, type and status, an add button is shown on
the bottom right corner which displays available carriers if the order is online or waiters if
it’s a restaurant order. A carrier/waiter listed on the drop-down has the number of orders
assigned to him shown on the tab. Waitstaff or carriers are notified of orders (note:
waitstaff are subscribed to prepared orders). Chef assigns the waitstaff to deliver the order
(waitstaff is active), when order is delivered, waitstaff clicks done and is inactive)

Customer
● Scan a barcode
● Signal Waiter
○ Table availability
○ Bill payment
○ Make an order

● Self-order, self-checkout via online POS


● Order Takeout
● Order Online
● Reservations CRUD for personal reservations on dashboard, make online
reservations (Seats on a table): Once a reservation is made, a code is sent to the
customer’s email

Waitstaff
● Notified by customers for table availability, order, bill
● Scan a table barcode to open table view
● Access to POS
● Send order to kitchen
● Can edit orders
● Accept delivery tasks from Chef, decline delivery task and state reason
Note: During delivery, status shows delivering, when order is marked as done, order
status is set to delivered, and Waiter status is set to active
● Accept payment (Cash or Card)
● Can set status to active/inactive
● Access to Table layout
Note: If a Waiter is on a table, no other waiter can attend to it. A badge displays that the
table is being attended. Waiter get Order Delivery notifications

Chef
● Take orders from POS or Online sales channel
● Mark orders as done. Done orders are shown on the Orders to go page
● Assign Waiter or Carriers to deliver orders
● Access to Kitchen Display Mosaic
Note: All orders both Online and POS are shown on KDM. Chef is a subscriber to Orders
provider and gets notifications. Orders are assigned only to available waitstaff/carriers

Manager
● Create POS sessions
● Reservations CRUD for all reservations. Manage reservations
● Search by reservation code

Cashier
● Access Takeout screen
● Cash Register
● Access POS

Owner
● Create a new Store
● Create/assign staff/role
● Onboarding

User Stories

Onboarding:
● Create Owner Entity
● Associate a Store Entity with the Owner above

Store Management:
● As an owner, I want to create stores and switch between stores – the selected store
is attached to the request object and every entity associated with the store is
retrieved. The store drop-down is a provider to the functions that load entities

User Authentication:
● As an owner, I want to able to create accounts for my staff
● As a staff member, I want to log in securely with a unique username and password

Menu Management:
● As a chef, I want to add, edit, and delete menu items
● As a manager, I want to categorize menu items into sections (appetizers, main
courses, desserts)

Table Management:
● As a host/hostess, I want to assign tables to customers and set how many chairs are
used per order
● As a waiter, I want to know the status of each table (occupied, available, partially
booked, fully booked)

Reservation System:
● As a customer, I want to reserve a table for a specific date and time
● As a manager, I want to view and manage reservations
Inventory Control:
● As a manager, I want to track inventory levels of ingredients
● As a chef, I want to receive notifications for low stock (note: subscriber to low stock
event)

Employee Management:
● As a manager, I want to assign roles and permissions to staff
● As a staff member, I want to view my schedule and update my availability

Reporting and Analytics:


● As a manager, I want to generate reports on sales, inventory, and employee
performance
● As an owner, I want to receive automated financial summaries

Order Tracking
● Online
● POS

Features
● User Authentication and Authorization
○ Secure login/logout functionality
○ Role-based access control for different user roles (owner, manager, chef,
waiter, cashier, carrier)

● Menu Management
○ CRUD operations for menu items
○ Menu categorization functionality
● Order Processing
○ Order creation and management
○ Real-time order status updates
○ Integration with payment gateways

● Table Management
○ Table assignment and status tracking
○ Integration with order processing for real-time updates (table is
active/occupied when an order is made, and is made inactive/unavailable
after payment/checkout)

● Reservation System
o Reservation creation and management
(Reservations are canceled, if the customer is not checked-in 15 mins after
the reserved time. A check-in is done when the table barcode is scanned and
the code sent to the customer’s email/phone is input)
Logic: if table is reserved, input reservation code
o Notifications for Manager about upcoming reservations

● Inventory Control
○ Ingredient tracking and updates
○ Notifications for low stock (subscriber to low stock event)

● Employee Management
○ Role assignment and permissions
○ Schedule management for employees

● Reporting and Analytics


○ Sales reports
○ Inventory reports
○ Employee performance reports

Entities

User Entities:

● Owner
Roles & Permissions
○ Can create a new store and switch between stores
○ Create a POS session (A dropdown item is displayed which creates a new pos
session for the store, we can have multiple sessions.)
○ Create and assign roles to staff
Note: Owner Entity is the admin

● Manager
○ Create a POS session
○ Manage reservations

● Chef
○ Access KDS
○ Assign orders

● Waiter
○ Has access to the pos
○ Has access to table layout

● Cashier
● Carrier/Dispatch Rider
● Customer

Menu Entities
● Menu Item
● Menu Section

Order Entities
● Order
● Order Item

Table Entities
● Table
● Reservation

Inventory Entities
● Ingredient
● Stock

Employee Entities
● Employee
● Role

Reporting Entities
● Sales Report
● Inventory Report
● Employee Performance report
User Stories (continued):

Order Tracking:

As a customer, I want to track the status of my online order in real-time.


As a waiter, I want to see the status of orders assigned to me for delivery.

Features (continued):

Order Tracking:

Real-time order tracking for customers via online sales channel.


Order status updates for waitstaff via POS sales channel.

Entities (continued):

Order Tracking Entities:

Order Status
Delivery Status

Features (continued):

Notifications for order status changes to customers (e.g., order accepted, in preparation,
out for delivery, delivered).
Notifications for wait staff regarding new orders and changes in order status.

Entities (continued):

Notification Entities:

Customer Notification
Waitstaff Notification
Additional Features:

Loyalty Program: As an owner, I want to implement a loyalty program to reward repeat


customers.
Feedback System: As a customer, I want to provide feedback on my dining experience.
Promotions and Discounts: As an owner, I want to create and manage promotions and
discounts.
Integration with Third-Party Services: Integration with external services such as payment
gateways, email services, and SMS notifications.
Entities (continued):

Marketing Entities:

Loyalty Program
Feedback
Promotions

Other entities (in detail)

Table
● Orders (List)
● Id
● Barcode (automatically created with id on save)
● Name
● Capacity
● Occupied seats
● Location
● Status
● Active
● Reservations (List)

Order
● Id
● Type
● Status (delivered, Done)
● Table id

Location
● Id
● Name
● Active

Reservation
● Seats
● Time
● Code
● Table id

Menu
Medusa catalogs are menu sections e.g. Appetizers, Main Course, Desserts
Real world implementation:
https://codecanyon.net/item/foodking-restaurant-food-delivery-system-with-admin-panel-d
elivery-man-app-restaurant-pos/45845092#

You might also like