Week 6 into the bootcamp and we made an eCommerce site from scratch!
Proudly Presents
FlatironShop
The Non-creepy alternative to Craigsglist
https://flatironshop.herokuapp.com/
THE IDEA
FlatironShop is a marketplace where FlatironStudents can buy and sell. Thus the exchanges take place within a curated community where interactions are safe and pleasant (as opposed to very open platforms like Craigslist).
FEATURES
User authorization and authentication
Notification emails upon sign up and completed order
Filtering for items by category, persistent filters
Fuzzy Search
User ratings and reviews
Users can set up and update new items for sale with description and picture
User profile page with average ratings, reviews, biography, profile picture
TECHNOLOGY/LIBRARIES
Web Framework: Rails
Database: Postgres
Deployment: Heroku
Emailing: SendGrid
Pagination: Kaminari
Picture Upload: CarrierWave
File Storage: AWS S3
What did you learn?
How to send emails to users?
How do we display a limited of results per page and allow user to flip back and forth?
How do we implement filtering for categories?
How do we implement pictures upload?
Where do we store the pictures when the app is moving from development to prodcution?
And last but not least: CLEARFIX! It was our go to solution for unnerving CSS page layout madness!
There is a reason that programmers work in pairs or groups. When you are stuck on a problem for hours, it can be very frustrating. Asking your programming partners can help you identify solutions so much quicker. The mysterious error message might be cause by a missing semicolon or it could be a complex configuration issue. In either case, I learnt that it is time efficient and better for one's mental health to ask sooner, rather than later. For people who tend to be hesitant to ask for help, like me, this is a valuable lesson:
You can't and don't have to solve everything by yourself - so tap into other people's minds and ask!
What was the most difficult part?
IDEATION
As I learnt from last project I wanted to focus more on finding an idea that makes you feel excited. Unlike last project, our options seemed limitless because we are not making an application for the command line but a 'real' tangible website! Thank you Rails!
Although (or because?) the options seemed wider it was still very hard to come up with a genius idea.
When I worked in London at my old company a guy from Google had come in to hold a workshop about Ideation. And one thing stuck to my mind: you cannot generate ideas sitting at your computer. For creativity one needs to be relaxed and in an effort less state of mind. It is more inspiring to go to the pub and have some drinks with your colleagues rather than sit around a table in a conference room. For example, Dali was generating his ideas by accessing the state between awake and asleep. Allegedly he'd rest his chin on a brush and when he was about to doze off, his head would slip off and he'd wake up, remembering the thoughts that occurred right before falling asleep.
DATABASE MODELLING
Setting up the tables for an eCommerce shop seemed simple at first. There are users, items, and a cart. Surprisingly, it took us hours to figure out the all the questions like:
What models do we need? It seemed easy at first but then came up the questions of: do we actually need a Cart model or do we store items in a session? Do we need a model for the Orders? Users can be buyers and sellers, how are we setting up the tables?
What are the relationships between the models? Should the relationship between users and items/orders be a many to many relationship? Should orders stand between users and items? Should the address attribute go to the users or orders table?
USER FLOW AND PAGE LOGIC
The more we interacted with our page, the more we had to get into the nitty gritty.
Handle routing: when the user wants to perform an action where they need to be logged in, how to return to that page after authorization?
Different authorization levels for admin and buyer/seller, e.g. only admins can see all users, and create/update categories
Handle wrong/invalid entries, e.g. user enters invalid city
Limit access for buyer/seller roles, e.g. users should not be able to put their own items into the cart, but should be able to see them on main page with all listings
What was the funnest part?
Working with two very smart and quick individuals, tap into their brain, and be inspired by their problem solving style - made working on this project feel like a breeze.
Adding new features and seeing the progress every day
Figuring out things that we have never done before, for example emailing and filtering for results - the feeling of achievement and adding knowledge is awesome!
Positive surprises: working separately on substantial chunks of code and experiencing no merge conflict
How would FlatironShop 2.0 look like?
Add messaging feature so that buyer and seller can communicate
Save/follow favorite sellers, receive an alert when new items are listed
Design Logo and Welcome Page
Sign up with Facebook/Twitter/GitHub accounts
Validation for passwords (min length, characters allowed, etc)
Implement state and city select in address form (dependent fields)
Actually being able to buy with your credit card
Filter for price range
Fix bugs: e.g. rating can be only 1-5, hide password entries