view recurring events and your history for them
edit account information, donation settings, and 3rd party integrations
add new events with reminders
user profile with streaks and donation history
public shaming on twitter if you're late
Intro Psych tells us that the best way to make people do things is to present them with the possibility of losing something. StickK explains that "What behavioral science tells us is that we are loss-averse, social animals that make decisions in a time-inconsistent manner. What…? Simply put, we hate losing things and often give into immediate gratification (e.g. eating a donut) at the expense of our long term goals (e.g. losing weight)."
From personal experience, we know that no matter how much we want to build good habits, like getting out of bed to eat breakfast, going to the gym, and attending lecture), when faced with temptations like a cozy bed, extra dessert, or just one more episode of The Office, it's hard to resist.
BeThere uses a combination of loss aversion and accountability to encourage you to reach your full potential. While many services try to encourage you to stop bad habits by forcing you to lose money when you succumb, they rely on the users to keep themselves accountable. It's easy to check off a box even though you didn't do the habit, or simply forget to update your lists. BeThere changes that by checking your location for place-based activities. There's no way to fake it: if you weren't in class, BeThere will know.
What it does
BeThere motivates you to get to places on time. We pull your events from Google Calendar and make sure you're at the location you specified when you said you’d be there. If you’re not, we’ll pull money from your bank account and donate it to a charity. We’ll also tweet from your Twitter account, publicizing to the whole world that you were late.
BeThere also keeps track of how many times you've been on time and displays your streaks. You can chose how much repeat offenses will increase the charge, as well as which charity you're donating to.
How we built it
Flask powers a RESTful API deployed on Heroku, which handles integrations with Google Calendar, Capital One, and Twitter. mLab hosts a MongoDB instance user information
iOS app is built in Swift with SwiftCharts, AlamoFire, and CBCalendar.
Challenges we ran into
None of us had done any sort of work with push notifications before, so learning to use those was a huge challenge. BeThere had to keep track of location in the background, while complying with Apple's strict rules on background app usage.
This was also our first time deploying a webserver not on our local computer. It was difficult figuring out how to configure the ports so that we could run it on Heroku.
In addition, this was our first time building something heavy enough that we had to optimize for performance. We ended up trimming down the number of requests and the data we passed per request, but for a while, were trying to test with an API that took 30 seconds to load.
Accomplishments that we're proud of
Push notifications work! Push notifications in the background work! Location services in the background works! If you're not somewhere on time, BeThere will tell you!
We're proud that we managed to integrate with legitimate APIs (Annie finally understands GET and POST requests). push notifications. We're proud of the UI (Ngan is a graphic design genius).
We (think) we finally learned how to use git to collaborate properly. While some of the commit messages were a bit suspicious, we figured out how to use and merge branches.
What we learned
How to Google error codes. The importance of synchronization across multiple threads. How to use and make RESTful APIs. How to communicate and split up work as a team (usually, all four of us were working on different things, with periodic breaks to merge).
What's next for BeThere
We'd like to include alerts that tell you to when you have to leave your current location to get to your event on time. We also want to leverage the power of social influences more by creating a leaderboard where you can compare your streaks and stats with your friends.