"use client"; import { useReducer, useEffect, useRef } from "react"; import Link from "next/link"; import Image from "next/image"; import { m as motion, useInView } from "framer-motion"; import TuxedoVideoHero from "@/components/storefront/TuxedoVideoHero"; import ProductCard from "@/components/storefront/ProductCard"; import PaginatedStops from "@/components/storefront/PaginatedStops"; import StorefrontHeader from "@/components/storefront/StorefrontHeader"; import StorefrontFooter from "@/components/storefront/StorefrontFooter"; import BrandStylesProvider from "@/components/storefront/BrandStylesProvider"; import { supabase } from "@/lib/supabase"; import { getBrandSettingsPublic } from "@/actions/brand-settings"; // ───────────────────────────────────────────────────────────────────────────── // TUXEDO PAGE — Field Almanac composition // // Section order: // 0. Cover spread → TuxedoVideoHero (typographic masthead) // 1. Editor's note → two-column preamble with pull quote // 2. I. The Almanac → specimen cards (altitude, swing, hands, …) // 3. II. The Cover Story → editorial photo + marginalia // 4. III. The 2026 Tour → stops as typeset schedule // 5. IV. This Week's Lot → inventory-style product cards // 6. V. Chronicle of the Row → three-generation timeline // 7. Letter from the Field → closing subscribe (letterpress card) // 8. Colophon → back-of-book fine print // ───────────────────────────────────────────────────────────────────────────── function scrollToStops() { document.getElementById("tour")?.scrollIntoView({ behavior: "smooth" }); } function scrollToStory() { document.getElementById("chronicle")?.scrollIntoView({ behavior: "smooth" }); } // ── Types ──────────────────────────────────────────────────────────────────── type Brand = { id: string; name: string; slug: string }; type Stop = { id: string; city: string; state: string; date: string; time: string; location: string; slug: string; brand_id: string; }; type Product = { id: string; name: string; description: string | null; price: number; type: string; image_url: string | null; brand_id: string; is_taxable?: boolean; pickup_type?: "scheduled_stop" | "shed"; }; // ── State machine ──────────────────────────────────────────────────────────── type State = { brand: Brand | null; stops: Stop[]; products: Product[]; wholesaleEnabled: boolean; logoUrl: string | null; logoUrlDark: string | null; olatheSweetLogoUrl: string | null; olatheSweetLogoUrlDark: string | null; showSchedulePdf: boolean; showWholesaleLink: boolean; heroTagline: string | null; isAdmin: boolean; customFooterText: string | null; contactEmail: string | null; contactPhone: string | null; brandPrimaryColor: string | null; brandBgColor: string | null; brandTextColor: string | null; }; type Action = | { type: "SET_BRAND"; brand: Brand | null } | { type: "SET_STOPS"; stops: Stop[] } | { type: "SET_PRODUCTS"; products: Product[] } | { type: "SET_SETTINGS"; wholesaleEnabled: boolean; logoUrl: string | null; logoUrlDark: string | null; olatheSweetLogoUrl: string | null; olatheSweetLogoUrlDark: string | null; showSchedulePdf: boolean; showWholesaleLink: boolean; heroTagline: string | null; customFooterText: string | null; contactEmail: string | null; contactPhone: string | null; brandPrimaryColor: string | null; brandBgColor: string | null; brandTextColor: string | null; } | { type: "SET_IS_ADMIN"; isAdmin: boolean }; const initialState: State = { brand: null, stops: [], products: [], wholesaleEnabled: false, logoUrl: null, logoUrlDark: null, olatheSweetLogoUrl: null, olatheSweetLogoUrlDark: null, showSchedulePdf: true, showWholesaleLink: true, heroTagline: null, isAdmin: false, customFooterText: null, contactEmail: null, contactPhone: null, brandPrimaryColor: null, brandBgColor: null, brandTextColor: null, }; function reducer(state: State, action: Action): State { switch (action.type) { case "SET_BRAND": return { ...state, brand: action.brand }; case "SET_STOPS": return { ...state, stops: action.stops }; case "SET_PRODUCTS": return { ...state, products: action.products }; case "SET_SETTINGS": return { ...state, wholesaleEnabled: action.wholesaleEnabled, logoUrl: action.logoUrl, logoUrlDark: action.logoUrlDark, olatheSweetLogoUrl: action.olatheSweetLogoUrl, olatheSweetLogoUrlDark: action.olatheSweetLogoUrlDark, showSchedulePdf: action.showSchedulePdf, showWholesaleLink: action.showWholesaleLink, heroTagline: action.heroTagline, customFooterText: action.customFooterText, contactEmail: action.contactEmail, contactPhone: action.contactPhone, brandPrimaryColor: action.brandPrimaryColor, brandBgColor: action.brandBgColor, brandTextColor: action.brandTextColor, }; case "SET_IS_ADMIN": return { ...state, isAdmin: action.isAdmin }; } } // ───────────────────────────────────────────────────────────────────────────── // 1. EDITOR'S NOTE // ───────────────────────────────────────────────────────────────────────────── function EditorsNote() { return (
№ 00 — Editor’s Note
From the Editor
MMXXVI · 08

A bulletin, not a brochure. What follows is a partial record of how a particular valley grows a particular ear of corn, picked by particular hands, on a particular morning. We don’t have a slogan; we have a field.

The Olathe Sweet parent line was rescued from a retiring farmer who believed his valley could grow sugar in a husk. We brought it back to the same soil, learned how it liked the water, and kept the seed — by hand, ear by ear — for forty summers.

You won’t find us at a farmers’ market in a big city. We don’t wholesale to supermarkets. Every ear you eat came off a truck that left the shed that morning, headed for a stop we planned with people we know by name.

What follows in this issue: the numbers that matter, the stops on the 2026 tour, the lot for this week, and a short chronicle of how we got here. Read at your leisure. Eat with butter and salt.

John Harold
Editor · Second Generation

“The ear in the photograph was picked the morning it was shot. The silk on the right is still damp. We don’t airbrush the field because we don’t need to.”

); } function SignatureSvg() { return ( ); } // ───────────────────────────────────────────────────────────────────────────── // 2. I. THE ALMANAC — Specimen cards // ───────────────────────────────────────────────────────────────────────────── interface AlmanacSpecimen { number: string; title: string; unit: string; value: string; caption: string; detail: string; } const SPECIMENS: AlmanacSpecimen[] = [ { number: "001", title: "Altitude", unit: "ft. above sea", value: "5,360", caption: "Uncompahgre Valley floor", detail: "Olathe Sweet was bred for elevation. The thin air at five thousand feet cooks the husk by day and the cold drains back in by night — the diurnal swing does the work no greenhouse can.", }, { number: "002", title: "Diurnal Swing", unit: "°F avg", value: "38", caption: "Day · Night differential", detail: "Daytime highs in the mid-eighties, nighttime lows in the upper forties. The kernel drinks sugar by sun and locks it in by cold. That’s the whole trick.", }, { number: "003", title: "Hands at Peak", unit: "people · daily", value: "~60", caption: "Including three generations", detail: "Grandparents on the husk trailer. Parents on the cooler line. Kids sorting by ear size in the shed. About sixty of us during the first two weeks of August.", }, { number: "004", title: "Variety", unit: "parent line", value: "1982", caption: "Olathe Sweet · original", detail: "The seed has never been hybridized in a laboratory. Forty summers of careful selection in the same soil. Nothing added. Nothing altered.", }, { number: "005", title: "Time to Pick", unit: "minutes", value: "90", caption: "field to cooler", detail: "A picker drops an ear into the sling; a runner carries it to the cooler truck; the cooler truck drives to the shed. Ninety minutes, no more.", }, { number: "006", title: "Rows Under Pivot", unit: "acres", value: "60", caption: "single farm · single family", detail: "Sixty acres of sweet corn and sixty of rotation. We don’t outsource, we don’t co-pack, we don’t re-brand anyone else’s crop. The name on the cooler is the name on the deed.", }, ]; function TheAlmanac() { return (
№ 01 — The Almanac
Specimens & Data

You can taste
the altitude.

Six numbers describe this farm better than any slogan. We keep them where we can see them — in the shed, in the cooler, on the side of the picking trailer.

Hover any specimen to read the field note. None of these are marketing — they’re what we measure every morning between picking and packing.


{SPECIMENS.map((s) => ( ))}
↑ Recorded by hand · audit on file at the shed
↘ continued on page 03
); } function SpecimenCard({ s }: { s: AlmanacSpecimen }) { const ref = useRef(null); const inView = useInView(ref, { once: true, margin: "-60px" }); return (
No. {s.number} {s.title}
{s.value} {s.unit}

{s.caption}


Hover for note

); } // ───────────────────────────────────────────────────────────────────────────── // 3. II. THE COVER STORY // ───────────────────────────────────────────────────────────────────────────── function TheCoverStory() { return (
03
№ 02 — The Cover Story
A single ear
Dateline · Olathe, Colorado · 6:14 AM

One ear.
One morning.

A single ear of Olathe Sweet corn, partially husked, silk still attached
Plate 022 · 1:1 macro
Silk damp · 6:18 AM

Above.{" "} The same ear, picked at 6:14 AM, photographed at 6:18. The silk is still wet. The husk was peeled back with a thumb. Nothing else was done to it, and nothing has been done to it since. This is what an Olathe Sweet looks like at the moment it becomes food.

Photograph — Zane Harold
Filed — August MMXXVI
Location — Row 14, Block 3

“You can’t replicate the diurnal swing in a greenhouse. You can’t replicate it on a flat field. You can’t replicate it in a hurry.”

— John Harold · Second Generation

); } // ───────────────────────────────────────────────────────────────────────────── // 4. III. THE 2026 TOUR // ───────────────────────────────────────────────────────────────────────────── function TheTour({ stops, showSchedulePdf }: { stops: Stop[]; showSchedulePdf: boolean }) { return (
04
№ 03 — The Tour
Pickup schedule · 2026

The 2026
Tour.

We don’t ship to stores. We bring the cooler to a corner we know, on a day we’ve confirmed, and we wait for you. Find a stop on the list below, or download the whole schedule as a one-page PDF.


{stops.length === 0 ? (
The calendar is open

No stops on the calendar yet.

The harvest is right around the corner — new pickup stops go live weekly. You can preorder from the lot below and pick a stop once they’re announced, or download the schedule PDF and we’ll pencil you in by hand.

Preorder a Box View All Stops {showSchedulePdf && ( Schedule PDF )}
This Week’s Lot
First pick
expected within 14 days
) : ( <>
{[ { v: stops.length.toString().padStart(2, "0"), l: "Stops scheduled" }, { v: "4", l: "States on the route" }, { v: "84", l: "Days on the road" }, { v: "~60", l: "Hands at peak" }, ].map((s) => (
{s.v}
{s.l}
))}

{showSchedulePdf && (
Download Full Schedule
)} )}
); } // ───────────────────────────────────────────────────────────────────────────── // 5. IV. THIS WEEK'S LOT // ───────────────────────────────────────────────────────────────────────────── function ThisWeeksLot({ products, olatheSweetLogoUrlDark, }: { products: Product[]; olatheSweetLogoUrlDark: string | null; }) { return (
05
№ 04 — This Week’s Lot
Inventory · picked this morning

Today’s
haul.

Preorder for pickup at a stop, or have cooler boxes shipped to your door after the season. Limited to what we picked this morning — when it’s gone, it’s gone until tomorrow.


{products.length === 0 ? (
Lot empty

The first pick hasn’t come in yet.

Check back at sunrise. We open the shed at 5 AM and update the lot before 7.

) : (
{products.slice(0, 6).map((p, i) => ( ))}
)} {products.length > 6 && (
↑ {products.length - 6} more in the catalog See full catalog
)}
); } function LotCard({ product, lotNumber, olatheSweetLogoUrlDark, }: { product: Product; lotNumber: string; olatheSweetLogoUrlDark: string | null; }) { return (
Lot {lotNumber} Grade A
Picked
Today
Origin
Olathe
Weight
25–40 lb
); } // ───────────────────────────────────────────────────────────────────────────── // 6. V. CHRONICLE OF THE ROW // ───────────────────────────────────────────────────────────────────────────── function ChronicleOfTheRow() { const entries = [ { year: "1982", chapter: "Ch. I", title: "A seed saved.", body: "The original Olathe Sweet parent line was kept by a retiring farmer who believed his valley could grow sugar in a husk. We bought his first planting — eight rows along the irrigation ditch — and brought it home to the same soil.", image: "https://s3.crispygoat.com/videos/wp-import/images/corn-field-zane-original.jpg", caption: "The original eight rows · Spring 1982 · Olathe, CO", }, { year: "2003", chapter: "Ch. II", title: "A field retired, then revived.", body: "After five years of commodity pricing that didn’t pencil, we let the field go fallow. Weeds came up. The seed sat in a coffee can in the shed. In 2003 we replanted the same coffee-can seed in the same soil and the sweetness came back with it.", image: "https://s3.crispygoat.com/videos/wp-import/images/tuxedo-founder-john-editorial.jpg", caption: "John Harold · inspecting the revival · August 2003", }, { year: "Today", chapter: "Ch. III", title: "Three generations on the row.", body: "Grandparents on the husk trailer. Parents on the cooler line. Kids sorting by ear size in the shed. About sixty hands during peak — and a tour schedule we plan a year in advance with the families we serve.", image: "https://s3.crispygoat.com/videos/wp-import/images/tuxedo-field-storm.jpg", caption: "The same field · pre-storm · August 2026", }, ]; return (
06
№ 05 — Chronicle
Three generations · one row

Chronicle of
the row.

A short history of how this farm got from one coffee can of seed to a harvest that feeds families in four states. Written by hand, edited once.


{entries.map((e, i) => ( ))}
End of Chapter III · Continued
); } function ChronicleEntry({ e, reverse, }: { e: { year: string; chapter: string; title: string; body: string; image: string; caption: string }; reverse: boolean; }) { return (
{e.caption}
{e.chapter} · {e.year}
✻ archive

{e.caption}

{e.chapter}
{e.year}

{e.title}

); } // ───────────────────────────────────────────────────────────────────────────── // 7. LETTER FROM THE FIELD // ───────────────────────────────────────────────────────────────────────────── function LetterFromTheField() { return (
№ 06 — Postscript

Letter from
the field.

One note a month, written from the shed. New stops, the day’s pick, the occasional recipe from a customer. No marketing, no nonsense.

Addressed to
{ ev.preventDefault(); const form = ev.currentTarget; const email = new FormData(form).get("email") as string; if (email) { form.querySelector("[data-success]")?.removeAttribute("hidden"); (form.querySelector("input[name=email]") as HTMLInputElement).value = ""; } }} >

Twelve a year
One letter per month
No spam
We don’t sell your address
Cancel
One click, no questions
Postmark
The Harold shed, Olathe
); } // ───────────────────────────────────────────────────────────────────────────── // 8. COLOPHON // ───────────────────────────────────────────────────────────────────────────── function Colophon() { return (

Colophon
About this bulletin
Set in

Fraunces & Newsreader. Small caps by hand.

Printed on

Recycled paper, the color of the shed at noon.

Published by

The Harold Family, Olathe, CO. Forty-second edition.


© MMXXVI Harold Family Farm Filed from the field Olathe · Colorado · United States
); } // ───────────────────────────────────────────────────────────────────────────── // PAGE // ───────────────────────────────────────────────────────────────────────────── export default function TuxedoPage() { const [state, dispatch] = useReducer(reducer, initialState); useEffect(() => { async function load() { const slug = "tuxedo"; const [brandResult, settingsResult] = await Promise.all([ supabase.from("brands").select("*").eq("slug", slug).single(), getBrandSettingsPublic(slug), ]); const brandData = brandResult.data as Brand | null; dispatch({ type: "SET_BRAND", brand: brandData }); if (settingsResult.success && settingsResult.settings) { const s = settingsResult.settings; dispatch({ type: "SET_SETTINGS", wholesaleEnabled: settingsResult.wholesaleEnabled ?? false, logoUrl: s.logo_url ?? null, logoUrlDark: s.logo_url_dark ?? null, olatheSweetLogoUrl: s.olathe_sweet_logo_url ?? null, olatheSweetLogoUrlDark: s.olathe_sweet_logo_url_dark ?? null, showSchedulePdf: s.show_schedule_pdf ?? true, showWholesaleLink: s.show_wholesale_link ?? true, heroTagline: s.hero_tagline ?? null, customFooterText: s.custom_footer_text ?? null, contactEmail: s.email ?? null, contactPhone: s.phone ?? null, brandPrimaryColor: s.brand_primary_color ?? null, brandBgColor: s.brand_bg_color ?? null, brandTextColor: s.brand_text_color ?? null, }); } try { const { getCurrentAdminUser } = await import("@/actions/admin-user"); const adminUser = await getCurrentAdminUser(); dispatch({ type: "SET_IS_ADMIN", isAdmin: !!adminUser }); } catch { // not logged in as admin } if (brandData?.id) { const [{ data: stopsData }, { data: productsData }] = await Promise.all([ supabase.from("stops").select("*").eq("brand_id", brandData.id).eq("active", true) as unknown as { data: Stop[] | null }, supabase.from("products").select("*").eq("brand_id", brandData.id).eq("active", true) as unknown as { data: Product[] | null }, ]); dispatch({ type: "SET_STOPS", stops: stopsData ?? [] }); dispatch({ type: "SET_PRODUCTS", products: productsData ?? [] }); } } load(); }, []); return (
{/* 0 · Cover spread */} {/* Wholesale banner */} {state.showWholesaleLink && state.wholesaleEnabled && (
Wholesale buyers — accounts open for the 2026 season.
Wholesale Portal
)} {/* 1 · Editor's note */} {/* 2 · The Almanac */} {/* 3 · The Cover Story */} {/* 4 · The 2026 Tour */} {/* 5 · This Week's Lot */} {/* 6 · Chronicle of the Row */} {/* 7 · Letter from the Field */} {/* · Colophon */}
); }