NoWaitz is a full-stack appointment booking platform that connects customers with service providers. It enables users to discover services and book appointments seamlessly, while service providers manage shops, employees, schedules, and bookings through a unified dashboard.
π Live Demo
Frontend: https://nowaitz.vercel.app
β οΈ Note
The backend is hosted on Render (free tier).
The first request may take 30β60 seconds due to cold start.
Please wait patiently β subsequent requests are fast.
This project was built to understand real-world full-stack system design, including role-based access control, scheduling logic, payment workflows, and third-party integrations.
- Service discovery by category and location
- Detailed shop and service listings
- Real-time appointment booking
- User profile & booking history
- Google OAuth login
- Shop profile management
- Employee and staff management
- Schedule & availability configuration
- Service pricing and duration setup
- Appointment confirmation and tracking
- Earnings and payment overview
- User and provider management
- Service category management
- Shop moderation
- Financial analytics
- System-wide monitoring dashboard
- Designed RESTful APIs with proper separation of concerns
- Implemented role-based access control (User / Provider / Admin)
- Built secure authentication using JWT and Google OAuth
- Handled concurrent bookings with schedule validation
- Integrated Razorpay for payments with verification
- Used cron jobs for background tasks and cleanup
- Followed modular backend architecture for scalability
- Node.js, Express.js
- MongoDB with Mongoose
- Authentication: JWT, Passport.js (Google OAuth)
- Payments: Razorpay
- Messaging: Twilio (SMS), Nodemailer (Email)
- File uploads: Multer
- Scheduling: node-cron
- Security: Helmet, CORS
- React 19, React Router
- Redux Toolkit (state management)
- Tailwind CSS
- Google Maps API, Leaflet
- Chart.js (analytics)
- Framer Motion (animations)
- React Hook Form
- Node.js (v16+)
- MongoDB (local or cloud)
- npm or yarn
Before running this application, make sure you have the following installed:
- Node.js (v16 or higher)
- MongoDB (local or cloud instance)
- npm or yarn package manager
-
Clone the repository
git clone https://github.com/descent0/nowaitz.git cd nowaitz -
Backend Setup
cd backend npm install -
Frontend Setup
cd ../frontend npm install
Create a .env file in the backend directory with the following variables:
PORT=5000
MONGODB_URI=mongodb://localhost:27017/nowaitz
JWT_SECRET=your_jwt_secret
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
RAZORPAY_KEY_ID=your_razorpay_key_id
RAZORPAY_KEY_SECRET=your_razorpay_key_secret
TWILIO_ACCOUNT_SID=your_twilio_account_sid
TWILIO_AUTH_TOKEN=your_twilio_auth_token
TWILIO_PHONE_NUMBER=your_twilio_phone_number
EMAIL_USER=your_email@gmail.com
EMAIL_PASS=your_email_password
REACT_FRONTEND_API=http://localhost:3000Create a .env file in the frontend directory:
REACT_APP_API_URL=http://localhost:5000
REACT_APP_GOOGLE_MAPS_API_KEY=your_google_maps_api_key
REACT_APP_RAZORPAY_KEY_ID=your_razorpay_key_id-
Start MongoDB (if running locally)
mongod
-
Start the Backend Server
cd backend npm run devThe backend will run on
http://localhost:5000 -
Start the Frontend Application
cd frontend npm startThe frontend will run on
http://localhost:3000
nowaitz/
βββ backend/
β βββ config/ # Configuration files (passport, cron)
β βββ controller/ # Route controllers
β βββ lib/ # Utility functions and database connection
β βββ middleware/ # Authentication middleware
β βββ model/ # MongoDB models
β βββ routes/ # API route definitions
β βββ uploads/ # File upload directory
β βββ index.js # Main server file
βββ frontend/
β βββ public/ # Static assets
β βββ src/
β β βββ Components/ # React components
β β βββ store/ # Redux store and slices
β β βββ ... # Other React app files
β βββ package.json
βββ README.md
The application uses role-based access control with three main roles:
- User: Regular customers
- Service Provider: Shop owners and employees
- Admin: System administrators
Authentication is handled through JWT tokens and Google OAuth integration.
Payments are processed through Razorpay, supporting:
- Secure payment processing
- Multiple payment methods
- Payment verification and webhooks
- Refund management
POST /api/auth/login- User loginPOST /api/auth/register- User registrationGET /api/auth/google- Google OAuthPOST /api/auth/logout- User logout
GET /api/shop- Get all shopsPOST /api/shop- Create new shopPUT /api/shop/:id- Update shopDELETE /api/shop/:id- Delete shop
GET /api/appointments- Get user appointmentsPOST /api/appointments- Book a new appointmentPUT /api/appointments/:id- Update appointment status
GET /api/serv- Get all servicesPOST /api/serv- Create new servicePUT /api/serv/:id- Update service
POST /api/razor-pay/order- Create payment orderPOST /api/razor-pay/verify- Verify payment
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
For support, email support@nowaitz.com or join our Discord community.
- React and Express communities
- Open source contributors
- Service providers and customers using the platform