Welcome to Tournest BD — a modern travel and tourism management platform where tourists can explore destinations, book packages, connect with guides, and share travel stories.
It’s built with React, Firebase, Express, and MongoDB ensuring a seamless and secure experience.
- 🔐 Authentication System – Sign up, sign in, social login (Google).
- 🧑💼 Role-based Dashboard – Separate panels for Admin, Tourist, and Tour Guide.
- 📦 Tour Packages – Browse and book packages with detailed info.
- 👩🏫 Tour Guides – Join as a guide or hire guides for trips.
- 📖 Travel Stories – Share and manage real travel experiences.
- 💳 Payments – Secure booking and payment system.
- 📊 Admin Controls – Manage users, candidates, payments, and bookings.
- 📱 Responsive UI – Mobile, tablet, and desktop friendly.
- ✨ Modern Animations – Smooth transitions and engaging visuals.
Frontend:
- React (Vite)
- Tailwind CSS
- Framer Motion
- React Router DOM
Backend & Auth:
- Firebase Authentication
- Express.js
- MongoDB
- Axios (secure requests)
Others:
- ESLint + Prettier
- Vercel / Firebase Hosting
Clone the repo and install dependencies:
git clone https://github.com/mostakim69/tournest-bd.git
cd tournest-bd
npm install
mostakim69-tournest-bd/
├── README.md
├── eslint.config.js
├── firebase.json
├── index.html
├── package.json
├── structure.md
├── vite.config.js
├── vite.logger.plugin.js
├── .firebaserc
├── public/
│ └── CNAME
├── src/
│ ├── App.jsx
│ ├── index.css
│ ├── loggerClient.js
│ ├── main.jsx
│ ├── animation/
│ │ ├── auth-lottie.json
│ │ ├── index.js
│ │ ├── LottieAnimation.jsx
│ │ └── motion.js
│ ├── assets/
│ │ ├── assets.js
│ │ └── images/
│ │ └── index.js
│ ├── console/
│ │ ├── error.json
│ │ └── log.json
│ ├── contexts/
│ │ └── AuthContext/
│ │ ├── AuthContext.jsx
│ │ └── AuthProvider.jsx
│ ├── hooks/
│ │ ├── useAuth.jsx
│ │ ├── useAxiosSecure.jsx
│ │ ├── useFetchData.js
│ │ ├── useHelmet.jsx
│ │ ├── usePostData.jsx
│ │ ├── useSecureQuery.jsx
│ │ ├── useSecureUpdate.js
│ │ └── useUserRole.jsx
│ ├── modules/
│ │ ├── Auth/
│ │ │ ├── AuthLayout.jsx
│ │ │ ├── AuthRoute.jsx
│ │ │ ├── index.js
│ │ │ ├── components/
│ │ │ │ ├── SigninForm.jsx
│ │ │ │ ├── Signout.jsx
│ │ │ │ ├── SignUpForm.jsx
│ │ │ │ └── SocialLogin.jsx
│ │ │ └── pages/
│ │ │ ├── ForgotPass.jsx
│ │ │ ├── Signin.jsx
│ │ │ └── SignUp.jsx
│ │ ├── Dashbaord/
│ │ │ ├── DashboardLayout.jsx
│ │ │ ├── dashbourdRoutes.jsx
│ │ │ ├── AddStories/
│ │ │ │ └── AddStories.jsx
│ │ │ ├── Admin/
│ │ │ │ ├── AddPackage/
│ │ │ │ │ └── AddPackage.jsx
│ │ │ │ ├── Bookings/
│ │ │ │ │ ├── AllBookings.jsx
│ │ │ │ │ └── BookingDetails.jsx
│ │ │ │ ├── ManageCandidate/
│ │ │ │ │ ├── CandidateCard.jsx
│ │ │ │ │ └── ManageCandidate.jsx
│ │ │ │ ├── ManageUsers/
│ │ │ │ │ ├── ManageUsers.jsx
│ │ │ │ │ └── UsersRow.jsx
│ │ │ │ └── Payments/
│ │ │ │ ├── AllPayments.jsx
│ │ │ │ └── PaymentCard.jsx
│ │ │ ├── ManageProfile/
│ │ │ │ └── ManageProfile.jsx
│ │ │ ├── ManageStories/
│ │ │ │ ├── ManageStories.jsx
│ │ │ │ └── components/
│ │ │ │ ├── EditStoryModal.jsx
│ │ │ │ └── StoryCard.jsx
│ │ │ ├── Overview/
│ │ │ │ └── Overview.jsx
│ │ │ ├── TourGuides/
│ │ │ │ ├── TourGuides.jsx
│ │ │ │ ├── AssignedTour/
│ │ │ │ │ ├── AssignedTour.jsx
│ │ │ │ │ └── AssignedTourCard.jsx
│ │ │ │ └── GuideProfile/
│ │ │ │ └── GuideProfile.jsx
│ │ │ └── Tourist/
│ │ │ ├── Bookings/
│ │ │ │ ├── BookingCard.jsx
│ │ │ │ └── MyBookings.jsx
│ │ │ ├── JoinTourGuide/
│ │ │ │ └── JoinTourGuide.jsx
│ │ │ └── PaymentBooking/
│ │ │ ├── PaymentBooking.jsx
│ │ │ └── PaymentForm.jsx
│ │ ├── landing/
│ │ │ ├── index.js
│ │ │ └── home/
│ │ │ ├── Home.jsx
│ │ │ ├── TourismAndGuides.jsx
│ │ │ ├── Bannnerr/
│ │ │ │ └── Banner.jsx
│ │ │ ├── CallToActionFull/
│ │ │ │ └── CallToActionFull.jsx
│ │ │ ├── HowItWorks/
│ │ │ │ └── HowItWorks.jsx
│ │ │ ├── LiveStats/
│ │ │ │ └── LiveStats.jsx
│ │ │ ├── NewsletterSignup/
│ │ │ │ └── NewsletterSignup.jsx
│ │ │ ├── Overview/
│ │ │ │ ├── Overview.jsx
│ │ │ │ └── Stories/
│ │ │ │ ├── Stories.jsx
│ │ │ │ ├── StoryCard.jsx
│ │ │ │ └── StoryCard.jsx~
│ │ │ ├── RandomGuides/
│ │ │ │ └── RandomGuides.jsx
│ │ │ ├── ReactTab/
│ │ │ │ └── ReactTab.jsx
│ │ │ ├── Testimonials/
│ │ │ │ └── Testimonials.jsx
│ │ │ ├── TrendingDestinations/
│ │ │ │ └── TrendingDestinations.jsx
│ │ │ └── WhyChooseUs/
│ │ │ └── WhyChooseUs.jsx
│ │ ├── Packages/
│ │ │ ├── PackageDetails/
│ │ │ │ └── PackageDetails.jsx
│ │ │ └── Packages/
│ │ │ ├── PackageCard.jsx
│ │ │ └── Packages.jsx
│ │ └── shared/
│ │ ├── Layout/
│ │ │ ├── CommonFooter.jsx
│ │ │ ├── index.js
│ │ │ ├── Navbar.jsx
│ │ │ ├── NavbarDrawer.jsx
│ │ │ ├── navbarLinksConstant.jsx
│ │ │ ├── RootLayout.jsx
│ │ │ ├── SidebarLink.jsx
│ │ │ ├── sidebarLinks.js
│ │ │ └── Spinner.jsx
│ │ └── ui/
│ │ ├── Avatar.jsx
│ │ ├── Brand.jsx
│ │ ├── Button.jsx
│ │ ├── DropDown.jsx
│ │ ├── index.js
│ │ ├── Input.jsx
│ │ └── swalToast.js
│ ├── pages/
│ │ ├── About/
│ │ │ └── About.jsx
│ │ ├── Community/
│ │ │ └── CommunityPage.jsx
│ │ ├── faq/
│ │ │ ├── faq.constant.js
│ │ │ └── FAQ.jsx
│ │ └── PrivacySection/
│ │ └── PrivacySection.jsx
│ ├── router/
│ │ ├── ErrorPage.jsx
│ │ ├── ProtectedRoute.jsx
│ │ └── router.jsx
│ └── utils/
│ ├── axiosInstance.js
│ ├── customAlert.js
│ ├── deleteData.js
│ ├── ErrorMessage.jsx
│ ├── fetchData.js
│ ├── PageIntro.jsx
│ ├── postData.js
│ ├── TypeWriterEffect.jsx
│ └── updateData.js
└── .firebase/
└── hosting.ZGlzdA.cache
## 🧭 Routing Structure (with Layouts)
### 🔐 Auth Layout
- `/login` → `Login.jsx`
- `/register` → `Register.jsx`
- `/forgot-password` → `ForgotPassword.jsx`
### 🏠 Main Layout (Landing Pages)
- `/` → `Home.jsx`
- `/about` → `About.jsx`
- `/contact` → `Contact.jsx`
- `/faq` → `Faq.jsx`
- `/privacy-policy` → `PrivacyPolicy.jsx`
- `/terms-and-conditions` → `TermsCondintion.jsx`
### 📚 Blog Feature (via `BlogsLayout.jsx`)
- `/blogs` → `Blogs.jsx`
- `/blogs/:id` → `BlogDetails.jsx`
- `/create-blog` → `CreateBlog.jsx`
### 👤 Profile
- `/my-profile` → `MyProfile.jsx`
- `/update-profile` → `UpdateProfile.jsx`
---
## 🔑 Features
### ✅ Authentication
- Firebase Auth integration
- Login, Register, Forgot Password
- Auth-protected routes
### 📝 Blog System
- View all blogs
- Blog details with comments, read time, tags
- Create and share new blogs
---
## 🛠️ Tech Stack
- **Frontend**: React.js, Tailwind CSS
- **Routing**: React Router 
- **Forms**: React Hook Form, React Day Picker
- **State Management**: React Context API (AuthProvider)
- **Animations**: Lottie
- **Toast Notifications**: React Hot Toast
- **Deployment**: GitHub Pages / Vercel / Netlify (configure as needed)
- **Build Tool**: Vite
---
## 📦 Installation
```bash
bun install # or npm install
bun run dev # or npm run dev- Design inspired by classic cooking & recipe books
- Icons via Lucide and Heroicons
- Lottie animations from LottieFiles
This project is licensed under the MIT License.
Made with ❤️ for food enthusiasts and aspiring chefs.
"Food is symbolic of love when words are inadequate." — Alan D. Wolfelt
- Email/Password Login: Secure user authentication via Firebase.
- Google Sign-In: Quick access using Google accounts.
- Protected Routes: Restricts access to sensitive pages like profile and recipe details.
- Password Reset: Users can reset passwords through email verification.
- Profile Page: View and edit user information, including display name and photo.
- Update Profile: Modify personal details securely.
- About: Learn more about FlavorBook.
- Contact: Get in touch with the team.
- FAQ: Frequently Asked Questions.
- Privacy Policy: Understand how user data is handled.
- Terms & Conditions: Legal information regarding the use of FlavorBook.
- Responsive Design: Optimized for various devices.
- Tailwind CSS & DaisyUI: Utilized for styling and component design.
- Lottie Animations: Engaging animations for better user experience.
- Swiper: Interactive sliders for showcasing content.
Hello i'm Md Mostakim Hosen.
I'm a passionate Frontend Developer with a strong focus on creating clean, responsive, and user-friendly web interfaces. I enjoy building modern web applications using technologies like HTML, CSS, JavaScript, React.js, and Tailwind CSS. I believe in writing readable code, maintaining UI consistency, and ensuring a smooth user experience across all devices. I'm always eager to learn new tools and improve my skills to deliver better results.
const mostakim = {
pronouns: "he" | "him",
code: [Javascript, Typescript, HTML, CSS, Python, Java],
tools: [React, Node, Storybook, Styled-Components],
architecture: ["microservices", "event-driven", "design system pattern"],
techCommunities: {
coorganizer: "AfroPython",
speaker: "Latinity",
mentor: "EducaTRANSforma"
},
challenge: "I am doing the #100DaysOfCode challenge focused on react and typescript"
}
