Exwell Final Report
Exwell Final Report
Exwell Final Report
I. Cover Letter 2
Seamus and I would like to thank you and your team for the opportunity to work with you on this
project. It was a valuable experience leading this team and working with you this semester. In
this document, we provide some background on the Innovation program, discuss the work we
have completed, go over a formal list of accomplishments, and provide recommendations for
future development. We dedicate this document to you and your team, your continued success,
and as a point of reference for the next developers to take over and continue this project. On the
behalf of our team I would also like to thank you, Cheyenne, and Johnny for your dedication,
support, and commitment to this project and our team. It was a pleasure working with each of
you.
Thank you,
Mauricio Aquino
Seamus Downey
University of Colorado, Colorado Springs. The program consists of a set of innovation core
classes that aim to teach students essential skills to prepare us for the workforce. In the bachelor
of Innovation, we define innovation as the transformation of ideas into impact. The innovation
core classes contain learning the process of entrepreneurship, gaining real-world teamwork
experience, and mastering the practice of innovation. These classes work together to give each
student current world experience and skills that will prepare them for the industry before
graduation.tal
The BI consists of three iterations of innovation teams courses, each building on one
another. There are three levels of teams courses: 2010, 3010, and 4010. This means students take
this course at different stages of their education which gives them the opportunity to take this
course as a sophomore, junior and senior. These courses connect a team of students, all from
different years and majors all into one place where they can share ideas and collaborate. Senior
level students are then assigned to clients that applied through the BI. These senior level students
then interview the class and pick team members. Each group of students will work together to
solve problems and innovate for a client. The first two levels act as members of the team, while
the 4010 students take on the role of team leads. These courses offer students the opportunity to
do real work with actual clients in the community. The advantages of this experience are
countless. Students gain not only real work experience in a series of different industries, but they
also learn the art of teamwork and communication. These classes give students practice in skills
that otherwise they may not have had the opportunity to learn. These skills can range anywhere
from research and marketing to web design and app development. All of these unique skills and
Our team, Extravagant Wellness, was given the task of researching and developing a
prototype phone application for Extravagant Wellness. This app will allow patients and clients to
import medical test results, monitor nutrition requirements with meal tracking, browse recipes,
and create shopping lists. This helps the client’s customers make healthier choices and
incorporate a longevity of wellness. The app will provide a centralized location for logging daily
meals and drinks to keep track of the user’s nutrient intake. It also will have a wide variety of
health focused recipes which cater to specific patient needs. Our team consists of six UCCS BI
students who were hand selected for their technical skills and knowledge in the software
development field. Seamus Downey and Mauricio Aquino are 4010 computer security students
who have taken on the roles of co-leaders. AJ Tuttle, Jesse Roberts, and Grace Neumayer are
3010 students studying game design, computer science, and computer security respectively.
Additionally, our team took on a new member of the BI degree program, William Kronfeld, a
2010 student studying computer security. With the cumulative knowledge base and skill set of
this handcraft team, we set ourselves up to not only meet, but exceed the Extravagant Wellness
client’s expectations.
The Bachelor of Innovation gives students the opportunity to develop skills that are
useful and necessary in industry. The program not only teaches teamwork with peers, but the
skills to work with clients as well. This skill is cultivated through experience, which the BI
program provides in a secure environment which students can apply in future jobs in their career
field. The program is built with the premise that innovation can be taught, and therefore used to
create societal impact. Every student will leave school with the skills necessary to build or
contribute to the society around them. The BI also gives students the opportunity to work on real
life problems and projects. Learning about how to solve problems that have already been solved
is one way of learning, but actually solving current real problems gives true experience and
Extravagant Wellness to research and develop a nutrition tracking mobile application for their
customers. “The purpose of the project is a mobile application that will monitor nutrition values
wellness. The application will also allow the user to communicate directly with their doctor for
proper monitoring of the patient’s goals.” The original proposal submitted by David Amess
requested the research and development of a fully functional and deployment ready mobile
application by the end of the allotted time frame. Knowing the resources and time requirements
associated with developing a mobile application, the BI team pivoted and refined the scope to
focus on the building of a prototype app that contains the core functionalities from the original
design. Mr. Amess also provided two associates from the industry, Cheyenne McCoy, who was
in charge of design and implementation, and Johnny Seay, who was an advisor for any technical
questions or problems that members of the team may have had with the applications’ overall
development.
The BI team conducted their work through multiple platforms and environments. Coding
of the front end of the application was done entirely through Android Studio in the Dart
programming language with the Flutter Software Development Kit. This allowed the team to
work and monitor the usability of the app in real time through an emulated mobile device. The
server portion of the application responsible for the storage and retrieval of user data was
programmed through a combination of Node.js and Python. The codebase was easily shared with
all involved parties through GitHub, a cloud based storage and versioning service that allows
multiple users to make alterations to code without conflicting with one another.
The team decided to distribute the technical workload by delegating sub teams and
assigning specialized work based on preexisting skills and experiences. The teams created a
series of different pages that would seamlessly work together to track a user’s nutritional goals
and daily intake based on through a variety of different meal selection methods. The nutritional
values for all foods tracked within the application were provided by the Food and Drug
Administration and utilized throughout the application to show progress towards daily goals. The
application takes the daily values and displays them for the user using percentages that allow the
user to work at improving over health by tracking specific target nutrition goals.
Despite pivoting, the BI team was able to accomplish all the requirements that were laid
out in the newly formed scope of work. Along with the mobile application, a market facing
presentation was created to display the overall application design as well as the developed
functionality of the application at the current time. The team was able to provide our client, Mr.
Amess, with a working prototype application that matched the recommended design and
specifications that were set in place. The results were monitored through weekly meetings with
Mr. Amess, where members of the team would display and identify the struggles and
accomplishments for each week. This allowed the BI team to remain on track and in sync with
The main goal of this project was to create a working prototype of the app laid out in the
design document drafted by the client and his team. This process can be broken down into three
phases that give a good idea of what our team accomplished during the semester. These stages
are the planning phase, learning phase, and the development phase.
Our initial goal for the start of the semester focused on determining the details of the
project and what our end deliverable would look like for the client. We had broken this process
down into four main objectives within our scope of work document at the beginning of the
semester.
Our initial objective was to get to know the client and his business to better understand
the project. This consisted of several meetings between the clients and the leads as well as the
client’s team and our BI team. We were able to ask the client questions and have a discussion on
the background of the project. From these meetings, we were able to gain a basic understanding
of the client, his business, and his role within that business. We determined our client worked
within a longevity clinic. This longevity clinic focuses on providing a unique series of medical
tests for the client’s customers and using this data to help the customer to make healthier choices.
This is where our app came into play. We determined we would be creating an app that would
eventually import this data, determine the customer’s nutrient deficiencies, and track the meals
they consume to help them meet goals to get to a healthier state of being.
Our next objective was to narrow down the scope of work in a way that would make the
project feasible given the constraints placed on the project. This project was a massive
undertaking due to the large scope of the app the client wanted our team to develop. The client
already had an idea in mind of what he wanted the app to be like. This was laid out in a technical
document provided to our team at the beginning of the semester. The result of this objective was
the decision to provide a prototype of the app by the end of the semester instead of a fully
functional and completed app. Our team decided to focus primarily on basic functionality as well
as front facing design. The main constraints we identified within our scope of work were time,
manpower and technical ability. These were all valid constraints and played a large role in the
difficulties we encountered and what we were able to accomplish this semester. The largest
obstacle here was that our team would be learning a brand-new programming language and had
no prior app development experience. This required learning about the programming language
we would be using and determining how to use and install the software to write with that
language. Getting this software installed and working for all members of the team was the first
accomplishment our team had made toward starting development. From here, we were able to
The third initial objective was to plan out the development of the app from a high-level
overview to develop an understanding of the design and implementation process. This was
accomplished through a design document provided by the client and his team. His project lead,
Cheyenne, provided us with an Adobe XD document that displayed the various screens of the
app and some brief explanations as well. This design document provided further detail than the
initial technical document that was provided by showing what the app would look like and how
The final initial objective for our team was to begin assigning group members to roles
and responsibilities in a way that would best fit the needs of the project. Once we reviewed the
design document and discussed it with both teams, Seamus and I began to look at how to divide
up the work for the semester. We ended up deciding to divide the group into three teams of two
people to work on three different parts of the app at a time. These teams consisted of William
and Seamus working on the login page and backend, Mauricio and Grace working on the add
meal and drink pages, and AJ and Jesse working on the nutrition page. We stayed in these teams
for most of the semester as we continued to develop these screens. This did not change till
towards the end when we started to link the pieces of our app together which required team
members working on different parts to meet and work on making those parts work together.
Achieving these four main objectives was the first major accomplishment our team made
during the semester and boosted our morale. We finally had an idea of what we would be
developing and how we would be accomplishing that. We also had tasks assigned to each team,
Throughout the development process we had several accomplishments that were not
outlined in the Scope of Work due to the number of unknowns caused by the nature of the app
development process. During this phase of the semester, we accomplished many learning goals
The first accomplishment that I would like to highlight is that our team managed to self-
teach ourselves how to develop a mobile app with no prior experience. Many members of our
team had experience programming applications for computers, but never had developed a mobile
app. This is something that is not taught at UCCS and that we had to learn ourselves. Learning
app development entailed learning a new language called dart and the software infrastructure that
houses that language called flutter. Many of our team members also had to learn how to design
user interfaces, which is also not something that is taught within our university. This was a huge
accomplishment. By the end of the semester, about half of the team has a strong understanding of
The next accomplishment I would like to highlight is our team had to learn how to use a
version control software called git. Many members of our team had never worked with a version
control software and so this was also a new learning experience. This was an important skill to
learn as git is the industry standard for version control software and would help our team
collaborate without the risk of issues that arise when collaborating on an app in a team
environment. These issues include losing work, overwriting another teammates work, breaking a
functionality that was previously working, etc. This software provided a way for us to keep our
work separate, track changes to our code, and roll back to previous versions if necessary.
Another accomplishment our team members achieved is learning how to program within
a team and group-based environment. Many members of our team were newer to programming
and only had experience programming alone within a class environment. As many of us figured
out, programming by yourself is entirely different from programming within a team of two and
within a group of 6. While this has clear advantages in terms of performance and productivity, it
also requires strong communication and teamwork skills. This allowed each of our members to
The next phase our team entered was development of the app. At this point, we had
learned the basics of the language and we began to reach some major accomplishments towards
The first development accomplishment for our team was the implementation of a
machine learning software that could take an image of a food and determine what the food is
from that picture. The success of this component was due to the hard work one of our team
members, William put in to making this work. William became the backend technical specialist
for the project and was essential for the success of this project.
The next development accomplishment was that our team created a server backend that
would store and retrieve data for the app as well as house the machine learning functionality we
had previously developed. We initially created a fake backend to meet the needs of passing data
until we were able to arrange getting a server for the client to work off of. Once we had this
server, we were able to create a fully functional and working server to work with our app.
The next major accomplishment was getting our individual functionality and components
within our assigned screens working. This was a two-step accomplishment. The first was getting
the functionality for our screen working as intended and the second was designing the user
interface and making it look good. Getting functionality to work is one thing, but as many of us
discovered, making it look good is an entirely other challenge. This was a challenge many of us
were not familiar with. In some cases, we also added a third step which was adding backend
functionality so that our app would work with the server we created.
The final accomplishment of app development was getting our individual screens and
components working together to create a working app prototype. This required collaboration
from different team members within the group as well as further backend integration with the
server. Once we accomplished this goal, we were able to present a working prototype to the
client which we refined during the last few weeks of the semester.
During the final weeks of class, we have continued to refine the app, so it is presentable
and so that it is ready to be passed off to a future team. We have also prepared a presentation for
the client and his superiors, this final documentation, and a thank you video for the client as per
Recommended Focus
application due to its potential to revolutionize the health field. One potential route the client
could pursue is requesting the help of a second team during the spring semester of 2021 in order
to continue the development of the mobile application. As it currently stands, many of the
foundational pages and feature sets required for the prototype app to stand on its own feet have
been implemented; however, sub-pages such as “Plan”, “Bio”, and “Cookbook” as well as minor
features such as page transitions still require development. The scope of the app is also ambitious
and there are many additional unique features and functionalities that need to be implemented. If
the client decides to apply for another BI team, our team also highly recommends that the
succeeding team’s scope be narrowed down to a few pages and feature sets to ensure their
completion and avoid spreading resources too thin. The Extravagant Wellness app is a large and
complex piece of software with many moving parts that could easily result in scope creep for
teams if not defined concretely from the beginning. Future BI team applications should also
include the request that at least one member has experience with backend and database systems
due to their complexity and importance to the app's success. It is also recommended the client
gets the team started on learning the skills necessary to develop the app as app development and
the language and tools to create the app will have to be acquired as the team progresses the
semester.
An alternative to applying for the BI team that the client may be interested in pursuing is
hiring a professional developer or group. This may be the best option since many of the features
yet to be implemented may require or benefit from an advanced skill set. This may also save the
client time and money in the long run as hiring another BI team would require that team to learn
the skills and existing implemented work from scratch. Another potential route that the client
could take is to hire previous members of the team which would require renegotiating terms
outside the context of the Teams course on an individual basis. Whichever route the client
decides to pursue we wish you success in future development of this application and contribution
Upon the current BI team’s completion of work, Extravagant Wellness should take
several steps to ensure the security of their software and systems. All BI team member’s github
accounts should be moved from a developer role to a read only role or be removed from the
repository entirely. Extravagant Wellness should change passwords on any and all accounts
created by or shared with the BI team. Alongside passwords, a new private key file should be
generated for the AWS EC2 instance that hosts the backend server. This ensures that only those
with the new private key can access the backend. Additionally, Extravagant Wellness should
apply for their own USDA food database api key. The current api key used within the application
Innovation Potential
The BI team strongly believes that the Extravagant Wellness app has the potential to
bring positive and innovative change to the medical field. Due to the ongoing Covid-19
pandemic, new opportunities within the medical field continue to present themselves. The
demand for remote care is at an alltime high as hospitals are filled to capacity and people are
urged to remain in their homes. The Extravagant Wellness app’s ability to dynamically track and
correct individuals' dietary deficiencies via proprietary testing pushes Extravagant Wellness into
a low competition sector of medical care with plenty of room to continue growth. Should
Extravagant Wellness continue to take advantage of these newfound opportunities and concrete
their position in the field, they will become a dominant force with a cardinal head start over
potential competitors.
VI. Conclusion and Discussion
Moving into the future, the BI team suggests that Extravagant Wellness continues
momentum in development by focusing their resources around the medical test data upload,
storage, and interpretation feature sets. The team believes this is an important focus point of
development as it plays such a key role in the evaluation of user’s nutritional deficiencies and
recommended daily nutritional goals. The data extracted from the user’s medical tests is
prevalent to many of the pages within the application and could likely lead to a potential
development bottleneck as other feature sets to be developed rely on it. Additionally, the team
practitioner portal is necessary to create the direct link between clients and practitioners.
We believe that the Extravagant Wellness mobile app will play a key role in helping your
customers remain healthy. Our team believes that your application has the potential to
revolutionize the health field with its unique and innovative qualities. These qualities include
unique health tests, medical specialist coaching, image recognition for meal tracking, and a wide
variety of healthy recipes. We wish you success in future development of this app, wherever it
may take you. On behalf of the Innovation Program we would like to commend your team for
setting such immense goals for this project and your unwavering commitment to the health field.
The BI team would like to personally thank Shawnee Starr and David Amess for
providing us the opportunity to work with Extravagant Wellness. Our team has gained so much
from working with you as our client this semester and we are truly grateful for this opportunity.
This experience has allowed each member of our team to learn to efficiently work within a
professional environment, as well as improve our knowledge base in the technical field of app
development. We are honored to have worked with you and we wish you continued success in
Scope of Work
Extravagant Wellness App
Seamus Downey
Mauricio Aquino
Assumptions:
● Assumption 1: We will need to acquire access to a web server and or a database system
to create a working prototype.
● Assumption 2: The client will need to work with the team to schedule meetings during
times that work both for the client and the team.
● Assumption 3: The client must prioritize and modify their expectations according to the
given constraints laid out below. The client must be reasonable in this regard.
● Assumption 4: The client must be present and interested in the project and the team and
give meaningful feedback.
Constraints:
● Constraint 1: Time - The time given this semester to complete the project.
○ Will there be enough time to complete the project? What will we be able to
complete with the time given? How can we narrow our scope to fit within the
time given?
● Constraint 2: Manpower - The amount of people we have on our team or that can assist
with application development.
○ Will we have enough people to complete the project? What can we accomplish
with the people we have? Do we have enough people with the necessary skill sets
to achieve our goal?
● Constraint 3: Technical Ability - Skills, knowledge, and technical expertise in required
fields.
○ Does our team have the skills we need to complete our project and provide what
the client is asking for? What does our team not know that they will need to
know? Is there enough time to learn this throughout the semester?
○ Example: Working with new software and coding in a particular language outside
of our familiarity. Working with databases and online unix servers.
High-level Risks:
● Risk 1:
○ Description: There is potential that the developed mobile app and revamped
website do not mesh as seamlessly as initially planned.
○ Probability of Occurrence: Low
○ Impact on Project: Medium
○ Mitigation Actions: Team leaders of both Extravagant Wellness projects shall
actively speak and work together in order to maintain on the same page.
● Risk 2:
○ Description: Due to the nature of software development, scope creep is a large
concern.
○ Probability of Occurrence: Medium
○ Impact on Project: Medium
○ Mitigation Actions: The BI team will set unambiguous and defined deliverables
and success criteria that must be accomplished before any further additions can be
made.
● Risk 3:
○ Description: There is potential that UCCS may bring the semester to an
unexpected halt should a Covid-19 outbreak happen on campus.
○ Probability of Occurrence: Low
○ Impact on Project: High
○ Mitigation Actions: The most action that can be taken to mitigate this risk is to
keep ourselves healthy and avoid entering situations that may be high risk for
Covid-19 spread.
AJ Tuttle - [email protected]
Extr
avagant Wellness App Development B.I. Team
About Us
Our team consists of six members studying under the Bachelors of Innovation degree program at
the University of Colorado Colorado Springs. The BI program provides our team with important
real world skill sets such as the use and application of intersectional innovation,
entrepreneurship, communication, and business strategies. All of our team members are currently
studying varying skews of computer science and have a passion for innovation. We believe that
through this degree and the experience gained working with real world clients, that we will be set
for success when entering industry.
Meet our Team
Seamus Downey
Mauricio Aquino
William Kronfeld
Jesse Roberts
Email: [email protected] - [email protected]
Degree and Major: Bachelors of Innovation in Computer Science
Teams Position: 3010 (Junior Level Status)
Programming Experience: Java
Grace Neumayer
Meeting Records
Client Meetings:
9/15/2020 - 6:30pm - 7pm
9/22/2020 - 6:30pm - 7:30pm
9/29/2020 - 6:30pm - 7:30pm
10/06/2020 - 6:30pm - 7:30pm
10/13/2020 - 6:30pm - 7:20pm
10/20/2020 - 6:30pm - 7:20pm
10/27/2020 - 6:30pm - 7:10pm
11/03/2020 - 6:30pm - 7:10pm
11/10/2020 - 6:30pm - 7pm
11/17/2020 - 6:30pm - 7pm
12/01/2020 - 6:30pm - 7:30pm
Technical Manual
Front End
*The latest version of the front end code currently exists on the “showcase” github branch*
login_screen.dart - Responsible for the building of the login screen of the app that is presented
upon startup
Important Classes:
_LoginScreenState - Contains all widget building functions responsible for the
login screen’s layout and functionality
Important Functions:
_buildLoginBtn - Upon the login button being pressed, _buildLoginBtn calls
handleUserData with the user’s username and password credentials in the
attempt to log the user into their account
Important Info:
The loginUrl string “http://54.70.209.230/login” will need to be changed if the
servers ip or login path is updated.
register_screen.dart - Responsible for the building of the account registration screen which users
sign up through
Important Classes:
_RegisterScreenState - Contains all widget building functions responsible for the
register screen’s layout and functionality
Important Functions:
_buildRegisterBtn - Upon the register button being pressed, _buildRegisterBtn
calls handleUserData with the user’s email, username, and password
credentials in the attempt to register a new user account
Important Info:
The registerUrl string “http://54.70.209.230/register” will need to be changed if
the server’s ip or register path is updated.
user_auth.dart - Responsible for authenticating a user’s data upon login or account registration
Important Functions:
handleUserData - Handles post requests to the server for both login and account
registration. Upon response from the server, handleUserData returns the
response’s Json body to the function caller
Important Info:
handleUserData dictates whether to make a login post or registration post based
on whether the passed in url parameter contains the keyword “login” or
“register”. If the urls are updated, the keywords must be updated as well.
setup_screen.dart - Responsible for building the setup screen that collects user’s personal info
for account setup
Important Classes:
_SetupScreenState - Contains all widget building functions responsible for the
setup screen’s layout and functionality
Important Functions:
_postUserInfo - Makes post requests to the server with the new user’s biometric
data so that it can be stored in the database
Important Info:
The post request made in the _postUserInfo function currently only stores the
users biometric data that is entered at the bottom of the setup screen. This
function can be later expanded to upload the allergens/preferences and
medical test documents.
setup_search.dart - Responsible for creating the search functionality of both the dietary allergens
and dietary restrictions section of the setup screen
Important Info:
The dietaryRestrictions and dietaryAllergens lists can be easily edited and
expanded to include more options for users to choose from. However, the
backend server would be required to track which recipes abide by the
newly added restrictions/allergens.
login_constants.dart - Is a constants file that contains many of the design settings and parameters
for all pages related to login/registration
Important Info:
The constants file increases design modularity by allowing a setting to be changed
in a single file and having it take effect over multiple widgets and pages.
Be weary when making edits to the contents of the constants file as it
could result in unintended changes elsewhere within the app’s design.
Meal Tracking
For the add meal functionality of the app, there are several files that make this component work
these are:
● addMeallHomeWidgets.dart
○ This file implements the homescreen widgets for adding a meal and a drink.
○ There are two main Widgets in this file _initMeal and _initDrink that allow users
to:
■ View their current progress for daily nutrients through the use of a
progress bar
■ Add a meal or drink with the click of a button
■ View previously added meals or drinks and their details using a scrollable
list of buttons
● addMealScreeen.dart
○ This file implements the main screen for adding a meal and the functionality to
take a picture or select one from your gallery.
■ Utilizes a library to implement this functionality
○ This screen presents the user with four options to add a meal. These are upload a
photo from the gallery, take a picture, search the USDA food database, or search
favorited recipes through the users personal cookbook.
○ One important function in this file is _pickImage function which takes in an
image source and uses the library to acquire that image, then passes it to the
cropScreen class.
■ Image source is gallery or camera depending on what user selects.
● callNutritionApi.dart
○ This screen implements the USDA food database. It calls the database, searches
it, returns results, and parses that data into multiple classes.
● cropScreen.dart
○ This file implements the crop screen page.
○ This screen is presented after a user has selected an image and utilizes a library to
crop the image.
○ The screen presents the image and then the option to confirm the image, edit it
with the cropping library or reset the image to clear it.
○ There are two important functions within this file which are _cropImage and
_clear. These each implement their corresponding functionalities.
● mealConfig.dart
○ This file contains all constants/globals for colors, sizes, widgets, etc.
● recipeView.dart
○ This file implements the recipe view page.
○ The recipe view screen contains a placeholder for an image, displays the name of
the selected food, shows the user the ingredients that make up the meal and
presents the nutrients for the food.
○ There are a variety of important functions in this file that provide various
functionality for the screen
■ The favorite function adds a meal to the current list of meals in the user’s
personal cookbook
■ The unfavorite function removes the meal from the user’s personal
cookbook.
■ The function, isFavorite, determines if the currently viewed meal exists in
the user’s personal cookbook.
■ The _removeFood function allows the user to remove the currently viewed
food from their currently added meals for the day.
■ The _reportFood function is a placeholder for future functionality to report
an inaccuracy in a meal.
● searchCookbook.dart
○ This file creates a search delegate object for the my cookbook search.
○ This search gets suggestions and results from the user’s personal cookbook.
○ The important functions for this file are:
■ passData which takes the selected food and portion size in the user’s
current meals for the day.
■ _choosePortionSize which allows the user to select from a list of
predefined portion sizes after selecting a meal.
○ The search delegate class allows us to have a functional search within the app.
○ There are four methods that are defined to control a search delegate object.
■ buildActions defines the button on the right of the search and controls
what it does
■ buildLeading defines the widget to the left of the search
■ buildResults is called whenever the user selects a suggestion or hits the
search key after typing a query. It displays results that match the query or
selected suggestion.
■ buildSuggestions is called whenever the user updates the search query and
displays a list of suggestions that contain the query
○ buildActions and buildResults are basically null since they are overwritten by the
searchDelegateWrapper.dart and not actually used within this app. However, they
do work if you choose to utilize them.
● searchDatabase.dart
○ This file creates a search delegate object for the USDA food database search.
○ This file searches by utilizing the callNutritionApi to search the USDA food
database.
○ There are a few functions in this file that provide important functionality for the
app
■ getApiData uses the callNutritionApi.dart to get results based on the query
entered by the user
■ passData which takes the selected food and portion size in the user’s
current meals for the day.
■ _choosePortionSize which allows the user to select from a list of
predefined portion sizes after selecting a meal.
○ There are four methods that are defined to control a search delegate object.
■ buildActions defines the button on the right of the search and controls
what it does
■ buildLeading defines the widget to the left of the search
■ buildResults is called whenever the user selects a suggestion or hits the
search key after typing a query. It displays results that match the query or
selected suggestion.
■ buildSuggestions is called whenever the user updates the search query and
displays a list of suggestions that contain the query
● searchDelegateCallback.dart
○ This file talks to the search delegate classes and passes the data to the wrapper.
This is the middle man between the search delegate classes and the wrapper.
○ The main function in this file is setCallbacks which is what links the suggestions
and the results from the search classes to the wrapper.
● searchDelegateWrapper.dart
○ This wrapper allows the search delegate object to be used within a container
widget.
● uploadScreen.dart
○ This implements the upload picture page.
○ Implements functionality to upload the image to the server and retrieve the result
to the server.
○ There are three main functions within this file which are
■ _showDialog which prompts the user to accept or deny the machine
learning result for the image they uploaded to the server
■ _showError which captures and errors from the connection to the machine
learning and displays them to the user
■ _upload which connects to the server, uploads the image, and receives the
response back for what the food is.
User Profile
user_profile.dart- Responsible for the building & updating of the user’s profile page
Important Classes:
_BubbleState- Contains the progress bar’s colors, as well function for building
the template of all draggable bubbles
_NutrientsState- Contains all widget building functions responsible for the user
profile’s layout & functionality
Important Functions:
initState- Everytime the main menu is reloaded (which, in turn, every time the
user profile is reloaded), the grid of bubbles is made & nutritional data is
assigned & updated
Important info:
When implementing file read & write, make sure to check if the file exists in
initState; if it doesn’t, run the code that creates myButtons & save the file
after. If the file does exist, set myBubbles equal to the saved list. There
should also be code that saves the file in the updateNutritionalData
function, as well as the DragAndDropGridView’s onReorder method.
Daily nutrients are currently hard-coded & there is no logic to fetch the user’s
actual daily nutrients.
The user’s total nutritional value is calculated but not displayed anywhere
If adding more nutrient bubbles, the height of the container that encloses the
DragAndDropGridView will need to be increased
Because of line 353, the bottom right bubble will never fill up. Rather than
checking k’s value, check if myButtons[k]’s text is not + (this entire check
can also be removed in replacing the + button)
Backend
The Extravagant Wellness BI team will not be including any server passwords within this
document for security purposes. Passwords will instead be delivered in a separate document only
to be shared with the client.
Backend files (located in the ~/backend directory on the amazon ec2 instance):
|- backend
|- config
|-index.js - Main configuration file, contains database ip, database port, database username,
database password, database name, socket url, socket port, logging level, and
API port.
|- index.js - Responsible for loading files and starting the server. To run it simply use node
Index.js or start it on a screen session.
|- logs
|- debug.log - A log file if the configuration file is set to debug
|- info.log - A log file if the configuration file is set to info
|- errors.log - A log file if the configuration file is set to error
|- node_modules - All the dependency files for the backend
|- package-lock.json - A lock file for listed dependencies
|- package.json - A list of dependencies and other things Node.js uses
|- public - A directory the holds all uploaded images
|- src
|- routes
|- login.js - The login handler
|- main.js - Main page, simply outputs {"hello":"World"}
|- recog.js - Image recognition handling system
|- register-get.js - A simple registration page for testing purposes
|- register-post.js - Registration system for the API
|- setup.js - Account setup system
|- test.js - PDF text extraction testing
|- server.js - The main API web server that loads the routes from the routes directory
|- util
|-crypto.js - Responsible for handling encryption
|-db.js - Responsible for handling database interactions
|-logger.js - Responsible for logging messages to the console and files
The only file that needs to be changed is located in the configuration folder config named
index.js
Updates/Progress:
Mauricio Aquino
Seamus Downey
Grace Neumayer
William Kronfeld
AJ Tuttle
· Working on the “write your first flutter app” listed on flutter’s website
Jesse Roberts
Mauricio Aquino & Grace Neumayer (Meal page & Drink page):
· Built the sign in screen for the app (design is work in progress since no XD file to
reference)
Updates/Progress:
· Researching and experimenting with new ML models and datasets for multiple object
recognition
Mauricio Aquino & Grace Neumayer (Meal page & Drink page):
· Researched into how to take, store, and upload pictures of food for meal/drink page
Mauricio Aquino & Grace Neumayer (Meal page & Drink page):
· Fixed drag and drop functionality to swap bubbles rather than shift them.
· Will start research on persistent storage so that user preferences can be stored and loaded
at runtime
· Added session data so that users don’t have to login every time the app is started.
· Created the login route of backend so that registered accounts can be referenced.