Rentiful
Full-stack Real Estate Rental App built with Next.js, Redux Toolkit, Tailwind CSS, Shadcn, TypeScript, Node.js, Express.js, and AWS (EC2, API Gateway, RDS, S3, Amplify, Cognito).
š” Real Estate Production App
A full-stack, production-ready real estate management platform built with modern technologies like Next.js, Mapbox, Shadcn UI, Redux Toolkit, Prisma, PostgreSQL/PostGIS, and AWS services including Cognito, EC2, RDS, S3, and Amplify.
š Features
- Interactive Map Integration: Utilize Mapbox GL for dynamic property mapping.
- User Authentication: Secure login and registration using AWS Cognito.
- Property Management: CRUD operations for properties, leases, and applications.
- Search and Filters: Advanced filtering options for property listings.
- Responsive UI: Built with Shadcn UI components for a modern look and feel.
- Form Handling: Robust form validation with React Hook Form and Zod.
- State Management: Efficient state handling using Redux Toolkit and RTK Query.
- Backend API: RESTful API built with Node.js and Prisma ORM.
- Database: PostgreSQL with PostGIS extension for geospatial queries.
- AWS Integration: Deployment and services managed through AWS EC2, RDS, S3, and Amplify.
šļø Architecture Overview
The application follows a modular architecture separating concerns between the frontend and backend, with AWS services facilitating deployment and scalability.
Frontend
- Next.js: Server-side rendering and static site generation for improved performance and SEO.
- Mapbox GL: Interactive maps for property locations.
- Shadcn UI: Pre-built UI components for rapid development.
- Redux Toolkit: State management and API interactions.
- React Hook Form & Zod: Form handling and validation.
Backend
- Node.js: Server-side JavaScript runtime.
- Prisma ORM: Database modeling and querying.
- PostgreSQL/PostGIS: Relational database with geospatial capabilities.
- AWS Cognito: User authentication and authorization.
Deployment
- AWS EC2: Hosting the backend server.
- AWS RDS: Managed PostgreSQL database.
- AWS S3: Storage for static assets and media.
- AWS Amplify: Frontend deployment and hosting.
š ļø Tech Stack
Frontend
Backend
Deployment & DevOps
š» Installation
Prerequisites
Steps
Clone the Repository
git clone https://github.com/Arbiter09/Rentiful.git
cd Rentiful
Install Dependencies
# For frontend
cd client
npm install
# For backend
cd ../server
npm install
Configure Environment Variables
Create .env
files in both client
and server
directories with the necessary environment variables as per the .env.example
files.
Set Up the Database
Create a PostgreSQL database.
Run migrations using Prisma:
npx prisma migrate dev --name init
Start the Development Servers
# Start backend
cd server
npm run dev
# Start frontend
cd ../client
npm run dev
š¦ Usage
- Access the Application: Navigate to
http://localhost:3000
in your browser.
- Register/Login: Use AWS Cognito for authentication.
- Manage Properties: Add, edit, or delete property listings.
- Search Listings: Utilize filters and map view for property search.
- Apply for Properties: Submit applications for desired properties.
āļø AWS Deployment
AWS Services Used
- EC2: Hosts the backend server.
- RDS: Manages the PostgreSQL database.
- S3: Stores static assets and media files.
- Amplify: Deploys and hosts the frontend application.
- Cognito: Handles user authentication and authorization.
Deployment Steps
Set Up AWS CLI
Configure AWS CLI with your credentials:
aws configure
Provision Resources
- Launch an EC2 instance for the backend.
- Set up an RDS instance with PostgreSQL.
- Create an S3 bucket for static assets.
- Configure Amplify for frontend deployment.
- Set up Cognito user pools for authentication.
Deploy Backend
SSH into the EC2 instance and deploy the backend server.
Deploy Frontend
Connect the frontend repository to AWS Amplify and deploy.
š Project Structure
real-estate-prod/
āāā client/ # Frontend application
ā āāā public/
ā āāā src/
ā ā āāā components/
ā ā āāā pages/
ā ā āāā redux/
ā ā āāā utils/
āāā server/ # Backend application
ā āāā prisma/
ā āāā src/
ā ā āāā controllers/
ā ā āāā routes/
ā ā āāā services/
ā ā āāā utils/
āāā .gitignore
āāā README.md
āāā package.json
š¤ Contributing
Contributions are welcome! Please follow these steps:
Fork the repository.
Create a new branch:
git checkout -b feature/your-feature-name
Make your changes and commit them:
git commit -m "Add your message here"
Push to your forked repository:
git push origin feature/your-feature-name
Create a pull request.
š License
This project is licensed under the MIT License.
Thank you for Reading