Plan trips. Track expenses. Check weather. Translate languages. Book flights & hotels.
All in one beautiful, full-stack travel companion.
๐ Live Demo ยท ๐ Docs ยท ๐ Report Bug ยท โจ Request Feature
- ๐ Overview
- ๐ธ Screenshots
- โจ Features
- ๐ ๏ธ Tech Stack
- ๐ Project Structure
- ๐ Getting Started
- ๐ Environment Variables
- ๐ก API Endpoints
- ๐๏ธ Database Models
- ๐ Security Features
- ๐จ Design Highlights
- ๐ฎ Future Enhancements
- ๐ค Contributing
- ๐ License
- ๐ฅ Mentors
- ๐ค Author
PackGo is a production-ready, full-stack travel planning application built with the MERN stack (MongoDB, Express.js, React 19, Node.js). It consolidates every tool a traveller needs โ itinerary management, expense tracking, real-time weather, live language translation, and flight & hotel search โ into a single, polished web application.
Whether you're planning a weekend getaway or a month-long adventure, PackGo keeps all your travel data organised, secure, and accessible from any device.
| Landing Page | Dashboard |
|---|---|
![]() |
![]() |
| Trip Detail | Expense Tracker |
|---|---|
![]() |
| Weather Forecast | Live Translator |
|---|---|
![]() |
![]() |
- Create, edit, and delete trips with destination autocomplete
- Status tracking โ
PlannedยทOngoingยทCompleted - Destination images fetched automatically from the seeded catalogue
- Per-trip budget allocation
- Log expenses by category โ
FoodยทTransportยทAccommodationยทActivitiesยทShopping - Budget utilization progress bar with overspend alerts
- Category-wise breakdown with interactive pie charts (Recharts)
- Export expenses to CSV for offline records
- Real-time weather powered by OpenWeatherMap API
- 5-day forecast with weather condition icons
- Smart travel tips based on temperature & conditions
- Instant translation via Google Translate API (
google-translate-api-x) โ no API key needed - 28+ languages including Hindi, Spanish, French, Japanese, Arabic
- Auto language detection
- Common travel phrases quick-select
- Copy to clipboard with one click
- Search flights by origin, destination, and dates
- Search hotels by location, check-in/check-out, and guests
- Visual flight timeline with airline info and pricing
- Hotel cards with ratings, amenities, and booking CTA
- (Currently uses mock data โ designed for real API integration)
- JWT-based authentication with token auto-refresh
- Secure password hashing with bcryptjs
- Protected routes with middleware guard
- Profile management and password change
- Security headers via Helmet + API rate limiting
- Trip statistics โ Total, Completed, Planned, Budget overview
- Total spending analytics across all trips
- Monthly trip distribution bar chart (Recharts)
- Quick action cards for navigation
- Upcoming trip cards with status badges
| Technology | Version | Purpose |
|---|---|---|
| React | 19 | Component-based UI framework |
| Redux + Redux-Thunk | 5 / 3 | Global state management with async actions |
| React Router | v7 | Client-side routing with nested layouts |
| Material-UI (MUI) | v6 | Pre-built UI components and theming |
| Recharts | 3 | Bar & Pie chart data visualizations |
| Axios | 1 | HTTP client with JWT interceptors |
| React-Toastify | 11 | Toast notification system |
| Leaflet / React-Leaflet | 1.9 / 5 | Interactive maps |
| Technology | Version | Purpose |
|---|---|---|
| Node.js | 18+ | JavaScript runtime |
| Express.js | 4 | REST API server |
| MongoDB + Mongoose | Atlas | NoSQL database with schema validation |
| jsonwebtoken | โ | Token-based authentication |
| bcryptjs | โ | Password hashing |
| Helmet | โ | Security HTTP headers |
| express-rate-limit | โ | API rate limiting (100 req / 15 min) |
| google-translate-api-x | โ | Free Google Translate integration |
| cors | โ | Cross-origin resource sharing |
| dotenv | โ | Environment variable management |
travel-planner/
โโโ assets/ # README screenshots
โ โโโ landing_page.png
โ โโโ dashboard.png
โ โโโ trip_detail.png
โ โโโ expense_tracker.png
โ โโโ weather_forecast.png
โ โโโ live_translator.png
โ
โโโ client/ # โ๏ธ React Frontend
โ โโโ src/
โ โโโ components/
โ โ โโโ PrivateRoute.js # Auth route guard
โ โโโ pages/
โ โ โโโ Home.js # Landing page
โ โ โโโ Login.js # Login with image carousel
โ โ โโโ Register.js # Multi-step registration
โ โ โโโ Dashboard.js # Dashboard layout + sidebar
โ โ โโโ NotFound.js # 404 page
โ โ โโโ dashboard/
โ โ โโโ DashboardHome.js # Analytics overview
โ โ โโโ TripsView.js # Trip list + create modal
โ โ โโโ TripDetail.js # Trip detail + expenses
โ โ โโโ ExpensesView.js # Expense tracker + pie chart
โ โ โโโ BookingView.js # Flight & hotel search
โ โ โโโ WeatherView.js # Weather forecast
โ โ โโโ TranslatorView.js # Live translator
โ โ โโโ ProfileView.js # Profile & password
โ โโโ redux/
โ โ โโโ store.js
โ โ โโโ actions/ # Async thunk actions
โ โ โโโ reducers/ # State reducers
โ โ โโโ types/ # Action type constants
โ โโโ services/
โ โ โโโ api.js # Axios instance + interceptors
โ โโโ theme.js # MUI custom theme (Poppins)
โ โโโ App.js # Root component + routes
โ โโโ index.js # Entry point
โ
โโโ server/ # ๐ข Express Backend
โ โโโ controllers/
โ โ โโโ authController.js # Register, login, profile
โ โ โโโ tripController.js # Trip CRUD
โ โ โโโ expenseController.js # Expense CRUD + aggregation
โ โ โโโ weatherController.js # OpenWeatherMap integration
โ โ โโโ translatorController.js # Google Translate integration
โ โ โโโ bookingController.js # Flight & hotel (mock)
โ โโโ models/
โ โ โโโ User.js # User schema + password methods
โ โ โโโ Trip.js # Trip schema with nested objects
โ โ โโโ Expense.js # Expense schema linked to trips
โ โ โโโ Destination.js # Destination catalogue schema
โ โโโ routes/ # Express route declarations
โ โโโ middleware/
โ โ โโโ auth.js # JWT verification middleware
โ โ โโโ errorHandler.js # Global error handler
โ โโโ data/
โ โ โโโ seed.js # Database seeder
โ โ โโโ cleanAndSeed.js # Clean + reseed script
โ โโโ server.js # Express app entry point
โ
โโโ .env.example # Environment variable template
โโโ .gitignore
โโโ CODE_OF_CONDUCT.md
โโโ CONTRIBUTING.md
โโโ LICENSE
โโโ README.md
Make sure you have the following installed:
- Node.js v18 or higher โ Download
- MongoDB (local) or a free MongoDB Atlas cluster โ Get Atlas
- npm (bundled with Node.js)
- OpenWeatherMap API Key (free) โ Get Key
git clone https://github.com/hitesh-kumar123/Travel-Plans-.git
cd travel-planner
โ ๏ธ Important:
This repository uses separate frontend (client) and backend (server) environments.Running commands like:
npm run devfrom the root directory will result in a missing script error.
Please install dependencies and run scripts separately inside the
clientandserverdirectories.
# Install backend dependencies
cd server
npm install
# Install frontend dependencies
cd ../client
npm installCopy the example file and fill in your values:
cp .env.example server/.envOpen server/.env and update:
PORT=5000
MONGO_URI=mongodb+srv://<username>:<password>@cluster.mongodb.net/travel-planner
JWT_SECRET=your_super_secret_jwt_key_here
WEATHER_API_KEY=your_openweathermap_api_key๐ก Tip: The translator uses
google-translate-api-xโ no API key required!
Get your free weather key at openweathermap.org/api.
cd server
node data/seed.jsThis populates the destinations collection with sample travel destinations and images for destination autocomplete.
Open two separate terminals:
# Terminal 1 โ Backend (http://localhost:5000)
cd server
npm run dev# Terminal 2 โ Frontend (http://localhost:3000)
cd client
npm startThen open your browser at http://localhost:3000 ๐
| Variable | Required | Description |
|---|---|---|
PORT |
โ | Port for the Express server (default: 5000) |
MONGO_URI |
โ | MongoDB connection string (local or Atlas) |
JWT_SECRET |
โ | Secret key for signing JWT tokens (use a long random string) |
WEATHER_API_KEY |
โ | Your free OpenWeatherMap API key |
SMTP_HOST |
โ | SMTP server host for sending emails (ethereal fallback if omitted) |
SMTP_PORT |
โ | SMTP server port (default: 587) |
SMTP_SECURE |
โ | Use SSL/TLS (true or false, default: false) |
SMTP_USER |
โ | SMTP authentication username credential |
SMTP_PASS |
โ | SMTP authentication password credential |
FROM_EMAIL |
โ | Custom sender email address (default: noreply@packgo.com) |
FROM_NAME |
โ | Custom sender display name (default: PackGo) |
Base URL: http://localhost:5000/api
| Method | Endpoint | Description | Auth |
|---|---|---|---|
POST |
/auth/register |
Register a new user | โ |
POST |
/auth/login |
Login and receive JWT token | โ |
GET |
/auth/profile |
Get current user profile | โ |
PUT |
/auth/profile |
Update user profile | โ |
PUT |
/auth/change-password |
Change password | โ |
POST |
/auth/verify-otp |
Verify registration/login 6-digit OTP code | โ |
POST |
/auth/resend-otp |
Request a new registration/login OTP code | โ |
POST |
/auth/otp-status |
Query active registration/login countdown state | โ |
POST |
/auth/request-email-change |
Initiate profile email update | โ |
POST |
/auth/verify-email-change |
Confirm and execute pending profile email change | โ |
POST |
/auth/discard-email-change |
Cancel and discard pending profile email change | โ |
GET |
/auth/email-change-status |
Query active profile email change status details | โ |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
POST |
/trips |
Create a new trip | โ |
GET |
/trips |
Get all trips for the logged-in user | โ |
GET |
/trips/:id |
Get a trip by ID | โ |
PUT |
/trips/:id |
Update a trip | โ |
DELETE |
/trips/:id |
Delete a trip | โ |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
GET |
/expenses |
Get all user expenses (analytics) | โ |
POST |
/expenses |
Create a new expense | โ |
GET |
/expenses/trip/:tripId |
Get expenses for a specific trip | โ |
GET |
/expenses/:id |
Get expense by ID | โ |
PUT |
/expenses/:id |
Update an expense | โ |
DELETE |
/expenses/:id |
Delete an expense | โ |
GET |
/expenses/summary/:tripId |
Category-wise expense summary | โ |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
GET |
/weather/current/:location |
Current weather for a city | โ |
GET |
/weather/forecast/:location |
5-day weather forecast | โ |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
POST |
/translator/translate |
Translate text between languages | โ |
GET |
/translator/languages |
Get list of supported languages | โ |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
GET |
/destinations |
Get all destinations | โ |
GET |
/destinations/search?q= |
Search destinations by name | โ |
GET |
/destinations/:id |
Get destination by ID | โ |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
POST |
/booking/flights/search |
Search available flights | โ |
POST |
/booking/hotels/search |
Search available hotels | โ |
POST |
/booking/flights/book |
Book a flight | โ |
POST |
/booking/hotels/book |
Book a hotel | โ |
{
name: String, // required
email: String, // required, unique
password: String, // hashed with bcrypt
createdAt: Date
}{
user: ObjectId, // ref: User
destination: String,
startDate: Date,
endDate: Date,
description: String,
budget: Number,
status: Enum['planned', 'ongoing', 'completed'],
activities: [String],
accommodation: { name, address, checkIn, checkOut },
transportation: { type, details },
images: [String],
notes: String
}{
user: ObjectId, // ref: User
trip: ObjectId, // ref: Trip
amount: Number,
currency: String, // default: 'INR'
category: Enum['food', 'transport', 'accommodation', 'activities', 'shopping', 'other'],
description: String,
date: Date
}{
name: String,
city: String,
state: String,
category: String,
description: String,
images: [String],
entrance_fee_inr: Number,
best_time_to_visit: String,
rating: Number
}| Feature | Implementation |
|---|---|
| JWT Authentication | Stateless tokens with 24h expiry and auto-refresh interceptors |
| Password Hashing | bcrypt with configurable salt rounds |
| Security Headers | Helmet.js sets X-Content-Type-Options, X-Frame-Options, etc. |
| Rate Limiting | 100 requests per 15 minutes per IP via express-rate-limit |
| OTP Rate Limiting | 60s resend cooldown, 5 max attempts, and a 24h security lockout (otpBlockedUntil) |
| CORS Policy | Configured to allow only specified origins |
| Input Validation | Server-side validation on all user-submitted data |
| Protected Routes | Frontend <PrivateRoute> + backend auth middleware guard |
- Custom MUI Theme โ Poppins typography, curated palette, rounded components and consistent spacing
- Editorial Landing Page โ Playfair Display + DM Sans typography, hero illustrations, animated call-to-actions
- Fully Responsive โ Mobile-first approach; collapsible sidebar drawer on small screens
- Micro-animations โ Hover lift effects, card transitions, skeleton loaders
- Toast Notifications โ Real-time feedback (success / error / info) on all user actions via React-Toastify
- Interactive Charts โ Bar chart for monthly trip analytics, pie chart for expense breakdown
- Real flight & hotel API integration (Amadeus / Skyscanner / RapidAPI)
- AI-powered itinerary generation (OpenAI / Gemini)
- Social trip sharing with friends and collaborative planning
- Push notifications & email reminders for upcoming trips
- Offline mode with service workers (PWA)
- Travel insurance integration
- Multi-currency expense conversion with live exchange rates
- Trip photo gallery with image uploads (Cloudinary)
- Dark mode toggle
- Mobile app (React Native)
We โค๏ธ contributions from the community! PackGo is an open-source project and all kinds of contributions are welcome โ bug fixes, feature additions, documentation improvements, and more.
Please read our:
- ๐ Contributing Guidelines โ branching strategy, commit message format, PR checklist
- ๐ Mentor Guidelines โ instructions and expectations for GSSoC '26 Mentors
- ๐ค Code of Conduct โ community standards and expectations
# 1. Fork the repository on GitHub
# 2. Clone your fork
git clone https://github.com/<your-username>/Travel-Plans-.git
# 3. Create a feature branch
git checkout -b feature/your-amazing-feature
# 4. Make your changes and commit
git add .
git commit -m "feat: add your amazing feature"
# 5. Push and open a Pull Request
git push origin feature/your-amazing-featureGood First Issues are labelled
good first issueโ a great place to start! ๐ฑ
This project is licensed under the MIT License.
See the LICENSE file for full details.
We are incredibly grateful to our mentors for their valuable support and code reviews:



