Overview

Hopstead template home pages

A bold, graphic HTML template for craft breweries, taprooms, brewpubs and beer brands. Hopstead ships three home pages, a light and a dark theme, right-to-left support, twelve drawn cans, and brewery logic that is worked out rather than typed in: a beer finder by strength and bitterness, spec sheets with dials, a taproom board that knows when it is open and drops the pint price in the happy hour, a flight builder, tour booking with seats left, a case builder, club pricing, stockists, event dates and a shop with a bag, coupon, shipping and tax.

What’s included

  • 3 home pages, each with its own scroll moment: Know Your Pour (ABV and IBU dials sweep with the scroll), The Brewhouse, Step By Step (the brew day slides sideways) and From Lager To Stout (the ground pours from pilsner gold to stout black)
  • Light and dark mode on one switch in every header, remembered between visits and applied before the page paints
  • Right-to-left stylesheets and a flag language picker: a right-to-left language turns any page around
  • WebGL layers — a grain-textured malt haze in the night bands and a hop cone drawn in light in the footer — tinted by the theme colours
  • Beer finder, spec sheets, live tap list, flight builder, table requests, tour booking, case builder, Hop Club pricing, stockists, events with tickets
  • The shop: filters, sort and search, product page, bag, coupon, free-shipping meter, tax, checkout with an order number, wishlist
  • An age check on the first visit, remembered in the browser
  • Pint Fill preloader, Pour Line photo reveals, a pointer spotlight in the taproom band, tilt-follow can tiles
  • Fully responsive, W3C-valid, zero console errors
📄 30 HTML files

Getting Started

Thank you for choosing Hopstead. Follow the steps below to get your site live.

1. Open locally

Unzip the downloaded package and open hopstead/index.html in any modern browser (Chrome, Firefox, Edge, Safari). No build tools or server are required — the finder, the taproom board, the booking, the case builder, the club and the shop all work straight from the files.

2. Deploy to a server

Upload the contents of the hopstead/ folder to your hosting provider using an FTP client (such as FileZilla) or your hosting control panel. Once uploaded, navigate to your domain and the template will load immediately.

3. Customise

All custom styling lives in assets/css/style.css (with a numbered Table of CSS at the top) and assets/css/responsive.css. Colours and fonts are controlled by CSS variables — see Colors & Fonts. Beers, hours, tours, cases, club plans, events, brewers, stockists and products live in one place — see Brewery Logic.

Tip: Replace the neutral placeholder images in assets/img/ with your own photography at the same dimensions for the best result. The cans in img/cans/ are drawn artwork and ship as they are — replace them with your own label renders at 700×1200 (transparent PNG).

File Structure

Below is an overview of the key files and folders included in this template.

index.html / homepage-2.html / homepage-3.htmlThree home pages: Craft Beer (Know Your Pour), Brewery (The Brewhouse, Step By Step) and Beer Showcase (From Lager To Stout)
beers.html / beer-details.htmlThe beer finder by family, strength, bitterness and search; a beer’s spec sheet with dials, colour, hops, malts and packs
case-builder.htmlMix a case of 12 or 24 cans with the case discount worked out live
hop-club.htmlThree club plans repriced by billing period, a comparison table and the sign-up
stockists.htmlWhere to buy: stockists by city, kind of place and search; a wholesale request
taproom.htmlOpen now, the live tap list with pour prices, the flight builder, table requests and the hours
tours.htmlThree tours and the four-step tour booking with seats left
events.html / event-details.htmlEvents with a month calendar and filters; an event with ticket reservations
gallery.htmlPhotos by group with filter tabs and a lightbox
about.htmlThe brewery’s story, its numbers, values, the brewers and voices
brewers.html / brewer-details.htmlThe crew, and a brewer’s profile with his signature beer
faq.htmlQuestions by topic with search
blog.html / blog-details.htmlPosts in five formats with search, an article with reading time, share and comments
shop.html / product-single.html / cart.html / checkout.html / wishlist.htmlThe shop: filters, sort and search, product, bag, checkout, wishlist
contact.htmlContact cells with the live taproom status, the contact form, map and both sites
login.html / register.html / forgot-password.htmlAccount pages
coming-soon.html / 404.htmlCountdown to the Barrel House opening, error page
sendmail.phpAJAX mail handler for the contact and comment forms (see Contact Form)
assets/css/style.cssAll custom styles, numbered Table of CSS (19 sections)
assets/css/responsive.cssDesktop-first breakpoints 1399 / 1199 / 991 / 767 / 575, plus wide screens from 1600 and 1960
assets/css/style.rtl.css / responsive.rtl.cssThe right-to-left twins (see RTL)
assets/css/plugins/Bootstrap (LTR and RTL), Swiper, Fancybox (vendor CSS)
assets/js/main.jsAll custom scripts, numbered JS INDEX (43 blocks)
assets/js/plugins/jQuery, Bootstrap, Swiper, Fancybox, GSAP, ScrollTrigger
assets/img/Images, one folder per section (see Images)
assets/fonts/theme-icons/The sun and moon of the theme switch, loaded locally
assets/webfonts/ + assets/css/fontawesome-all.cssFont Awesome Free, loaded locally

Folder Structure

The package unzips to two folders: Documentation/ (this guide) and hopstead/, the template. Every page sits in the template’s root; everything the pages load sits under assets/:

hopstead/
├── *.html                              the 30 pages, all in the root (see File Structure)
├── sendmail.php                        the AJAX mail handler for the forms
└── assets/
    ├── css/
    │   ├── style.css                   all custom styles, numbered Table of CSS
    │   ├── style.rtl.css               the right-to-left twin of style.css
    │   ├── responsive.css              breakpoints 1399 / 1199 / 991 / 767 / 575
    │   ├── responsive.rtl.css          the right-to-left twin of responsive.css
    │   ├── fontawesome-all.css         Font Awesome Free, loaded locally
    │   └── plugins/                    vendor stylesheets
    │       ├── bootstrap.min.css
    │       ├── bootstrap.rtl.min.css   Bootstrap for right-to-left pages
    │       ├── jquery.fancybox.min.css
    │       └── swiper-bundle.min.css
    ├── js/
    │   ├── main.js                     all custom scripts, numbered JS INDEX (43 blocks)
    │   └── plugins/                    vendor scripts
    │       ├── bootstrap.bundle.min.js
    │       ├── gsap.min.js
    │       ├── jquery-3.7.1.min.js
    │       ├── jquery.fancybox.min.js
    │       ├── ScrollTrigger.min.js
    │       └── swiper-bundle.min.js
    ├── fonts/
    │   └── theme-icons/                the sun and moon of the theme switch
    ├── webfonts/                       Font Awesome Free font files
    └── img/                            images, one folder per section
        ├── banner/                      5 files
        ├── brew/                        15 files
        ├── cans/                        16 files
        ├── cutout/                      1 files
        ├── flags/                       6 files
        ├── icons/                       14 files
        ├── land/                        2 files
        ├── logo/                        4 files
        ├── menu/                        3 files
        ├── pour/                        9 files
        └── team/                        6 files

To publish the site, upload the contents of hopstead/ to your web root. Photos keep their folder, file name and size when you replace them, so no page needs editing.

Colors & Fonts

The whole design is driven by CSS variables declared at the top of style.css. Change a token once and every section, button and card updates. Colours used with transparency have an -rgb twin (for example --hs-mint-rgb) — change both together.

Mint--hs-mint
Mint Text--hs-mint-text
Sun--hs-sun
Red--hs-red
Beer Amber--hs-amber
Stout Night--hs-stout
Grey Ground--hs-bg
Hairline Grid--hs-rule
Ivory--hs-ivory
Ink--hs-heading
Body--hs-text

The page is a flat grey ground ruled into cells by hairlines. Mint is the face of the buttons, the chosen tabs and the highlighted cells, always with ink text on it; mint text is its darker partner for small type. Sun and mint fill the starburst stickers; red marks sales; amber is the beer itself (the preloader, the pour line, the colour swatches). Stout is the ground of the night bands and the footer. Each beer brings its own label colour (--tone) and beer colour (--srm) through a tone-<beer> class. --hs-bg, --hs-surface, --hs-heading and --hs-text are the semantic names the components use — the dark theme swaps those (see Light & Dark Mode).

Fonts

Two Google Fonts are loaded in the head of each page: DM Sans (headings in a light weight with bold italic accent words, navigation, buttons, figures) and Nunito (body text). Swap them by editing the Google Fonts link and the --hs-ff-head / --hs-ff-body variables. A word wrapped in <em> inside a heading turns bold italic.

Logo

The logo is a hop-cone mascot with one big eye beside the name, “Hop” light and “stead” bold italic. It ships as ready-made PNG files in assets/img/logo/:

  • logo.png — for light grounds: the headers, the age check
  • logo-light.png — for dark grounds: the preloader, the dark theme, coming soon and 404
  • mark.png — the mascot alone
  • favicon.png — the browser tab icon

The logo’s lettering appears only inside the images. To use your own logo, replace these files; the header sizes the logo by its height, so a wider or narrower file needs no CSS change.

Light & Dark Mode

Every header (and the mobile menu) has a theme switch. The choice is saved in the browser under the key hopstead-theme and applied by a one-line script in the <head> before the page paints, so a dark visitor never sees a light flash. The switch sets data-theme="dark" on the <html> tag.

Dark Ground--hs-bg
Dark Surface--hs-surface
Dark Night Band--hs-night
Dark Heading--hs-heading
  • Tokens — the dark values sit in one block, [data-theme="dark"] { … }, right after :root in style.css. Change a dark colour there.
  • Bands that stay dark — sections with the class is-night (the taproom band, the brewhouse track, the footer) are stout in both themes; the Hop Club band stays sun yellow.
  • Start dark — to open the site dark for first-time visitors, add data-theme="dark" to the <html> tag of each page; the switch still works and is still remembered.

Brewery Logic

The figures on every page come from one data block, JS block 09 Brew Data near the top of main.js (var BREW). Edit it once and the cards, boards, calendars and totals follow. Prices are in US dollars; times are minutes after midnight (a close after 1440 runs past midnight).

hours / kitchen / happyTaproom and kitchen hours per weekday (Mon 3 pm – 10 pm; Thu 3 pm – 11 pm; Fri 12 pm – 1 am; Sun 12 pm – 9 pm …) and the happy hour: weekdays 4 pm – 6 pm, $2 off a pint. The open-now line, the footer, the board and every pint price read them.
beersThe 12 beers: style, family, ABV, IBU, SRM colour, price per 4-pack, pint price at the bar, hops, malts, pairing, notes, label colour, on tap or not, and days since canning.
poursTaster, half and pint as a share of the pint price.
tours / extrasEach tour’s price per guest and per designated driver, length, seats and its time slots per weekday; extras per guest or per booking.
casesCase sizes and their discount on every can.
clubHop Club plans (cans a month, monthly price, taproom discount, perks) and billing periods with their saving.
eventsEvents with a repeat rule — weekly on a weekday, monthly on the nth weekday, or once on a date — plus places, places taken and the ticket price.
brewers / stockistsThe crew with their signature beers; the places that pour or stock the beer.
packs / products / shopMixed packs, the shop products (every beer’s 4-pack is built from beers) and the shop rules: free shipping from $80, otherwise $9 (express $18), tax 7%, coupon HOPS10 for 10% off.

Worked examples

Mix A Case: a half case of four Sunny Side, four Hop Goblin and four Cloud Nine is $52.00 at 4-pack prices; the half-case discount (8%) takes $4.16, so the case is $47.84, $3.99 a can.
Tours: the Tasting Flight Tour for two guests and one designated driver with a cheese board is 2 × $32 + $12 + $14 = $90.
Hop Club: the Growler Club billed yearly saves 15%: $56.10 a month, $673.20 a year.
Happy hour: a pint of Hop Goblin is $8; on weekdays between 4 pm – 6 pm the board shows it at $6.

How the shop totals

Worked example: Hop Goblin ($19.00) and the Core Range Mixed 12 ($49.00) make $68.00; shipping $9.00 (under $80); tax 7% $4.76 — $81.76. With the coupon HOPS10: $68.00 − $6.80, shipping $9.00, tax $4.28 — $74.48.

The bag, the wishlist, the applied coupon, a built mixed case and the age check are kept in the browser (localStorage), so they follow the visitor from page to page. The first visit starts with a small demo bag and wishlist so every shop page has something to show; to start empty, set the two demo lists in doShop() (block 28 Brewery Shop) to []. Checkout, tour booking, tickets, table requests and the club sign-up confirm on screen with a reference — connect them to your own systems to take real orders.

The age check

Block 20 Age Check asks a first-time visitor for legal drinking age and remembers the answer under hopstead-age. Change the wording in the page head, or delete the hs-age dialog from the pages to switch it off.

WebGL Layers

Two small WebGL shaders draw the moving layers: the haze — warm, grain-textured smoke drifting up through the night bands (the taproom band, the brewhouse track, the footer, coming soon, 404) — and the hop — a hop cone drawn in light, its bracts on a spiral, turning slowly in the footer. Each is one canvas:

<canvas class="hs-gl" data-gl="haze" aria-hidden="true"></canvas>
  • Colours — each layer reads three colours and an opacity from CSS variables on its canvas or section: --gl-1, --gl-2, --gl-3 and --gl-alpha. The theme switch repaints them.
  • Performance — a layer only runs while its section is on screen and the tab is visible. Visitors who prefer reduced motion get one still frame. Without WebGL, the section’s own background shows.
  • Remove one — delete the canvas; nothing else depends on it.

RTL (Right To Left)

Hopstead is RTL-ready: the layout with its paddings and margins, the sliders and the animations all mirror. Right to left comes from the stylesheets, not from separate pages: the language picker (a flag and a code) lists the languages that read left to right and right to left. Choosing Arabic stores the language and the direction (keys hopstead-lang and hopstead-dir) and reloads; the one-line script in <head> then sets dir="rtl" and swaps the three stylesheets for the files named in their data-rtl attribute before the page paints. Nothing is translated — you bring your own right-to-left copy. To make a page right to left for good:

1. Set The Direction

Add dir="rtl" to the page’s <html> tag (and set lang to your language):

<html lang="en" class="no-js" dir="rtl">

2. Swap Three Stylesheets

assets/css/plugins/bootstrap.min.css→ assets/css/plugins/bootstrap.rtl.min.css
assets/css/style.css→ assets/css/style.rtl.css
assets/css/responsive.css→ assets/css/responsive.rtl.css

The scripts read the direction from the dir attribute. The month calendar keeps Sunday on the left, the dials still sweep from empty to full and the brew day still runs from mill to can.

Editing the styles: style.rtl.css and responsive.rtl.css are mirrored twins of the LTR files, made with RTLCSS. A few hand-made rules at the end of style.rtl.css keep what must not mirror. If you change style.css, regenerate the twin with npx rtlcss style.css style.rtl.css and copy that end block back.

JavaScript Guide

All custom behaviour lives in assets/js/main.js, wrapped in a jQuery IIFE and organised into 43 numbered blocks (see the JS INDEX comment at the top of the file):

  • 01–08 — Preloader, Sticky Header, Offcanvas Menu, Scroll Reveals, Back To Top, Anchor Scroll, Light & Dark Mode, Direction, WebGL Layers. The core every page shares: the Pint Fill preloader, the header, the Pour Line reveals, the theme and direction switch and the WebGL layers.
  • 09–10 — Brew Data, Taproom Clock. Brew Data holds every figure; Taproom Clock works out open now, the happy hour, the kitchen, live pint prices and the next date of each event.
  • 11–19 — Custom Select, Counters & Rings, Hero Sliders, Card Sliders, Accordion, Filter Tabs, Grid Search, Newsletter, Choice Cards. Shared components: selects, counters, sliders, accordions, filters, search, forms.
  • 20–25 — Age Check, Taproom Spotlight, Tilt Follow, Know Your Pour, The Brewhouse Track, Lager To Stout. The age check, the taproom spotlight, the tilt-follow hover and the three home pages’ scroll moments.
  • 26–43 — Brewer Rows, Contact Form, Brewery Shop, Account Forms, Article Tools, Demo Forms, Launch Countdown, Beer Finder, Beer Specs, Flight Builder, Tour Booking, Events Month, Event Tickets, Case Builder, Club Pricing, FAQ Search, Stockist Finder, Table Request. The feature pages: the team list, contact, shop, accounts, the beer finder, spec sheets, the flight builder, tour booking, events, tickets, the case builder, club pricing, FAQ, stockists and table requests.

Each block is a self-contained doSomething() function that safely skips pages where its section is not present — you can delete any block you do not need. Every animation respects prefers-reduced-motion automatically: content appears in its final state and the scrubbed scenes rest in place.

Reveals: add hs-pour to a photo frame so it fills from the bottom up like a glass, hs-pop to a can or sticker so it pops onto the shelf, and hs-rise to text and cards so they rise softly. data-delay="0.2" staggers any of them. Add data-tilt to a tile for the tilt-follow hover.
Scroll moments: Know Your Pour (block 23) reads each dial’s beer from data-dial="beer:abv"; the brewhouse track (block 24) moves with its band’s travel; From Lager To Stout (block 25) takes each row’s colour from data-srm. None of them pins the page.
Countdown: the coming-soon page counts down to 10:00 am on the next 20 March — no date to update. Change it in doLaunchCountdown().

Images

The download package ships with neutral placeholder images so you can see every layout at the correct dimensions. Replace them with your own photos using the same file names, or update the src attributes. Images are grouped inside assets/img/:

img/banner/Wide page-title banners and photo bands — 5 files: 2271×936, 2767×803, 2809×1181, 2760×1367
img/brew/Brewhouse, cellar and canning-line photos — 15 files: 2760×1367, 2760×1529, 800×480, 800×481, 2760×2830
img/cans/The drawn Hopstead cans and mixed packs (transparent PNG, included) — 16 files: 700×1200, 1400×1000
img/cutout/The crushed-can cut-out — 1 file: 594×435
img/flags/The language picker’s flags (SVG, included) — 6 files: SVG
img/icons/Sticker icons with an ivory die-cut edge (included) — 14 files: 200×200
img/land/Landscape photos — 2 files: 1300×1418, 1730×857
img/logo/Logo, light logo, mascot mark and favicon — 4 files: 64×64, 504×112, 507×112, 256×256
img/menu/Home previews in the mega menu — 3 files: 640×400
img/pour/Pours, taps and taproom photos — 9 files: 600×600, 800×810, 1300×1271, 2760×2698, 800×480, 884×884, …
img/team/The brewers’ portraits — 6 files: 1000×1000, 1500×1535, 1353×1353

The logo files, the drawn cans and packs, the sticker icons and the language flags are included and ready to use. All demo photography shown on the live preview is for preview purposes only and is not included in the download.

Contact Form

The contact form and the comment form post to sendmail.php, a lightweight AJAX mail handler. The success or error message appears under the button without reloading the page. The newsletter, tour booking, ticket, table, club, wholesale, checkout, login, register and forgot-password forms are demo forms: they confirm on screen and are ready to connect to your own systems. To activate the mail handler on your server:

1. Set your email address

Open sendmail.php and replace the placeholder recipient at the top of the file with your own address:

$email = 'example@example.com';

2. Upload to a PHP host

The form needs a server with PHP mail() support (virtually every shared host). It will not send from your local computer or from a static-only host — there the form shows a friendly “upload to a PHP-enabled host” notice instead.

3. Optional: enable Google reCAPTCHA v3

Invisible reCAPTCHA v3 spam protection is already built into the handler. It stays dormant until the form submits a token — that is why no badge or checkbox appears out of the box. To switch it on:

  • Create v3 keys (a site key and a secret key) for your domain in the Google reCAPTCHA admin console
  • In sendmail.php, replace YOUR_RECAPTCHA_V3_SECRET_KEY with your secret key
  • In contact.html, add a hidden token field inside the form and load the reCAPTCHA script with your site key just before </body>:
<!-- inside the form -->
<input type="hidden" name="g-recaptcha-response" id="g-recaptcha-response">

<!-- before the closing </body> tag -->
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
<script>
  grecaptcha.ready(function () {
    grecaptcha.execute('YOUR_SITE_KEY', { action: 'contact' }).then(function (token) {
      document.getElementById('g-recaptcha-response').value = token;
    });
  });
</script>

Once the token field is present, sendmail.php verifies every submission with Google and rejects low-score (bot) requests.

Credits

This template is built using the following open-source libraries and resources.

  • Bootstrap 5.3.3
  • jQuery 3.7.1
  • Swiper 11
  • GSAP 3 + ScrollTrigger
  • Fancybox 3.5
  • Font Awesome Free
  • RTLCSS
  • Google Fonts: DM Sans, Nunito
  • Can lettering: Google Fonts display faces (inside the images only)

All plugin files and icon fonts are loaded locally. The only external requests are the Google Fonts stylesheet, the Google Maps embeds and the video popups.

Support

If you have any questions or need help with the template, please reach out through the marketplace where you purchased the template: open the item there and send us your question from its support page. We aim to respond within 24–48 hours.