Travel Studio Documentation
View Live Site

Travel Studio Documentation

Complete guide to customizing and extending the Travel Studio travel agency HTML template.

Travel Studio is a modern, fully responsive single-page HTML template designed for travel agencies, tour operators, and travel experience companies. It features a sleek design with interactive carousels, animated sections, filterable packages, and detail modals — all without requiring any build tools or frameworks.

Note: This is a static HTML template. All customization is done by directly editing index.html and the asset files. No command-line tools, package managers, or compilation steps are needed.

File Structure

travel-studio/
├── index.html — Main single-page template (~4,400 lines)
├── documentation.html — This file
└── assets/
    ├── css/
    │   ├── style.css — Main stylesheet (724 KB)
    │   ├── vendor/
    │   │   └── bootstrap.min.css — Bootstrap 5
    │   └── plugins/
    │       ├── fontawesome.css — Font Awesome Pro icons
    │       ├── swiper.css — Swiper carousel styles
    │       ├── metismenu.css — Mobile menu plugin
    │       ├── magnifying-popup.css — Lightbox/popup styles
    │       └── odometer.css — Counter animation styles
    ├── js/
    │   ├── main.js — Main JS logic (~1,630 lines)
    │   ├── vendor/
    │   │   └── bootstrap.min.js
    │   └── plugins/
    │       ├── jquery.js — jQuery 3.7.1
    │       ├── swiper.js — Swiper 11
    │       ├── gsap.js — GSAP 3 core
    │       ├── split-text.js — GSAP SplitText
    │       ├── scroll-trigger.js — GSAP ScrollTrigger
    │       ├── smooth-scroll.js — Smooth scroll
    │       ├── popup.js — Magnific Popup
    │       ├── metismenu.js — MetisMenu
    │       ├── odometer.js — Odometer counter
    │       └── jquery-appear.js — Appear on scroll
    ├── images/
    │   ├── travel-studio-fav.png — Favicon
    │   ├── logo/ — Site logo
    │   ├── banner/ — Hero slider backgrounds (3 images)
    │   ├── about/ — About section images
    │   ├── service/ — Destination cards & background
    │   ├── business-goal/ — Why Choose Us images
    │   ├── counterup/ — Counter section background
    │   ├── project/ — Package cards & modal hero images
    │   ├── team/ — Team member photos
    │   ├── testimonials/ — Reviewer avatars
    │   ├── blog/ — Blog post images
    │   ├── cta/ — Call-to-action background
    │   └── footer/ — Footer logo & background
    └── fonts/ — Font Awesome Pro (4 weights x 5 formats)

Tech Stack

TechnologyVersionPurpose
Bootstrap5.xGrid system, responsive utilities
jQuery3.7.1DOM manipulation, event handling
Swiper11.xTouch-enabled carousels & sliders
GSAP3.xScroll-based animations, text splitting
Font Awesome Pro5.xIcon library (Solid, Regular, Light, Brands)
Google Fonts—Playfair Display, Poppins, Red Hat Display, DM Sans
Magnific Popup—Video lightbox popup
Odometer—Animated number counters

Quick Start

  1. Unzip the template files to your desired folder.
  2. Open index.html in any code editor (VS Code recommended).
  3. Open index.html in a browser to preview the site (or use a local server like Live Server for VS Code).
  4. Customize content, images, colors, and fonts by following the sections below.
  5. Deploy by uploading all files to your web hosting server.
Tip: Use VS Code with the "Live Server" extension for real-time preview as you edit. Right-click index.html and select "Open with Live Server".

Colors & Fonts

Changing Colors

The template uses CSS custom properties (variables) defined in style.css. The main colors are overridden via inline styles in index.html. To change the primary color scheme, find the <style> block at the top of index.html (around line 19):

/* Key CSS variables in style.css */
--color-primary: #20282D;    /* Dark — used for headings, buttons, footer */
--color-body: #5D666F;       /* Gray — used for body text */
--color-blue: #0b4df5;       /* Blue — used for accents, links */

To change these globally, add overrides to the inline <style> block in the <head>:

:root {
    --color-primary: #1a365d;  /* Your new primary color */
    --color-body: #4a5568;     /* Your new body text color */
    --color-blue: #3182ce;     /* Your new accent color */
}

Changing Fonts

The template loads Google Fonts via the <link> tag on line 15-17. Current fonts:

To change fonts:

  1. Visit Google Fonts and pick your fonts.
  2. Replace the Google Fonts <link> tag with your new embed code.
  3. Update the font override block in the inline <style> (around line 20-34):
/* Font Override — change these to your new fonts */
h1, h2, h3, h4, h5, h6,
.title {
    font-family: "Your Heading Font", serif !important;
}
body, p, a, li, span, input,
textarea, select, button {
    font-family: "Your Body Font", sans-serif !important;
}

Logo & Favicon

Changing the Logo

The logo appears in two places — the header navbar and the mobile sidebar. Both reference the same file:

  1. Replace assets/images/logo/travel-studion-logo.png with your logo file.
  2. If using a different filename, update these two lines in index.html:
<!-- Header logo (around line 635) -->
<img src="assets/images/logo/your-logo.png" alt="your-logo">

<!-- Mobile sidebar logo (around line 682) -->
<img src="assets/images/logo/your-logo.png" alt="your-logo" style="max-width: 140px;">

Changing the Favicon

Replace assets/images/travel-studio-fav.png with your favicon, or update line 7:

<link rel="shortcut icon" href="assets/images/your-favicon.png">

The navbar uses one-page scroll navigation. Each link points to a section ID:

Nav LinkTarget IDSection
Home#homeHero slider
About#aboutAbout section
Destinations#serviceDestinations cards
Packages#projectPackages with filters
Blog#blogBlog section
Contact#contactContact form

To add or rename nav links, edit the <ul> inside .nav-area (around line 657) and update the corresponding mobile sidebar nav (around line 691).

Hero Section

The hero is a 3-slide Swiper carousel. Each slide has a background image set via CSS classes in style.css:

SlideCSS ClassImage File
Slide 1.rts-banner-area-twoassets/images/banner/banner-01.jpg
Slide 2.rts-banner-area-two.twoassets/images/banner/banner-02.jpg
Slide 3.rts-banner-area-two.threeassets/images/banner/banner-03.jpg

To change hero backgrounds, simply replace the image files in assets/images/banner/. Recommended size: 1920x850px (JPEG, optimized).

To edit slide content (titles, descriptions, CTAs), find the .swiper-slide blocks starting around line 706. Each slide contains:

About Section

Located around line 883 with ID #about. Contains:

Destinations Section

Located around line 1123 with ID #service. Contains 4 destination cards with the Swiper carousel. Each card has:

<div class="single-service-signle-wrapper" data-filter="Beach">
    <img src="assets/images/service/beach.jpg">
    <h5 class="title">Beach & Island Escapes</h5>
    <p>Description here...</p>
</div>
Important: The data-filter attribute links each destination card to the package filter system. When clicked, the page scrolls to packages and auto-filters by that category. The value must match a data-category on package cards.

CTA Section

The "Ready for the adventure of a lifetime?" banner (around line 1233). Background image is set via CSS class .rts-call-to-action-area-two in style.css — references assets/images/cta/cta-bg.jpg. Replace that image to change the background.

Why Choose Us

Located around line 1259. Two-column layout with features on the left and images on the right. Features include icons with text (route, headset, shield, tags). Edit the li items inside .feature-list to change content. Images at assets/images/business-goal/goal-01.jpg and goal-02.jpg.

Statistics Counter

Animated counters that count up when scrolled into view (around line 1742). Background image: assets/images/counterup/counter-bg.jpg. Each counter uses the Odometer library:

<div class="odometer" data-count="50">0</div>
<span>Destinations Worldwide</span>

Change the data-count value to update the target number. The counter animates automatically on scroll.

Packages Section

Located around line 1780 with ID #project. Contains 8 tour package cards with filter controls. Each card structure:

<div class="package-card"
     data-category="Beach"
     data-price="1299">
    <span class="pkg-badge">Beach</span>
    <img src="assets/images/project/santorini.jpg">
    <h5 class="pkg-title">Santorini Getaway</h5>
    <p class="pkg-price">$1,299 <span>/person</span></p>
</div>
AttributePurposeValues Used
data-categoryFilter categoryBeach, Adventure, Cultural, Wildlife
data-pricePrice for sorting (numeric, no comma)e.g., 1299, 2499

Team Section

Swiper carousel showing team members (around line 1994). Each member card:

<div class="team-single-one-start">
    <div class="team-image-area">
        <a><img src="assets/images/team/team-01.jpg"></a>
    </div>
    <h6 class="title">Name</h6>
    <span class="desig">Role</span>
    <!-- Social links -->
</div>

Team images: assets/images/team/team-01.jpg through team-04.jpg. Recommended size: 400x500px.

Testimonials

Three review cards (around line 2288). Each has a reviewer image, name, rating stars, and review text. Reviewer images at assets/images/testimonials/reviewer-01.jpg through reviewer-03.jpg.

Contact Form

Located around line 2745 with ID #contact. Fields: Full Name, Email, Phone, Trip Type (dropdown), Message. The form currently has no backend — see Dynamic Integration to connect it.

Blog Section

Located around line 2897 with ID #blog. Shows 6 blog cards (3 unique posts, each repeated once for the carousel). Each card:

<div class="single-blog-area-one" data-blog="1">
    <a><img src="assets/images/blog/blog-01.jpg"></a>
    <div class="bottom-details">
        <a class="blog-title">Title</a>
        <p>Travel Tips / <span>by Travel Studio</span></p>
    </div>
</div>

The data-blog attribute links cards to the blog modal content. See Blog Modal section.

Located around line 3734. Contains:


Filter & Search System

The packages section includes three filter controls:

ControlIDFunction
Search input.pkg-search inputText search across card content
Type filter#pkgTypeFilterFilter by category (Beach, Adventure, etc.)
Price sort#pkgPriceSortSort by price (low-high / high-low)

To add a new filter category:

  1. Add an <option> to the #pkgTypeFilter dropdown
  2. Set matching data-category on your package cards
  3. Optionally add a destination card with matching data-filter attribute

A "No packages found" fallback (#pkgNoResults) shows automatically when no cards match the filters. It includes a "Show all packages" reset link.

Blog Detail Modal

Clicking any blog card opens a full-screen modal with the article content. The modal features:

Blog content is stored in the blogData JavaScript object (around line 4104). See Adding New Blog Posts for how to add more.

Package Detail Modal

Clicking any package card opens a two-column modal:

On mobile, columns stack vertically with the form below details. Package data is in the pkgData JavaScript object (around line 4180). See Adding New Packages.

Animations

The template uses GSAP with ScrollTrigger for scroll-based animations:

Warning: If you add new content that changes page height significantly, GSAP's ScrollTrigger positions may become stale. A 500ms delayed ScrollTrigger.refresh() is already called in main.js (line 60), but you may need to increase the delay if issues persist.

Back to Top Button

A dark rounded-square button appears in the bottom-right corner after scrolling past 50px. Hover transforms it into a circle with a lift effect. Smooth fade-in/fade-out transitions. Styled via inline <style> near line 3897.


CSS Architecture

The template uses a layered CSS approach:

  1. Plugin CSS — Third-party styles (Bootstrap, Swiper, Font Awesome, etc.)
  2. style.css — Main template stylesheet (724 KB, compiled from SCSS). Contains all component styles and responsive rules.
  3. Inline <style> blocks — Section-specific overrides using !important to customize individual components without modifying style.css
Tip: When customizing, add your overrides to the inline <style> blocks in index.html rather than editing style.css directly. This keeps your changes isolated and makes future template updates easier.

JavaScript Guide

All JavaScript is organized in two layers:

main.js — Core Logic

Uses the rtsJs object pattern with jQuery. Key methods:

MethodPurpose
swiperActivation()Initializes all Swiper carousels (hero, services, team, blog, partners)
commonAnimation()GSAP fade-in animations on scroll
splitText()GSAP SplitText character animation for headings
stickyHeader()Makes header sticky on scroll
odoMeter()Animated number counters
vedioActivation()Magnific Popup for video lightbox
backToTopInit()Back-to-top button scroll behavior
preloader()Page loading animation
smoothScroll()Smooth scroll for anchor links

Inline Scripts — Feature Logic

Located at the bottom of index.html (after line 3967):

ScriptPurpose
Active nav scroll spyHighlights current nav link based on scroll position
Mobile sidebar toggleOpen/close mobile navigation sidebar
Package filter & sortSearch, type filter, price sort, destination card integration
Blog detail modalOpens blog articles in a modal overlay
Package detail modalOpens package details with booking form

Adding New Packages

Follow these 3 steps to add a new tour package:

Step 1: Add the Card HTML

Find the packages grid (around line 1808) and add a new card column:

<div class="col-lg-3 col-md-4 col-sm-6">
    <div class="package-card"
         data-category="Beach"
         data-price="1599">
        <div class="pkg-image">
            <span class="pkg-badge">Beach</span>
            <img src="assets/images/project/your-image.jpg" alt="Package Name">
        </div>
        <div class="pkg-content">
            <h5 class="pkg-title">Your Package Name</h5>
            <div class="pkg-meta">
                <span><i class="far fa-clock"></i> 7 Days</span>
                <span><i class="fas fa-users"></i> Up to 12</span>
            </div>
            <p class="pkg-price">$1,599 <span>/person</span></p>
        </div>
    </div>
</div>HTML

Step 2: Add Modal Data

Find the pkgData object (around line 4180) and add a new entry. The key must exactly match the .pkg-title text:

'Your Package Name': {
    img: 'assets/images/project/your-image-lg.jpg',
    price: '1,599',
    location: 'Country',
    duration: '7 Days / 6 Nights',
    groupSize: 'Up to 12',
    difficulty: 'Easy',
    desc: 'Your package description here...',
    highlights: [
        'Highlight 1',
        'Highlight 2',
        'Highlight 3'
    ],
    includes: ['Flights', 'Hotel', 'Breakfast']
}JS

Step 3: Add Filter Option (if new category)

If your package uses a new category, add an option to the #pkgTypeFilter dropdown:

<option value="NewCategory">New Category</option>HTML

Adding New Blog Posts

Follow these 2 steps:

Step 1: Add the Card HTML

Find the blog Swiper slides (around line 2910) and add a new slide:

<div class="swiper-slide">
    <div class="single-blog-area-one" data-blog="4">
        <a><img src="assets/images/blog/blog-04.jpg"></a>
        <div class="bottom-details">
            <a class="blog-title">Your Blog Title</a>
            <p>Travel Tips / <span>by Travel Studio</span></p>
        </div>
    </div>
</div>HTML

Step 2: Add Modal Data

Find the blogData object (around line 4104) and add a new entry with a unique key matching the data-blog attribute:

'4': {
    title: 'Your Blog Title',
    img: 'assets/images/blog/blog-04.jpg',
    tag: 'Category Tag',
    date: 'Mar 01, 2026',
    readTime: '5 min read',
    content: '<p>Your article HTML content...</p>'
}JS

Image Management

All images are in assets/images/. Recommended sizes:

Image TypeRecommended SizeFormat
Hero backgrounds1920 x 850pxJPEG (optimized)
Package card thumbnails600 x 400pxJPEG
Package modal hero1000 x 500pxJPEG
Blog images800 x 500pxJPEG
Team photos400 x 500pxJPEG
Destination cards600 x 400pxJPEG
Testimonial avatars100 x 100pxJPEG
LogoAny (SVG or PNG)PNG / SVG
Favicon32 x 32px or 64 x 64pxPNG / ICO
Tip: Compress images before uploading using tools like TinyPNG or Squoosh to improve page load speed.

SEO & Meta Tags

Update the <head> section of index.html with your site information:

<title>Your Site Title - Travel Agency</title>
<meta name="description" content="Your site description">
<meta name="keywords" content="travel, agency, tours">

<!-- Open Graph for social media sharing -->
<meta property="og:title" content="Your Site Title">
<meta property="og:description" content="Your description">
<meta property="og:image" content="https://yoursite.com/preview.jpg">HTML

Dynamic Integration

While this is a static template, you can connect it to backends or services:

Contact Form

The contact form (ID: #contact) and booking form (in the package modal) need backend integration. Options:

Making Packages Dynamic

To load packages from a database/API instead of static HTML:

  1. Replace the static pkgData object with an API fetch call
  2. Generate the card HTML dynamically using JavaScript
  3. Keep the same class names and data-* attributes for the filter system to work
  4. Call filterAndSort() after rendering new cards
// Example: Fetch packages from API
fetch('/api/packages')
    .then(res => res.json())
    .then(packages => {
        const grid = document.querySelector('.row.g-4');
        packages.forEach(pkg => {
            grid.innerHTML += `
                <div class="col-lg-3 col-md-4 col-sm-6">
                    <div class="package-card"
                         data-category="${pkg.category}"
                         data-price="${pkg.price}">
                        ...
                    </div>
                </div>`;
        });
    });JS

Google Maps

The footer contains a Google Maps <iframe> embed. To change the location:

  1. Go to Google Maps
  2. Search your location
  3. Click "Share" → "Embed a map"
  4. Copy the <iframe> code and replace the existing one in the footer

CSS Variables Reference

VariableDefault ValueUsage
--color-primary#20282DHeadings, buttons, footer, dark elements
--color-body#5D666FBody text, paragraphs
--color-blue#0b4df5Accent links, badges, hover states
--font-primary"Red Hat Display"Base heading font (overridden to Playfair Display)
--font-secondary"DM Sans"Base body font (overridden to Poppins)
--radius10pxDefault border radius
--transition0.3sDefault transition duration

Icon Reference

The template uses Font Awesome Pro icons with 4 weight prefixes:

PrefixWeightExample
fasSolid (900)<i class="fas fa-globe-americas"></i>
farRegular (400)<i class="far fa-clock"></i>
falLight (300)<i class="fal fa-times"></i>
fabBrands<i class="fab fa-instagram"></i>

Browse all available icons at fontawesome.com/icons.

ID Reference

Important element IDs used by JavaScript:

IDElementUsed By
#homeHero sectionNavigation, scroll spy
#aboutAbout sectionNavigation
#serviceDestinations sectionNavigation
#projectPackages sectionNavigation, destination card scroll
#blogBlog sectionNavigation
#contactContact sectionNavigation
#pkgTypeFilterType filter dropdownFilter system
#pkgPriceSortPrice sort dropdownSort system
#pkgNoResultsNo results fallbackFilter system
#pkgResetFilterReset filters linkFilter system
#blogModalOverlayBlog modal wrapperBlog modal script
#pkgModalOverlayPackage modal wrapperPackage modal script
#mobileMenuBtnHamburger buttonMobile sidebar script
#mobileSidebarMobile nav sidebarMobile sidebar script

Credits & Licenses

ResourceLicenseLink
Bootstrap 5MITgetbootstrap.com
jQueryMITjquery.com
SwiperMITswiperjs.com
GSAPStandard Licensegsap.com
Font Awesome ProCommercialfontawesome.com
Google FontsOpen Font Licensefonts.google.com
Magnific PopupMITdimsemenov.com
Unsplash ImagesUnsplash Licenseunsplash.com

Travel Studio Documentation — Built with care.