Overview
A fresh, airy HTML template for meal-kit delivery services, recipe box brands and dinner subscription kitchens. Prepara ships three home pages, a light and a dark theme, right-to-left support, and kitchen logic that is worked out rather than typed in: plans priced a serving from people and recipes a week, a weekly menu you pick from with diet tags and premium surcharges, recipes that rescale for 2, 4 or 6, nutrition per serving, delivery days by ZIP code with a live cut-off, skip and pause, gift cards and a Market of extras that ride with the box.
What’s included
- 3 home pages, each with its own scroll moment: the kit box’s lid lifts and six ingredients rise into a row, the table is laid for 2, 4 and 6 while every quantity scales, a chef’s knife crosses the board and slices each ingredient
- 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 — a slow-waving gingham tea towel behind the night bands and page titles, and a carrot built from voxels turning in the footer — tinted by the theme colours
- Plan builder: 2 / 4 / 6 people × 2–5 recipes a week, from $8.29 a serving, with the box, shipping and the welcome offer
- Weekly menu of 14 recipes from a library of 24, three weeks open for orders, eight diet tags, premium surcharges, a picker tray with the box total
- Recipes with ingredients for 2, 4 or 6, the method, allergens and nutrition per serving as a share of the reference intake; a sortable nutrition table for the week
- Four-step wizard: plan, recipes, delivery (ZIP code, day, window, first box) and details, with an order number
- Delivery days by ZIP code across 5 areas, three time windows, a live cut-off countdown; Manage Deliveries with skip, pause, day and window
- Gift cards with values from $25 to $500, the boxes each covers and a live card preview
- The Market: categories, price, sort and search, product page, bag, coupon, free-shipping meter, checkout with an order number, wishlist
- About, how it works, chefs and a chef profile, gallery with filters, journal with search, FAQ with search, account pages, coming soon, 404
- Knife Chop preloader, Mise en Place reveals with prep-time pops, an ingredient fan on recipe cards, Swiper sliders and Fancybox popups
- Fully responsive, written to validate, zero console errors
Getting Started
Thank you for choosing Prepara. Follow the steps below to get your site live.
1. Open locally
Unzip the downloaded package and open prepara/index.html in any modern browser (Chrome, Firefox, Edge,
Safari). No build tools or server are required — the plan builder, the menu picker, the wizard, delivery days,
Manage Deliveries and the Market all work straight from the files.
2. Deploy to a server
Upload the contents of the prepara/ 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. Prices, recipes, menus, zones, products and hours live in one place
— see The Kitchen Logic.
assets/img/ with your own photography at the
same dimensions for the best result. The plates in img/plates/ look best as PNGs on a transparent ground.
File Structure
Below is an overview of the key files and folders included in this template.
index.html / homepage-2.html / homepage-3.html | Three home pages: Recipe Box (the kit box unpacks into a row), Family Table (the table is laid for 2, 4 and 6 and the recipe scales), Chef’s Board (a boxed page on gingham; a knife slices the board) |
plans.html | The plan builder: a preference, people and recipes a week, priced a serving, a box, a week and with the welcome offer; the price table |
menu.html | This week’s menu: three menu weeks, diet filters, the picker with its tray, premium surcharges and the box total |
recipes.html / recipe-details.html | The recipe library with search, diet filters and sorts; a recipe with servings 2 / 4 / 6, ingredients, nutrition per serving and the method |
nutrition.html | This week’s recipes per serving: sortable columns, diet and target filters, the share of the reference intake |
get-started.html | The four-step wizard: plan, recipes, delivery (ZIP code, day, window, first box) and details, with the order summary |
delivery.html / my-deliveries.html / gift-cards.html | Delivery days by ZIP code and the cut-off; the next six boxes with skip, pause, day and window; gift cards with a live preview |
shop.html / product-single.html / cart.html / checkout.html / wishlist.html | The Market: categories, price, sort and search, product, bag, checkout, wishlist |
about.html / how-it-works.html | The kitchen’s story, the chef and specialties; the four steps and the week of one box |
chefs.html / chef-details.html | The recipe developers and the test kitchen; one chef with her recipes |
gallery.html / faq.html | Plated dishes with filters; questions by topic with search |
blog.html / blog-details.html | The journal with search and post formats; an article with reading time, share and comments |
contact.html | Contact cards with the kitchen line’s live status, map and the contact form |
login.html / register.html / forgot-password.html | Account pages |
coming-soon.html / 404.html | Countdown to the cooking school’s opening, error page |
sendmail.php | AJAX mail handler for the contact form (see Contact Form) |
assets/css/style.css | All custom styles, numbered Table of CSS (17 sections) |
assets/css/responsive.css | Desktop-first breakpoints 1399 / 1199 / 991 / 767 / 575, plus wide screens from 1600 and 1960 |
assets/css/style.rtl.css / responsive.rtl.css | The right-to-left twins (see RTL) |
assets/css/plugins/ | Bootstrap (LTR and RTL), Swiper, Fancybox (vendor CSS) |
assets/js/main.js | All custom scripts, numbered JS INDEX (37 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.css | Font Awesome Free, loaded locally |
Folder Structure
The package unzips to two folders: Documentation/ (this guide) and prepara/, the template.
Every page sits in the template’s root; everything the pages load sits under assets/:
prepara/
├── *.html the 31 pages, all in the root (see File Structure)
├── sendmail.php the AJAX mail handler for the contact form
└── 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
├── js/
│ ├── main.js all custom scripts, numbered JS INDEX (37 blocks)
│ └── plugins/ vendor scripts (jQuery, Bootstrap, GSAP, ScrollTrigger, Swiper, Fancybox)
├── fonts/
│ └── theme-icons/ the sun and moon of the theme switch
├── webfonts/ Font Awesome Free font files
└── img/ images, one folder per section
├── banner/ 15 files
├── board/ 1 files
├── box/ 3 files
├── dishes/ 55 files
├── faces/ 5 files
├── flags/ 6 files
├── logo/ 5 files
├── menu/ 3 files
├── plates/ 2 files
├── produce/ 21 files
└── team/ 11 files
To publish the site, upload the contents of prepara/ 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
--pr-yolk-rgb) — change both together.
--pr-ink--pr-yolk--pr-yolk-deep--pr-yolk-ink--pr-bg--pr-grey--pr-mist--pr-tonal--pr-night-base--pr-text--pr-herb--pr-chiliWhite grounds with a grey and a mist band, charcoal type and a near-black night carry the page; the photographs carry the
colour. Yolk is the one accent: the main buttons, the prep-time badges, the sliced rule under every title, the gingham and
the chosen plan. Yolk ink is its darker twin for small text on white. Herb, chili and sea colour the diet tags only.
--pr-bg, --pr-surface, --pr-band, --pr-heading and
--pr-text are the semantic names the components use — the dark theme swaps those.
Fonts
Two Google Fonts are loaded in the head of each page: Playfair Display (headings, figures and prices,
italic for quotes and step numbers) and Open Sans (body, navigation, buttons and the small tracked
capitals above every title). Swap them by editing the Google Fonts link and the --pr-ff-head /
--pr-ff-body variables.
Logo
The logo is “Prepara” written as a pen signature over a yolk disc whose edge is cut into three slices. It ships
as ready-made PNG files in assets/img/logo/:
logo.png/logo-light.png— for light grounds and for dark grounds (the headers over dark heroes and page titles, dark mode)logo-footer-light.png— the larger lockup in the footersignature.png— the head chef’s sign-off on Home 1, Home 3 and the about pagesfavicon.png— the browser tab icon
The lettering appears only inside the images. 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
prepara-theme and applied by a one-line script in the <head> before the page paints. The
switch sets data-theme="dark" on the <html> tag.
--pr-bg--pr-surface--pr-band--pr-heading- Tokens — the dark values sit in one block,
[data-theme="dark"] { … }, right after:rootinstyle.css. - Bands that stay dark — sections with the class
is-night(page titles, the price table on Home 2, the next boxes on Home 3, the footer) are dark in both themes. A light card inside one takespr-on-light. - Start dark — add
data-theme="dark"to the<html>tag of each page; the switch still works.
The Kitchen Logic
The figures on every page come from one data block, JS block 09 Kitchen Data near the top
of main.js (var KIT). Edit it once and the cards, prices, menus, recipes, delivery days and totals
follow. Prices are in US dollars; times are minutes after midnight (480 = 8:00 am); weekdays 0–6 from Sunday;
ingredient amounts are for two servings and nutrition is per serving.
people / recipesPerWeek / perServing | The plans and the price per serving of each; shipping a box and the welcome intro offer (50% off the first box with free shipping, 20% off the next two). |
recipes | Every recipe: name, photo, prep time, five diet tags set by hand (calorie smart, ready in 20 and high protein are worked out from thresholds), premium surcharge a serving, rating, nutrition, allergens, the drawn ingredients of its hover fan, and for the featured recipes their ingredients and method. |
menus | Three menus that take turns by the ISO week of the delivery; the menu open for orders is the week of the first box still before its cut-off. |
cutoff / hours | Changes close 5 days before each box at 11:59 pm; the kitchen line’s hours for each weekday. |
windows / zones / demo | The three delivery windows, the areas by the first three digits of the ZIP code with their days, and the demo account of Manage Deliveries. |
products / shop / gift | The Market and its rules (free shipping from $35.00, otherwise $6.99, next day $12.99, coupon PREPARA10 for 10% off, tax 8%), and the gift card values. |
team | The chefs: role, group (kitchen or test kitchen), portrait, recipes written. |
Price per serving
| Plan | 2 recipes | 3 recipes | 4 recipes | 5 recipes |
| 2 people | $12.49 | $11.29 | $10.49 | $9.99 |
| 4 people | $10.49 | $9.79 | $9.29 | $8.99 |
| 6 people | $9.49 | $8.99 | $8.49 | $8.29 |
Delivery days
| Area | Days | ZIP codes from |
| New York City | Mon, Tue, Wed, Thu, Fri, Sat | 100, 101, 102, 103, 104 … |
| Long Island | Mon, Wed, Fri | 115, 117, 118, 119 |
| Westchester & Hudson Valley | Tue, Thu, Sat | 105, 106, 107, 108, 109 … |
| Northern New Jersey | Tue, Wed, Fri, Sat | 070, 071, 072, 073, 074 … |
| Connecticut | Wed, Sat | 060, 061, 064, 065, 066 … |
Manage Deliveries keeps its skips in the browser (prepara-skips); the plan and the picks per menu week are kept
too (prepara-plan, prepara-picks) so the menu, the wizard and the recipe pages agree. Connect them
to your own subscription system to take real orders.
How the Market totals
PREPARA10:
−$2.90, tax $2.09.A gift card of $120 covers 2 boxes of the two-person, three-recipe plan: the first at the welcome price, then full boxes with shipping.
WebGL Layers
Two small WebGL programs draw the moving layers: gingham — a tea towel of yolk and white threads woven over and under on charcoal, its folds waving slowly, behind the night bands, the page titles and the coming-soon page — and the footer’s voxel carrot, a carrot built from small cubes turning in plain light:
<canvas class="pr-gl" data-gl="gingham" aria-hidden="true"></canvas>
<canvas class="voxel-gl" data-voxel aria-hidden="true"></canvas>
- Colours — the gingham reads its colours and opacity from CSS variables on its canvas or section:
--gl-1(ground),--gl-2(threads),--gl-3(the crossing) and--gl-alpha. - Performance — a layer only runs while it is on screen and the tab is visible. Visitors who prefer reduced motion get one still frame.
- Remove one — delete the canvas; nothing else depends on it.
RTL (Right To Left)
Prepara is RTL-ready: the layout, the sliders and the animations mirror. Right to left comes from the stylesheets, not
from separate pages: the language picker in the top bar lists languages that read both ways. Choosing Arabic stores the
language and the direction (keys prepara-lang and prepara-dir) and reloads; the head script then
sets dir="rtl" and swaps the three stylesheets for the files named in their data-rtl attribute.
Nothing is translated — you bring your own right-to-left copy. To make a page right to left for good:
1. Set The Direction
<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 preloader’s carrot and the knife board are pictures and keep reading left to right.
style.rtl.css keep what must not mirror. After changing style.css,
regenerate the twin with npx rtlcss style.css style.rtl.css and copy that block back.JavaScript Guide
All custom behaviour lives in assets/js/main.js, wrapped in a jQuery IIFE and organised into 37 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 Gingham. The core every page shares: the Knife Chop preloader, the header, the Mise en Place reveals with the prep-time pops, the theme and direction switch and the gingham WebGL layer.
- 09–12 — Kitchen Data, Kitchen Clock, Custom Select, Voxel Carrot. Kitchen Data holds every figure; Kitchen Clock works out the menu week, the cut-off, the kitchen line’s open status and delivery days by ZIP code; the voxel carrot turns in the footer.
- 13–19 — Hero Sliders, Card Sliders, Accordion, Filter Tabs, Grid Search, Newsletter, Choice Cards. Shared components: sliders, accordions, filters, search, newsletter, choice cards.
- 20–27 — Plan, Recipe & Menu Engines, Plan Builder, Weekly Menu & Recipe Picker, Recipe Card, Recipe Library & Nutrition Table, Get Started Wizard, Manage Deliveries, Gift Cards. The meal-kit logic: the plan, recipe and menu engines, the plan builder, the weekly picker, the recipe card, the library and nutrition table, the four-step wizard, Manage Deliveries and gift cards.
- 28–37 — Contact Form, The Market, Account Forms, Article Tools, Launch Countdown, Kit Box Unpacking, Servings Scrub, Knife Board, Tab Sets, FAQ Search. Contact, the Market, accounts, the journal tools, the countdown, the three homes’ scroll moments (the kit box unpacking, the servings scrub, the knife board), tab sets and FAQ search.
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:
content appears in its final state and the scroll moments rest in place.
pr-mise to cards in a grid so each slides in from the grid’s
nearest edge, pr-pop to a badge so it pops once its card lands, and pr-rise to text so it rises
softly. A grid holding data-mise is the box the edges are measured from.data-unpack); the table on Home 2 is laid for 2, 4 and 6 as its
section passes (data-servings-scrub); the knife crosses the board and slices every item with
data-slices. None of them pins the page.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. Images are grouped inside assets/img/:
img/banner/ | Wide photographs for the hero slides, page titles and photo bands — 15 files: 1920×600, 1920×934, 2809×1514, 3840×1282, 1920×693, 2893×1181, … |
img/board/ | The beech board the knife crosses on Home 3 (included) — 1 file: 1600×560 |
img/box/ | The kit box in three layers (back, front, lid) for the unpacking on Home 1 (included) — 3 files: 1216×708 |
img/dishes/ | Dish and ingredient photographs: recipe cards, the Market, the journal, the gallery — 55 files: 1100×1100, 800×800, 1200×830, 800×542, 1029×683, 600×600, … |
img/faces/ | Round portraits for members’ quotes and avatar groups — 5 files: 240×240, 79×79, 78×78 |
img/flags/ | The language picker’s flags (SVG, included) — 6 files: SVG |
img/logo/ | Logo, light logo, footer logos, the head chef’s signature and favicon (included) — 5 files: 565×219, 64×64, 757×290, 915×177 |
img/menu/ | Home previews in the mega menu — 3 files: 560×350 |
img/plates/ | Dishes on their round plates, on a transparent ground: Home 1, the table on Home 2, Home 3, about, 404 — 2 files: 584×584, 628×630 |
img/produce/ | Drawn ingredients and the chef’s knife on a transparent ground: the preloader, the hover fan, the icon discs (included) — 21 files: 529×529, 440×619, 523×668, 605×643, 991×226, 1407×357, … |
img/team/ | The chefs’ portraits — 11 files: 600×600, 600×494, 838×838, 517×482 |
The logo files, the drawn ingredients, the knife, the kit box, the board 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 posts to sendmail.php, a lightweight AJAX mail handler. The success or error message appears
under the button without reloading the page. The newsletter, wizard, gift card, comment, 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. It will not send from your local computer or from a
static-only host — there the form shows an “upload to a PHP-enabled host” notice instead.
3. Optional: enable Google reCAPTCHA v3
Invisible reCAPTCHA v3 spam protection is built into the handler and stays dormant until the form submits a token. 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, replaceYOUR_RECAPTCHA_V3_SECRET_KEYwith 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 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: Playfair Display, Open Sans
All plugin files and icon fonts are loaded locally. The only external requests are the Google Fonts stylesheet, the Google Maps embed 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.