Fitvive

Modern Gym & Fitness HTML Template · Version 1.0.0

HTML5 + CSS3Bootstrap 5.3.8Bootstrap Icons 1.13.1Vanilla JSLight & DarkFully Responsive

View the live template overview ↗

Introduction

Thank you for choosing Fitvive, a modern HTML template for gyms, fitness studios, personal trainers and wellness clubs. It includes:

No build tools are needed. Open any .html file in a browser and it works.

Folder Structure

Fitvive/
├── Documentation/           ← you are here
│   └── index.html
├── HTML/                    ← upload the contents of this folder to your server
│   ├── index.html           Home 1
│   ├── index-2.html         Home 2
│   ├── about.html           About Us
│   ├── programs.html        Programs
│   ├── program-details.html Program Details
│   ├── trainers.html        Trainers
│   ├── trainer-*.html       6 coach profile pages
│   ├── success-stories.html Success Stories
│   ├── pricing.html         Pricing
│   ├── gallery.html         Gallery (filter tabs, masonry, lightbox)
│   ├── faqs.html            FAQs
│   ├── blog.html            Blog – default list (single wide cards)
│   ├── blog-grid.html       Blog – three-column grid
│   ├── blog-left-sidebar.html   Blog – grid with left sidebar
│   ├── blog-right-sidebar.html  Blog – grid with right sidebar
│   ├── blog-no-sidebar.html     Blog – wide two-column grid
│   ├── blog-details.html    Single article
│   ├── contact.html         Contact Us
│   ├── 404.html             Error page
│   ├── landing.html         Template overview (demos, all pages, features)
│   └── assets/
│       ├── css/style.css            Theme styles (commented, with a table of contents)
│       ├── js/main.js               Theme scripts (vanilla JS, with a table of contents)
│       ├── video/                   Home 2 hero background video + poster
│       ├── images/                  one folder per page with a sub-folder per section
│       │                            (see IMAGE-GUIDE.md), plus brand/, icons/, seo/
│       └── vendor/
│           ├── bootstrap/           Bootstrap 5.3.8 (css + bundle js)
│           ├── bootstrap-icons/     Bootstrap Icons 1.13.1 (css + fonts)
│           └── glightbox/           GLightbox 3.3.0 (gallery lightbox, gallery.html only)
├── Licensing/
│   └── README_LICENSE.txt
└── changelog.txt

Getting Started

  1. Unzip the package.
  2. Open HTML/index.html in any modern browser to preview the template.
  3. Edit pages with any code editor (VS Code, Sublime Text, etc.). Use your editor’s Find in Files / Replace in Files to change something on every page at once.
  4. Follow Brand Name, Logo & Favicon and SEO & Social Sharing to make the site yours.
  5. To publish, upload everything inside the HTML folder to your hosting (FTP, cPanel, Netlify, Vercel…).
All libraries are bundled locally in assets/vendor, so the template works offline. Only the Outfit font loads from Google Fonts; if it is unavailable the template falls back to the system font.

Pages

FileSections
index.htmlProgram-picker hero, marquee, About statement, What We Offer cards, Why Fitvive, coach roster, memberships, member voices, journal (featured post + list)
index-2.htmlAthlete spotlight hero with background video, facilities bento, weekly class timetable, program carousel, BMI calculator, coaches, review marquee, memberships, latest articles, gallery strip, FAQs
about.htmlPage hero, About statement, our story, values, Why Fitvive, FAQs
programs.htmlPage hero, program cards, marquee, how it works (3 steps), benefits, member voices
program-details.htmlHero with photo, key-facts strip, sticky section tabs, session timeline, weekly slots with spots left, booking sidebar, FAQs, booking form
trainers.htmlCoach grid (each card links to a profile), values
trainer-*.html (6)Coach profile: bio, stats, specialties, certifications, weekly classes, more coaches
success-stories.htmlImpact numbers, featured transformation, review wall, member voices
pricing.htmlMonthly/yearly switch, full comparison table, offer banner, FAQs
gallery.htmlFilter tabs with counts, masonry photo grid, lightbox that browses only the visible photos
faqs.htmlCategory filter, accordion, “still have questions” form
contact.htmlMessage form with topic picker, visit card with live open/closed status, department contacts, full-width map, quick-help links
blog.htmlDefault blog: one wide card per row, pagination
blog-grid.htmlThree-column card grid, pagination
blog-left-sidebar.html / blog-right-sidebar.htmlTwo-column grid with sidebar: search, categories, recent posts, promo card, tags
blog-no-sidebar.htmlWide two-column grid
blog-details.htmlArticle: breadcrumb, category, title, author, date, read time, featured image, sticky table of contents with share buttons, reading-progress bar, tip callout, table, in-article CTA, quote, tags, previous/next, author box, FAQs, related articles
404.htmlNot-found page (no CTA band; hidden from search engines)
landing.htmlTemplate overview for a live preview or sales page: page mock-ups, both home demos, every inner page with scroll-on-hover previews and a filter, feature tiles, technology, responsive devices, FAQ. Change the Buy buttons’ href to your item link. You can delete this page if you don’t need it.

Brand Name, Logo & Favicon

The brand appears in the logo, page titles, footer wordmark, preloader and a few text blocks. Do these steps once with Replace in Files across the HTML folder.

1. Change the brand name

  1. Replace Fitvive with your name across all .html files (match case). This updates the logo text, page titles, meta tags, copyright line, form labels and sample copy.
  2. The big outlined word at the bottom of every footer is part of that text:
    <div class="fv-foot__word" aria-hidden="true" …>
      <span class="fv-foot__word-line">Fitvive</span>
      <span class="fv-foot__word-fill">Fitvive</span>
    </div>
    Both spans must contain the same word. For a name longer than about 9 letters, lower its size in style.css (search for .fv-foot__word), or delete the whole div.
  3. Check the rotating text badges (search for fv-rotate-badge); their text follows the same replacement.

The logo is a round lime disc with an icon, followed by the brand name as text:

<a class="fv-logo" href="index.html" aria-label="Fitvive home">
  <span class="fv-logo__mark"><svg viewBox="0 0 42.1661 42.1664" aria-hidden="true"><use href="#i-logo-mark"/></svg></span>
  Fitvive
</a>

It is used in the header, mobile menu, footer and preloader, and the same icon decorates section labels. Pick one option:

OptionWhat to do
A. Keep the disc, change the icon (quickest)Each page has one hidden icon sprite right after <body>. Find <symbol id="i-logo-mark" viewBox="…"> and replace the shapes inside it, and its viewBox, with your SVG icon’s content. Use fill="currentColor" so it takes the dark colour of the disc. Also replace assets/images/icons/logo-mark.svg to keep the source file in step.
B. Use your own logo imageReplace the whole inside of every <a class="fv-logo"> with an image:
<a class="fv-logo" href="index.html" aria-label="YourGym home">
  <img src="assets/images/logo.svg" alt="YourGym" width="160" height="44">
</a>
Use SVG or a 2× PNG about 44 px tall. The header on Home 1 and Home 2 sits on dark photos, while inner pages are light, so prepare a light and a dark version. Use logo-light.svg inside header.fv-header--on-dark and the footer, and logo-dark.svg elsewhere.
C. Change only the disc colourThe disc uses --fv-primary. Change that variable (see Colours) and every logo, button and highlight follows.

The preloader shows the same mark inside <div class="fv-preloader__mark">. Replace it the same way, or delete the whole .fv-preloader block to turn the preloader off.

3. Change the favicon and app icons

Every page links three icon files in its <head>:

<link rel="icon" type="image/svg+xml" href="assets/images/brand/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="assets/images/brand/favicon-32.png">
<link rel="apple-touch-icon" sizes="180x180" href="assets/images/brand/apple-touch-icon.png">
  1. Create a square icon (at least 512 × 512 px) from your logo mark.
  2. Export three files with the same names: favicon.svg (any size, square viewBox), favicon-32.png (32 × 32 px) and apple-touch-icon.png (180 × 180 px, solid background, no transparency). A free tool such as RealFaviconGenerator can produce all of them from one image.
  3. Overwrite the files in assets/images/brand/. Because the names stay the same, no HTML needs to change.
  4. Browsers cache favicons strongly. If you still see the old one, open the icon URL directly once or use a private window.

The browser bar colour on mobile comes from <meta name="theme-color" content="#052b29">. Change the value to your brand’s dark colour.

Contact Details & Map

Use Replace in Files on the HTML folder for each value:

ValueWhere it appears
support@fitvive.com and other @fitvive.com addressesTop bar, footer, contact page, FAQ texts, landing page
+91 02548 74578 and tel:+910254874578Top bar, footer, CTA band, program sidebar, contact page
123 Fit Street, Wellness CityTop bar, footer, contact page, map card, structured data
Opening hoursFooter, contact page and the HOURS object in main.js (section 08i), which drives the live “Open now” label
Social links (href="#" with aria-label="Fitvive on Instagram", etc.)Footer, contact page, coach profiles. Replace each # with your profile URL.

Map: in contact.html, change the q= value in the map iframe src and in the “Open in Google Maps” link to your address.

Colours & Fonts

Primary
#A6E300

Primary hover
#93CC00

Secondary
#064343

Accent text
#0B5A52

Light base
#F2F5EA

Light raised
#FFFFFF

Feature band
#052B29

Footer
#042321

Primary fills buttons, discs and highlights; secondary teal carries text accents, checkmarks, feature bands and the footer. To re-brand, change --fv-primary, --fv-primary-rgb (the same colour as r, g, b) and --fv-secondary at the top of style.css.

Font: Outfit (weights 300–800). To use another Google Font, replace the font <link> in each page’s <head> and update --fv-font.

Light & Dark Themes

The light theme is the default; a full dark theme is included. Visitors switch with the round sun/moon button above “back to top”, and their choice is remembered.

SEO & Social Sharing

Every page ships with complete, unique meta tags. When you publish, update them as follows.

1. Titles and descriptions

Each page has its own <title> (keep it under ~60 characters) and <meta name="description"> (about 120–160 characters). The same text is repeated in the og: and twitter: tags of that page, so update all of them together.

2. Your domain

Canonical links, og:url, the share image and the structured data use the demo address https://fitvive-gym-template.vercel.app/. Replace it in all files with your own domain, keeping the trailing slash, for example https://www.yourgym.com/.

<link rel="canonical" href="https://www.yourgym.com/about.html">
<meta property="og:url" content="https://www.yourgym.com/about.html">

3. Share image (Open Graph)

Links shared on Facebook, LinkedIn, WhatsApp, Slack and X show assets/images/seo/og-image.jpg. Replace it with your own 1200 × 630 px JPG (under ~300 KB) using the same file name. Social networks cache previews; use the Facebook Sharing Debugger or LinkedIn Post Inspector to refresh them.

4. Structured data

Search engines read the <script type="application/ld+json"> blocks in the <head>:

Check your pages with Google’s Rich Results Test after publishing.

5. Indexing

All pages use <meta name="robots" content="index, follow"> except 404.html, which is noindex. If you keep landing.html only as a preview page, change its robots tag to noindex or delete it. Add a sitemap.xml listing your live pages and submit it in Google Search Console.

HTML Structure

Every page follows the same skeleton. The header, mobile menu and footer are identical on every page, so copy a change to all pages with Replace in Files.

<body>
  <svg hidden>…<symbol id="i-…">…</svg>          Icon sprite used on this page
  <a class="… fv-skip" href="#main">               Skip-to-content link (keyboard users)
  <div class="fv-preloader">…</div>               Preloader
  <header class="fv-header">                       Top bar + navigation (sticky on scroll)
  <div class="offcanvas fv-offcanvas" id="mobileMenu">  Mobile menu
  <main id="main">
    <section class="fv-phero">…</section>          Inner-page hero: breadcrumb + title
    <section class="section">…</section>           Content sections
    <section class="section section-alt">…</section>  Alternate (white) background
  </main>
  <section class="fv-cta-band">…</section>         “Ready to commit?” call-to-action
  <footer class="fv-foot">…</footer>              Footer + wordmark
  <button class="fv-theme-fab">                    Light/dark switch
  <button class="fv-back-top">                     Back to top with progress ring
  <div class="modal" id="videoModal">…</div>      Shared video popup
</body>

Section backgrounds alternate between the base colour and .section-alt, so neighbouring sections never match. .section-teal is the deep-teal feature band.

Menu order: Home ▾ (Home 1, Home 2) · About Us · Programs · Trainers · Pricing · FAQs · Pages ▾ (every inner page) · Blog ▾ (six layouts), plus the Contact Us button.

Customizing CSS

All design values are CSS variables at the top of assets/css/style.css. Change them once and the whole template updates:

:root {
  --fv-primary: #a6e300;        /* brand accent (buttons, highlights) */
  --fv-primary-rgb: 166, 227, 0; /* the same colour as r, g, b (tints) */
  --fv-secondary: #064343;      /* teal accents */
  --fv-bg: #f2f5ea;             /* page background (light theme) */
  --fv-bg-alt: #ffffff;         /* .section-alt background */
  --fv-surface: #ffffff;        /* cards, inputs */
  --fv-band-bg: #052b29;        /* top bar and feature bands */
  --fv-black: #000000;          /* every button hover */
  --fv-dark: #011010;
  --fv-shadow-rgb: 0, 0, 0;     /* shadow colour */
  --fv-shadow: …;  --fv-shadow-lg: …;  --fv-shadow-lift: …;   /* soft elevations */
  --fv-font: "Outfit", system-ui, sans-serif;
  --fv-radius: 16px;
  --fv-section-y: clamp(4.5rem, 8vw, 7.5rem);  /* vertical section spacing */
}

The stylesheet starts with a numbered table of contents (01 Design Tokens … 39 Landing). Search for a section number to jump to it.

Components

Class / attributePurpose
.btn-fvThe call-to-action button used everywhere: uppercase label plus a chevron disc; on hover the fill spreads out of the disc.
<a class="btn-fv" href="#"><span class="btn-fv__label">Join now</span><span class="btn-fv__ic" aria-hidden="true"><i class="bi bi-chevron-double-right"></i></span></a>
Colours: default (lime), .btn-fv-outline, .btn-fv-dark. Sizes: .btn-fv-sm, .btn-fv-lg. Add .w-100 for full width.
.fv-labelSection label: logo disc + uppercase text
.fv-accordionThe FAQ style used on every page: white items, teal chevron disc; the open item gets a lime border and disc.
.fv-postBlog card (photo, category, date, read time, title, excerpt, author). .fv-post--row is the wide list version. Grids: .fv-bgrid--2 / .fv-bgrid--3; sidebar layouts: .fv-blayout--left / --right.
[data-voices]Member voices: avatar tabs switch the quote; autoplays every data-interval ms.
[data-faq-filter]FAQ page: .fv-filter[data-filter] buttons show accordion items with a matching data-cat.
[data-schedule]Class timetable: day tabs open on today; arrow keys switch days.
[data-bmi]BMI calculator with metric/imperial units and a result scale.
[data-bg-video]Home 2 hero video (assets/video/hero_2.webm + hero_2-web.mp4, poster hero_2-poster.jpg). Muted, looping, pauses off-screen, has a Pause/Play button and shows the poster for reduced-motion visitors. Keep your clip under ~3 MB.
[data-open-status]Live “Open now / Closed” label driven by the HOURS object in main.js.
.text-limeHighlight words in headings.
.img-zoom + .img-monoRounded image wrapper with a slow zoom on hover.
.section-alt / .section-tealAlternate white background / deep-teal feature band.

Animations

Scroll animations use a lightweight IntersectionObserver (no extra library). Add data-reveal to any element:

<div data-reveal="up">…</div>                 fade in + slide up
<div data-reveal="left" data-delay="200">…</div>  delay in ms
<!-- values: up | down | left | right | zoom | fade | clip -->
EffectWhere / how
Word-by-word headline<h1 data-split>
Count-up numbers<span data-counter="250" data-suffix="+">. Options: data-prefix, data-decimals="1", data-separator, data-duration
Parallaxdata-parallax="0.08" on an image inside an overflow-hidden wrapper
Infinite marquee.fv-marquee (pauses on hover)
Rotating text badge.fv-rotate-badge (SVG text path)
Gallery hoverPhoto zooms, a dark veil rises, a lime frame draws itself in, caption and zoom button slide in
Page previews (landing)Hovering a preview scrolls through the whole page
ButtonsFill spreads out of the chevron disc; chevrons slide through
All motion respects the visitor’s reduce motion setting: content appears immediately and decorative movement stops.

JavaScript Features

assets/js/main.js is plain JavaScript and only needs the Bootstrap bundle (offcanvas menu, accordion, modal). It begins with a table of contents.

FeatureMarkup
Hero program picker (Home 1).fv-hero2[data-hero-picker data-interval="6000"]. Each tab [data-hero-tab="hiit"] controls a photo [data-hero-img="hiit"] and a “Next class” panel (linked by aria-controls). To add a program, copy one tab, one image and one panel and give them a new key.
Card slider[data-track-slider] containing .fv-track (scroll-snap, swipe on touch), plus optional prev/next/dots.
Pricing switch[data-price-switch="#plans"] with button[data-period="monthly|yearly"]. Prices: <span class="amount" data-monthly="599" data-yearly="5,750">
Video popupAny element with data-video="https://www.youtube.com/embed/VIDEO_ID"
Filter (gallery, landing)[data-gallery-root] with buttons [data-gfilter="all|strength|…"] and items [data-gcat="strength"].
Scroll spydata-spy on a nav of #section links; the section being read gets .is-active (article contents, program tabs).
Reading progress<span data-read-progress> fills while [data-read-target] scrolls past.
Copy link<button data-copy-link> copies the page URL.
Sticky headerAutomatic after 160 px of scrolling.
Footer year<span data-year>

Forms

The contact, booking, question and newsletter forms use Bootstrap validation (class="needs-validation" novalidate). Because this is a static template, a valid submission shows a success message but does not send data. To connect a backend, set the form’s action and edit the marked spot in main.js (section 12):

// TODO: send the form data to your backend here, e.g.
fetch(form.action, { method: "POST", body: new FormData(form) });

Services such as Formspree, Netlify Forms, Getform or your own PHP script all work.

Blog

Each photo in gallery.html is a <figure class="fv-mgal__item" data-gcat="strength"> whose link opens the large photo in the lightbox:

<a class="fv-mgal__link glightbox" href="assets/images/gallery/lightbox/g-01.jpg"
   data-gallery="fitvive" data-title="Caption" data-description="Category">
  <img src="assets/images/gallery/photo-grid/g-01-784x980.jpg" alt="Describe the photo" width="392" height="490" loading="lazy">
  …
</a>

Add a filter by adding a tab <button class="fv-gtab" data-gfilter="yoga"> and setting data-gcat="yoga" on its photos. Update the counts in the tabs by hand. The lightbox only loads on gallery.html.

Icons

UI icons use Bootstrap Icons 1.13.1: <i class="bi bi-arrow-up-right"></i>.

The fitness illustrations (program and benefit icons, logo mark) are SVG files in assets/images/icons. Each page has a hidden SVG sprite after <body> with one <symbol id="i-name"> per icon it uses; icons are placed with <svg viewBox="…"><use href="#i-name"/></svg>. Shapes use fill="currentColor", so they follow the CSS color. To add an icon to a page, copy its <symbol> from another page or build one from the SVG file.

Images

Photos are stored by page and section in assets/images: one folder per page (home-1/, about/, blog/ …) with a sub-folder for each section (home-1/hero-program-picker/). Each file name ends with its exact pixel size, for example team-1920x820.jpg. Every image has width/height attributes (no layout shift) and below-the-fold images load lazily.

assets/images/IMAGE-GUIDE.md lists every file with its pixel size, the size it is shown at, and the pages and sections that use it. When you replace a photo, keep the file name and the same width and height (or at least the same aspect ratio).

ImageSize rule
Photos inside a pageTwice the size they are shown at, so they stay sharp on high-density screens (the file name carries the size)
Full-width photos1920 px wide at most
Gallery lightboxLarge version in gallery/lightbox, up to 1600 px
Share imageseo/og-image.jpg, 1200 × 630 px
Faviconsbrand/: 32 × 32 and 180 × 180 px PNG, plus the SVG

Always write a short alt text that describes the photo; use alt="" only for purely decorative images.

Accessibility & Performance

Browser Support

Latest Chrome, Edge, Firefox, Safari and Opera, plus iOS Safari and Chrome for Android.

Credits & Image Sources

Code, fonts and icons (included)

AssetLicenseSource
Bootstrap 5.3.8MITgetbootstrap.com
Bootstrap Icons 1.13.1MITicons.getbootstrap.com
GLightbox 3.3.0MITgithub.com/biati-digital/glightbox
Outfit fontSIL Open Font License 1.1Google Fonts
Logo mark, fitness icons (assets/images/icons), faviconPart of this itemFitvive UI Kit

Images and video (demo only)

Folder / fileContentSource
home-1/, home-2/, about/, programs/, program-details/, trainers/, trainer-details/, success-stories/, gallery/, blog/, blog-details/, contact/, faqs/, pricing/Gym and training photography, coach cut-outs, member avatars and plan illustrations, one folder per pageDemo photography and illustrations from the Fitvive UI Kit design file
video/hero_2.*Home 2 background video and posterDemo video supplied for the preview
landing/, seo/og-image.jpgScreenshots of this templateCreated from the template itself
Important: all photographs, people images and the video are used for demonstration only and are not included in the license. Replace them with images you own or have licensed before publishing your website.

Changelog

Version 1.0.0 – Initial release

Support

If you have a question that this document doesn’t answer, buyers can reach us in any of these ways. Please include your purchase code and a link to the page in question.

© Fitvive. All rights reserved.