BrokenTable is a restaurant reservation application inspired by Resy and OpenTable that is built on React/Redux, Ruby on Rails, and a PostgreSQL database.
BrokenTable features back and front end user authentication using Rails, Active Record, and React-Router higher order components. Users are able to create an account as well as log into their account. Only logged in users are able to create restaurants, make reservations, and leave reviews. The users' database was seeded using Faker Ruby.
Google Maps’, TomTom’s, and Resy’s APIs were used to facilitate geolocation based searching to display restaurant map location. Resy's API was used to scrape restaurant details, but only provided the coordinates for a given restaurant. TomTom's API was used to get restaurant addresses. Google Maps' API was used for dragging and dropping the map to search restaurants. Rails is connected to AWS S3 for media storage and organization while maintaining content security with AWS IAM.
Scheduling / booking CRUD is managed by Active Record and PostgreSQL through transactional operations. A custom SQL query was utilized to avoid double bookings of restaurants for a given time slot and party size.
Guests are able to leave reviews consisting of a star rating as well as a text description. The ratings/reviews were seeded using Faker Ruby.
Logged in users are able to favorite / unfavorite restaurants. In the user's profile, they are able to see a list of their favorite restaurants.
Given more time, the following would be implemented:
Users would be able to search restaurants by name and food type. Reservations would be available for restaurants in more cities.
Users can earn points by booking reservations. Points earned on reservations are accumulated and can be redeemed for rewards.
When a request is successful or not, there will be confirmation.
Project is created with:
- Rails version: 6.1.3.1
- React version: 17.0.2
- React-redux version: 7.2.3
- styled-components version: 5.2.3
If you want to run Guard Livereload, go to the backend folder. In terminal, run guard