A full-stack room booking application with an admin dashboard, automated email workflows, room management, and a calendar-based scheduling interface. Built with a modern TypeScript stack and deployed across Vercel, Railway, Supabase, Resend, and Cloudinary.
Frontend: https://room-booking-production-mlmp-fwi1lrdwd.vercel.app/
Frontend:React, TypeScript, Vite, Tailwind, shadcn/ui, FullCalendar
Backend:Node.js, Express, TypeScript/JS, Supabase PostgreSQL, Resend (email), Cloudinary (room images)
Deployment:Railway (backend), Vercel (frontend)
- Admin dashboard with FullCalendar (month/week/day views), custom event rendering, and booking management
- Room CRUD operations with Cloudinary-based image upload and multi-location grouping
- Automated and manual email workflows using Resend (confirmation, cancellation, reschedule)
- Transactional bookings with PostgreSQL(Supabase) and admin override
- Secure admin login, historical booking archive, and searchable booking history
Here is the overview of the codebase organization:
backend/
βββ config/
βββ controllers/
β βββ adminController.js
β βββ bookingController.js
β βββ otpController.js
β βββ roomController.js
βββ public/dist/ # Static assets
βββ routes/
β βββ adminRoutes.js
β βββ bookingroutes.js
β βββ otpRoutes.js
β βββ roomRoutes.js
βββ utils/
β βββ emailService.js
βββ server.js
βββ package.json
frontend/
βββ public/ # Images, icons
βββ src/
β βββ components/
β β βββ ui/ # Shadcn components
β β βββ AdminPanel.jsx
β β βββ BookingForm.tsx
β β βββ ManageBooking.tsx
β β βββ RoomCard.tsx
β βββ lib/
β β βββ admin-api.ts
β β βββ store.ts # State management
β β βββ utils.ts
β βββ pages/
β βββ types/
β βββ App.tsx
β βββ main.tsx
βββ vite.config.ts
βββ package.json
- Backend Setup Navigate to the backend directory:
cd backend
npm install
Create a .env file in the backend folder and add these environment variables:
# Server Configuration
PORT=5000
# Database (Supabase PostgreSQL)
DATABASE_URL=
# Resend Email Service
RESEND_API_KEY=
SENDER_EMAIL=
# Admin Authentication (for Admin Panel login)
ADMIN_EMAIL=
ADMIN_PASSWORD="1234"
Start the server:
npm start or npm run dev
- Frontend Setup Open a new terminal and navigate to the frontend directory:
cd frontend
npm install
- Backend: Railway
- Frontend: Vercel
- Database: Supabase PostgreSQL
- Images: Cloudinary
- Email: Resend
For any queries or contributions, feel free to open an issue or submit a PR.