## HouseSearch - A NWHacks 2019 Project

Contributors: Stephen Yang and Justin Aujla

### Inspiration & Goals:

In the hectic environment of our modern day lives, buying a home has never been a more challenging and time-consuming task... At least, so I've been told. Hopefully, HouseSearch can help expedite the process by sorting houses by location, thus increasing affordability and convenience in the house buying process.

### What It Does

Instead of directly sorting houses by price or number of bedrooms, we mainly sort houses by location. By inputting one's workplace, school, hobby locations, sports facilities, preferred parks and more, we can approximate the most economical home purchase with regards to travel distance and cost.

### How We Built It

We mainly used Python, HTML, and JS, and also the Google Maps API and RetsRabbit API.

### Challenges We Ran Into

Communicating between JavaScript and Python via POST and GET requests was a challenge for us, and understanding the Python requests library helped a lot with this. As well, the API's we used required lots of reading and exploring references, which was frustrating at times.

### Accomplishments that we're proud of

For us, this was our first 24-hour hackathon. We are proud (and surprised) that we were able to stay focused throughout the night to work on the project.

### What We Learned

Documentation and references are your best friends because they actually tell you how API's and Libraries work.

### What's next for HouseSearch

We want to implement machine learning or more advanced mathematical concepts to more realistically choose a house based on user input locations. We would also like to increase the number of user inputs our program receives to better suit the user's needs.
## Inspiration

As roommates, we found that keeping track of our weekly chore schedule and house expenses was a tedious process, more tedious than we initially figured.

Though we created a Google Doc to share among us to keep the weekly rotation in line with everyone, manually updating this became hectic and cumbersome--some of us rotated the chores clockwise, others in a zig-zag.

Collecting debts for small purchases for the house split between four other roommates was another pain point we wanted to address. We decided if we were to build technology to automate it, it must be accessible by all of us as we do not share a phone OS in common (half of us are on iPhone, the other half on Android).

## What it does

**Chores:**
Abode automatically assigns a weekly chore rotation and keeps track of expenses within a house. Only one person needs to be a part of the app for it to work--the others simply receive a text message detailing their chores for the week and reply “done” when they are finished.

If they do not finish by close to the deadline, they’ll receive another text reminding them to do their chores.

**Expenses:**
Expenses can be added and each amount owed is automatically calculated and transactions are automatically expensed to each roommates credit card using the Stripe API.

## How we built it

We started by defining user stories and simple user flow diagrams. We then designed the database where we were able to structure our user models. Mock designs were created for the iOS application and was implemented in two separate components (dashboard and the onboarding process). The front and back-end were completed separately where endpoints were defined clearly to allow for a seamless integration process thanks to Standard Library.

## Challenges we ran into

One of the significant challenges that the team faced was when the back-end database experienced technical difficulties at the tail end of the hackathon. This slowed down our ability to integrate our iOS app with our API. However, the team fought back while facing adversity and came out on top.

## Accomplishments that we're proud of

**Back-end:**
Using Standard Library we developed a comprehensive back-end for our iOS app consisting of 13 end-points, along with being able to interface via text messages using Twilio for users that do not necessarily want to download the app.

**Design:**
The team is particularly proud of the design that the application is based on. We decided to choose a relatively simplistic and modern approach through the use of a simple washed out colour palette. The team was inspired by material designs that are commonly found in many modern applications. It was imperative that the designs for each screen were consistent to ensure a seamless user experience and as a result a mock-up of design components was created prior to beginning to the project.

**Use case:**
Not only that, but our app has a real use case for us, and we look forward to iterating on our project for our own use and a potential future release.

## What we learned

This was the first time any of us had gone into a hackathon with no initial idea. There was a lot of startup-cost when fleshing out our design, and as a result a lot of back and forth between our front and back-end members. This showed us the value of good team communication as well as how valuable documentation is -- before going straight into the code.

## What's next for Abode

Abode was set out to be a solution to the gripes that we encountered on a daily basis.
Currently, we only support the core functionality - it will require some refactoring and abstractions so that we can make it extensible. We also only did manual testing of our API, so some automated test suites and unit tests are on the horizon.
## Inspiration

As students transition back into in person classes, housing search will pile on to the numerous challenges students already face. Sadly, the vaccine does not provide us immunity to the housing crisis students face so we had to generate our own vaccine called Spot. The frustration of messaging multiple landlords on a variety of platforms while keeping track of all the location addresses was the main drive for our project idea.

* **Struggling** to find housing due to tedious search process
* Multi-platform search is a necessity which leads to high time consumption
* Poor response rates from landlords due to mass application messages

## What it does

Spotᵀᴹ is a housing market platform where tenants and landlords can match based on preference and compatibility. By incorporating the simple match system from Tinder, tenants can breeze through housing applications curated towards their housing preferences while landlords get the luxury of a clear tenant application with no text fluff. The instantaneous matching feature and profile customization seeks to condense and simplify the rental process for tenants and landlords alike.

* Allows tenants and landlords to match based on their preferences
* **Simplifies** application process with profile and simple match system
* **Reduces redundancy** in application process, only one application is required from both sides

## How we built it

We built Spot with **React**, **AWS**, **GraphQL**, **Typescript**, **Amplify**, and **DynamoDB** . We used Amplify throughout as it helped with user authentication, creating GraphQL APIs, and setting up our database.

## Challenges we ran into

During this hackathon we ran into various issues, the issue that was prominent throughout the event was merge conflicts between shared tasks. Since we all knew how to code the front-end, we had to make edits which were conflicting with each other. Additionally, we also ran into a lot of issues using AWS and Amplify as we struggled to get the User Authentication to work and there were deployment issues.

* **Merge conflicts** between shared tasks
* Image on deploy not showing
* User login and authentication from amplify not working
* Backend functions not outputting as desired

## Accomplishments that we're proud of

We are proud that in such a short time we can create a slick front-end, that is simple and pleasing to the eye. Furthermore, we're proud that we used new technologies for the first time and were able to complete the project before the demo. Lastly, we were able to develop a solution to a common issue that we can closely relate to as we are students ourselves.

* Create a Slick front-end, simple and pleasing to the eye
* Developed a solution to a common issue amongst students and tenants
* Having a complete project before the demo : )

## What we learned

During this hackathon we learned that communication is key as it helped us prevent issues, develop our tasks efficiently and piece the entire project together. We also learned that we couldn't make all the features we talked about in the planning phase and that we need to allocate time for the main features. Lastly, we all learned how to use new technologies, as for some of us is was our first time using AWS, GraphQL, DynamoDB, and Typescript.

* Time allocation for priority tasks
* How to resolve merge conflicts
* Creating an eye-catching UI
* Using new technologies

## What's next for Spot

We definitely want to continue working on Spot as we could not deliver all the features we planned during the hackathon. One of the features we wanted to develop is a premium mode that grants access to greater features for both tenants and landlords. These include a Premium function that automatically suggests tenants and landlords to match based on their compatibility score. Additionally, we wanted to limit swipes and allowing Premium members to swipe more. Lastly, a lease agreement generation that generates a contract based on the tenant and landlords needs.

* Premium function that automatically suggests tenants and landlords to match based on their compatibility score (calculated from their preference setting)
* Limited swipes/possible matches per day for monetization. *Premium allows for more swipes*
* **Lease agreement generation** based on the address of the location and user credentials (lease period, agreed rent price etc.)