/* Alchemy website — Schedule a Tour (one form: pick location, filter availability) + Intake (embedded LeadConnector form). */ const { Button, Input, Tag, ElementTile, SectionHeading } = window.DS; const tWrap = { maxWidth: 'var(--container-wide)', margin: '0 auto', padding: '0 var(--gutter)' }; const TOUR_LOCATIONS = [ { id: 'gastonia', name: 'Downtown Gastonia', addr: '121 W. Main Ave', status: 'open' }, { id: 'charlotte', name: 'Charlotte', addr: '2459 Wilkinson Blvd', status: 'open' }, { id: 'loray', name: 'Loray Gastonia', addr: '300 S Firestone St, Suite 200 H', status: 'open' }, ]; // Simple availability model — real slots would come from the booking system. const DAYS = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']; const SLOTS = ['9:00 AM', '10:30 AM', '12:00 PM', '1:30 PM', '3:00 PM', '4:30 PM']; function nextDates() { const out = []; const d = new Date(); while (out.length < 5) { d.setDate(d.getDate() + 1); const wd = d.getDay(); if (wd >= 1 && wd <= 5) out.push({ dow: DAYS[wd - 1], date: d.getDate(), key: d.toDateString() }); } return out; } function TourScreen() { const [loc, setLoc] = React.useState('gastonia'); const [day, setDay] = React.useState(null); const [slot, setSlot] = React.useState(null); const [sent, setSent] = React.useState(false); const dates = React.useMemo(nextDates, []); // pseudo-availability: hide a couple slots per day/location so "filter" feels real const openSlots = React.useMemo(() => { if (!day) return []; const seed = (loc.length + day.dow.length) % 3; return SLOTS.filter((_, i) => (i + seed) % 3 !== 0); }, [loc, day]); const chip = (active, onClick, children, disabled) => ( ); return (
{/* Left: info */}
Prefer to talk first?
(704) 753-8722
team@alchemycowork.com
Coworking 24/7 Wandering Cup (DTG) Mon to Fri 7a to 4p
{/* Right: the one tour form */}
{sent ? (

Your tour is requested!

{TOUR_LOCATIONS.find((l) => l.id === loc)?.name} · {day && day.dow} · {slot}. We'll confirm by email within one business day.

) : (
{ e.preventDefault(); setSent(true); }} style={{ display: 'flex', flexDirection: 'column', gap: 'var(--space-6)' }}> {/* Step 1: location */}

1 · Choose a location

{TOUR_LOCATIONS.map((l) => { const soon = l.status === 'soon'; const active = loc === l.id; return ( ); })}
{/* Step 2: day */}

2 · Pick a day

{dates.map((d) => chip(day && day.key === d.key, () => { setDay(d); setSlot(null); }, d.dow + ' ' + d.date))}
{/* Step 3: availability */}

3 · Filter availability

{day ? (
{SLOTS.map((s) => { const avail = openSlots.includes(s); return chip(slot === s, () => setSlot(s), s, !avail); })}
) : (

Pick a day above to see open tour times.

)}
{/* Step 4: details */}
)}
); } function IntakeScreen() { return (
Month to month From $149/mo
); } window.TourScreen = TourScreen; window.IntakeScreen = IntakeScreen;