A UI-heavy travel booking web application built as an SD1 (Software Development 1) academic project at IIUC. Users can browse 12 international tour destinations, create an account, make bookings, and send enquiries — all through a richly designed interface featuring video backgrounds, animated flip cards, and smooth CSS transitions throughout.
🏆 Recognised as one of the best projects of the semester (2nd Year, SD1).
- Video hero section — auto-rotating fullscreen video slider cycling through 5 destination clips
- 12 tour destinations — Canada, Hawaii, Maldives, South Korea, Malaysia, Japan, Singapore, China, Spain, Italy, France, Dubai — each with a dedicated detail page
- Flip-card packages — hover to reveal included services, price per head, and a "Book Now" link
- Booking system — cost auto-calculates (destination price × guests); form requires login; inserts into DB with prepared statements
- User authentication — register/login with bcrypt-hashed passwords and PHP session management
- Contact form — saves enquiries to DB (login required); validates that submitted email matches the logged-in account
- 21-image gallery — with hover overlay captions
- Swiper.js review carousel — 6 animated customer testimonials
- Dashboard — animated personalised welcome page post-login
- Booking & contact success pages — full-page background image with glassmorphism confirmation card
- Responsive design — mobile-friendly via CSS media queries
- Consistent orange brand theme — built with CSS custom properties (
--orange,--white, etc.)
| Layer | Technology |
|---|---|
| Frontend | HTML5, CSS3, Vanilla JavaScript |
| Backend | PHP 8+ |
| Database | MySQL (via XAMPP / phpMyAdmin) |
| Server | Apache (XAMPP local environment) |
| Slider | Swiper.js (CDN) |
| Icons | Font Awesome 5 (CDN) |
| Fonts | Google Fonts — Nunito |
TourTravel2/
├── index.php # Homepage — video hero, booking form, packages, gallery, reviews, contact, footer
├── login.html # Login form
├── login.php # Login handler — session auth, bcrypt verify
├── register.html # Registration form
├── register.php # Registration handler — bcrypt hash, DB insert
├── logout.php # Session destroy → redirect to homepage
├── dashboard.php # Post-login animated welcome page
├── booking.php # Booking form handler — DB insert
├── booking_success.php # Booking confirmation page
├── contact.php # Contact form handler — DB insert
├── contact_success.php # Contact confirmation page
│
├── canada.html # Destination detail pages (×12)
├── china.html
├── dubai.html
├── france.html
├── hawaii.html
├── italy.html
├── japan.html
├── malaysia.html
├── maldives.html
├── singapore.html
├── southkorea.html
├── spain.html
│
├── styles.css # Main stylesheet (homepage + forms)
├── styles2.css # Destination detail pages stylesheet
├── script.js # Video slider autoplay logic
│
├── db_connection.example.php # DB config template (safe to commit)
├── db_connection.php # Your local credentials (gitignored — do NOT commit)
├── database.sql # Full MySQL schema — run this first
│
└── images/ # All media assets (jpg, jpeg, mp4)
- XAMPP installed (Apache + MySQL + PHP 8+)
- Git
1. Clone the repository
git clone https://github.com/Sam-Aves/Tour-Travel-Management-System.git2. Move to XAMPP's htdocs
# Windows
C:\xampp\htdocs\TourTravel2\
# Linux / macOS
/opt/lampp/htdocs/TourTravel2/
3. Set up the database
- Start XAMPP → open phpMyAdmin
- Create a database named
tour_travel_db - Go to the Import tab → choose
database.sql→ click Go
4. Configure your DB connection
cp db_connection.example.php db_connection.phpDefault XAMPP credentials are already in the example file (root / empty password) — no changes needed for a fresh XAMPP install.
5. Open in browser
http://localhost/TourTravel2/index.php
Three tables, all created by database.sql:
users
| Column | Type | Notes |
|---|---|---|
| user_id | INT PK | Auto-increment |
| first_name | VARCHAR(100) | |
| last_name | VARCHAR(100) | |
| VARCHAR(255) | Unique, stored lowercase | |
| password | VARCHAR(255) | bcrypt hashed by PHP |
| created_at | TIMESTAMP | Auto |
bookings
| Column | Type | Notes |
|---|---|---|
| booking_id | INT PK | Auto-increment |
| user_id | INT FK | → users |
| place_name | VARCHAR(255) | |
| number_of_guests | INT | |
| arrival_date | DATE | |
| leaving_date | DATE | |
| total_cost | DECIMAL(10,2) | |
| booked_at | TIMESTAMP | Auto |
contacts
| Column | Type | Notes |
|---|---|---|
| contact_id | INT PK | Auto-increment |
| user_id | INT FK | → users |
| name | VARCHAR(100) | |
| VARCHAR(255) | ||
| phone_number | VARCHAR(20) | |
| subject | VARCHAR(255) | |
| message | TEXT | |
| sent_at | TIMESTAMP | Auto |
Homepage → Browse packages → "Learn More" → Destination detail page
→ "Book Now" → (not logged in? → Login → Dashboard) → Booking form
→ Booking success ✓
Homepage → Contact section → (login required) → Submit enquiry → Contact success ✓
db_connection.phpis gitignored — never commit it. Usedb_connection.example.phpas the template.images/vid-5.mp4is excluded from the repo (~100 MB — exceeds GitHub's hard limit). Place it manually in theimages/folder after cloning for the video slider to work fully.- The contact form validates that the submitted email matches the logged-in user's registered email — this is intentional.
- All DB queries use prepared statements to prevent SQL injection.
Built by Mahi, Ruhi & Asliraf — SD1 Academic Project, 2nd Year
International Islamic University Chittagong (IIUC)
GitHub: @Sam-Aves