Back to Projects
Full-StackCompleted

Hotel Reservation Platform

May - Jun 2023
Next.jsTypeScriptTailwind CSSPrismaMongoDBNextAuth.jsReact-LeafletCloudinaryZustand
Code

A full-stack hospitality marketplace inspired by Airbnb, covering the full booking experience from browsing listings to confirming a reservation. It's also the project that helped land my previous full-stack role, and the one where a lot of my early full-stack habits took shape.

How It Works

  • Authentication runs through NextAuth.js with GitHub, Google, and a bcrypt-backed credentials flow, so signing up isn't locked to a single method.
  • Hosts list properties through a multi-step form, and photos go straight to Cloudinary instead of sitting on the application server.
  • Search goes beyond a text box: React-Leaflet renders an interactive map so guests can browse and narrow listings by location.
  • Prisma sits over MongoDB as a type-safe ORM, modeling users, listings, reservations, and linked OAuth accounts as related entities, with reservation pricing derived from the selected date range.
  • Zustand handles the lighter client state, modals and search filters, while Tailwind CSS keeps the UI usable from phone to desktop.
  • Guests can favorite listings and track upcoming and past stays from a dedicated trips page.

Key Highlights

  • Multi-provider authentication - GitHub, Google, and email/password
  • Host workflow for creating listings with Cloudinary image uploads
  • Advanced search and filtering by category, location, dates, and guests
  • Interactive map-based location search and picker
  • Booking system with date-range reservations and price calculation
  • Favorites and a dedicated trips/reservations dashboard
  • Responsive design across all devices

Tech Stack

  • Next.js & TypeScript for the full-stack application
  • Prisma & MongoDB for type-safe, flexible-schema data storage
  • NextAuth.js for multi-provider authentication
  • React-Leaflet for interactive map search
  • Cloudinary for image hosting
  • Zustand for client-side UI state