Requirements Document
Requirements Document
SPECIFICATION
for
RecipeBuddy
Version 1.6
1
Contents
1 Introduction 6
1.1 Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Document Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.2 Revisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.3 Styling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.4 Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Intended Audience and Reading Suggestions . . . . . . . . . . . . . . . . . 8
1.4 Project Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Overall Description 10
2.1 Product Perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2 Product Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 User Classes and Characteristics . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Operating Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5 Design and Implementation Constraints . . . . . . . . . . . . . . . . . . . 12
2.6 User Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.7 Assumptions and Dependencies . . . . . . . . . . . . . . . . . . . . . . . . 15
4 System Features 17
4.1 Recipe: Recipe Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.1.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 17
4.1.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 18
4.1.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 18
4.2 Recipe: Recipe Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 20
4.2.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 20
4.3 Recipe: Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 21
2
4.3.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 22
4.3.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 22
4.4 Recipe: Recipe Difficulty . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.4.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 23
4.4.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 24
4.4.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 24
4.5 Recipe: Recipe Rating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.5.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 25
4.5.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 26
4.5.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 26
4.6 Recipe: Commenting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.6.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 27
4.6.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 28
4.6.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 28
4.7 Recipe: Comment Rating . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.7.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 29
4.7.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 30
4.7.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 30
4.8 Profile: Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.8.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 31
4.8.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 32
4.8.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 32
4.9 Profile: Pantry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.9.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 33
4.9.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 34
4.9.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 34
4.10 Profile: Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.10.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 35
4.10.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 36
4.10.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 36
4.11 Search: Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.11.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 37
4.11.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 38
4.11.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 38
4.12 Search: Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.12.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 39
4.12.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 40
4.12.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 40
4.13 Security: Account Creation . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.13.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 41
4.13.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 42
4.13.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 42
4.14 Security: Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.14.1 Description and Priority . . . . . . . . . . . . . . . . . . . . . . . . 43
3
4.14.2 Stimulus/Response Sequences . . . . . . . . . . . . . . . . . . . . . 44
4.14.3 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . 44
4
Revision History
5
1 Introduction
1.1 Purpose
Recipe Buddy is a modern recipe sharing website intended to facilitate connections
between our users with food and culinary arts. It creates a personalized experience for
the user, showcases popular and trending recipes, and creates a community through
various recipe sharing services.
1.2.1 Lists
Lists and sublists should be formatted as such:
Lists should never be nested more than twice. The list in this section shows how far we
allow our lists to go. Anything more than that is not allowed.
1.2.2 Revisions
After a new revision, it is important to log your progress. Please update this document’s
version number and update this document’s Revision History table.
1.2.3 Styling
When updating this document, adhere to the following style guidelines:
• The first paragraph of each section or subsection does not need to be indented.
Subsequent paragraphs should be indented. In LaTeX, that is done by default by
typing two blank spaces “ ” after a paragraph.
6
• This document should be typed using the default LaTeX font and styling.
1.2.4 Code
When writing code within a paragraph:
• For longer snippets, please give the code its own block. For example:
The following Python function will calculate the area of a circle:
import math
r_squared = radius ** 2
return math.pi * r_squared
7
– Never take up more than an entire page with a block of code.
– Aim to have minimal overlap between the code in this document and the code
in our system’s documentation.
– The code in this document must convey meaningful information to all readers.
It should be useful for developers, as well as non-developers.
• Recipe Buddy designers and clients should be able to go over this document to
understand how the system is designed. With any proposed updates or revisions to
the system, designers should have the ability to refer to this document and ensure
such changes align with Recipe Buddy’s design philosophy.
• Allowing users to set the visibility of their recipies (i.e. public or private)
8
Recipe Buddy keeps a catalog of food and kitchenware items by:
• Allowing for a user to add all items from a particular recipe into their panty.
• Allowing for users to keep a detailed list of kitchenware that they own.
• Allowing users to edit or modify these lists at any time from the user menu.
• Allowing users to keep a detailed list of restricted categories. (i.e. dairy for lactose
intolerant or bread for gluten-free).
1.5 References
Throughout this document, mutliple web addresses are referred to in order to give a
better description of the Recipe Buddy software.
• Reference 1
– Name: Chrome Browser System Requirements
– Author: Google
– Version: 95.0.4638.32
– Access Date: September 29, 2021
– Location: support.google.com
• Reference 2
– Name: Firefox Browser System Requirements
– Author: Mozilla
– Version: 92.0
– Access Date: October 4, 2021
– Location: www.mozilla.org
9
2 Overall Description
2.1 Product Perspective
Recipe Buddy is a multi-functional tool for organizing recipes, pantry items and dietary
restrictions. Although several recipe websites already exist, Recipe Buddy offers many
powerful customizations and search features that seperate it from the competition.
10
– By pantry and cookware items already available to the user.
– By user-specified dietary restrictions.
– By popularity, rating or difficulty.
• A guest is defined as someone browsing the Recipe Buddy website, but have not
created a user account or signed in.
User:
11
2.4 Operating Environment
Although Recipe Buddy is expected to work on modern browsers, the Recipe Buddy
client will only be tested extensively to ensure proper functionality across the top three
major web browsers by marketshare including:
• Recipe Buddy shall be written with the following programming languages and
frameworks:
– Python
∗ Version 3.9.7 or newer
∗ Webpage: www.python.org
∗ Documentation: docs.python.org
∗ Download: www.python.org
– MariaDB
∗ Version 10.6.4 or newer
∗ Webpage: mariadb.org
12
∗ Documentation: mariadb.org
∗ Download: mariadb.org
– HTML5
∗ Documentation: developer.mozilla.org
– CSS3
∗ Documentation: developer.mozilla.org
– JavaScript
∗ Specified by ECMAScript 2021
∗ JavaScript documentation: developer.mozilla.org
∗ ECMAScript 2021 documentation: www.ecma-international.org
– Docker
∗ Version 20.10.9 or newer
∗ Website: docker.com
∗ Documentation: docs.docker.com
∗ Source code: github.com
∗ Download: docs.docker.com
– Docker Compose
∗ Version 2.0.1 or newer
∗ Documentation: docs.docker.com
∗ Source code: github.com
∗ Download: docs.docker.com
– MariaDB Connector/Python
∗ Version 1.0.7 or newer
∗ Documentation: mariadb-corporation.github.io
∗ Source code: github.com
– Flask
∗ Version 2.0.2 or newer
∗ Webpage: flask.palletsprojects.com
∗ Documentation: flask.palletsprojects.com
∗ Source code: github.com
– Flask-SQLAlchemy
∗ Version 2.5.1 or newer
∗ Webpage: flask-sqlalchemy.palletsprojects.com
13
∗ Documentation: flask-sqlalchemy.palletsprojects.com
∗ Source code: github.com
– Flask-login
∗ Version 0.5.0 or newer
∗ Documentation: flask-login.readthedocs.io
∗ Source code: github.com
– Flask-WTF
∗ Version 0.15.1 or newer
∗ Documentation: flask-wtf.readthedocs.io
∗ Source code: github.com
– python-email-validator
∗ Version 1.1.3 or newer
∗ Source code: github.com
– pdoc
∗ Version 8.0.0 or newer
∗ Webpage: pdoc.dev
∗ Documentation: pdoc.dev
∗ Source code: github.com
– pyyaml
∗ Version 6.0 or newer
∗ Webpage: pyyaml.org
∗ Documentation: pyyaml.org
∗ Source code: github.com
– libyaml
∗ Version 0.2.5 or newer
∗ Webpage: pyyaml.org
∗ Documentation: libyaml.docsforge.com
∗ Source code: github.com
– Bootstrap
∗ Version 5.1 or newer
∗ Webpage: getbootstrap.com
∗ Documentation: getbootstrap.com
∗ Source code: github.com
14
∗ Download: getbootstrap.com
• Recipe Buddy will interface with its MariaDB database using a RESTful API and
SQL code.
– RESTful API specifications: restfulapi.net
• Recipe Buddy should be designed to save recipe data very quickly.
– Recipe data should be locally cached as it is entered by the user.
– Recipe Buddy will provide a button to save recipe data on the edit recipe
page.
– When the user decides to save a recipe, recipe data should be serialized in no
more than 0.5 seconds on a modern computer.
– Immediately following serialization, the recipe data should be uploaded to the
database.
– When a recipe is saved, the user should be notified. This should occur no
longer than 5 seconds after the user clicks the button to save their recipe,
assuming that the user has a stable connection and is using a modern com-
puter.
• The data stored by Recipe Buddy must abide by the following constraints:
– Uploaded images must be stored in .jpg, .png, or .webp file formats.
– Uploaded videos must be stored in .mp4, .mov, or .webm file formats.
– Uploaded files must be no more than 4MB in size.
15
3 External Interface Requirements
3.1 User Interfaces
Buttons included on every page:
• Home
• Search
• Profile
• New Recipe
16
4 System Features
4.1 Recipe: Recipe Creation
4.1.1 Description and Priority
The recipe creation feature allows registered users to upload recipes to the Recipe Buddy
recipe database. Various attributes about the recipe such as ingredients, instrctions,
videos, images, cook time, cook temperature can be set by the user.
17
4.1.2 Stimulus/Response Sequences
18
– Temperature
– Pictures
– Videos
– Instructions
19
4.2.2 Stimulus/Response Sequences
20
• REQ-1.2.3: Rate the quality of recipe pages.
21
4.3.2 Stimulus/Response Sequences
22
4.4 Recipe: Recipe Difficulty
The recipe difficulty feature allows recipe creators to set the difficulty of a recipe they
are creating.
23
4.4.2 Stimulus/Response Sequences
24
– Intermediate
– Expert
25
4.5.2 Stimulus/Response Sequences
26
4.6 Recipe: Commenting
4.6.1 Description and Priority
The commenting feature allows registered users to leave a comment on a particular recipe
up to 300 characters. Users can also mark their comment as a suggestion, where it will
notify the recipe creator that a user has suggested a change in their recipe. Recipe
comments will be publicly viewable while suggestions are private between the two users.
27
4.6.2 Stimulus/Response Sequences
28
– Prompts the owner of the recipe a notification of the suggestion.
29
4.7.2 Stimulus/Response Sequences
30
4.8 Profile: Profile
4.8.1 Description and Priority
The profile feature allows guests and users to view the profile of a particular user.
Information shown includes a name, profile picture and favorite recipe. Registered users
can view their own profile and make modifications to the profile, pantry, tools and dietary
restrictions.
31
4.8.2 Stimulus/Response Sequences
32
• REQ-2.1.3: Start new recipes.
• REQ-2.1.4: View the profiles of other users and see usernames and created recipes.
33
4.9.2 Stimulus/Response Sequences
34
4.10 Profile: Tools
4.10.1 Description and Priority
The tools feature allows registered users to keep a detailed list of tools and appliances
they own. Registered users can later use this data in the future to filter and sort by
recipes containing tools and appliances they already own.
35
4.10.2 Stimulus/Response Sequences
36
4.11 Search: Search
4.11.1 Description and Priority
The search feature allows guests and registerd users to search for recipes using various
attributes such as recipe name, ingredients included, cook time, and rating. Registered
users can also sort and filter by their own personalized information such as dietary
restrictions, pantry items, or tools and appliances.
37
4.11.2 Stimulus/Response Sequences
38
4.12 Search: Flags
4.12.1 Description and Priority
The flags feature allows the Recipe Buddy system to notify users of certain attributes of
a recipe before the user starts cooking the recipe. For example, if a recipe contains milk,
but the user has previously selected that they are lactose intolerant, the Recipe Buddy
system will notify them of this before they start cooking the recipe containing milk.
39
4.12.2 Stimulus/Response Sequences
40
• REQ-3.2.3: Prompts user if it contains allergens and dietary restrictions.
41
4.13.2 Stimulus/Response Sequences
42
4.14 Security: Login
4.14.1 Description and Priority
The login feature allows guests to login to their account and access their personalized
information in Recipe Buddy.
43
4.14.2 Stimulus/Response Sequences
44
5 Other Nonfunctional Requirements
5.1 Performance Requirements
Recipe Buddy will be expected to run on all modern hardware, and will be optimized
so that actions should not take more than a few seconds to be performed, with a couple
exceptions. Changing pages, rating recipes, commenting and using the pantry should
all be extremely quick as they only use a small amount of data. Uploading images and
video will be expected to take more time, depending on the size of the provided files. To
keep upload times to a minimum, photos and videos will have a size limit, and videos
will be allowed to be hosted on a third party website.
45
5.5 Business Rules
Users that do not have an account with Recipe Buddy will not be able to access certain
features of the product. Features that are exclusive to account holders include the Pantry
and Tools, Recipe Creation, Profile, Commenting, Recipe Rating, Timer, Private Recipes
and Video.
46
Glossary
backend Is the layer of software that manages Recipe Buddy’s internal functions. It is
hidden from an end user. 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43
CCPA Is a state law in California that governs how websites handle user data. 12
COPPA Is a federal law in the U.S. that governs how to operate a website accessed by
children under the age of thirteen. 12
Docker Compose Is a tool used to manage multiple Docker containers and run them as
a single application. 13
frontend Is the layer of software presented to an end user. 17, 19, 21, 23, 25, 27, 29, 31,
33, 35, 37, 39, 41, 43, 47
Functional Requirements describe the services that Recipe Buddy must offer. 2–4, 18,
20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44
47
Nonfunctional Requirements describe the systems that Recipe Buddy must be built
on. 4, 45
Recipe Buddy Is the software defined by this document. 6, 8–12, 15–17, 19, 39, 41, 43,
45–48
serialization Is the process of converting a program’s internal data into storable and
transmittable data. 15, 48
SQL injection Refers to the process of hacking a database where a user runs their own
malicious SQL code. see SQL. 27, 37, 39, 41, 43
unit testing Is a method of software testing where every function is tested individually.
17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43
XSS injection Refers to the process of hacking a website where a user inserts their own
malicious code into a website. This malicious code can then be run by users of
that same website. 27, 37, 39, 41, 43
48