/* Geek n Wine — Editorial single-page Home */ const { useState, useEffect, useRef } = React; const CLOSE_SECS = 11 * 3600 + 42 * 60 + 8; const DROP = { sku: "GW-014", kicker: "Drop 014 · Tuscan Reserve", name: "The Tuesday Six", price: 89, claimed: 217, total: 500, }; const WINES = [ { code: "GW-014-01", name: "Chianti Classico", region: "Tuscany", grape: "Sangiovese", body: "Medium red", abv: "13.5%", pair: "tomato anything", note: "Bright cherry with a little tea-leaf edge — the kind of red that makes a Tuesday feel like a plan. No decanting, no fuss; pour it and go." }, { code: "GW-014-02", name: "Bolgheri Vermentino", region: "Tuscan coast", grape: "Vermentino", body: "Crisp white", abv: "12.5%", pair: "anything off the grill", note: "Saline and citrus-skin, a sea-breeze white that disappears faster than you'd like. This is the patio bottle — serve it cold and don't overthink it." }, { code: "GW-014-03", name: "Barbera d'Asti", region: "Piedmont", grape: "Barbera", body: "Juicy red", abv: "13%", pair: "pizza night", note: "All bramble fruit and zippy acidity, low on tannin — the people-pleaser of the box. Give it fifteen minutes in the fridge and it sings." }, { code: "GW-014-04", name: "Langhe Nebbiolo", region: "Piedmont", grape: "Nebbiolo", body: "Structured red", abv: "14%", pair: "mushroom risotto", note: "Rose, tar and dried cherry — baby-Barolo energy at a fraction of the ask. The one wine here worth a ten-minute wait in the glass." }, { code: "GW-014-05", name: "Montepulciano d'Abruzzo", region: "Abruzzo", grape: "Montepulciano", body: "Plush red", abv: "13.5%", pair: "a slow ragù", note: "Dark plum, soft and a touch smoky — the cozy one. This is the bottle you reach for when it starts raining and you cancel your plans." }, { code: "GW-014-06", name: "Moscato d'Asti", region: "Piedmont", grape: "Moscato", body: "Off-dry sparkling", abv: "5.5%", pair: "fruit & cheese", note: "Lightly fizzy, peach and orange-blossom, barely sweet. The closer — pour it with dessert, or just because the night isn't over yet." }, ]; const TAGLINES = [ "You didn't pick the wine. That's the point.", "One of them might change your evening.", "Open it like you mean it.", ]; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "type": "Modern", "reserveReadout": "Boxes left", "oddsN": 11, "tagline": "You didn't pick the wine. That's the point.", "lineupOpen": true, "heroGlow": true }/*EDITMODE-END*/; /* ---------------- Nav ---------------- */ function Nav({ cart, onCart, theme, onToggleTheme }) { const { str } = useCountdown(CLOSE_SECS); const left = DROP.total - DROP.claimed; return (
DROP 014 · TUSCAN RESERVE — LIVE · CLOSES IN {str} · {left} BOXES LEFT
); } /* ---------------- Hero ---------------- */ function Hero({ t, onClaim }) { const { h, m, s } = useCountdown(CLOSE_SECS); return (
Live now · Drop 014

Six bottles.
Seventy‑two hours.

{t.tagline}

{t.heroGlow &&
}
See the lineup

2 per person · ships Monday · 21+

); } /* ---------------- Surprise band ---------------- */ function SurpriseBand({ t }) { return (
The hook · why it's worth it

One in every {t.oddsN - 1}–{t.oddsN + 1} boxes hides a Reserve.

Most boxes are a brilliant, fairly-priced six. But a hidden fraction of every drop tucks in a high-end bottle worth far more than the box price — a 2016 Brunello, a back-vintage Barolo. You don't know if you got one until you open it.

Volt means a surprise is live Gold means you got one
The odds · per drop ≈ 1 in {t.oddsN}

One glowing box ≈ the hidden Reserve. The rest are still a great night.

); } /* ---------------- How it works ---------------- */ function HowItWorks() { return (
How the drop works

You don't pick the wine.
That's the whole point.

A box drops on a 72-hour timer, capped at 500. When the counter hits zero it's gone — the reserve bar up top is that countdown, draining live. Roughly one box in eleven hides a high-end bottle worth multiples of the price. The volt drop means those odds are live right now. Your box ships sealed. Crack it open — most are a flawless six, a lucky few pull gold. Either way, you drank well above your spend.
); } /* ---------------- Lineup accordion ---------------- */ function Lineup({ t }) { const [openIdx, setOpenIdx] = useState(t.lineupOpen ? 0 : -1); useEffect(() => { setOpenIdx(t.lineupOpen ? 0 : -1); }, [t.lineupOpen]); return (
What's in the box · Drop 014

The Tuesday Six

Six bottles picked to play together across a week. Tap any to read it.

6 bottles · all revealed
{WINES.map((w, i) => ( setOpenIdx(openIdx === i ? -1 : i)} /> ))}

Plus — in roughly 1 box of {t.oddsN} — a sealed Reserve you won't see on this list until you open it.

); } /* ---------------- Provenance ---------------- */ function Provenance() { return (
Why trust the box

We taste 400 wines so you taste six.

No algorithm, no filler. A small team tastes blind through hundreds of bottles each season and only the ones worth your Tuesday make the box. The surprise is the fun part — the baseline is just good wine.

400+wines tasted blind per season
6that make it into the box
500boxes per drop, then it's gone
1:11boxes hide a high-end Reserve
); } /* ---------------- Claim drawer ---------------- */ function ClaimDrawer({ open, drop, onClose, onConfirm, oddsN }) { const [qty, setQty] = useState(1); const [email, setEmail] = useState(""); useEffect(() => { if (open) { setQty(1); setEmail(""); } }, [open]); if (!drop) return null; return (
e.stopPropagation()}>

Claim your box

{drop.kicker}

{drop.name}

1 in {oddsN} odds live
{qty}
setEmail(e.target.value)} style={{ marginBottom: 26 }} />
{qty} box{qty > 1 ? "es" : ""} × ${drop.price} ${drop.price * qty}

Sealed on claim · ships Monday · 21+

); } /* ---------------- Unbox reveal (signature moment) ---------------- */ function UnboxModal({ open, onClose, reserve, oddsN }) { const [stage, setStage] = useState("sealed"); useEffect(() => { if (open) setStage("sealed"); }, [open]); const lift = () => { setStage("opening"); setTimeout(() => setStage("revealed"), 900); }; return (
e.stopPropagation()}>
{stage !== "revealed" && (

Box 3 of 500 · GW-014

Open it like you mean it.

Most boxes are a brilliant six. A lucky few pull gold.

)} {stage === "revealed" && reserve && (

Reserve hit · 1 in {oddsN}

You pulled a Reserve.

Tucked under the six: a 2016 Brunello di Montalcino, normally $140 a bottle. It's yours.

Box value · $310 for $89
)} {stage === "revealed" && !reserve && (

The six, revealed

A brilliant Tuesday six.

{WINES.map((w, i) => (
{String(i + 1).padStart(2, "0")} · {w.name}
))}
)}
); } /* ---------------- App ---------------- */ function App() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); const [drawer, setDrawer] = useState({ open: false, drop: null }); const [cart, setCart] = useState(0); const [unbox, setUnbox] = useState(false); const [hasBox, setHasBox] = useState(false); const [showBar, setShowBar] = useState(false); const [theme, setTheme] = useState(() => localStorage.getItem("gw-theme") || "dark"); const firstRef = useRef(true); useEffect(() => { if (window.lucide) lucide.createIcons(); }); useEffect(() => { document.documentElement.dataset.theme = theme; localStorage.setItem("gw-theme", theme); }, [theme]); useEffect(() => { const onScroll = () => setShowBar(window.scrollY > window.innerHeight * 0.85); window.addEventListener("scroll", onScroll, { passive: true }); return () => window.removeEventListener("scroll", onScroll); }, []); const claim = (drop) => setDrawer({ open: true, drop }); const confirm = (qty) => { setCart((c) => c + qty); setDrawer({ open: false, drop: null }); setHasBox(true); }; const reserve = firstRef.current ? true : Math.random() < 0.4; return (
); } ReactDOM.createRoot(document.getElementById("root")).render();