diff --git a/TravelWallet.md b/TravelWallet.md new file mode 100644 index 0000000..071a49a --- /dev/null +++ b/TravelWallet.md @@ -0,0 +1,55 @@ +## Task ID: TravelWallet +#### `Full Stack Web Development`, `Cloud` ,`WebSockets` +**Mentors:** +[Reema Murthy](https://github.com/Reema-murthy) ([+91 9481646942](https://wa.me/9481646942)), +[Hetvi Patel](https://github.com/hetvip215) ([+91 8160188575](https://wa.me/8160188575)) + +**Difficulty:** `Hard` + +### Description +Travel Wallet is a full-stack platform for travelers who want to manage all their travel documents and itineraries in one place. Travelers often have multiple flight confirmations, hotel bookings, train tickets, and event passes scattered across emails, apps, or printed documents. Keeping track of them can be stressful, especially during trips. +Travel Wallet solves the problem by allowing users to upload, organize, and manage all their tickets and itineraries on a single website, with a dashboard for easy access and a ‘Today’s Itinerary’ feature. Files are stored on Cloudinary with metadata in MongoDB. +### Steps to Complete the Challenge: + +**1. Authentication & Profile Creation** +- Implement a complete **signup/login flow** using authentication mechanisms (e.g., JWT or session-based auth). +- Create a **user profile** where personal details and trip history can be stored and retrieved. + +**2. Trip Creation** +- Allow users to **create new trips** with details such as trip name, start and end dates. +- Include **booking details** for flights, hotels, trains, or events associated with the trip. +- Store trip data and bookings in **MongoDB**. +- Allow users to **upload multiple supporting documents or images** (e.g., tickets, booking confirmations) using **Multer** and store them on **Cloudinary**. + +**3. User Dashboard** +- Build a **responsive dashboard UI** to display all trips and corresponding bookings. +- Enable users to **add, delete, and modify trip details**, with changes reflected in the frontend in real-time. +- Use **React state management** (e.g., Context API or Redux) for dynamic updates. + +**4. Collaborative Trips** +- Allow a trip to have **multiple owners/admins**, each of whom can **share the trip with friends or family** via a unique **shareable link** (collaborators must have an account to access the shareable link). + - When a user opens the link, the backend verifies their **role** (owner/admin or collaborator) and grants access accordingly. +- Implement **role-based permissions** for collaborators: + - **View-only:** collaborator can only view trip details and itinerary. + - **Edit:** collaborator can modify trip details, bookings, or upload files. +- Use **WebSockets (e.g., Socket.io)** to ensure that **changes made by collaborators with edit permissions are reflected in real-time** on the dashboard for all users currently viewing the trip. +- Store collaborators, their roles, and owners in the **trip document in MongoDB** to enforce access control. + +**5. Today’s Itinerary** +- Automatically highlight **today’s itinerary** at the top of the dashboard. +- Show **time-wise schedule** (e.g., “Take flight at 8 AM”, “Visit museum at 11 AM”, “Hotel booking at Taj at 9 PM”). +- Fetch and filter trips based on the current date using backend logic. + +**6. Highlights Section in User Profile** +- Add a **Highlights** section in the user profile to display **recent trips or key activities**. +- Include quick links to view detailed itineraries and trip summaries. + + +### Useful Resources: +- [ReactJS](https://react.dev/) +- [Tailwind CSS](https://tailwindcss.com/docs) +- [JWT Authentication Guide](https://jwt.io/introduction/) +- [Cloudinary Upload API](https://cloudinary.com/documentation/image_upload_api_reference) +- [Multer Documentation]( https://www.npmjs.com/package/multer) +- [Role-Based Access Control](https://auth0.com/docs/manage-users/access-control/rbac) +- [Socket.IO Documentation](https://socket.io/docs/) \ No newline at end of file