A complete MERN stack real estate application with property listings, user authentication, image upload, search functionality, and admin panel.
- Frontend: https://property-dekho-in.onrender.com
- Backend API: https://propertydekho-in.onrender.com
- Browse properties with infinite scroll
- Advanced search and filtering
- Create, edit, delete property listings
- Image upload with Cloudinary integration
- Interactive property maps
- Nearby properties discovery
- JWT Authentication + Google OAuth
- User registration and login
- Profile management
- Favorites system
- Property comparison (up to 4)
- Real-time chat between users
- Admin dashboard
- User management (block/unblock)
- Property oversight
- Role-based access control
- Responsive design (mobile-first)
- Modern animations with Framer Motion
- Toast notifications
- Loading states and skeletons
- Touch-friendly interface
- React 19 - UI Library
- Vite - Build tool
- Tailwind CSS - Styling
- Framer Motion - Animations
- React Query - Data fetching
- Axios - HTTP client
- React Router - Navigation
- Node.js - Runtime
- Express.js - Web framework
- MongoDB - Database
- Mongoose - ODM
- JWT - Authentication
- bcrypt - Password hashing
- Socket.io - Real-time chat
- Cloudinary - Image storage
- Nodemailer - Email service
β‘ FASTEST WAY: Use the automated setup scripts!
# 1. Setup dependencies and database
setup-dev.bat
# 2. Start development servers
start-dev.bat- Node.js 18+
- MongoDB Atlas account
- Git
git clone https://github.com/AnkitPradhan2004/Property_Dekho.git
cd Property_Dekhocd Server
npm install
# Environment is already configured for development
# Seed database with sample data
npm run seed
# Start server
npm run devcd ../Client
npm install
# Environment is already configured for development
# Start frontend
npm run dev- Frontend: http://localhost:5173
- Backend: http://localhost:5000
- Health Check: http://localhost:5000/health
- Check QUICK_START.md for step-by-step guide
- See TROUBLESHOOTING.md for common problems
PORT=5000
MONGODB_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret_min_32_chars
JWT_EXPIRES_IN=1d
# Cloudinary (optional)
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
# Email (optional)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your_email@gmail.com
EMAIL_PASS=your_app_password
# Google OAuth (optional)
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_CALLBACK_URL=http://localhost:5000/auth/google/callback
# URLs
FRONTEND_URL=http://localhost:5173
CLIENT_URL=http://localhost:5173
COOKIE_KEY=your_cookie_secretVITE_API_URL=http://localhost:5000
VITE_CLOUDINARY_CLOUD_NAME=your_cloud_nameAfter running npm run seed:
Regular Users (password: password123):
Admin (password: password@123):
POST /auth/signup # User registration
POST /auth/login # User login
GET /auth/me # Get current user
GET /auth/google # Google OAuth
GET /properties # Get all properties (with filters)
GET /properties/:id # Get single property
POST /properties # Create property (auth required)
PUT /properties/:id # Update property (auth required)
DELETE /properties/:id # Delete property (auth required)
GET /users/profile # Get user profile
PUT /users/profile # Update profile
POST /users/favorites # Toggle favorite
GET /users/favorites # Get favorites
POST /users/comparisons # Toggle comparison
GET /users/comparisons # Get comparisons
POST /uploads/image # Upload single image
POST /uploads/images # Upload multiple images
Property_Dekho/
βββ Client/ # React Frontend
β βββ src/
β β βββ components/ # Reusable components
β β βββ pages/ # Page components
β β βββ context/ # React context
β β βββ services/ # API services
β β βββ api/ # Axios configuration
β βββ package.json
β
βββ Server/ # Node.js Backend
β βββ controllers/ # Route handlers
β βββ models/ # MongoDB schemas
β βββ routes/ # API routes
β βββ middlewares/ # Custom middleware
β βββ config/ # Configuration files
β βββ utils/ # Utility functions
β βββ scripts/ # Database scripts
β βββ package.json
β
βββ USER_CREDENTIALS.md # Test user accounts
βββ README.md # This file
- Create new Web Service on Render
- Connect GitHub repository
- Set Root Directory:
Server - Set Build Command:
npm install - Set Start Command:
npm start - Add environment variables
- Deploy
- Create new Static Site on Render
- Connect GitHub repository
- Set Root Directory:
Client - Set Build Command:
npm run build - Set Publish Directory:
dist - Add environment variables
- Deploy
- JWT authentication with secure tokens
- Password hashing with bcrypt (12 rounds)
- Input sanitization and validation
- XSS protection with security headers
- Rate limiting on API endpoints
- CORS configuration
- Environment variable protection
- Multi-field search (title, description, location)
- Price range filtering
- Property type filtering
- Amenities filtering
- Location-based search
- Socket.io powered messaging
- User authentication for chat
- Message history
- Online/offline status
- Cloudinary integration
- Multiple image upload
- Image optimization
- Fallback placeholder images
- Mobile-first approach
- Touch-friendly interfaces
- Optimized for all screen sizes
- Fork the repository
- Create feature branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open Pull Request
This project is licensed under the MIT License.
Ankit Pradhan
- GitHub: @AnkitPradhan2004
- Email: 2004ankitpradhan@gmail.com
- LinkedIn: Ankit Pradhan
- MongoDB Atlas for database hosting
- Cloudinary for image management
- Render for deployment
- React community for amazing ecosystem
- All open-source contributors
β Star this repository if you found it helpful!
π Found a bug? Create an issue
π‘ Have suggestions? Start a discussion