After moving into an apartment during my last years at college, I realized how different the living situation is. I share an apartment with one of my closest friends and we like to keep ourselves organized when dealing with chores.
I am a huge fan of having things planned out, even better when it's done automatically. That's where PlanSpace comes in.
What it does
PlanSpace focuses on 3 things:
- Automating chore assignments. Everyone puts in their fair share. If not, the app will adjust to it and balance it again.
- Providing quick updates on what tasks need to be done.
- Keeping it as simple as possible.
Let's say you live with 4 other people in a house.
You invite everyone to PlanSpace and then setup the tasks/chores that everyone in the house plans to do. Each task creation should take 30 seconds or less.
You then start getting push notifications for tasks due this week. In this scenario you have to do the dishes. After finishing up the dishes, you open the app which instantly displays your chores and you press "done".
That should only take a few seconds. The incentive of pushing the "done" button is that the app automatically chooses another person for that task based on who has been is behind on their chores. The app will notify them as well as around the due date.
In the case that you need to pick up someone else's work, the app will automatically give you a day off on that chore or an equivalent chore in the future.
How I built it
I started with creating a ruby on rails api hooked up to a postgresql database. I used active-model-serializer to keep the responses organized and low in size.
For authentication, I used the devise ruby gem hooked up with a JsonWebToken library. This allows for it to be quick and easy to support for different forms of authentication such as using Twilio for text authorization.
For the mobile app, I used React Native which allows for the app to work in both iOS and Android. Even better, most of the code can be reused to create a react web app.
I used redux for state management which allows me to keep the app looking smooth by lazy loading data and keeping asynchronous actions outside of components.
A node Socket.io server was used to provide realtime updates to tasks
Challenges I ran into
The biggest thing was time. There was so much I wanted to do but I am still happy with how far I got on the app. I made the decision to not worry so much about the authentication workflow or the portfolio screen. I got them to work just enough and then I worked on the heart of the project.
The ui needs more work, it is hard to tell what happens to a task after it is done. It makes it confusing, but animations should help.
Accomplishments that I'm proud of
I am proud that I was able to get some form of automation in. This app is getting close to something I could use. Nothing is hard-coded, everything is ready for production whenever I want to release it. I can deploy the api to heroku, aws, or google cloud. The mobile app is ready to be compiled and deployed. The app is built with scalability in mind.
At the moment a user can register, login, create a space, invite others to it, and schedule tasks.
I went to hackathons in highschool but was intimidated and stopped programming. Eventually I got back into it after years of studying. It is the first fullstack app I have ever made 100% on my own and I'm really happy with how it turned out!
What I learned
- Rushing features is not worth it. It leads to messy code and would need to be refactored in the future. Sometimes it's better to do the minimal work on less important features and focus on the main ones.
- Predication without using machine learning is hard
- Socket IO servers are awesome but are a little confusing to work with at first.
- Finding team members could have been worth it, at the very least for ui and ux I had to program the whole 24 hours to finally get to the automation part.
What's next for PlanSpace
- Clean up the workflows
- add animations / improved ux
- implement machine learning with tensorflow so that there are better predictions of which housemate should be assigned which tasks
- implement a bills feature to track expenses (maybe integrate Receipt ocr to scan a recieipt and automatically update the app)
- deploy the app to an aws ec2 / elastic beanstalk instance and setup the postgres db on an aws rds instance
- create a web app
I really could see this as a viable startup, if anything, it would provide a great learning experience to be applied to another future startup. Regardless, I do plan on releasing a production build this semester!