IronTrip is a full-stack MERN (MongoDB, Express, React, Node.js) application that connects travelers with hosts offering spaces. Users can create listings, send requests, and manage their profiles.
username
:String
// Required, unique, lowercase, trimmed, min 3, max 20 charactersemail
:String
// Required, unique, lowercase, trimmed, must match email formatpassword
:String
// Required, min 6 characterscity
:String
// Requiredcountry
:String
// RequiredofferSpace
:Boolean
// Default:false
bio
:String
// Optional, max 300 charactersprofilePicture
:String
// Optional, default profile picture URL
host
:ObjectID<User>
// Required, references the User modeltitle
:String
// Required, trimmedaddress
:String
// Required, trimmedcity
:String
// Required, trimmedcountry
:String
// Required, trimmedlocation
:Object
// Optional, containslat
andlng
description
:String
// Required, min 10 charactersavailability
:Array<Object>
// Required, containsstartDate
andendDate
image
:String
// Optional, URL of the listing image
traveler
:ObjectID<User>
// Required, references the User modelhost
:ObjectID<User>
// Required, references the User modellisting
:ObjectID<Listing>
// Required, references the Listing modelstatus
:String
// Default:pending
, options:pending
,approved
,rejected
message
:String
// Optional, message from the traveler
-
GET /auth/verify
: Checks if the provided authentication token is valid. Requires a valid JWT token to be sent (in theAuthorization
header as a Bearer token). -
POST /auth/signup
: Register a new user. Accepts an optionalprofilePicture
which can be a URL or uploaded as a file.- Request Body:
{ "username": "string (required)", "email": "string (required, unique)", "password": "string (required, min 6 characters)", "city": "string (required)", "country": "string (required)", "profilePicture": "string (optional, URL)" }
- Request Body:
-
POST /auth/login
: Log in an existing user.- Request Body:
{ "email": "string (required)", "password": "string (required)" }
- Request Body:
GET /user/:userId
: Get user profilePATCH /user/:userId
: Update user profile
GET /listing/
: Get all listingsGET /listing/:listingId
: Get a specific listingPOST /listing/create
- Body:
{ "title": "Cozy Apartment", "address": "123 Main St", "city": "Test City", "country": "Test Country", "description": "A beautiful apartment in the heart of the city.", "availability": [ { "startDate": "2025-05-01", "endDate": "2025-05-15" } ], "image": "[https://example.com/image.jpg](https://example.com/image.jpg)" }
- Body:
PATCH /listing/:listingId
: Update a specific listingDELETE /listing/:listingId
: Delete a specific listing
GET /request/user/:userId
: Get all requests for a userPOST /request/create
- Body:
{ "host": "host_user_object_id", "listing": "listing_object_id", "message": "Hello, I'd like to book this space." }
- Body:
PATCH /request/:requestId
: Update a specific requestDELETE /request/:requestId
: Delete a specific request
- Frontend Repository: irontrip-frontend
- Backend Repository: irontrip-backend
- Deployed Application (Frontend): IronTrip Frontend