The walk-in wizard at /dashboard/shop-rentals/walk-in is the iPad-friendly
flow for customers walking through your door without a prior reservation.
Five steps, ~90 seconds end to end with practice.
When to use it
Use the walk-in wizard when:
- A customer arrives without an online booking
- You want to start a rental that begins right now
- You're at the counter on an iPad, phone, or laptop
For pre-booked reservations arriving for pickup, use the manifest's "Check in" button instead — that flow is optimized for "this booking already exists."
Step 1 — Who's renting?
Search by name, phone, or email. Results appear in a dropdown after 2+ characters with a 250ms debounce.
If the customer exists:
- Click their card to select them
- Their email and phone appear in the confirm panel
- Their saved Stripe customer ID is used for any deposit hold or charge
If they don't exist, click + New customer:
- First name, last name, phone (required)
- Email (optional but recommended for receipt delivery)
- Click Create customer
The system creates the customers row and a Stripe customer placeholder
in the same call. If the customer's phone matches an existing one in the
database, the existing record is returned instead (idempotent).
For full details on the quick-create flow, see Quick-create customer.
Click Continue when a customer is selected.
Step 2 — When and what?
Pickup time defaults to "now." For a walk-in handing the bike over immediately, leave it. Set a future time if the customer wants to come back in 30 minutes.
Duration picker has presets:
- 1 hour
- 2 hours
- 4 hours
- Half day (6h)
- Full day (24h)
- Weekend (48h)
- Week (7d)
For custom durations, the only path is to use the New Booking flow
(/dashboard/shop-rentals/new) which has datetime pickers for return.
Pickup location — appears if you have multiple. Pick the right one so inventory availability filters correctly.
Bike model — the system queries availability for your window and
shows only models with available > 0. Click to select. Each card
shows the model name and (for some types) capacity.
Pricing tier — usually leave on Auto so the cheapest match wins. Pick a specific tier if you're applying a special rate.
Click Continue.
Step 3 — Add-ons
Optional. Each add-on (helmet, lock, child seat, insurance) shows with
- / – quantity buttons. Selected total appears at the bottom.
For bookable add-ons (helmets, locks with finite inventory), the system silently respects inventory caps — if you only have 8 helmets and 6 are already booked for the same window, the customer can buy at most 2 without erroring.
Add-ons add to the total displayed at the next step.
Click Continue.
Step 4 — Waiver and confirm
Waiver template picker — if you have an active rental agreement template, pick it here. The system issues a fresh signing link tied to this booking.
If you skip the waiver step, the booking is created without one. You can issue a waiver later from the booking detail page; for legal protection, make sure every rental gets one.
The summary panel shows:
- Customer
- Bike model
- Pickup window
- Add-ons (if any)
Click Confirm & start rental to commit.
Step 5 — Receipt
Confirmation screen with:
- Booking number
- Optional waiver signing URL — show this on the iPad as a QR code for the customer to scan, or send via SMS
- View booking — drills into the booking detail
- New walk-in — resets the wizard for the next customer
The reservation is created with:
fulfillment_type='counter'status='active'(we transition immediately because the customer is taking the bike now)actual_pickup_atstamped to now- Add-ons attached and totals re-summed
- Pending waiver issued (if a template was selected)
What's not in the wizard
A few things are intentionally excluded:
- Stripe Elements card capture — for now, attach a card to the customer profile via the SetupIntent flow before walking them through the wizard. The wizard does not collect a card itself yet.
- Photo ID upload — schema supports
id_verified_atandid_document_url, but the upload UI isn't built. Capture ID via your existing process for now. - Multi-rider waivers in one wizard pass — you create the booking once, then issue per-rider waivers from the booking detail page.
These are documented in the FAQ and tracked on the roadmap.
Common walk-in scenarios
Couple wants two bikes for 2 hours
- Step 2: pick the bike model, qty=1 (the wizard creates one reservation for one bike)
- Repeat the flow for the second customer / second bike
- Or use New Booking with
quantity=2to create one reservation covering two bikes
Customer wants to return early
Use the manifest "Complete return" button on the
booking detail. The system stamps actual_return_at and transitions
to completed. Refunds for unused time aren't automatic — issue a
partial refund manually if
that's your shop policy.
Customer needs to extend mid-rental
Open the booking detail. Edit return_at to the new time. Save. The
billing cron picks up the new total at the next run, and any deposit
hold can absorb the extra time.
Customer doesn't want a waiver
Don't skip — every rental should have one. If they refuse, document the refusal and don't rent. Your liability is real.
Errors you might see
| Error | What it means | Fix |
|---|---|---|
| "Customer and bike are required" | You skipped step 1 or 2 | Go back |
| "No availability for that window" | All bikes booked or out of service | Try different times or different model |
| "This model is not bookable at the selected location" | Inventory cap missing for that pair | Add a cap in Inventory |
| "Selected pricing tier does not apply to this model" | Tier scoped to a different model | Pick a different tier or leave on Auto |