Skip to content

Kamakarthik/natours

Repository files navigation

logo-green

Natours

This project was created as part of the Node.js Bootcamp by Jonas Schmedtmann's on Udemy. It demonstrates the concepts and techniques learned throughout the course.

Live Website

Visit the link -> https://natours-012.onrender.com/

Some notable features

  1. Authentication using email & password, jwt cookie
  2. Marking the locations of tours on the map
  3. Forgot/Reset password using reset link in email
  4. Payment method using Stripe
  5. Update user details/password

Website contains

Implemented Pages

  • Overview page - Browse all tours
  • Tour Details page - Detailed tour information
  • Login / Signup / Account Recovery pages - User authentication
  • Profile - User profile management
  • Tour Booking - Book tours with Stripe payment
  • My Reviews Page - Shows all reviews submitted by the user
  • My Bookings Page - Shows all bookings made by the user

Not Yet Implemented (Backend functionality implemented, frontend UI pending)

  • Admin Dashboard – Manage Users/Reviews/Bookings pages
  • Forgot/Reset Password Pages

Platforms used

  1. Backend- Node/Express, Database- MongoDB/Mongoose
  2. Payment- Stripe
  3. Mail- MailTrap (Development) & SendGrid (Production) [Free version]
  4. Image Upload- Multer
  5. Map- Mapbox
  6. Backend deployed in Render

Packages used

{
  "name": "natours",
  "version": "1.0.0",
  "description": "node,express and mongoDB",
  "main": "app.js",
  "scripts": {
    "start": "node server.js",
    "start:dev": "set NODE_ENV=development&& nodemon server.js",
    "start:prod": "set NODE_ENV=production&& nodemon server.js",
    "debug": "ndb server.js",
    "watch:js": "esbuild ./public/js/index.js --bundle --outfile=./public/js/bundle.js --watch",
    "build:js": "esbuild ./public/js/index.js --bundle --minify --outfile=./public/js/bundle.js"
  },
  "author": "karthik",
  "license": "ISC",
  "dependencies": {
    "axios": "^1.12.2",
    "bcryptjs": "^3.0.2",
    "compression": "^1.8.1",
    "cookie-parser": "^1.4.7",
    "cors": "^2.8.5",
    "dotenv": "^17.2.1",
    "express": "^4.18.2",
    "express-mongo-sanitize": "^2.2.0",
    "express-rate-limit": "^8.1.0",
    "helmet": "^8.1.0",
    "hpp": "^0.2.3",
    "html-to-text": "^9.0.5",
    "jsonwebtoken": "^9.0.2",
    "mongoose": "^8.16.5",
    "morgan": "^1.10.1",
    "multer": "^2.0.2",
    "nodemailer": "^7.0.6",
    "pug": "^3.0.3",
    "sharp": "^0.34.4",
    "slugify": "^1.6.6",
    "stripe": "^19.1.0",
    "validator": "^13.15.15",
    "xss-clean": "^0.1.4"
  },
  "devDependencies": {
    "esbuild": "^0.25.10",
    "eslint": "^8.57.1",
    "eslint-config-airbnb": "^19.0.4",
    "eslint-config-prettier": "^10.1.8",
    "eslint-plugin-import": "^2.32.0",
    "eslint-plugin-jsx-a11y": "^6.10.2",
    "eslint-plugin-node": "^11.1.0",
    "eslint-plugin-prettier": "^5.5.3",
    "eslint-plugin-react": "^7.37.5",
    "prettier": "^3.6.2"
  },
  "engines": {
    "node": "22.x"
  }
}

Future Ideas

  1. To make this website mobile responsive
  2. To add a carousel of top tours on the overview page
  3. To Add a dashboard of tours about tour stats and monthly plans for admin, guide, and lead-guide
  4. To Add the functionality of finding tours using coordinates and distances
  5. To Add functionality of changing roles to admin, guide or lead-guide
  6. To Implement missing pages

Thank you for visiting!