Frizbay
After 14 years playing Ultimate Frisbee, I found myself with a frankly ridiculous number of shirts, shorts and other team merchandise. Rather than send them to landfill, I built an online marketplace with a difference. Players add their second-hand items for sale, and all profits go to a charity of their choice.
This proved to not only be a very rewarding and educational lockdown project in which I worked with technology that was new to me, but one that measurably benefited the outside world. To date, around 250 items have been sold on Frizbay, raising over £3000 for good causes in the process.
Note: the site has been hidden for the time being to avoid new users signing up; I don't have time to maintain it. Once I do have time I plan to try and launch in the US as well as in Europe and Asia, where the proof of concept has been very successful.
I used Vue 2 and Typescript, with VueX for state management and a Firebase NoSQL database.
Frizbay handles user registration, authentication and validation. Additionally, each user has a shopping cart that persists between sessions, and can sign up to become a seller on the platform.
The main challenge of this project was the e-marketplace nature of the site, where users can both add items to sell, and purchase items themselves. I integrated Stripe into the frontend using their comprehensive API. Payments are processed using Stripe, and users who sign up to become a seller are taken through the Stripe signup process to allow payments to be taken and distributed.
When processing payments, money is distributed to multiple destinations. Commission is sent to the Frizbay account, postage refunds are sent to each seller involved in the transaction, and the remainder is set aside for donation to the charities named by each seller.
Calculating a user's cart total involved predicting the postage and packaging costs to each seller. As Frizbay is not partnered with a shipping partner, all postage is performed by the sellers at a (fairly) fluctuating rate.
I developed an algorithm to calculate a predicted postage cost to and from different areas of the world, depending on the number of items being sent. This was then used in the calculation of the user's cart total per seller.