Skip to content

christelle-dehoumon/Real-Estate-Platform

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fasohabitat banner

Fasohabitat 🏠

A complete real estate platform connecting property owners with buyers and renters. Built as a full-stack monorepo (Node.js API, Next.js web app, Flutter mobile app) for the West African market.

Live demo

🌟 Features

Accounts

  • 🔐 Sign up / login with JWT
  • 🌐 Google OAuth support
  • 👤 Profile management

Listings

  • 🏘️ Publish properties with photos, specs (bedrooms, bathrooms, surface, amenities), and precise location
  • 📄 Upload ownership documents (ID card, land title / lease) for verification
  • ✏️ Full CRUD, restricted to the listing owner or an admin

Search

  • 🔍 Advanced filters — city, transaction type (sale/rent), property type, price, amenities

Favorites & Messaging

  • ❤️ Save listings for later
  • 💬 Real-time in-app chat with unread message notifications, scoped per property

Admin & Moderation

  • 🛡️ Dashboard for supervising the platform
  • 🚩 Fraud report handling, listing blocking, user management

🚀 Getting Started

Prerequisites

  • Node.js ^18
  • MongoDB instance (local or Atlas)
  • Flutter SDK (for the mobile app)
  • Google Maps API key (for the web app)

Installation

Clone the repository

git clone https://github.com/christelle-dehoumon/Real-Estate-Platform.git
cd Real-Estate-Platform

Backend

cd backend
npm install
# create a .env file with MONGO_URI, JWT_SECRET, etc.
npm run dev

Web

cd web
npm install
# create a .env.local file with NEXT_PUBLIC_API_URL, NEXT_PUBLIC_GOOGLE_MAPS_KEY, etc.
npm run dev

Mobile

cd mobile
flutter pub get
flutter run

🏗️ Project Structure

backend/
├── src/
│   ├── models/          # Mongoose schemas
│   ├── controllers/     # Business logic
│   ├── routes/          # Express routes
│   └── middleware/      # Auth, error handling
└── uploads/              # Uploaded images & documents

web/
├── src/
│   └── app/              # Next.js App Router pages
├── components/           # Reusable UI components
└── context/               # State/context providers

mobile/
├── lib/
│   ├── screens/          # UI screens
│   ├── models/           # Data models
│   ├── providers/        # State management
│   └── services/         # API calls

🔐 Security

  • JWT-based authentication, token sent in request headers
  • Only the listing owner or an admin can modify/delete a listing
  • Images and documents uploaded as multipart/form-data, served statically from /uploads
  • helmet middleware for HTTP header hardening

Best practices

  • Rejected or blocked listings stay accessible to their owner and admins for history, but are hidden from public search
  • Messages are scoped to a specific property to preserve conversation context

📚 Architecture

Fasohabitat follows a decoupled three-tier architecture:

  • Backend (REST API) — Node.js, Express, MongoDB via Mongoose
  • Web frontend — Next.js (App Router), React, TypeScript
  • Mobile app — Flutter, cross-platform (iOS/Android)

Both clients consume the same REST API over HTTP, authenticating with a shared JWT flow.

🛠️ Development

# Backend, with live reload
cd backend && npm run dev

# Web, dev server
cd web && npm run dev

# Mobile, pick a device
flutter run -d chrome        # Web preview
flutter run -d emulator-5554 # Android emulator

📱 Build for Production

Web

cd web
npm run build
npm run start

Mobile

flutter build apk --release
flutter build ios --release

🐛 Troubleshooting

MongoDB connection issues

  • Check MONGO_URI in backend/.env
  • Confirm your IP is allow-listed if using MongoDB Atlas

Image upload issues

  • Ensure the backend/uploads folder exists and is writable
  • Check the file size limit configured in the upload middleware

Web map/search not loading

  • Confirm NEXT_PUBLIC_GOOGLE_MAPS_KEY is set and valid in web/.env.local

🤝 Contributing

  1. Create a feature branch: git checkout -b feature/amazing-feature
  2. Commit changes with meaningful messages
  3. Push to the branch: git push origin feature/amazing-feature
  4. Open a Pull Request

📄 License

Academic project — Burkina Institute of Technology (BIT)

📞 Support

For issues or questions, open a GitHub issue or contact: dhmchristelle@gmail.com

🎯 Roadmap

  • Property comparison tool
  • Mobile push notifications
  • Virtual property tours
  • Multi-language support (English)
  • Payment integration for booking deposits

Contributors: Christelle Dehoumon · Farida

About

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors