/* ====================================================================== KOREALM — Tenant flows: book inspection, apply, onboarding payment window.BookInspection, window.ApplyFlow, window.OnboardingPayment ====================================================================== */ function FlowShell({ title, sub, step, steps, onBack, children, aside }) { return (
{onBack && }

{title}

{sub &&

{sub}

} {steps &&
}
{children}
{aside &&
{aside}
}
); } function PropertyMini({ p }) { return (
{window.fmt.money(p.price)}pcm

{p.title}

{p.neighborhood}
{p.beds === 0 ? "Studio" : p.beds + " bd"}{p.baths} ba{p.sqft} sq ft
); } /* ---------------- Book inspection ---------------- */ function BookInspection({ propertyId }) { const { db, session, go, actions, toast } = useApp(); const p = db.properties.find(x => x.id === propertyId) || db.properties[0]; const [date, setDate] = useState(null); const [slot, setSlot] = useState(null); const [notes, setNotes] = useState(""); const [done, setDone] = useState(false); const days = useMemo(() => Array.from({ length: 8 }, (_, i) => { const d = window.fmt.today(); d.setDate(d.getDate() + i + 1); return d; }), []); const slots = ["9:30 AM", "10:30 AM", "12:00 PM", "2:00 PM", "3:30 PM", "5:00 PM"]; const submit = () => { if (!date || !slot) { toast("Pick a date and time", "err"); return; } actions.requestInspection({ propertyId: p.id, tenantId: session.tenantId, slot: date.toISOString() + "|" + slot, notes }); setDone(true); }; if (done) return ( }>

Request sent to Korealm

We'll confirm your viewing for {window.fmt.fmtDate(date)} at {slot} shortly. You'll get an email once it's approved.

1Korealm confirms a time with the landlord
2You receive confirmation & a calendar invite
3Visit, then apply if it's the one
); return ( go("dashboard")} aside={}> Select a date
{days.map((d, i) => ( ))}
Select a time
{slots.map(s => )}