A full-stack property listing platform built with Next.js 14. It supports Google authentication, property bookmarks (saved listings), image uploads via Cloudinary, interactive maps/geocoding, and a contact form that sends messages to property owners/managers (stored in MongoDB).
- Authentication: Google OAuth login via NextAuth
- Property listings: browse listings + listing details
- Bookmarks / Saved properties: save & remove saved listings (per-user)
- Contact form (Messages): authenticated users can message the property owner/manager
- Images: upload and serve property images using Cloudinary
- Maps & geocoding: MapTiler + OpenCage for map display and address → coordinates
- Deployment: designed to deploy on Vercel
- Frontend / Fullstack: Next.js 14 (App Router), React 18
- Auth: NextAuth (Google provider)
- Database: MongoDB + Mongoose
- Images: Cloudinary
- Maps/Geocoding: MapTiler, OpenCage
- UI/UX: Tailwind CSS, React Toastify, PhotoSwipe
- Bookmarks (Saved Properties) are stored on the
Userdocument (abookmarksarray of property IDs). - Contact Form submits a message and stores it in MongoDB (
Messagemodel) so the owner can view messages in-app (instead of sending emails). - This project uses Next.js Server Actions for some mutations (e.g. bookmark toggling, sending messages).
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun devOpen http://localhost:3000.
- Push the project to GitHub (or import the folder into a repository).
- Create a new project on Vercel and import the repository.
- In Vercel → Project Settings → Environment Variables, add all variables listed in the
.env.localsection. - Deploy.
- Set
NEXTAUTH_URLto your Vercel production URL (e.g.https://<your-app>.vercel.app). - Update
NEXT_PUBLIC_DOMAINto match the deployed domain (used for share links).
npm run dev # start dev server
npm run build # build for production
npm run start # start production server
npm run lint # run linter