A full-stack Sinatra, Ruby & PostgreSQL project built at Makers Academy
MakersBnB is an Airbnb-style accommodation booking platform that allows users to list spaces, view available properties, request bookings, and manage reservations.
It was built over a week in a team of 4 using pair programming, TDD, and Agile principles.
Repository:
👉 https://github.com/JoshHil97/makersbnb-jh
Users can:
- Register an account
- Log in securely
- Create and publish property listings
- Browse all available listings
- Request to book a space
- Manage booking requests
Built using:
- Ruby
- Sinatra
- PostgreSQL
- ERB templates
- RSpec (TDD)
- Capybara (feature tests)
- Designed the full PostgreSQL relational schema
- Created tables for users, listings, and bookings
- Implemented foreign keys + referential integrity
- Normalised tables for cleaner queries
- Wrote SQL queries for:
- availability checks
- retrieving user listings
- booking clash prevention
- Implemented core routes:
- view listings
- create listings
- create bookings
- view booking requests
- Built repository classes for clean DB access
- Added parameter validation & error handling
- Ensured MVC pattern throughout the project
- Built sign-up + login flows
- Added hashed passwords
- Session-based authentication
- Protected routes for logged-in users
- Redirects + flash messages for errors
- Users select availability dates
- Booking request created and linked to listing
- Listing owner can approve or reject the request
- SQL used to detect date conflicts
- Wrote:
- unit tests (repositories, models)
- integration tests (routes/controllers)
- feature tests (full user flows)
- Practised red-green-refactor
- Pair programmed test-first features
- Daily standups
- Pair rotations
- Git branching workflow
- PR reviews
- Kanban task management
- Full CRUD development
- MVC architecture with Sinatra
- SQL schema design & migrations
- Secure authentication with sessions
- Writing clean, reusable Ruby code
- Test-driven development with RSpec
- Handling cross-team merge conflicts
- Building a real product under time pressure
- Create account
- Secure login
- Persistent session
- Private dashboard
- Add new listing
- View all listings
- Price, description, availability fields
- Listings tied to the current user
- Send booking request for any listing
- Select date range
- Owner receives booking request
- Owner can accept or decline
- Availability enforced by SQL rules
- Listing belongs to a user
- Booking belongs to listing + requester
- Availability determined by DB
- Everything persists in PostgreSQL
bundle install


