A modern, full-stack property rental management platform built with Next.js, TypeScript, and Tailwind CSS
Live Demo β’ Report Bug β’ Request Feature
- Overview
- Features
- Tech Stack
- Prerequisites
- Installation
- Environment Variables
- Usage
- Project Structure
- API Integration
- Deployment
- Contributing
- License
RentMode is a comprehensive property rental management platform that connects landlords, tenants, and administrators through a modern web application. The platform features a multi-role user system with role-based access control, interactive property search with map integration, and a complete property management workflow.
- Multi-Role System: Admin, Landlord, and Tenant roles with specific permissions
- Interactive Property Search: Advanced filtering with map integration
- Real-time Applications: Property application system with status tracking
- Modern UI/UX: Built with Tailwind CSS and Radix UI components
- Responsive Design: Mobile-first approach with modern design patterns
- State Management: Redux Toolkit with persistence
- Type Safety: Full TypeScript implementation
- JWT-based authentication with refresh tokens
- Role-based access control (Admin, Landlord, Tenant)
- Secure password hashing with bcrypt
- Google reCAPTCHA integration
- Protected routes with middleware
- Landlords: Create, edit, delete property listings
- Tenants: Browse, search, and apply to properties
- Admins: Oversee all listings and user management
- Image upload with FilePond integration
- Property details with amenities and location data
- Interactive map integration (Mapbox/MapLibre)
- Advanced filtering (price, location, bedrooms, amenities)
- Real-time search results
- Property comparison tools
- Location-based property discovery
- Landlord Dashboard: Property management, application handling
- Tenant Dashboard: Application tracking, payment management
- Admin Dashboard: User management, platform oversight
- Real-time notifications and status updates
- Payment processing for property applications
- Secure payment gateway integration
- Transaction history and receipts
- Payment status tracking
- Framework: Next.js 15.2.1 with App Router
- Language: TypeScript 5.0
- UI Library: React 19.0.0
- Styling: Tailwind CSS 4.0 with custom design system
- UI Components: Radix UI + shadcn/ui
- Icons: Lucide React + FontAwesome
- Global State: Redux Toolkit with persistence
- Form Management: React Hook Form + Zod
- Data Fetching: Axios with custom service layer
- Maps: Mapbox GL + MapLibre GL
- Charts: Recharts for dashboard analytics
- Progress: React Circular Progressbar
- Package Manager: npm/yarn
- Linting: ESLint with Next.js config
- Build Tool: Turbopack (Next.js 15)
- Deployment: Vercel
- Animations: Framer Motion
- File Upload: FilePond
- Tables: TanStack Table
- Notifications: Sonner
- Date/Time: Built-in JavaScript Date API
Before running this project, ensure you have the following installed:
- Node.js (v18.0.0 or higher)
- npm (v9.0.0 or higher) or yarn (v1.22.0 or higher)
- Git (for version control)
- VS Code with TypeScript extensions
- Chrome DevTools for debugging
- Postman or Insomnia for API testing
git clone https://github.com/your-username/basafinder-client.git
cd basafinder-client# Using npm
npm install
# Or using yarn
yarn installCreate a .env.local file in the root directory:
# Copy the example environment file
cp .env.example .env.local# Using npm
npm run dev
# Or using yarn
yarn devThe application will be available at http://localhost:3000
Create a .env.local file in the root directory with the following variables:
# API Configuration
NEXT_PUBLIC_BASE_API=http://localhost:5000/api/v1
# Google reCAPTCHA
NEXT_PUBLIC_RECAPTCHA_CLIENT_KEY=your_recaptcha_client_key
NEXT_PUBLIC_RECAPTCHA_SERVER_KEY=your_recaptcha_server_key
# Geocoding API (OpenCage or Google Maps)
NEXT_PUBLIC_GEOCODING_API_KEY=your_geocoding_api_key
# Optional: Custom port
PORT=3000| Variable | Description | Required |
|---|---|---|
NEXT_PUBLIC_BASE_API |
Backend API base URL | β |
NEXT_PUBLIC_RECAPTCHA_CLIENT_KEY |
Google reCAPTCHA client key | β |
NEXT_PUBLIC_RECAPTCHA_SERVER_KEY |
Google reCAPTCHA server key | β |
NEXT_PUBLIC_GEOCODING_API_KEY |
Geocoding service API key | β |
PORT |
Custom port for development | β |
- Homepage: Browse featured properties and platform information
- Property Search: Use advanced filters to find properties
- Property Details: View comprehensive property information
- Registration: Create account as Tenant or Landlord
- Browse Properties: Search and filter available rentals
- Apply to Properties: Submit rental applications
- Track Applications: Monitor application status
- Make Payments: Complete payments for approved applications
- View Contact Info: Access landlord contact after approval
- Create Listings: Add new property listings with details
- Manage Properties: Edit and delete existing listings
- Review Applications: View and respond to tenant applications
- Approve/Reject: Manage application status
- Share Contact: Provide contact information after approval
- User Management: View and manage all users
- Property Oversight: Monitor all property listings
- Platform Management: Ensure compliance and quality
- Analytics: View platform statistics and reports
- Email:
admin@gmail.com - Password:
12345678
β οΈ Security Note: Change default admin credentials in production
src/
βββ app/ # Next.js App Router
β βββ (WithCommonLayout)/ # Public pages layout
β βββ (WithDashboardLayout)/ # Dashboard pages layout
β βββ search/ # Property search functionality
β βββ login/ # Authentication pages
β βββ layout.tsx # Root layout
βββ components/ # Reusable components
β βββ modules/ # Feature-specific components
β βββ ui/ # UI component library
β βββ shared/ # Shared components
βββ services/ # API service layer
β βββ AuthService/ # Authentication services
β βββ Product/ # Property management
β βββ Application/ # Application handling
βββ redux/ # State management
β βββ features/ # Redux slices
β βββ store.ts # Store configuration
βββ types/ # TypeScript type definitions
βββ lib/ # Utility functions
βββ constants/ # Application constants
βββ providers/ # React context providers
src/app/: Next.js App Router pages and layoutssrc/components/: Reusable React componentssrc/services/: API integration and data fetchingsrc/redux/: Global state managementsrc/types/: TypeScript type definitionspublic/: Static assets and images
The application integrates with a backend API for data management. Key API endpoints include:
POST /auth/register- User registrationPOST /auth/login- User authenticationPOST /auth/refresh-token- Token refreshPOST /auth/change-password- Password change
GET /property- List properties with filtersPOST /property- Create new propertyPUT /property/:id- Update propertyDELETE /property/:id- Delete property
POST /application/create-application- Submit applicationGET /application- List applicationsPUT /application/:id- Update application status
GET /user- Get user profilePUT /user/edit-profile- Update profilePUT /user/:id/status- Update user status
- Connect Repository: Link your GitHub repository to Vercel
- Configure Environment: Add environment variables in Vercel dashboard
- Deploy: Automatic deployment on push to main branch
# Install Vercel CLI
npm i -g vercel
# Deploy
vercel# Build the application
npm run build
# Start production server
npm startEnsure all required environment variables are set in your deployment platform:
NEXT_PUBLIC_BASE_APINEXT_PUBLIC_RECAPTCHA_CLIENT_KEYNEXT_PUBLIC_RECAPTCHA_SERVER_KEYNEXT_PUBLIC_GEOCODING_API_KEY
We welcome contributions! Please follow these steps:
git clone https://github.com/your-username/basafinder-client.git
cd basafinder-clientgit checkout -b feature/your-feature-name- Follow the existing code style
- Add TypeScript types for new features
- Update documentation as needed
- Test your changes thoroughly
git add .
git commit -m "feat: add your feature description"
git push origin feature/your-feature-name- Provide a clear description of your changes
- Include screenshots for UI changes
- Reference any related issues
- Code Style: Follow ESLint configuration
- TypeScript: Use strict type checking
- Components: Use functional components with hooks
- State Management: Use Redux Toolkit for global state
- Testing: Add tests for new features
# Development
npm run dev # Start development server with Turbopack
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
# Git operations (custom script)
npm run commit # Add, commit, and push changes-
Port Already in Use
# Kill process on port 3000 npx kill-port 3000 -
Environment Variables Not Loading
- Ensure
.env.localfile exists in root directory - Restart development server after adding variables
- Ensure
-
TypeScript Errors
# Clear TypeScript cache rm -rf .next npm run dev -
Dependencies Issues
# Clear node_modules and reinstall rm -rf node_modules package-lock.json npm install
This project is licensed under the MIT License - see the LICENSE file for details.
- Next.js for the amazing React framework
- Tailwind CSS for the utility-first CSS framework
- Radix UI for accessible UI primitives
- shadcn/ui for the component library
- Vercel for seamless deployment
- Live Demo: https://basa-finder-client-two.vercel.app/
- Issues: GitHub Issues
- Documentation: Project Wiki