A full-stack web application for discovering and booking unique experiences. Built with React 19, Node.js, Express 5, and MongoDB.
Deployed Link: bookit.gammerce.in
Email: test@gmail.com
Password: 123456
Browse and search experiences with responsive design
Detailed view with image gallery, time slots, and booking summary
Secure login with email/password and Google OAuth 2.0
- Browse and search experiences
- User authentication (Email/Password & Google OAuth)
- Mobile OTP verification
- Apply promo codes for discounts
- Fully responsive design (mobile-first)
- Lazy loading images with skeleton loaders
- JWT-based authentication
- π¦ AWS S3 integration for file storage
- π― RESTful API architecture
| Category | Technology |
|---|---|
| Frontend | React 19, Vite, Tailwind CSS |
| Backend | Node.js, Express 5 |
| Database | MongoDB, Mongoose |
| Authentication | JWT, Google OAuth 2.0, bcrypt |
| File Storage | AWS S3 |
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher)
- npm or yarn
- MongoDB (local or MongoDB Atlas account)
- Git
git clone https://github.com/Abdul-Rakib/Bookit.git
cd Bookit# Navigate to backend directory
cd backend
# Install dependencies
npm install
# Create .env file
touch .envCreate a .env file in the backend directory with the following variables:
# Server Configuration
PORT=5000
NODE_ENV=development
# Database
MONGO_URI=mongodb://localhost:27017/bookit
# Or use MongoDB Atlas:
# MONGO_URI=mongodb+srv://<username>:<password>@cluster.mongodb.net/bookit
# JWT Secret (generate a strong random string)
JWT_SECRET=your_jwt_secret_key_here
# Google OAuth 2.0
GOOGLE_CLIENT_ID=your_google_client_id_here
# CORS Origins (comma-separated)
ALLOWED_ORIGINS=http://localhost:5173,http://localhost:3000
# SMS API (Optional - for OTP verification)
ONEAPI_SMS_API_KEY=your_sms_api_key_here
# AWS S3 Configuration (Optional - if using file uploads)
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_key
AWS_REGION=ap-south-1
AWS_S3_BUCKET=your_bucket_name# Navigate to frontend directory (from project root)
cd frontend
# Install dependencies
npm installThe frontend is configured to use a proxy in vite.config.js. If you need to change the backend URL, update the proxy configuration:
// frontend/vite.config.js
export default defineConfig({
server: {
proxy: {
'/api': 'http://localhost:5000' // Update if your backend runs on a different port
}
}
})Terminal 1 - Backend:
cd backend
npm run dev
# Server will run on http://localhost:5000Terminal 2 - Frontend:
cd frontend
npm run dev
# App will run on http://localhost:5173cd backend
npm start# Build frontend
cd frontend
npm run build
# The built files will be in frontend/dist
# Backend will serve these static files in production mode
# Run backend in production
cd ../backend
NODE_ENV=production npm startBOOKIT/
βββ backend/
β βββ controllers/ # Request handlers
β β βββ auth.js
β β βββ booking.js
β β βββ experience.js
β β βββ user.js
β βββ data/ # Sample/seed data
β β βββ sampleData.js
β βββ middlewares/ # Custom middleware
β β βββ auth.js
β βββ models/ # Mongoose schemas
β β βββ booking.js
β β βββ experience.js
β β βββ otp.js
β β βββ promoCode.js
β β βββ user.js
β βββ routes/ # API routes
β β βββ auth.js
β β βββ booking.js
β β βββ experience.js
β β βββ promo.js
β β βββ user.js
β βββ utils/ # Utility functions
β β βββ s3Utils.js
β β βββ smsUtils.js
β βββ .env # Environment variables
β βββ package.json
β βββ server.js # Entry point
β
βββ frontend/
β βββ public/ # Static assets
β βββ src/
β β βββ assets/ # Images, fonts, etc.
β β βββ components/ # Reusable components
β β β βββ navbar/
β β β βββ profile/
β β βββ context/ # React Context
β β β βββ globalContext.jsx
β β βββ hooks/ # Custom hooks
β β β βββ useAuth.jsx
β β β βββ useLogin.jsx
β β βββ pages/ # Page components
β β β βββ Auth/
β β β βββ dashboard/
β β β βββ experiences/
β β β βββ footer/
β β βββ routes/ # Route protection
β β β βββ ProtectedRoutes.jsx
β β βββ services/ # API services
β β β βββ api.js
β β βββ utils/ # Utility functions
β β βββ App.jsx # Main app component
β β βββ main.jsx # Entry point
β β βββ index.css # Global styles
β βββ package.json
β βββ vite.config.js
β
βββ screenshots/ # Application screenshots
βββ README.md
POST /api/auth/google- Google OAuth loginPOST /api/auth/send-otp- Send OTP for phone verificationPOST /api/auth/verify-otp- Verify OTPPOST /api/auth/logout- User logoutGET /experiences- Get all experiences (with search/filter)GET /experiences/:id- Get single experience detailsPOST /bookings- Create a new bookingGET /bookings/user/:userId- Get user's bookingsPOST /promo/validate- Validate promo code
- Start both backend and frontend servers
- Open browser to
http://localhost:5173 - Use test credentials or sign up with Google
- Browse experiences and make a test booking
ISC
Abdul Rakib