Inspiration
Inspiration comes from what is already being done with appointments and booking in general, what is not being done by Square at the moment, and what could be a good way to empower retailers to manage booking by themselves.
What it does
It allows customers of retail industry to book appointments through a simple UI and also gives a way to manage appointments after creation (like updating the date/time, cancellation).
How we built it
React is used for the UI, the database used is Mongodb, and the server is a fork of a demo available in a repository of Square.
Challenges we ran into
Showing a customer the correct date / time was challenging. A retailer is not necessarily located in the timezone someone accesses a page. Therefore, the time selected by a customer, if it is not in the same timezone as the business, will not be correct. So the date/time gymnastics was a challenge. Testing the web hook was a bit a challenge, I finally used an external service to send POST requests to my local environment. Even then, since the id of orders or payments were not configurable testing was not stratightforward.
Accomplishments that we're proud of
Bookings are easy to use and setup for anyone want to use it, the checkout API also is integrated so it will show the information related to the order to someone who booked an appointment (paid or not). The password less authentication makes it easy to authenticate, hassle-free. Changing bookings afterward works also well, and let someone change his/her mind after booking a service. So the accomplishment is I believe an easy and straightforward way of booking services.
What we learned
I definitely have a better understanding of how to setup by myself a CI/CD pipeline, so the hackathon was a great opportunity to do some experiments with that. The API uses web hooks and I never used web hooks before so learning about that was interesting and mind opening. In the same category of mind opening things I learned, the use of uuids was interesting as well. Until now I was only aware of nonce numbers to avoid the duplication of a request. I learned that uuids also can be used for the same purpose, and have a version encoded in it. Lastly, working on the authentication part of a user was interesting. Users typically set weak passwords, and setting up a password less scheme of authentication I have learned different ways of doing the same thing (authenticating securely).
What's next for Retail booking app
At the time of writing I still have to improve the tests. Also, when a potential customer changes his booking from the overview tab, there is the need for a mechanism to verify if, when changing the team member, the date/time matches his availabilities. The same is inversely true, changing the date/time should trigger a request to see if the team member chosen is available. Currently availabilities are only checked globally for the location, so this needs some improvements.
Built With
- docker
- express.js
- magiclink
- material-ui
- mongodb
- mongoose
- passwordless
- react


Log in or sign up for Devpost to join the conversation.