Inspiration

Interaction with indoor plants can reduce physiological and psychological stress, based on previous psychological and neurological studies. In addition many people face a common issue of forgetting when to water their plants or how to take care of them. By creating a game-like app that helps users learn to care for their plants, the goal of this project was also to help reduce their stress levels.

What it does

This app helps users to learn how to care for their plants while reducing levels of stress. The app also will change colour according to the time of day - blue at night to induce relaxation and yellow during the day to induce productivity.

How I built it

Design: Sketch and InVision were used for lo-fi, mid-fi, and hi-fi designs, along with interactive prototypes.

Front-end: The entire app was built natively using Swift 5.1 in Xcode 11 using UIKit, UserDefaults, NotificationCenter, and custom Protocol-Delegation. The architecture conformed to Apple's Model-View-Controller style.

Back-end: Express.js was used to create REST URIs which the front-end could communicate with to retrieve the data, and our server was hosted on an AWS EC2 instance so that our API could be publicly queried. MongoDB Atlas was used to persist our user and plant collection data.

Challenges I ran into

Design: After doing several user tests and iterations, I found that certain aspects of the UI, such as the 'add plant' button were unintuitive or caused confusion. Due to time constraint, I could only make small improvements which I was not yet able to validate through testing, but took into account the feedback from previous tests.

Front-end: Integrating with our Node.js backend hosted on AWS was one big hurdle. However, I learned a lot about implementing client-server communications in Swift.

Back-end: I found it a bit difficult getting used to and debugging the MongoDB Atlas API.

Accomplishments that I'm proud of

Design: Leaving enough time to do project research, user testing, and further iterations despite the time constraint. I found psychology/neuroscience articles to better understand the connection between indoor plant care and stress, in addition to validating my designs through testing.

Front-end: We are proud of our intuitive and cute UI. One of our biggest accomplishments was building the app to our UI designer's exact specifications from Sketch.

Back-end: Figuring out how to host a server on AWS.

What I learned

Design: It is important to do user testing as I am designing so that I can make small iterations and improvements along the way rather than starting over from the beginning each time.

Front-end: We learned how to use Protocol-Oriented Programming, Swift Generics, sending a wide variety of HTTP Requests over REST, and encoding and decoding JSON in Swift.

Back-end: It's important that we all agree on high-level architecture and design before we get into the nitty-gritty details of implementation. Any problems we can address earlier on in the process helps us reduce the amount of roadblocks we encounter later on.

What's next for Sprouts

Design: Creating screens for outdoor gardening (currently the UI is catered towards indoor plants) and trying to add different types of weather, such as rain, for the background. Further testing and improvements on current interfaces as well.

Back-end: Making the log-in and user registration functionality more secure using JWT authentication as well as setting up relations in the database for less data redundancy.

Share this project:

Updates