Overview

Curata template home pages

A quiet, gallery-white HTML template for an art museum: exhibitions on now, next and past, timed-entry tickets, the collection by period, medium and room, membership and late nights. Curata ships three home pages, a light and a dark theme, right-to-left support, and logic that is worked out rather than typed in: open now and the late nights from the visitor’s date and time, the exhibitions placed on the calendar, the next arrival time with its places left, ticket totals with members and under sixes free, membership yearly or monthly, the next date of every talk and late, and a shop with a member saving, a code, shipping and tax.

What’s included

  • 3 home pages, each with its own scroll moment: The Long Gallery (a corridor in perspective, the works passing along its walls as you scroll), Step Closer (a painting seen across the room, then its brushwork, then one ridge of paint) and The Salon Hang (the frames slide into a salon hang on the collection wall)
  • A white-wall light theme by default and the museum after hours 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 — Brushstroke Flow, impasto strokes drifting along a flow field at the edges of the bands, and the footer’s bust built from vertical slices that slide into line as it turns — tinted by the theme colours
  • The museum clock: open now, late tonight or closed (and when it opens) in every header; today marked in every hours list; the next timed entry
  • Timed-entry tickets: a month calendar with closed days and late nights, arrival times with places left, adult, concession, child and member tickets, a ticketed-exhibition surcharge, a booking code
  • Exhibitions on a yearly programme, sorted into now, next and past from the date, with closes-in and opens-in on every card
  • The collection browser: period, medium, room, on view only, search and sort, with the wall label sliding out beside every work
  • Membership: four tiers yearly or monthly, a second member, a gift card, a three-step join; donations once or monthly with what they pay for
  • The museum shop: categories, price filter, sort and search, the product page, bag, member saving, code, free-shipping meter, tax, checkout with an order number, wishlist
  • Picture Hang preloader, Unveil reveals (a cloth drawn down off each work), word-rise titles, the media cursor (View, Drag) and the museum label on hover
  • Curators, curator profile, gallery, journal with post formats, FAQ with search, account pages, coming soon, 404
  • Fully responsive, W3C-valid, zero console errors
📄 32 HTML files

Getting Started

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

1. Open locally

Unzip the downloaded package and open curata/index.html in any modern browser (Chrome, Firefox, Edge, Safari). No build tools or server are required — the museum clock, the tickets, the collection browser, membership, the events and the shop all work straight from the files.

2. Deploy to a server

Upload the contents of the curata/ 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. The hours, admission, exhibitions, works, tiers, events and shop rules live in one place — see Museum Logic.

Tip: Replace the neutral placeholder images in assets/img/ with your own photography at the same dimensions for the best result. The curators’ portraits in img/team/ are square.

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: The Museum (The Long Gallery), Plan Your Visit (Step Closer), The Collection (The Salon Hang)
about.htmlThe museum, its history on a timeline, the building and the curators
visit.htmlOpening hours with today marked, the late nights this week, admission, facilities, getting here and the map, questions
tickets.htmlTimed-entry tickets in four steps: a day on the calendar, an arrival time, the tickets and a ticketed exhibition, the details
membership.htmlFour membership tiers paid yearly or monthly, a gift option and a three-step join
donate.htmlA gift once or every month, what it pays for and a tribute
faq.htmlQuestions by topic with search
exhibitions.html / exhibition-details.htmlExhibitions on now, next and past from the date, with tabs; one exhibition with its curator, room, dates and catalogue
events.html / event-details.htmlTalks, lates, workshops and classes by repeat rule, with tabs; one late with its next dates and place booking
gallery.htmlThe building in photographs, with filter tabs and a lightbox
collection.html / artwork-details.htmlThe collection browser (period, medium, room, on view, search, sort); one work with its full wall label
team.html / team-details.htmlThe curators; one curator’s profile with the shows and works in their care
shop.html / product-single.html / cart.html / checkout.html / wishlist.htmlThe museum shop: filters, sort and search, the product, bag, checkout, wishlist
blog.html / blog-details.htmlThe journal with its post formats and search; a post with reading time, share and comments
contact.htmlLive open status, the contact form and the map
account.html / login.html / register.html / forgot-password.htmlThe account (visits, membership card, orders, details) and the login pages
coming-soon.html / 404.htmlCountdown to the new wing, error page
sendmail.phpAJAX mail handler for the contact, visitor desk and comment forms (see Contact Form)
assets/css/style.cssAll custom styles, numbered Table of CSS (16 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 (34 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 curata/, the template. Every page sits in the template’s root; everything the pages load sits under assets/:

curata/
├── *.html                              the 32 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 (34 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
        ├── art/                         25 files
        ├── banner/                      14 files
        ├── faces/                       4 files
        ├── flags/                       6 files
        ├── icons/                       28 files
        ├── logo/                        5 files
        ├── menu/                        3 files
        ├── museum/                      30 files
        ├── shop/                        13 files
        ├── team/                        7 files
        └── textures/                    3 files

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

White Wall--ct-white
Grey Band--ct-cream
Gold--ct-gold
Gold Ink--ct-gold-ink
Gold Soft--ct-gold-soft
Ink--ct-ink
Deep Ink--ct-ink-deep
Charcoal--ct-night
Aubergine--ct-plum
Body--ct-text
Hairline--ct-line

White is the gallery wall, the grey band the base’s quieter rooms. Gold draws the hairlines under the titles, the frames round the buttons and the button faces (with deep ink text); gold ink is the same gold made dark enough for small text, the italic eyebrows and the dates. Ink sets the headings, charcoal the footer and the after-hours bands, and aubergine is kept for the late nights. --ct-bg, --ct-surface, --ct-cream, --ct-heading and --ct-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: EB Garamond (headings in tracked capitals, the italic eyebrows, dates and wall labels) and Alegreya Sans (body, navigation, buttons and figures). Swap them by editing the Google Fonts link and the --ct-ff-display / --ct-ff-body variables.

Logo

The logo is a frame hung on its wire from a nail, holding a Garamond C, beside CURATA in tracked Garamond capitals. It ships as ready-made PNG files in assets/img/logo/:

  • logo.png — for light grounds: the white header and the light theme
  • logo-light.png — for dark grounds: the header over the heroes, the footer and the dark theme
  • logo-word.png — the word alone (the preloader’s wall label)
  • mark.png — the framed C alone (the preloader’s frame)
  • 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

Curata opens light: the white wall is the default and needs no attribute. Every header (and the mobile menu) has a theme switch that turns the lights down to the museum after hours. The choice is saved in the browser under the key curata-theme and applied by a one-line script in the <head> before the page paints, so a dark visitor never sees a white flash. The switch sets data-theme="dark" on the <html> tag.

After Hours Ground--ct-bg
After Hours Surface--ct-surface
After Hours Band--ct-cream
After Hours Heading--ct-heading
After Hours Body--ct-text
Gold On Dark--ct-accent-text
  • 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 heroes, the Long Gallery, Step Closer, the footer) are charcoal in both themes; is-plum is the aubergine late-night band.
  • White panels — the panels on the paint grounds and the hero cards take ct-on-paper and keep their white and ink in both themes.
  • Icons — each illustrated icon ships in an ink and a light version, and the right one shows by theme and ground.
  • 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.

Museum Logic

The figures on every page come from one data block, JS block 09 Curata Data near the top of main.js (var CURATA). Edit it once and the hours, prices, dates, places and totals follow. Prices are in US dollars; times are minutes after midnight (1080 = 6:00 pm); weekdays run 0 = Sunday to 6 = Saturday; months 1 = January to 12 = December.

hours / lateDays / closuresOpening and closing for each weekday (null = closed; the museum rests on Monday), the late nights (Thursday and Friday, until 9 pm) and the fixed closure dates plus Thanksgiving. The open-now line, the hours lists and the arrival times read them.
tickets / maxTicketsAdult $25, concession $18, child $10, member free; under sixes free without a ticket; at most 10 in one booking.
slot / surcharge / bookAheadAn arrival time every 30 minutes until 60 minutes before closing, 120 places each; a ticketed exhibition adds $8 for every paying visitor; booking up to 60 days ahead.
rooms / periods / mediums / worksThe building’s rooms and levels, the six periods, the mediums and the 22 works of the demo collection, each with artist, date, period, medium, room (a work in store is not on view), material, size and accession number.
exhibitionsEach show’s start (month, day), length, room, curator, ticketed or free, and its card and hero photographs.
tiers / monthlyUplift / giftCardThe membership tiers and their benefits; monthly is a twelfth of the year plus 10%; a posted gift card is $5.
events / fewSeatsTalks, lates, workshops and classes, weekly or on the nth weekday of the month (-1 = the last), with places, places taken, price and member price.
team / voicesThe curators and the visitors quoted on the homes.
cats / products / shopThe shop: 13 products in 4 categories; members save 10%, the code GALLERY10 takes 10% off first, shipping is free from $80 (otherwise $8, express $18) and tax is 6.25%.
giftsThe suggested donations and what each pays for.

Open now and the late nights

Every element with data-open-status shows Open now, until 6 pm, Late tonight, open until 9 pm, Opens today at 10 am or Closed now, opens Tuesday at 10 am, from the visitor’s own clock. Hours lists marked data-hours-table mark today’s row.

The exhibitions on the calendar

The programme repeats every year, and each show is placed within half a year either side of today, so the site always has shows on now, opening next and just closed. A card with data-ex="slug" shows that exhibition; one with data-ex-slot="now:0" (or next:1, past:0, onview:3) shows whichever show holds that place today — Home 01’s first hero slide is now:0, the show closing soonest.

Hortense FiquetFrom 20 Jan for 140 days, Gallery 4, East Wing, ticketed
Looking To EternityFrom 5 Mar for 120 days, The Long Gallery
Abstract WireframeFrom 1 May for 110 days, The Lower Galleries
Flowers And MindfulnessFrom 15 Jun for 120 days, Gallery 5, East Wing
The Street PavementsFrom 1 Aug for 130 days, Gallery 9, ticketed
The Black Boxes TalkingFrom 10 Sep for 100 days, The Lower Galleries
Walking With AncientsFrom 1 Oct for 150 days, Gallery 1, West Wing, ticketed
JeronymoFrom 30 Oct for 120 days, The Rotunda
The Belle ÉpoqueFrom 20 Nov for 140 days, The Long Gallery, ticketed
Talking With PapertoysFrom 15 Dec for 100 days, Gallery 9

How a ticket booking totals

Worked example: two adults ($50), a child ($10) and a member (free) with one ticketed exhibition ($8 for each of the three paying visitors, $24): $84.

Membership

Worked example: Dual at $120 a year, or monthly at $120 ÷ 12 + 10% = $11.00 a month.

Talks, lates and workshops

Every event repeats on its own rule, so its next dates are always ahead of the visitor:

The Sound Of Time TalksEvery Wednesday at 12:30 pm, $6, members free
Late In The CourtEvery Thursday at 6:30 pm, $12, members free
Talking With PapertoysThe first Sunday of the month at 11 am, $8, members $4
Drawing In The GalleriesThe second Saturday of the month at 10 am, $35, members $25
German TalksThe last Tuesday of the month at 6 pm, $15, members $10
Perform DayThe last Saturday of the month at 2 pm, free
Members' MorningThe first Friday of the month at 8:30 am, members only

How the shop totals

Worked example: the Walking With Ancients catalogue ($45.00) and two mugs ($36.00) = $81.00; the code takes $8.10, the member saving $7.29; shipping $8.00; tax $4.10 — $77.71.

The bag, the wishlist, the code, the member tick and a ticket draft 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 Museum Shop) to []. Tickets, membership, event places, donations and checkout confirm on screen with a reference — connect them to your own systems to take real bookings and payments.

WebGL Layers

Two small WebGL scenes draw the moving layers: Brushstroke Flow — impasto strokes with bristle ridges, drifting along a flow field at the top and bottom edges of the page titles and bands, the copy in the middle left clear — and the Sliced Bust — a head and shoulders built from vertical slices, turning on its plinth in the footer while the slices fan open and slide back into line. Each is one canvas:

<canvas class="ct-gl" data-gl="flow" 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)

Curata 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) beside the light / dark switch lists the languages that read left to right and right to left. Choosing Arabic or Hebrew stores the language and the direction (keys curata-lang and curata-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 every move that must mirror follow it on their own. Prices, dates and the pictures of the scroll moments keep reading left to right.

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 (after RTL fixes) keep what must not mirror. If you change style.css, regenerate the twin with npx rtlcss style.css style.rtl.css and copy the RTL fixes block back to its end.

JavaScript Guide

All custom behaviour lives in assets/js/main.js, wrapped in a jQuery IIFE and organised into 34 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 Picture Hang preloader, the header, the Unveil reveals, the theme and direction switch and the WebGL layers.
  • 09–10 — Curata Data, Museum Clock. Curata Data holds every figure; Museum Clock works out open now, late tonight or closed, today’s hours, the next timed entry, the exhibitions on now, next and past and the next date of every event from the visitor’s date.
  • 11–19 — Custom Select, Media Cursor, Hero Sliders, Card Sliders, Accordion, Filter Tabs, Grid Search, Newsletter, Choice Cards. Shared components: selects, the media cursor, sliders, accordions, filters, search, forms.
  • 20–22 — The Long Gallery, Step Closer, The Salon Hang. The three home pages’ scroll moments.
  • 23–34 — Timed Tickets, Event Places, Membership, Collection Browser, Contact Form, Museum Shop, Account Forms, Donations, Article Tools, Demo Forms, Launch Countdown, FAQ Search. The feature pages: timed tickets, event places, membership, the collection browser, contact, the museum shop, accounts, donations, the journal, the coming-soon countdown and the 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 ct-unveil to a picture’s wrapper so a cloth is drawn down off it (Unveil), ct-words to a title so its words rise one after another, ct-fade to text so it rises softly into place, and ct-rule for the short gold rule under a left title. data-delay="0.2" staggers any of them. Add ct-labelled to a work that holds a ct-label so its wall label slides out on hover, and data-cursor="View" (or Drag) for the media cursor.
Scroll moments: The Long Gallery moves its room toward you, Step Closer walks in from across the room to the paint, and The Salon Hang slides its frames into place once and keeps them hung. Each is scrubbed against its own section’s travel and 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/art/The works of the collection: paintings, sculpture, objects and photographs — 25 files: 800×1260, 3332×1346, 600×940, 800×1172, 1386×2051, 1082×1696, …
img/banner/Heroes, page titles and photo bands — 14 files: 3443×1345, 2809×1097, 3168×1238, 2999×1172, 3443×1434, 2809×3456, …
img/faces/Round portraits for voices, comments and avatar groups — 4 files: 240×240
img/flags/The language picker’s flags (SVG, included) — 6 files: SVG
img/icons/Illustrated line icons, each in an ink and a light version (included) — 28 files: 128×128
img/logo/Logo, light logo, wordmark, mark and favicon (included) — 5 files: 64×64, 1285×253, 1031×144, 1284×253, 367×517
img/menu/Home previews in the mega menu — 3 files: 560×350
img/museum/The building, its galleries and its visitors — 30 files: 800×800, 780×1024, 2812×1624, 700×1171, 1382×893, 600×940, …
img/shop/The museum shop’s goods and catalogues — 13 files: 800×800
img/team/The curators, square portraits — 7 files: 700×700, 1047×1047
img/textures/The paint grounds behind the white panels (impasto, watercolour) — 3 files: 1920×1100, 3840×2600, 1920×1200

The logo files, the illustrated icons and the language flags are included and ready to use. All demo photography and artwork shown on the live preview, the paint textures and the catalogue shots among it, is for preview purposes only and is not included in the download.

Contact Form

The contact form, the visitor-desk form on Home 01 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, tickets, membership, event places, donations, checkout, account, 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: EB Garamond, Alegreya Sans

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.