Overview

Gelatta template home pages

A sweet, animated HTML template for ice cream parlours, gelato shops and sweet shops. Gelatta ships three home pages, a light and a dark theme, right-to-left support, and parlour logic that is worked out rather than typed in: what a cup or cone costs as you build it, today’s flavour from the date, which parlour is open now, party tub orders with dates, slots and delivery, order tracking, a monthly pint club, a catering estimate, and a shop with a bag, coupon, delivery and tax.

What’s included

  • 3 home pages, each with its own scroll moment: Stack Your Cone (three scoops land on a cone as the section travels), Sprinkle Fall (sprinkles drift across the flavour wall, faster while you scroll) and the flavour strip (twelve flavours slide sideways)
  • Build Your Cup: cup or cone, up to four scoops and 3 toppings with a live price and energy; the finished cup goes into the bag
  • Flavour of the day picked from the date on every page, with its discount; a flavour wall with filters and search
  • Party tubs order in five steps: tub, flavours, extras, pick up or delivery on a date and time, details; tracking by order number
  • Three parlours with live open status and today’s hours; the Scoop Club plan calculator; the catering estimate per guest
  • The shop: filters, sort and search, product page, bag, coupon, free-delivery meter, tax, checkout with an order number, wishlist
  • 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 in every header: a right-to-left language turns any page around
  • WebGL layers — pastel Melt Drips on the page titles and the night band, and a dripping cone drawn in light in the footer
  • Scoop Stack preloader, Scoop Rise reveals, jelly hover, Swiper sliders and Fancybox popups
  • Our makers, history, gallery, blog with six post formats, FAQ with search, account pages, coming soon, 404
  • Fully responsive
📄 31 HTML files

Getting Started

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

1. Open locally

Unzip the downloaded package and open gelatta/index.html in any modern browser (Chrome, Firefox, Edge, Safari). No build tools or server are required — the cup builder, the party tubs order, tracking, the calculators and the shop all work straight from the files.

2. Deploy to a server

Upload the contents of the gelatta/ 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. Flavours, prices, tubs, parlour hours, plans and products live in one place — see Parlour Logic.

Tip: Replace the neutral placeholder images in assets/img/ with your own photography at the same dimensions for the best result. The cut-outs in img/cutouts/ and img/scoops/ are PNGs with a transparent background; keep them transparent.

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: Gelato Parlour (Stack Your Cone), Ice Cream Shop (Sprinkle Fall over the flavour wall), Gelato & Party Tubs (the flavour strip)
flavours.html / flavour-details.htmlThe flavour wall with filters, search and today’s flavour; a single flavour with allergens and energy
build-your-cup.htmlCup or cone, scoops and toppings with a live price and energy; the cup goes into the bag
menu.htmlThe full menu in sections with tabs, sweets
party-tubs.html / track-order.htmlFive-step party tub order with dates, slots and delivery; order tracking by number
about.html / our-history.htmlThe parlour’s story, flavours, values and makers; milestones year by year
team.html / team-details.htmlOur makers, a maker’s profile with her signature flavours
scoop-club.htmlMonthly pint plans and the plan calculator
catering.htmlCatering packages per guest, the estimate and the enquiry form
parlours.htmlThree parlours with live open status, today’s hours and a map
gallery.htmlPhoto gallery with filters and a lightbox
faq.htmlQuestions by topic with search
shop.html / product-details.html / cart.html / checkout.html / wishlist.htmlThe shop: filters, sort and search, product, bag, checkout, wishlist
blog.html / blog-details.htmlBlog with six post formats and search, article with reading time, share and comments
contact.htmlParlour cards with live status, map and the contact form
login.html / register.html / forgot-password.htmlAccount pages
coming-soon.html / 404.htmlCountdown to the new parlour’s 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 (35 blocks)
assets/js/plugins/jQuery, Bootstrap, Swiper, Fancybox, GSAP, ScrollTrigger
assets/img/Images, one folder per section (see Images)
assets/audio/The audio post’s sample tune (MP3)
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 gelatta/, the template. Every page sits in the template’s root; everything the pages load sits under assets/:

gelatta/
├── *.html                              the 31 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 (35 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
    ├── audio/                          the audio post’s sample
    ├── fonts/
    │   └── theme-icons/                the sun and moon of the theme switch
    ├── webfonts/                       Font Awesome Free font files
    └── img/                            images, one folder per section
        ├── avatars/                     6 files
        ├── banner/                      6 files
        ├── blog/                        9 files
        ├── builder/                     23 files
        ├── cups/                        4 files
        ├── cutouts/                     10 files
        ├── flags/                       6 files
        ├── home/                        8 files
        ├── icons/                       32 files
        ├── logo/                        7 files
        ├── menu/                        3 files
        ├── products/                    16 files
        ├── scoops/                      4 files
        ├── sweets/                      11 files
        ├── team/                        4 files
        └── textures/                    3 files

To publish the site, upload the contents of gelatta/ 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 --ge-navy-rgb) — change both together.

Navy Ink--ge-navy
Script Grey--ge-slate
Script Text--ge-accent-text
Strawberry--ge-pink
Mint--ge-mint
Butter--ge-butter
Pistachio--ge-pista
White Ground--ge-bg
Cream--ge-cream
Product Cream--ge-product
Peach--ge-peach
Body--ge-text

Navy is the ink of the headings, the buttons and the one textured night band on a page. The script grey writes the small handwritten eyebrows over the titles. The pastels — strawberry, mint, butter and pistachio — come from the products themselves and are used as fills only: flavour dots, badges, discs, the drips and the sprinkles. White, cream and peach are the section grounds; product photos sit on product cream. --ge-bg, --ge-surface, --ge-heading and --ge-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: Oswald (headings in tracked capitals, body, navigation, buttons and prices) and Ms Madi (the thin handwritten script of the eyebrows, signatures and big script words). Swap them by editing the Google Fonts link and the --ge-ff-body / --ge-ff-script variables. Headings are written in Title Case and set in capitals by CSS.

Logo

The logo is the name gelatta in a rounded lowercase face, with the l drawn as a waffle cone carrying a strawberry scoop. It ships as ready-made PNG files in assets/img/logo/:

  • logo.png — for light grounds: the headers
  • logo-light.png — for dark grounds: the floating header of Home 2, the navy footer, dark mode
  • pre-cone.png, pre-scoop-1.png … pre-scoop-3.png — the preloader’s cone and the three scoops it stacks
  • favicon.png — the browser tab icon

The logo’s lettering appears only inside the images — the pages do not load its font. 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 gelatta-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--ge-bg
Dark Surface--ge-surface
Dark Night Band--ge-night
Dark Heading--ge-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 scoop band, the featured plan, the footer) are dark in both themes. A light card placed inside one takes ge-on-light to keep its own ink.
  • Product photos — tiles behind product photos keep the product cream in both themes, like a lit display.
  • Illustrated icons — each icon ships in a navy and a cream ink; the right one shows by theme and ground on its own.
  • 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.

Parlour Logic

The figures on every page come from one data block, JS block 09 Gelato Data near the top of main.js (var GELATO). Edit it once and the cards, menus, prices, hours and totals follow. Prices are in US dollars; hours are minutes after midnight (660 = 11 am), weekday 0 = Sunday.

scoop / vesselsThe first scoop ($3.40) and each scoop more ($2.20); the cup and the two cones with their supplement, scoop limit and energy.
flavoursThe 12 flavours on the wall: base (dairy, vegan, sorbet), nuts, premium supplement, dot colour, energy per scoop, note, allergens and photo. Each flavour’s drawn scoop is img/builder/scoop-<slug>.png.
fotdOffThe flavour of the day’s discount per scoop ($1.00). The flavour is picked from the date: the day of the year over the flavour list, so it changes at midnight and every page agrees.
toppings / maxToppingsToppings with price and energy, and how many fit on one cup (3). Each has an overlay img/builder/top-<key>.png.
tubs / tubExtras / orderParty tub sizes (serves, price, flavours per tub), extras, and the order rules: 2 days’ notice, up to 30 days ahead, closed on Monday, delivery $12.00 (free from $120.00), the time slots.
parloursThe three parlours with address, phone, photo and opening hours by weekday (null = closed). The top bar, the hours lists and the parlour cards read them.
menuThe menu sections and their items with notes and prices.
plans / pintPriceThe Scoop Club plans (pints a month, price) and the shop price of a pint the saving is measured against.
cateringPackages priced per guest, the minimum guests (25), the hours of service included (2), each extra hour ($45.00) and travel outside town ($35.00).
products / shopShop products and the rules: free delivery from $40.00, otherwise $6.50 (two-hour $12.00), tax 7.75%, coupon SCOOP10 for 10% off.

Build Your Cup

Worked example: a Waffle Cone (+$0.90), a first scoop of Sicilian Pistachio ($3.40 + $0.60 premium), a second of Strawberry Swirl ($2.20) and Rainbow Sprinkles ($0.50) = $7.60. If one of them is today’s flavour, that scoop costs $1.00 less.

The builder lives in block 24 Build Your Cup. A cone holds up to three scoops; switching from a cup trims the stack. The finished cup joins the shop’s bag with its name and price.

Party Tubs

Worked example: three Party Tubs (3 × $42.00) with a pack of waffle cones ($6.00) = $132.00; delivered, the delivery is free — $132.00.

The order (block 25 Party Tubs Order) never blocks on Continue; Place Order checks the flavours, the date and time and the details, and sends you to the step to fix. A pick-up time has to fall in the chosen parlour’s hours. The placed order is kept in the browser and Track An Order works out its stages from its day and time.

Scoop Club And Catering

Worked examples: six pints a month cost $9.50 each in the shop; the Family Tub plan is $52.00 a month — $60.00 saved a year. The Special Gelato Cart for 100 guests (100 × $14.00), four hours (two past the included 2, at $45.00) and travel ($35.00) = $1,525.00.

How the shop totals

Worked example: two Chocolate Pints (2 × $9.50) and a Pistachio Cup ($5.20) = $24.20; delivery $6.50 (under $40.00); tax 7.75% $1.88 — $32.58. With the coupon SCOOP10: $24.20 − $2.42, delivery $6.50, tax $1.69 — $29.97.

The bag, the wishlist, the applied coupon and the party tub orders 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 30 Shop & Bag) to []. Checkout, the party tubs order and the enquiry forms confirm on screen with a reference — connect them to your own systems to take real orders.

WebGL Layers

Two small WebGL shaders draw the moving layers: the drips — pastel drips running from the top edge of the page titles, the scoop band, coming soon and 404, stretching and shrinking at their own pace — and the cone — a waffle cone and its scoop drawn in glowing lines in the footer, a drip running down it. Each is one canvas:

<canvas class="ge-gl" data-gl="drips" 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)

Gelatta 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) in the top bar and the mobile menu lists the languages that read left to right and right to left. Choosing Arabic stores the language and the direction (keys gelatta-lang and gelatta-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: sliders and the flavour strip follow it on their own.

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 (prices read left to right). If you change style.css, regenerate the twin with npx rtlcss style.css style.rtl.css and copy those rules back to its end.

JavaScript Guide

All custom behaviour lives in assets/js/main.js, wrapped in a jQuery IIFE and organised into 35 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 Textures. The core every page shares: the Scoop Stack preloader, the header, reveals, the theme and direction switch and the WebGL layers.
  • 09–10 — Gelato Data, Parlour Clock & Flavour Of The Day. Gelato Data holds every figure; the Parlour Clock works out what is open now and picks the flavour of the day from the date.
  • 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–22 — Stack Your Cone, Sprinkle Fall, Flavour Strip. The three home pages’ scroll moments.
  • 23–35 — Flavour Wall, Build Your Cup, Party Tubs Order, Track An Order, Scoop Club Calculator, Catering Estimate, Contact Form, Shop & Bag, Account Forms, Article Tools, Demo Forms, Launch Countdown, FAQ Search. The feature pages: the flavour wall, Build Your Cup, party tubs, tracking, the Scoop Club and catering calculators, contact, shop, accounts, blog tools, countdown, FAQ.

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 ge-scoop to a photo or card so it rises through a rounded scoop mask, ge-fade to text so it fades up, and ge-pop to prices inside an element with data-pop-group so they spring up in turn. data-delay="0.2" staggers a reveal. Add ge-jelly to a card and jelly to its picture for the jelly wobble on hover.
Scroll moments: Stack Your Cone drops its three scoops as the section travels and keeps them landed; Sprinkle Fall draws sprinkles on a canvas behind the flavour wall; the flavour strip slides sideways with its section. None of them pins the page.
Open now: the live lines (data-open-status="harbour-street") and today’s hours (data-hours-table) come from block 10; they refresh every 30 seconds.
Countdown: the coming-soon page counts down to 11 am on the next 21 June, the first day of summer — 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/avatars/Round portraits for reviews, bylines and avatar groups — 6 files: 200×200
img/banner/Wide page-title banners and photo bands — 6 files: 2809×878, 2816×1408, 2819×2057, 2814×1100, 2871×721
img/blog/Blog posts, journal cards and gallery photos — 9 files: 1375×1375, 1400×796, 2356×1340, 2818×1602
img/builder/The drawn cup, cones, a scoop per flavour and the topping overlays (Build Your Cup, the cone stack, the preloader art) — 23 files: 480×368, 480×424, 400×608, 520×448
img/cups/Small cup cut-outs for flavours — 4 files: 325×159
img/cutouts/Transparent product cut-outs: cones, cups and tubs — 10 files: 445×966, 444×938, 738×843, 684×785, 795×925, 900×786, …
img/flags/The language picker’s flags (SVG, included) — 6 files: SVG
img/home/Home and feature page photos — 8 files: 1673×1237, 2820×2350, 1100×1239, 2817×2080, 1404×1170, 1477×1232, …
img/icons/Illustrated line icons, each in a navy and a cream ink — 32 files: 128×128
img/logo/Logo, light logo, preloader cone and scoops, favicon — 7 files: 440×327, 435×116, 64×64, 144×316
img/menu/Home previews in the mega menu — 3 files: 560×350
img/products/Shop photos on the cream studio ground — 16 files: 1400×1405, 1400×1400, 800×800, 1408×1408
img/scoops/Scoops shot from above (the scoop carousel) — 4 files: 350×307
img/sweets/Donuts, popsicles, sundaes and sweet photos — 11 files: 325×235, 1100×479, 960×957, 1730×753
img/team/Maker portraits — 4 files: 700×796, 760×960, 550×456, 497×631
img/textures/The navy linen grain and the line pattern of Home 3 — 3 files: 640×640, 400×400

The logo files, the drawn builder art (cup, cones, scoops, toppings), the illustrated icons, the textures 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 forms 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, party tubs order, checkout, catering enquiry, question, 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: Oswald, Ms Madi
  • Logo lettering: Quicksand

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.