OUR DEV POST WITH WHICH API PRIZES WE ARE GOING FOR:
- Shoutpoint (used for SMS)
- IBM BlueMix (used for DB)
We were tired of seeing the wasted food stashes, the abandoned televisions, and the neglected appliances left out in the wind to brave the elements.
We sought to tackle the issue of excess - giving it to people who were in need.
We took our initial idea from UCI's one and only "Free & for Sale" group on Facebook - connecting those who were giving away items to those who were searching for said items, and making that process more efficient, fast, and dare we say - fun.
What it does
Free for Everyone allows for users to post items they'd like to give away, which is broadcast to a live feed. Other users are able to view detailed information, and indicate interest for items they'd be interested in. They will receive notifications (SMS) about the objects they subscribe to, and will also be notified when the object has been claimed!
There are two distinct users:
Supplier: The person who is providing an item. This person will create a post that provides her/his location, as well as vital information about the item. Recipient: The person who plans to receive the item. This person will subscribe to the post of an item, and be able to receive information about the whereabouts of the person/item, as well as be notified if the item is claimed in advance.
How we built it
We broke our development time into 3 distinct segments.
The first night, we didn't touch any code, APIs, or keyboards. We broke out pens and paper, and determined our specs, requirements, user stories, and wireframed the app. Once we were set on the same idea and goal, we spent time researching the APIs available to us, namely ShoutPoint, IBM Bluemix, and Microsoft Azure. We decided to pursue all 3.
The second day was devoted to setting up the core functionality of the app. Routes, server, database, and the majority of the application's features (posting, basic auth, basic sms, populating our views with dummy data).
Our final day was the most difficult - we had to cut a lot of the features we'd have liked due to the various walls we had hit the previous day. We saved a couple hours near the end to tidy up the application, ensure that we had a reasonably good UI / polish, and ensured that our app was at the demo-able stage.
Challenges we ran into
We fell into the trap of authentication, which we falsely assumed we needed as a core feature. We could have saved 8-9 hours of time had we skipped the step altogether and made do with cookies we made ourselves, and integrated authentication at a later step (which ended up being a massive bottleneck) We could have also researched the API's available to us in more depth, and asked more questions before spending hours testing before hitting a dead wall. We tried numerous times to deploy our server / DB onto one of the many platforms available, but would hit walls that were ultimately large sink holes!
And last, but not least - CORS.
Accomplishments that we're proud of
It's a full stack application, built in under 36 hours! We created a simplistic, easy to use UI that didn't get in our way. We made something that everyone on the team was eager to use and see on the app store. We failed a lot, but we didn't break down or give up and go home! We held stand-ups with the team every 2-3 hours to sync up on progress away from the computers. Stepping away helped us take a breather, check in with the rest of the team, and resolve issues that would normally not be possible if everyone was typing away.
What we learned
We learned a lot about dealing with various cloud solutions that we didn't know were available to us. CORS is quite unfriendly, but now we learned the importance of using the right headers. Standups can be only 5 minutes long, but can save you 4-5 hours of pain. Too many features causes confusion and more work for the team. Keep the features well defined, and low in number. Sudo saves lives. rm -rf / is NOT a good idea to send to somebody at 3 AM in the morning.
We want to finish this up, and get it into the app store. We want to get geolocation in here, and test it out at UCI! We're going to let the community police it. Possible an upvote/downvote system like Reddit/Yikyak. Allow for more concurrent users, get it up on AWS. Use various production grade libraries to minify the overall size and payload of the application to support many users! Do a live test and see what happens. And never stop improving!
Instructions on usage (dev):
Clone both repositories. FFA is the client, FFE_API is the backend. Run npm -install on both projects. Run mongod. In the FFE_API root directory, run app.js (nodemon / grunt work as well) In FFA root directory, run ionic serve