From f91c29c0351107ebbb05593c3ca63e8f3d44af5f Mon Sep 17 00:00:00 2001 From: avi Date: Mon, 28 Sep 2026 15:37:11 -0500 Subject: [PATCH] Remove Coffee Station and Drinks from schedule; drop all prices Menu is food stands only. Cart, checkout, and order cards no longer show or compute dollar amounts (free pre-orders). e2e still 14/14. --- index.html | 76 +++++++++++++++++++++--------------------------------- 1 file changed, 30 insertions(+), 46 deletions(-) diff --git a/index.html b/index.html index 4d6a3bd..b62c109 100644 --- a/index.html +++ b/index.html @@ -102,7 +102,6 @@ header{position:sticky;top:0;z-index:40;background:rgb(255 255 255/.85);backdrop .item-emoji{width:46px;height:46px;flex:0 0 46px;border-radius:14px;background:var(--bg2);border:1px solid var(--line);display:grid;place-items:center;font-size:24px} .item-name{font-size:15px;font-weight:800;display:flex;align-items:center;gap:8px;flex-wrap:wrap} .item-desc{font-size:12px;color:var(--ink2);margin-top:2px} -.item-price{margin-left:auto;font-family:var(--display);font-weight:900;font-size:16px;white-space:nowrap} .item-foot{display:flex;align-items:center;gap:8px;margin-top:12px;flex-wrap:wrap} .status-pill{font-size:10px;font-weight:800;letter-spacing:.8px;text-transform:uppercase;padding:5px 10px;border-radius:999px;display:inline-flex;align-items:center;gap:6px} .status-pill .dot{width:6px;height:6px;border-radius:99px;background:currentColor} @@ -300,46 +299,36 @@ function dayLabel(offset){ const FEST={ days:[ { tag:'DAY 1', items:[ - {id:'d1-coffee', name:'Coffee Station', emoji:'โ˜•', price:4, start:540, end:1080, tags:['VG'], desc:'Slow-drip single origin + oat milk latte, served from the wood-fired cart.'}, - {id:'d1-sweets', name:'Sweets Cart', emoji:'๐Ÿญ', price:5, start:660, end:1320, tags:['V','GF'], desc:'Fresh fruit skewers, sorbet cups, and festival brownies.'}, - {id:'d1-taco', name:'Taco Stand', emoji:'๐ŸŒฎ', price:8, start:720, end:870, tags:['GF'], desc:'Hand-pressed corn tortillas, slow-braised grass-fed filling, house salsa.'}, - {id:'d1-bbq', name:'BBQ Pit', emoji:'๐Ÿ–', price:12, start:780, end:930, tags:[], desc:'12-hour offset-smoked brisket & ribs. No seed oils โ€” rendered tallow only.'}, - {id:'d1-chicken',name:'Chicken Grill', emoji:'๐Ÿ—', price:9, start:1050, end:1230, tags:['GF'], desc:'Buttermilk fried chicken (tallow-fried) with slaw.'}, - {id:'d1-pasta', name:'Pasta Bar', emoji:'๐Ÿ', price:10, start:1080, end:1200, tags:['V'], desc:'Fresh-cut daily pasta, garden vegetables, house olive oil.'}, - {id:'d1-drinks', name:'Drinks', emoji:'๐Ÿฅค', price:3, start:600, end:1320, tags:['VG'], desc:'Cold brew, kombucha, iced herbal tea, lemonade.'} - ]}, + {id:'d1-sweets', name:'Sweets Cart', emoji:'๐Ÿญ',start:660, end:1320, tags:['V','GF'], desc:'Fresh fruit skewers, sorbet cups, and festival brownies.'}, + {id:'d1-taco', name:'Taco Stand', emoji:'๐ŸŒฎ',start:720, end:870, tags:['GF'], desc:'Hand-pressed corn tortillas, slow-braised grass-fed filling, house salsa.'}, + {id:'d1-bbq', name:'BBQ Pit', emoji:'๐Ÿ–',start:780, end:930, tags:[], desc:'12-hour offset-smoked brisket & ribs. No seed oils โ€” rendered tallow only.'}, + {id:'d1-chicken',name:'Chicken Grill', emoji:'๐Ÿ—',start:1050, end:1230, tags:['GF'], desc:'Buttermilk fried chicken (tallow-fried) with slaw.'}, + {id:'d1-pasta', name:'Pasta Bar', emoji:'๐Ÿ',start:1080, end:1200, tags:['V'], desc:'Fresh-cut daily pasta, garden vegetables, house olive oil.'} + ]},, { tag:'DAY 2', items:[ - {id:'d2-coffee', name:'Coffee Station', emoji:'โ˜•', price:4, start:570, end:1020, tags:['VG'], desc:'Slow-drip single origin + oat milk latte.'}, - {id:'d2-sweets', name:'Sweets Cart', emoji:'๐Ÿญ', price:5, start:660, end:1260, tags:['V','GF'], desc:'Sorbet cups, fruit skewers, brownies.'}, - {id:'d2-burger', name:'Garden Burgers', emoji:'๐Ÿ”', price:11, start:720, end:900, tags:[], desc:'Grass-fed beef patty, brioche, charred onion, herb aioli.'}, - {id:'d2-grill', name:'Grill 484', emoji:'๐Ÿ”ฅ', price:9, start:750, end:960, tags:['GF'], desc:'Skewered vegetables & chicken over open flame.'}, - {id:'d2-ramen', name:'Ramen Tent', emoji:'๐Ÿœ', price:12, start:1020, end:1200, tags:['V'], desc:'Miso broth simmered all day, soft egg, scallion, pickled ginger.'}, - {id:'d2-drinks', name:'Drinks', emoji:'๐Ÿฅค', price:3, start:570, end:1290, tags:['VG'], desc:'Cold brew, kombucha, herbal tea, lemonade.'} - ]}, + {id:'d2-sweets', name:'Sweets Cart', emoji:'๐Ÿญ',start:660, end:1260, tags:['V','GF'], desc:'Sorbet cups, fruit skewers, brownies.'}, + {id:'d2-burger', name:'Garden Burgers', emoji:'๐Ÿ”',start:720, end:900, tags:[], desc:'Grass-fed beef patty, brioche, charred onion, herb aioli.'}, + {id:'d2-grill', name:'Grill 484', emoji:'๐Ÿ”ฅ',start:750, end:960, tags:['GF'], desc:'Skewered vegetables & chicken over open flame.'}, + {id:'d2-ramen', name:'Ramen Tent', emoji:'๐Ÿœ',start:1020, end:1200, tags:['V'], desc:'Miso broth simmered all day, soft egg, scallion, pickled ginger.'} + ]},, { tag:'DAY 3', items:[ - {id:'d3-coffee', name:'Coffee Station', emoji:'โ˜•', price:4, start:540, end:1050, tags:['VG'], desc:'Slow-drip single origin, Saturday long pour.'}, - {id:'d3-sweets', name:'Sweets Cart', emoji:'๐Ÿญ', price:5, start:660, end:1320, tags:['V','GF'], desc:'Sorbet cups, fruit skewers, Saturday brownie batch.'}, - {id:'d3-flatbread',name:'Flatbread Oven', emoji:'๐Ÿซ“', price:9, start:720, end:930, tags:['V','GF'], desc:'Wood-fired flatbreads โ€” charred vegetables, whipped feta, house olive oil.'}, - {id:'d3-bbq', name:'BBQ Pit', emoji:'๐Ÿ–', price:12, start:780, end:960, tags:[], desc:'Offset-smoked brisket & ribs. The weekend is for the pit.'}, - {id:'d3-dumplings',name:'Dumpling Bar', emoji:'๐ŸฅŸ', price:10, start:1020, end:1230, tags:['GF'], desc:'Pan-seared vegetable & chicken dumplings, chili crisp.'}, - {id:'d3-drinks', name:'Drinks', emoji:'๐Ÿฅค', price:3, start:600, end:1320, tags:['VG'], desc:'Cold brew, kombucha, iced herbal tea, lemonade.'} - ]}, + {id:'d3-sweets', name:'Sweets Cart', emoji:'๐Ÿญ',start:660, end:1320, tags:['V','GF'], desc:'Sorbet cups, fruit skewers, Saturday brownie batch.'}, + {id:'d3-flatbread',name:'Flatbread Oven', emoji:'๐Ÿซ“',start:720, end:930, tags:['V','GF'], desc:'Wood-fired flatbreads โ€” charred vegetables, whipped feta, house olive oil.'}, + {id:'d3-bbq', name:'BBQ Pit', emoji:'๐Ÿ–',start:780, end:960, tags:[], desc:'Offset-smoked brisket & ribs. The weekend is for the pit.'}, + {id:'d3-dumplings',name:'Dumpling Bar', emoji:'๐ŸฅŸ',start:1020, end:1230, tags:['GF'], desc:'Pan-seared vegetable & chicken dumplings, chili crisp.'} + ]},, { tag:'DAY 4', items:[ - {id:'d4-coffee', name:'Coffee Station', emoji:'โ˜•', price:4, start:540, end:1020, tags:['VG'], desc:'Slow-drip single origin + oat milk latte.'}, - {id:'d4-sweets', name:'Sweets Cart', emoji:'๐Ÿญ', price:5, start:660, end:1290, tags:['V','GF'], desc:'Sorbet cups, fruit skewers, brownies.'}, - {id:'d4-taco', name:'Taco Stand', emoji:'๐ŸŒฎ', price:8, start:720, end:870, tags:['GF'], desc:'Corn tortillas, slow-braised grass-fed filling, house salsa.'}, - {id:'d4-pasta', name:'Pasta Bar', emoji:'๐Ÿ', price:10, start:900, end:1140, tags:['V'], desc:'Sunday pasta โ€” fresh-cut, garden vegetables, house olive oil.'}, - {id:'d4-grill', name:'Grill 484', emoji:'๐Ÿ”ฅ', price:9, start:960, end:1170, tags:['GF'], desc:'Skewered vegetables & chicken over open flame.'}, - {id:'d4-drinks', name:'Drinks', emoji:'๐Ÿฅค', price:3, start:600, end:1290, tags:['VG'], desc:'Cold brew, kombucha, iced herbal tea, lemonade.'} - ]}, + {id:'d4-sweets', name:'Sweets Cart', emoji:'๐Ÿญ',start:660, end:1290, tags:['V','GF'], desc:'Sorbet cups, fruit skewers, brownies.'}, + {id:'d4-taco', name:'Taco Stand', emoji:'๐ŸŒฎ',start:720, end:870, tags:['GF'], desc:'Corn tortillas, slow-braised grass-fed filling, house salsa.'}, + {id:'d4-pasta', name:'Pasta Bar', emoji:'๐Ÿ',start:900, end:1140, tags:['V'], desc:'Sunday pasta โ€” fresh-cut, garden vegetables, house olive oil.'}, + {id:'d4-grill', name:'Grill 484', emoji:'๐Ÿ”ฅ',start:960, end:1170, tags:['GF'], desc:'Skewered vegetables & chicken over open flame.'} + ]},, { tag:'FINAL DAY', items:[ - {id:'d5-coffee', name:'Coffee Station', emoji:'โ˜•', price:4, start:600, end:960, tags:['VG'], desc:'One last pour. Single origin, slow drip.'}, - {id:'d5-sweets', name:'Sweets Cart', emoji:'๐Ÿญ', price:5, start:660, end:1200, tags:['V','GF'], desc:'Sorbet, fruit, brownies โ€” farewell batch.'}, - {id:'d5-taco', name:'Taco Stand', emoji:'๐ŸŒฎ', price:8, start:720, end:840, tags:['GF'], desc:'Corn tortillas, slow-braised filling.'}, - {id:'d5-feast', name:'Farewell Feast ยท BBQ', emoji:'๐Ÿ–', price:14, start:720, end:960, tags:[], desc:'The full spread: brisket, ribs, tallow fries, slaw, bread.'}, - {id:'d5-pasta', name:'Pasta Bar', emoji:'๐Ÿ', price:10, start:1020, end:1170, tags:['V'], desc:'Fresh pasta, garden vegetables, olive oil.'}, - {id:'d5-drinks', name:'Drinks', emoji:'๐Ÿฅค', price:3, start:600, end:1230, tags:['VG'], desc:'Cold brew, kombucha, iced herbal tea, lemonade.'} - ]} + {id:'d5-sweets', name:'Sweets Cart', emoji:'๐Ÿญ',start:660, end:1200, tags:['V','GF'], desc:'Sorbet, fruit, brownies โ€” farewell batch.'}, + {id:'d5-taco', name:'Taco Stand', emoji:'๐ŸŒฎ',start:720, end:840, tags:['GF'], desc:'Corn tortillas, slow-braised filling.'}, + {id:'d5-feast', name:'Farewell Feast ยท BBQ', emoji:'๐Ÿ–',start:720, end:960, tags:[], desc:'The full spread: brisket, ribs, tallow fries, slaw, bread.'}, + {id:'d5-pasta', name:'Pasta Bar', emoji:'๐Ÿ',start:1020, end:1170, tags:['V'], desc:'Fresh pasta, garden vegetables, olive oil.'} + ]}, ] }; FEST.days.forEach((d,i)=>{ const L=dayLabel(i); d.name=L.name; d.date=L.date; d.iso=L.iso; }); @@ -363,7 +352,6 @@ const fmtT=min=>{let h=Math.floor(min/60),m=min%60,ap=h>=12?'PM':'AM';h=h%12||12 const fmtDur=min=>{const h=Math.floor(min/60),m=Math.round(min%60);return h? (h+'h'+(m?' '+m+'m':'')) : m+'m';}; const esc=s=>String(s).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c])); function toast(msg){const t=$('#toast');t.textContent=msg;t.classList.add('show');clearTimeout(t._x);t._x=setTimeout(()=>t.classList.remove('show'),2200);} -function cartTotal(){let t=0;for(const id in state.cart){const it=findItem(id);if(it)t+=it.price*state.cart[id];}return t;} function cartCount(){return Object.values(state.cart).reduce((a,b)=>a+b,0);} function findItem(id){for(const d of FEST.days)for(const it of d.items)if(it.id===id)return it;return null;} function findDayOf(id){for(let i=0;ix.id===id))return i;} @@ -407,7 +395,6 @@ function renderTimeline(){ '
'+item.emoji+'
'+ '
'+item.name+' '+item.tags.map(t=>''+t+'').join('')+'
'+ '
'+item.desc+'
'+ - '
'+fmt$(item.price)+'
'+ ''+ '
'+ ''+st.label+''+ @@ -479,12 +466,10 @@ function stepCart(){ '
'+it.emoji+'
'+ '
'+it.name+'
'+fmtT(it.start)+' โ€“ '+fmtT(it.end)+'
'+ '
'+state.cart[id]+'
'+ - '
'+fmt$(it.price*state.cart[id])+'
'; + ''; }).join(''); - const total=cartTotal(); return '

YOUR ORDER

SOLARPUNK SUMMIT ยท pickup at the stand window
'+ (rows||'
๐Ÿงบ
Nothing here yet โ€” add something from the schedule.
')+ - '
Total'+fmt$(total)+'
'+ '
Free pre-order โ€” pay at the stand when you pick up.
'+ ''; } @@ -502,7 +487,7 @@ function stepCheckout(){ '
'+ '
'+ '
'+ - '
Total ยท '+cartCount()+' items'+fmt$(cartTotal())+'
'+ + '
Total'+cartCount()+' items
'+ ''+ ''+ ''; @@ -552,7 +537,6 @@ function afterCartChange(){saveCart();renderFab();renderTimeline();renderSheet() /* ============================== ORDERS (server-backed) ============================== */ async function placeOrder(info){ - const usd=cartTotal(); const day=FEST.days.find(d=>d.items.some(it=>info.window&&Math.abs(it.start-info.window[0])<1&&Math.abs(it.end-info.window[1])<1))||FEST.days[state.dayIdx]; const pickupLabel=fmtT(info.window[0])+' \u2013 '+fmtT(info.window[1]); const ids=Object.keys(state.cart); @@ -565,7 +549,7 @@ async function placeOrder(info){ body:JSON.stringify({ name:info.name,notes:info.notes,items:state.cart, window:info.window,pickupLabel,itemsSummary, - stand,totalUsd:usd, + stand, day:day.name+' '+day.date }) }); @@ -644,7 +628,7 @@ function renderOrders(){ '
'+esc(o.code)+''+badge+'
'+ '
'+esc(o.day||'')+' \u00b7 pickup '+esc(o.pickupLabel||'')+' \u00b7 '+esc(o.name||'')+(o.notes?' \u00b7 \u201c'+esc(o.notes)+'\u201d':'')+'
'+ '
'+esc(o.itemsSummary||'')+'
'+ - '
'+fmt$(o.totalUsd||0)+''+esc(o.stand||'')+'
'+ + '
'+esc(o.stand||'')+'
'+ readyBanner+ (o.status!=='COLLECTED'&&o.status!=='CANCELLED'?'
':'')+ '';