<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Harvest Box - Delivered Farmers Market</title>
</head>
<body>
<script>
const SITE_CONFIG = {
mainTitle: "Meet the Harvest Box",
mainDescription: "Build your own farm-fresh box with local proteins, produce, beverages, bakery items, and pantry favorites. <b>Delivery is free for subscribers</b> every <b>Tuesday</b>.",
price: "$99",
badges: [
"Fresh local food",
"Weekly or one time",
"Free Tuesday delivery for subscribers"
],
mainButtonText: "Build my Harvest Box",
mainButtonLink: "https://example.com",
subscriptionOptions: [
{
name: "Weekly",
pill: "Most popular",
description: "Perfect if you want a fresh box every week. Free Tuesday delivery for subscribers.",
buttonText: "Start weekly",
buttonLink: "https://example.com",
isPrimary: true
},
{
name: "Every other week",
pill: "Bi-weekly",
description: "Same Harvest Box experience, delivered every two weeks. Great for smaller households.",
buttonText: "Start every other week",
buttonLink: "https://example.com",
isPrimary: false
},
{
name: "One at a time",
pill: "One-time",
description: "Just want to try it once? Order a single box with no subscription.",
buttonText: "Order one box",
buttonLink: "https://example.com",
isPrimary: false
}
],
heroImage: "images/harvest-box-hero.jpg",
heroImageAlt: "Weekly Harvest Box packed with local food from farmersmarket.store",
testimonials: [
{
name: "Sarah M.",
location: "Grand Junction",
rating: 5,
quote: "Love my weekly box! Fresh produce and supporting local farms – it's a win-win!"
},
{
name: "Mike T.",
location: "Palisade",
rating: 5,
quote: "The quality is amazing. Tuesday deliveries are so convenient for our family."
},
{
name: "Jennifer K.",
location: "Fruita",
rating: 5,
quote: "Best decision we made! The variety and freshness can't be beat."
}
],
deliveryMapImage: "images/delivery-map-matching-colors.jpg",
deliveryMapAlt: "Delivery coverage map from Palisade to Mack",
galleryImages: [
{
thumb: "images/gallery-protein.jpg",
full: "images/gallery-protein.jpg",
caption: "Protein",
alt: "Protein options"
},
{
thumb: "https://picsum.photos/seed/produce/600/400",
full: "https://picsum.photos/seed/producelarge/1400/900",
caption: "Produce",
alt: "Produce options"
},
{
thumb: "https://picsum.photos/seed/bev/600/400",
full: "https://picsum.photos/seed/bevlarge/1400/900",
caption: "Beverages",
alt: "Beverage options"
},
{
thumb: "https://picsum.photos/seed/bakery/600/400",
full: "https://picsum.photos/seed/bakerylarge/1400/900",
caption: "Bakery",
alt: "Bakery options"
},
{
thumb: "https://picsum.photos/seed/pantry/600/400",
full: "https://picsum.photos/seed/pantrylarge/1400/900",
caption: "Pantry",
alt: "Pantry options"
},
{
thumb: "https://picsum.photos/seed/bonus/600/400",
full: "https://picsum.photos/seed/bonuslarge/1400/900",
caption: "Bonus finds",
alt: "Bonus local items"
}
],
categories: [
{
title: "Protein",
description: "Beef, chicken, eggs, sausage, and more."
},
{
title: "Produce",
description: "Seasonal produce plus year-round staples when available."
},
{
title: "Beverages",
description: "Coffee, teas, kombucha, and other local drinks."
},
{
title: "Bakery",
description: "Home-made Sourdough Bread, pastries, and treats"
},
{
title: "Pantry and home",
description: "Spices, snacks, sauces, soaps, honey and other local goods"
}
],
steps: [
{
number: "1",
title: "Build your box",
description: "Choose your items from the current list of local options.",
image: "images/step1-matching-circle.jpg"
},
{
number: "2",
title: "We pack it from local vendors",
description: "We carefully pack your items from multiple farms and makers into one delivery.",
image: "images/step2-matching-colors.jpg"
},
{
number: "3",
title: "Free delivery for subscribers",
description: "We deliver every Tuesday across the Grand Valley. From Palisade to Mack. Fresh food, no fuss.",
image: "images/step3-harvest-box.jpg"
}
],
calloutTitle: "Going on vacation? No problem.",
calloutItems: [
"You can pause your subscription anytime!"
],
calloutImage: "images/vacation-pause.jpg",
faqs: [
{
question: "Is this a subscription or a one-time purchase?",
answer: "Both! Subscribers get the weekly experience. One-time orders work like a normal checkout."
},
{
question: "When do you deliver?",
answer: "Every Tuesday! Free delivery for subscribers across the Grand Valley."
},
{
question: "Can I customize what goes in my box?",
answer: "Yes. Choose from our seasonally curated categories. Update your favorite selections each week before the Sunday noon cutoff."
},
{
question: "Can I add extra items with my Harvest Box delivery?",
answer: "Yes! Shop ala carte and get everything delivered with you Box for FREE!"
},
{
question: "Can I pause or cancel?",
answer: "Going on vacation or moving? No problem, pause for a week or cancel anytime, no contracts."
}
],
notes: {
subscriptionNote: "",
heroNote: "",
galleryNote: "Click a thumbnail to open the larger photo.",
sidebarNote: "You will see current options during checkout or in your selection portal.",
stepsNote: "Weekly Cutoff Sundays at Noon",
faqNote: ""
}
};
</script>
<style>
:root{
--hb-font: system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;
--hb-bg:#f6f7f8;
--hb-surface:#ffffff;
--hb-ink:#0f172a;
--hb-muted:#475569;
--hb-border:rgba(2,6,23,.14);
--hb-primary:#2E7D32;
--hb-primary-dark:#1B5E20;
--hb-primary-soft:#E8F5E9;
--hb-accent:#2E7D32;
--hb-shadow:0 10px 28px rgba(2,6,23,.08);
--hb-radius:14px;
--hb-radius-sm:12px;
--hb-radius-lg:16px;
}
body{margin:0;background:var(--hb-bg)}
.hb-wrap{max-width:1200px;margin:0 auto;padding:24px 16px;font-family:var(--hb-font);color:var(--hb-ink)}
.hb-grid{display:grid;grid-template-columns:2fr 1fr;gap:20px;align-items:start}
.hb-card{border:1px solid var(--hb-border);border-radius:var(--hb-radius);background:var(--hb-surface);overflow:hidden;box-shadow:var(--hb-shadow)}
.hb-pad{padding:18px}
.hb-hero h1{margin:0 0 10px;font-size:38px;line-height:1.1;color:var(--hb-primary)}
.hb-sub{margin:0 0 14px;font-size:16px;color:var(--hb-muted)}
.hb-priceRow{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:10px 0 16px}
.hb-price{font-size:34px;font-weight:900;color:var(--hb-ink)}
.hb-badge{display:inline-block;padding:8px 10px;border-radius:999px;border:1px solid var(--hb-border);font-size:13px;color:var(--hb-muted);background:#fff}
.hb-btn{display:inline-block;text-decoration:none;font-weight:900;padding:12px 16px;border-radius:12px;border:1px solid rgba(46,125,50,.35);background:var(--hb-primary);color:#fff}
.hb-btn:hover{background:var(--hb-primary-dark)}
.hb-btnSecondary{display:inline-block;text-decoration:none;font-weight:900;padding:12px 16px;border-radius:12px;border:1px solid rgba(46,125,50,.35);background:#fff;color:var(--hb-primary)}
.hb-btnSecondary:hover{background:var(--hb-primary-soft)}
.hb-note{margin:12px 0 0;font-size:13px;color:var(--hb-muted)}
.hb-schedule{margin:14px 0 14px}
.hb-scheduleTitle{margin:0 0 10px;font-size:14px;font-weight:900;letter-spacing:.2px;color:var(--hb-ink)}
.hb-options{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.hb-option{border:1px solid var(--hb-border);border-radius:14px;padding:12px;background:linear-gradient(180deg,#fff 0%, #fbfbfb 100%)}
.hb-optionTop{display:flex;align-items:center;justify-content:space-between;gap:10px}
.hb-optionName{margin:0;font-weight:900;color:var(--hb-ink)}
.hb-pill{display:inline-block;padding:6px 10px;border-radius:999px;border:1px solid rgba(46,125,50,.35);font-size:12px;font-weight:900;background:var(--hb-primary-soft);color:var(--hb-primary-dark)}
.hb-optionText{margin:8px 0 0;font-size:12px;color:var(--hb-muted);line-height:1.35}
.hb-optionCta{margin-top:10px}
.hb-option a{display:block;text-decoration:none;font-weight:900;font-size:13px;padding:10px 12px;border-radius:12px;text-align:center;border:1px solid rgba(46,125,50,.35);color:var(--hb-primary);background:#fff}
.hb-option a:hover{background:var(--hb-primary-soft)}
.hb-option--primary{border-color:rgba(46,125,50,.45);box-shadow:0 12px 30px rgba(46,125,50,.10)}
.hb-option--primary .hb-pill{background:var(--hb-primary);color:#fff;border-color:var(--hb-primary)}
.hb-option--primary a{background:var(--hb-primary);color:#fff;border-color:var(--hb-primary)}
.hb-option--primary a:hover{background:var(--hb-primary-dark)}
.hb-heroImg{width:100%;height:auto;display:block}
.hb-heroMedia{border-top:1px solid var(--hb-border);background:#fafafa}
.hb-side h2{margin:0 0 8px;font-size:18px;color:var(--hb-ink)}
.hb-testimonials{margin-bottom:12px}
.hb-testimonial{border:1px solid var(--hb-border);border-radius:12px;padding:10px;margin:8px 0;background:#fff}
.hb-testimonialTop{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.hb-testimonialName{font-weight:900;margin:0;color:var(--hb-ink);font-size:13px}
.hb-testimonialStars{color:#FFA500;font-size:13px}
.hb-testimonialQuote{margin:0;font-size:12px;color:var(--hb-muted);font-style:italic;line-height:1.3}
.hb-testimonialLocation{font-size:11px;color:var(--hb-muted);margin-top:3px}
.hb-deliveryMap{margin-top:12px;margin-bottom:-20%}
.hb-deliveryMap img{width:100%;height:auto;border-radius:12px;border:1px solid var(--hb-border);transform:scaleY(0.8);transform-origin:top}
.hb-deliveryMap h2{margin:0 0 8px;font-size:18px;color:var(--hb-ink)}
.hb-cat{border:1px solid var(--hb-border);border-radius:12px;padding:10px;margin:8px 0;background:#fff}
.hb-catTitle{font-weight:900;margin:0 0 3px;color:var(--hb-ink)}
.hb-catText{margin:0;font-size:13px;color:var(--hb-muted)}
.hb-gallery{margin-top:18px}
.hb-galleryTop{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.hb-galleryTop h2{margin:0;font-size:18px;color:var(--hb-ink)}
.hb-thumbs{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-top:12px}
.hb-thumb{display:block;border:1px solid var(--hb-border);border-radius:12px;overflow:hidden;background:#fff;text-decoration:none;color:inherit}
.hb-thumb img{width:100%;height:88px;object-fit:cover;display:block}
.hb-thumbCap{padding:8px 10px;font-size:12px;color:var(--hb-muted)}
.hb-sectionTitle{margin:0 0 10px;font-size:22px;color:var(--hb-ink)}
.hb-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.hb-step{border:1px solid var(--hb-border);border-radius:14px;padding:14px;background:#fff}
.hb-stepNum{width:34px;height:34px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;border:1px solid rgba(46,125,50,.35);color:var(--hb-primary-dark);background:var(--hb-primary-soft);font-weight:900;margin-bottom:10px}
.hb-step h3{margin:0 0 6px;font-size:16px;color:var(--hb-ink)}
.hb-step p{margin:0;font-size:13px;color:var(--hb-muted)}
.hb-step img{width:100%;height:auto;border-radius:12px;margin-bottom:12px;display:block}
.hb-step .hb-stepImg{width:100%;height:280px;object-fit:cover;object-position:var(--img-position, center);border-radius:12px;margin-bottom:12px;display:block}
.hb-callout{border:1px solid rgba(46,125,50,.30);border-radius:14px;padding:14px;background:var(--hb-primary-soft)}
.hb-callout img{width:100%;height:auto;border-radius:12px;margin-bottom:12px;display:block}
.hb-twoCol{display:grid;grid-template-columns:2fr 1fr;gap:14px}
.hb-faq details{border:1px solid var(--hb-border);border-radius:12px;padding:12px 12px;margin:10px 0;background:#fff}
.hb-faq summary{cursor:pointer;font-weight:900;color:var(--hb-ink)}
.hb-faq p{margin:10px 0 0;font-size:13px;color:var(--hb-muted)}
.hb-finalCta{display:flex;gap:10px;flex-wrap:wrap;align-items:center;justify-content:space-between}
.hb-finalCta p{margin:0;font-size:13px;color:var(--hb-muted)}
.hb-modal{position:fixed;inset:0;display:none;align-items:center;justify-content:center;padding:18px;background:rgba(2,6,23,.72);z-index:9999}
.hb-modal:target{display:flex}
.hb-modalBox{max-width:920px;width:100%;background:#fff;border-radius:16px;overflow:hidden}
.hb-modalTop{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;border-bottom:1px solid var(--hb-border)}
.hb-modalTop strong{font-size:14px;color:var(--hb-ink)}
.hb-close{display:inline-block;text-decoration:none;font-weight:900;padding:8px 10px;border-radius:10px;border:1px solid rgba(46,125,50,.35);color:var(--hb-primary);background:#fff}
.hb-close:hover{background:var(--hb-primary-soft)}
.hb-modalImg{width:100%;height:auto;display:block;background:#000}
.hb-compact{margin-top:18px}
@media (max-width: 940px){
.hb-grid{grid-template-columns:1fr}
.hb-thumbs{grid-template-columns:repeat(2,1fr)}
.hb-steps{grid-template-columns:1fr}
.hb-twoCol{grid-template-columns:1fr}
.hb-hero h1{font-size:32px}
.hb-options{grid-template-columns:1fr}
}
</style>
<div class="hb-wrap" id="app"></div>
<script>
(function() {
const config = SITE_CONFIG;
function escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
function generateSubscriptionOptions() {
return config.subscriptionOptions.map((option, index) => `
<div class="hb-option ${option.isPrimary ? 'hb-option--primary' : ''}">
<div class="hb-optionTop">
<p class="hb-optionName">${escapeHtml(option.name)}</p>
<span class="hb-pill">${escapeHtml(option.pill)}</span>
</div>
<p class="hb-optionText">${escapeHtml(option.description)}</p>
<div class="hb-optionCta">
<a href="${escapeHtml(option.buttonLink)}">${escapeHtml(option.buttonText)}</a>
</div>
</div>
`).join('');
}
function generateBadges() {
return config.badges.map(badge =>
`<span class="hb-badge">${escapeHtml(badge)}</span>`
).join('\n ');
}
function generateGalleryThumbs() {
return config.galleryImages.map((img, index) => `
<a class="hb-thumb" href="#hb-img-${index}">
<img src="${escapeHtml(img.thumb)}" alt="${escapeHtml(img.alt)}" />
<div class="hb-thumbCap">${escapeHtml(img.caption)}</div>
</a>
`).join('');
}
function generateCategories() {
return config.categories.map(cat => `
<div class="hb-cat">
<p class="hb-catTitle">${escapeHtml(cat.title)}</p>
<p class="hb-catText">${escapeHtml(cat.description)}</p>
</div>
`).join('');
}
function generateTestimonials() {
if (!config.testimonials || config.testimonials.length === 0) return '';
return config.testimonials.map(testimonial => `
<div class="hb-testimonial">
<div class="hb-testimonialTop">
<div>
<p class="hb-testimonialName">${escapeHtml(testimonial.name)}</p>
<p class="hb-testimonialLocation">${escapeHtml(testimonial.location)}</p>
</div>
<div class="hb-testimonialStars">${'⭐'.repeat(testimonial.rating)}</div>
</div>
<p class="hb-testimonialQuote">"${escapeHtml(testimonial.quote)}"</p>
</div>
`).join('');
}
function generateSteps() {
return config.steps.map((step, index) => {
let imageHTML = '';
if (step.image) {
imageHTML = `<img src="${escapeHtml(step.image)}" alt="${escapeHtml(step.title)}" style="width:100%;height:auto;border-radius:12px;margin-bottom:12px;display:block;" />`;
} else {
imageHTML = `<div class="hb-stepNum">${escapeHtml(step.number)}</div>`;
}
return `
<div class="hb-step">
${imageHTML}
<h3>${escapeHtml(step.title)}</h3>
<p>${escapeHtml(step.description)}</p>
</div>
`;
}).join('');
}
function generateCalloutItems() {
return config.calloutItems.map(item =>
`- ${escapeHtml(item)}`
).join('<br/>');
}
function generateFAQs() {
return config.faqs.map(faq => `
<details>
<summary>${escapeHtml(faq.question)}</summary>
<p>${escapeHtml(faq.answer)}</p>
</details>
`).join('');
}
function generateModals() {
return config.galleryImages.map((img, index) => `
<div class="hb-modal" id="hb-img-${index}">
<div class="hb-modalBox">
<div class="hb-modalTop">
<strong>${escapeHtml(img.alt)}</strong>
<a class="hb-close" href="#gallery">Close</a>
</div>
<img class="hb-modalImg" src="${escapeHtml(img.full)}" alt="${escapeHtml(img.alt)} large image" />
</div>
</div>
`).join('\n');
}
const html = `
<div class="hb-grid">
<div class="hb-card hb-hero">
<div class="hb-pad">
<h1>${escapeHtml(config.mainTitle)}</h1>
<p class="hb-sub">${config.mainDescription}</p>
<div class="hb-priceRow">
<div class="hb-price">${escapeHtml(config.price)}</div>
${generateBadges()}
</div>
<div class="hb-schedule" aria-label="Subscription options">
<div class="hb-scheduleTitle">Choose your schedule</div>
<div class="hb-options">
${generateSubscriptionOptions()}
</div>
<p class="hb-note" style="margin-top:10px">
${escapeHtml(config.notes.subscriptionNote)}
</p>
</div>
<a class="hb-btn" href="${escapeHtml(config.mainButtonLink)}">${escapeHtml(config.mainButtonText)}</a>
<p class="hb-note">${escapeHtml(config.notes.heroNote)}</p>
</div>
<div class="hb-heroMedia">
<img class="hb-heroImg" src="${escapeHtml(config.heroImage)}" alt="${escapeHtml(config.heroImageAlt)}" />
</div>
<div class="hb-pad hb-gallery" id="gallery">
<div class="hb-galleryTop">
<h2>What you can pick from</h2>
<a class="hb-btnSecondary" href="${escapeHtml(config.mainButtonLink)}">${escapeHtml(config.mainButtonText)}</a>
</div>
<div class="hb-thumbs">
${generateGalleryThumbs()}
</div>
<p class="hb-note">${escapeHtml(config.notes.galleryNote)}</p>
</div>
</div>
<div class="hb-card hb-side">
<div class="hb-pad">
<h2>What's inside</h2>
${generateCategories()}
<div class="hb-compact">
<a class="hb-btn" href="${escapeHtml(config.mainButtonLink)}">${escapeHtml(config.mainButtonText)}</a>
<p class="hb-note">${escapeHtml(config.notes.sidebarNote)}</p>
</div>
${config.testimonials && config.testimonials.length > 0 ? `
<div class="hb-testimonials hb-compact">
<h2>What customers say</h2>
${generateTestimonials()}
</div>
` : ''}
${config.deliveryMapImage ? `
<div class="hb-deliveryMap">
<h2>We deliver across the Grand Valley</h2>
<img src="${escapeHtml(config.deliveryMapImage)}" alt="${escapeHtml(config.deliveryMapAlt)}" />
</div>
` : ''}
</div>
</div>
</div>
<div class="hb-card hb-compact">
<div class="hb-pad">
<h2 class="hb-sectionTitle">How it works</h2>
<div class="hb-twoCol">
<div>
<div class="hb-steps">
${generateSteps()}
</div>
<div class="hb-compact">
<a class="hb-btn" href="${escapeHtml(config.mainButtonLink)}">${escapeHtml(config.mainButtonText)}</a>
<p class="hb-note">${escapeHtml(config.notes.stepsNote)}</p>
</div>
</div>
<div class="hb-callout">
${config.calloutImage ? `<img src="${escapeHtml(config.calloutImage)}" alt="${escapeHtml(config.calloutTitle)}" style="width:100%;height:auto;border-radius:12px;margin-bottom:12px;" />` : ''}
<strong style="color:var(--hb-ink)">${escapeHtml(config.calloutTitle)}</strong>
<p class="hb-note" style="margin-top:8px">
${generateCalloutItems()}
</p>
</div>
</div>
</div>
</div>
<div class="hb-card hb-compact hb-faq" id="faq">
<div class="hb-pad">
<h2 class="hb-sectionTitle">Frequently asked questions</h2>
${generateFAQs()}
<div class="hb-finalCta hb-compact">
<a class="hb-btn" href="${escapeHtml(config.mainButtonLink)}">${escapeHtml(config.mainButtonText)}</a>
<p>${escapeHtml(config.notes.faqNote)}</p>
</div>
</div>
</div>
${generateModals()}
`;
document.getElementById('app').innerHTML = html;
})();
</script>
</body>
</html>